From 261246ea25d8c937151e79d0ce1ad5f1bf1274af Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 3 Nov 2015 13:43:33 -0800 Subject: [PATCH] Properly resize iframe root layers When a layer containing an iframe changes, we also need to resize the root layer of the subpage. This ensures that content from the child layer tree is masked to the new size. Fixes #8301. --- components/compositing/compositor.rs | 14 ++++++++++- tests/wpt/mozilla/meta/MANIFEST.json | 24 +++++++++++++++++++ .../mozilla/iframe/resize_after_load.html | 24 +++++++++++++++++++ .../mozilla/iframe/resize_after_load_ref.html | 6 +++++ .../iframe/resources/green_inner_frame.html | 5 ++++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load.html create mode 100644 tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load_ref.html create mode 100644 tests/wpt/mozilla/tests/mozilla/iframe/resources/green_inner_frame.html diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index de02b59d67a..e8576e70e57 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -791,8 +791,20 @@ impl IOCompositor { self.pipeline_details.remove(&pipeline_id); } - fn update_layer_if_exists(&mut self, pipeline_id: PipelineId, properties: LayerProperties) + fn update_layer_if_exists(&mut self, + pipeline_id: PipelineId, + properties: LayerProperties) -> bool { + if let Some(subpage_id) = properties.subpage_pipeline_id { + match self.find_layer_with_pipeline_and_layer_id(subpage_id, LayerId::null()) { + Some(layer) => { + *layer.bounds.borrow_mut() = Rect::from_untyped( + &Rect::new(Point2D::zero(), properties.rect.size)); + } + None => warn!("Tried to update non-existent subpage root layer: {:?}", subpage_id), + } + } + match self.find_layer_with_pipeline_and_layer_id(pipeline_id, properties.id) { Some(existing_layer) => { existing_layer.update_layer(properties); diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 77b23ba35f5..b55ad3af106 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -4139,6 +4139,18 @@ "url": "/_mozilla/mozilla/canvas/drawimage_html_image_9.html" } ], + "mozilla/iframe/resize_after_load.html": [ + { + "path": "mozilla/iframe/resize_after_load.html", + "references": [ + [ + "/_mozilla/mozilla/iframe/resize_after_load_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/iframe/resize_after_load.html" + } + ], "mozilla/webgl/clearcolor.html": [ { "path": "mozilla/webgl/clearcolor.html", @@ -8928,6 +8940,18 @@ "url": "/_mozilla/mozilla/canvas/drawimage_html_image_9.html" } ], + "mozilla/iframe/resize_after_load.html": [ + { + "path": "mozilla/iframe/resize_after_load.html", + "references": [ + [ + "/_mozilla/mozilla/iframe/resize_after_load_ref.html", + "==" + ] + ], + "url": "/_mozilla/mozilla/iframe/resize_after_load.html" + } + ], "mozilla/webgl/clearcolor.html": [ { "path": "mozilla/webgl/clearcolor.html", diff --git a/tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load.html b/tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load.html new file mode 100644 index 00000000000..c126af16b07 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load.html @@ -0,0 +1,24 @@ + + + + + Dynamically growing an iframe element + + + + + + + + diff --git a/tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load_ref.html b/tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load_ref.html new file mode 100644 index 00000000000..2d3f57bacd0 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/iframe/resize_after_load_ref.html @@ -0,0 +1,6 @@ + + + +
+ + diff --git a/tests/wpt/mozilla/tests/mozilla/iframe/resources/green_inner_frame.html b/tests/wpt/mozilla/tests/mozilla/iframe/resources/green_inner_frame.html new file mode 100644 index 00000000000..f5cc00c8f57 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/iframe/resources/green_inner_frame.html @@ -0,0 +1,5 @@ + + + + +