aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-08-19 13:33:08 -0600
committerbors-servo <metajack+bors@gmail.com>2015-08-19 13:33:08 -0600
commitac4ca053376fe061a324d3b860892719aa3a32ad (patch)
treee29df8fceef46378752a905571fd7e9e8e268553
parent5c284a546a539ddcc546fc5c00ab06568f352f11 (diff)
parent4df4d1a1a9e8fa53c862fc0d42aa43c58eee3fa3 (diff)
downloadservo-ac4ca053376fe061a324d3b860892719aa3a32ad.tar.gz
servo-ac4ca053376fe061a324d3b860892719aa3a32ad.zip
Auto merge of #7287 - pcwalton:iframe-stacking-context, r=glennw
layout: Put iframes that form stacking contexts in the right place. Improves eBay. Closes #7282. r? @glennw <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7287) <!-- Reviewable:end -->
-rw-r--r--components/layout/display_list_builder.rs12
-rw-r--r--tests/ref/basic.list1
-rw-r--r--tests/ref/iframe/stacking_context.html13
-rw-r--r--tests/ref/iframe/stacking_context_ref.html12
4 files changed, 35 insertions, 3 deletions
diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs
index 8710c519de0..59264e24a8f 100644
--- a/components/layout/display_list_builder.rs
+++ b/components/layout/display_list_builder.rs
@@ -1011,9 +1011,15 @@ impl FragmentDisplayListBuilding for Fragment {
// because layout for the iframe only needs to know size, and origin is only relevant if
// the iframe is actually going to be displayed.
if let SpecificFragmentInfo::Iframe(ref iframe_fragment) = self.specific {
- self.finalize_position_and_size_of_iframe(&**iframe_fragment,
- stacking_relative_border_box.origin,
- layout_context)
+ let stacking_relative_border_box_in_parent_coordinate_system =
+ self.stacking_relative_border_box(stacking_relative_flow_origin,
+ relative_containing_block_size,
+ relative_containing_block_mode,
+ CoordinateSystem::Parent);
+ self.finalize_position_and_size_of_iframe(
+ &**iframe_fragment,
+ stacking_relative_border_box_in_parent_coordinate_system.origin,
+ layout_context)
}
}
diff --git a/tests/ref/basic.list b/tests/ref/basic.list
index d4302a6099f..72f98ee3402 100644
--- a/tests/ref/basic.list
+++ b/tests/ref/basic.list
@@ -137,6 +137,7 @@ flaky_cpu == append_style_a.html append_style_b.html
== iframe/simple_inline_width_percentage.html iframe/simple_inline_width_percentage_ref.html
== iframe/size_attributes.html iframe/size_attributes_ref.html
experimental == iframe/size_attributes_vertical_writing_mode.html iframe/size_attributes_ref.html
+== iframe/stacking_context.html iframe/stacking_context_ref.html
!= image_rendering_auto_a.html image_rendering_pixelated_a.html
== image_rendering_pixelated_a.html image_rendering_pixelated_ref.html
diff --git a/tests/ref/iframe/stacking_context.html b/tests/ref/iframe/stacking_context.html
new file mode 100644
index 00000000000..feeea572eaa
--- /dev/null
+++ b/tests/ref/iframe/stacking_context.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<style>
+iframe {
+ position: absolute;
+ width: 200px;
+ height: 200px;
+ top: 100px;
+ left: 100px;
+ border: solid green 50px;
+ transform: translateX(0px); /* form a stacking context */
+}
+</style>
+<iframe src="data:text/html,%3Cspan%3EJust%20a%20simple%20little%20iframe.%3C%2Fspan%3E">
diff --git a/tests/ref/iframe/stacking_context_ref.html b/tests/ref/iframe/stacking_context_ref.html
new file mode 100644
index 00000000000..c243ae6581a
--- /dev/null
+++ b/tests/ref/iframe/stacking_context_ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<style>
+iframe {
+ position: absolute;
+ width: 200px;
+ height: 200px;
+ top: 100px;
+ left: 100px;
+ border: solid green 50px;
+}
+</style>
+<iframe src="data:text/html,%3Cspan%3EJust%20a%20simple%20little%20iframe.%3C%2Fspan%3E">