diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs
index 20606774562..b71ce2bf76f 100644
--- a/components/canvas/canvas_data.rs
+++ b/components/canvas/canvas_data.rs
@@ -96,20 +96,20 @@ impl<'a> CanvasData<'a> {
// In this case source and target are the same canvas
let image_data = self.read_pixels(source_rect.to_i32(), image_size);
+ let writer = |draw_target: &DrawTarget| {
+ write_image(draw_target, image_data, source_rect.size, dest_rect,
+ smoothing_enabled, self.state.draw_options.composition,
+ self.state.draw_options.alpha);
+ };
+
if self.need_to_draw_shadow() {
let rect = Rect::new(Point2D::new(dest_rect.origin.x as f32, dest_rect.origin.y as f32),
Size2D::new(dest_rect.size.width as f32, dest_rect.size.height as f32));
- self.draw_with_shadow(&rect, |new_draw_target: &DrawTarget| {
- write_image(&new_draw_target, image_data, source_rect.size, dest_rect,
- smoothing_enabled, self.state.draw_options.composition,
- self.state.draw_options.alpha);
- });
+ self.draw_with_shadow(&rect, writer);
} else {
// Writes on target canvas
- write_image(&self.drawtarget, image_data, image_size, dest_rect,
- smoothing_enabled, self.state.draw_options.composition,
- self.state.draw_options.alpha);
+ writer(&self.drawtarget);
}
}
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index dbe451afaa8..81623e94c35 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -18849,6 +18849,18 @@
{}
]
],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html": [
+ [
+ "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html",
+ [
+ [
+ "/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"2dcontext/line-styles/canvas_linestyles_linecap_001.htm": [
[
"/2dcontext/line-styles/canvas_linestyles_linecap_001.htm",
@@ -188371,6 +188383,11 @@
{}
]
],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html": [
+ [
+ {}
+ ]
+ ],
"2dcontext/drawing-model/.gitkeep": [
[
{}
@@ -405888,6 +405905,14 @@
"3b15af010f2ce13316fed6fcab9d85e05484b60d",
"testharness"
],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html": [
+ "ec6a6d1111aae9ce051cd1a2503a5b01149ceca6",
+ "reftest"
+ ],
+ "2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html": [
+ "f09c2922fc630872519fc37de47f232ecc8cc677",
+ "support"
+ ],
"2dcontext/drawing-images-to-the-canvas/drawimage_html_image.html": [
"ec86f8f5c84628cd5f3b8673de8dde34dc372fd9",
"testharness"
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html
new file mode 100644
index 00000000000..83cf53583ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self.html
@@ -0,0 +1,17 @@
+
+
+
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
new file mode 100644
index 00000000000..9f297cacdcd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-images-to-the-canvas/drawimage_canvas_self_ref.html
@@ -0,0 +1,11 @@
+
+