[LayoutNG] Nested fixedpos in multicol w/ viewport CB

There were a couple of cases that resulted in a prepaint crash for a
nested fixedpos in a multicol whose containing block existed outside
the multicol.

1. When walking a missed OOF in prepaint, we skip over any OOF children
so that they can be found during fragment traversal. However, if that
OOF child is a fixedpos, and its CB is outside the multicol, we will
miss walking that fixedpos in fragment traversal.

To fix this, keep track of any fixedpos elements that we could miss in
this way in |pending_fixedpos_missables_|, and walk those after we
finish walking the multicol.

2. If a fixedpos is nested in a non-missed OOF, and its CB is outside
the multicol, we could miss walking it in prepaint when we check
if the fragmentainer is the first for node (ie. we'll skip the fixedpos
if the OOF parent starts in fragmentainer that is not the first).
Instead, check if the parent is the first for node to make sure that we
walk legacy-contained OOFs exactly once.

Bug: 1200328
Change-Id: I623afe38eef6c2abf827ed75ee78935adc7052ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3050673
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Commit-Queue: Alison Maher <almaher@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#907781}
diff --git a/css/css-multicol/fixedpos-static-pos-with-viewport-cb-001.html b/css/css-multicol/fixedpos-static-pos-with-viewport-cb-001.html
new file mode 100644
index 0000000..8b71999a
--- /dev/null
+++ b/css/css-multicol/fixedpos-static-pos-with-viewport-cb-001.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<title>
+  Nested fixedpos static position in a multicol with viewport containing block.
+</title>
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#abspos-breaking">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<style>
+  .multicol {
+    column-count: 2;
+    column-fill: auto;
+    column-gap: 0px;
+    width: 50px;
+    height: 100px;
+    margin-top: -100px;
+    margin-left: -175px;
+  }
+  .rel {
+    position: relative;
+  }
+  .abs {
+    position: absolute;
+    width: 25px;
+    height: 400px;
+  }
+  .fixed {
+    position: fixed;
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="multicol">
+  <div class="rel">
+    <div style="height: 400px;"></div>
+    <div class="abs">
+      <div style="height: 400px;"></div>
+      <div class="fixed" style="background: green;"></div>
+    </div>
+  </div>
+</div>
+<div class="fixed" style="background: red; z-index: -1;"></div>
diff --git a/css/css-multicol/fixedpos-static-pos-with-viewport-cb-002.html b/css/css-multicol/fixedpos-static-pos-with-viewport-cb-002.html
new file mode 100644
index 0000000..c2afef3
--- /dev/null
+++ b/css/css-multicol/fixedpos-static-pos-with-viewport-cb-002.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<title>
+  Nested fixedpos in a multicol with viewport containing block.
+</title>
+<link rel="help" href="https://www.w3.org/TR/css-position-3/#abspos-breaking">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<style>
+  .multicol {
+    column-count: 2;
+    column-fill: auto;
+    column-gap: 0px;
+    width: 50px;
+    height: 100px;
+    margin-top: -100px;
+    margin-left: -50px;
+  }
+  .rel {
+    position: relative;
+    height: 300px;
+  }
+  .abs {
+    position: absolute;
+    width: 25px;
+  }
+  .fixed {
+    position: fixed;
+    width: 100px;
+    height: 100px;
+  }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="multicol">
+  <div class="rel">
+    <div style="height: 100px;"></div>
+    <div class="abs">
+      <div style="height: 200px;"></div>
+      <div class="fixed" style="background: green;"></div>
+    </div>
+  </div>
+</div>
+<div class="fixed" style="background: red; z-index: -1;"></div>