[LayoutNG] Remove NGLayoutResult::PositionedFloats.
This patch does a few (related) things:
1) Makes floats children of their appropriate inline-level container.
Previously we weren't doing this, which was making OOF positioned
children skip their correct containing block. Now they'll correctly
get captured, during NGContainerFragmentBuilder::AddChild.
2) Now that float children are in the "correct" position within the
fragment tree, we can now paint them. This changes the
ng_box_fragment_painter.cc to paint inline-level floats and makes
sure we set the NGPaintFragment correctly.
3) Lots of subtle painting layer changes. As floats are now in the
"correct" fragment tree position, self-painting layers of
inline-level elements (spans, etc) need to know that they are able
to paint floats, determine position correctly, etc.
The major behaviour changes are:
<div>
text <span style="position: relative;">abc
<div style="float: left;">
<div style="position: absolute;"></div>
</div>
def</span>
</div>
The OOF positioned child will be contained within the <span>
<div>
<span style="position: relative; top: 100px;">
<div style="float: left;"></div></span>
</div>
The float will also shift by 100px, which previously wasn't the case.
Additionally filter: blur(2px); etc, will be applied to the float.
Change-Id: I61a2638cb1472f1a22f5994688d69fb6fffb8b88
Reviewed-on: https://chromium-review.googlesource.com/c/1365984
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: Chris Harrelson <chrishtr@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Reviewed-by: Emil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#619070}
diff --git a/css/CSS2/positioning/abspos-float-with-inline-container-ref.html b/css/CSS2/positioning/abspos-float-with-inline-container-ref.html
new file mode 100644
index 0000000..3bf67ed
--- /dev/null
+++ b/css/CSS2/positioning/abspos-float-with-inline-container-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<style>
+div {
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<p>Test passes if there is green square.</p>
+<div></div>
diff --git a/css/CSS2/positioning/abspos-float-with-inline-container.html b/css/CSS2/positioning/abspos-float-with-inline-container.html
new file mode 100644
index 0000000..9918bcc
--- /dev/null
+++ b/css/CSS2/positioning/abspos-float-with-inline-container.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.csswg.org/css2/visudet.html" />
+<link rel="match" href="abspos-float-with-inline-container-ref.html" />
+<meta name="assert" content="A inline-level element can contain a absolute-positioned child within a float." />
+<style>
+#abs {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 100px;
+ background: green;
+}
+#float { float: left; }
+span {
+ position: relative;
+ padding-left: 100px;
+}
+</style>
+<p>Test passes if there is green square.</p>
+<div>
+ <span>
+ <div id="float">
+ <div id="abs"></div>
+ </div>
+ </span>
+</div>
diff --git a/css/filter-effects/filtered-inline-applies-to-float-ref.html b/css/filter-effects/filtered-inline-applies-to-float-ref.html
new file mode 100644
index 0000000..439d7c4
--- /dev/null
+++ b/css/filter-effects/filtered-inline-applies-to-float-ref.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<style>
+#float {
+ float: left;
+ width: 100px;
+ height: 100px;
+ background: green;
+ filter: blur(2px);
+}
+</style>
+<p>There should be a blurred green square.</p>
+<div id="float"></div>
diff --git a/css/filter-effects/filtered-inline-applies-to-float.html b/css/filter-effects/filtered-inline-applies-to-float.html
new file mode 100644
index 0000000..2d368de
--- /dev/null
+++ b/css/filter-effects/filtered-inline-applies-to-float.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<link rel="help" href="https://drafts.fxtf.org/filter-effects-1/#FilterProperty" />
+<link rel="match" href="filtered-inline-applies-to-float-ref.html" />
+<meta name="assert" content="A filter on an inline element applies to floats." />
+<style>
+span { filter: blur(2px); }
+#float {
+ float: left;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<p>There should be a blurred green square.</p>
+<div>
+ <span><div id="float"></div></span>
+</div>