diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp
index 5ec1a7a6c3..b97ec2070b 100644
--- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp
+++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp
@@ -329,4 +329,33 @@ void CanvasRenderingContext2D::restore()
m_drawing_state = m_drawing_state_stack.take_last();
}
+// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-reset
+void CanvasRenderingContext2D::reset()
+{
+ // The reset() method steps are to reset the rendering context to its default state.
+ reset_to_default_state();
+}
+
+// https://html.spec.whatwg.org/multipage/canvas.html#reset-the-rendering-context-to-its-default-state
+void CanvasRenderingContext2D::reset_to_default_state()
+{
+ auto painter = this->painter();
+
+ // 1. Clear canvas's bitmap to transparent black.
+ if (painter)
+ painter->clear_rect(painter->target()->rect(), Color::Transparent);
+
+ // 2. Empty the list of subpaths in context's current default path.
+ m_path.clear();
+
+ // 3. Clear the context's drawing state stack.
+ m_drawing_state_stack.clear();
+
+ // 4. Reset everything that drawing state consists of to their initial values.
+ m_drawing_state = {};
+
+ if (painter)
+ did_draw(painter->target()->rect().to_type());
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h
index d0accdc0f2..fc925c6913 100644
--- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h
+++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.h
@@ -71,6 +71,9 @@ public:
void save();
void restore();
+ void reset();
+
+ void reset_to_default_state();
HTMLCanvasElement* canvas() { return m_element; }
diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl
index 7f4b8dbc8d..d61dfbdde0 100644
--- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl
+++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.idl
@@ -33,6 +33,7 @@ interface CanvasRenderingContext2D {
undefined save();
undefined restore();
+ undefined reset();
readonly attribute HTMLCanvasElement canvas;