summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/meta/css/selectors/invalidation
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/meta/css/selectors/invalidation')
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html.ini39
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html.ini81
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/defined.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/dir-pseudo-class-in-has.html.ini2
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/empty-pseudo-in-has.html.ini8
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/enabled-disabled.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/first-child-last-child.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/fullscreen-pseudo-class-in-has.html.ini7
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-complexity.html.ini20
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-in-adjacent-position.html.ini294
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-in-ancestor-position.html.ini383
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-in-parent-position.html.ini179
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-in-sibling-position.html.ini312
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html.ini5
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html.ini6
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-sibling.html.ini107
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-with-not.html.ini32
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/has-with-pseudo-class.html.ini44
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/host-pseudo-class-in-has.html.ini14
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/input-pseudo-classes-in-has.html.ini29
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/insert-sibling-001.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/insert-sibling-002.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/insert-sibling-003.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/insert-sibling-004.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html.ini242
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/is.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-multiple-document-elements.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-xhtml.xhtml.ini2
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has.html.ini2
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/link-pseudo-in-has.html.ini5
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html.ini7
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/media-pseudo-classes-in-has.html.ini10
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/modal-pseudo-class-in-has.html.ini15
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/not-001.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/not-002.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html.ini225
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/nth-child-of-has.html.ini2
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/nth-last-child-of-has.html.ini2
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/selectorText-dynamic-001.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/sheet-going-away-001.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/sibling.html.ini3
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/subject-has-invalidation-with-display-none-anchor-element.html.ini5
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/target-pseudo-in-has.html.ini5
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html.ini146
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/user-action-pseudo-classes-in-has.html.ini5
-rw-r--r--testing/web-platform/meta/css/selectors/invalidation/where.html.ini3
48 files changed, 2286 insertions, 0 deletions
diff --git a/testing/web-platform/meta/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html.ini
new file mode 100644
index 0000000000..a192998bc8
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/attribute-or-elemental-selectors-in-has.html.ini
@@ -0,0 +1,39 @@
+[attribute-or-elemental-selectors-in-has.html]
+ [add .child to #div_child: div#div_subject.color]
+ expected: FAIL
+
+ [add .descendant to #div_child: div#div_subject.color]
+ expected: FAIL
+
+ [add .descendant to #div_grandchild: div#div_subject.color]
+ expected: FAIL
+
+ [set descendant to #div_grandchild[attrname\]: div#div_subject.color]
+ expected: FAIL
+
+ [change #div_grandchild to #div_descendant: div#div_subject.color]
+ expected: FAIL
+
+ [add descendant to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add "div > descendant" to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add div.child to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add "div > div.descendant" to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add div#div_descendant to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add "div#div_descendant" to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add div[attrname\] to #div_subject: div#div_subject.color]
+ expected: FAIL
+
+ [add "div > div[attrname\]" to #div_subject: div#div_subject.color]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..4ff336cd40
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/child-indexed-pseudo-classes-in-has.html.ini
@@ -0,0 +1,81 @@
+[child-indexed-pseudo-classes-in-has.html]
+ [Prepend #div1.green: #only_child]
+ expected: FAIL
+
+ [Prepend #div1.green: #first_child]
+ expected: FAIL
+
+ [Prepend #div1.green: #last_child]
+ expected: FAIL
+
+ [Prepend #div1.green: #nth_child_3n_1]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #first_child]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #last_child]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #nth_child_3n_1]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #nth_child_3n_2]
+ expected: FAIL
+
+ [Prepend #div3.orange: #first_child]
+ expected: FAIL
+
+ [Prepend #div3.orange: #last_child]
+ expected: FAIL
+
+ [Prepend #div3.orange: #nth_child_3n_1]
+ expected: FAIL
+
+ [Prepend #div3.orange: #nth_child_3n_2]
+ expected: FAIL
+
+ [Prepend #div3.orange: #nth_child_3n]
+ expected: FAIL
+
+ [Prepend #div4: #last_child]
+ expected: FAIL
+
+ [Prepend #div4: #nth_child_3n_1]
+ expected: FAIL
+
+ [Prepend #div4: #nth_child_3n_2]
+ expected: FAIL
+
+ [Prepend #div4: #nth_child_3n]
+ expected: FAIL
+
+ [Prepend #div5: #last_child]
+ expected: FAIL
+
+ [Prepend #div5: #nth_child_3n_1]
+ expected: FAIL
+
+ [Prepend #div5: #nth_child_3n_2]
+ expected: FAIL
+
+ [Prepend #div5: #nth_child_3n]
+ expected: FAIL
+
+ [Remove #div1: #last_child]
+ expected: FAIL
+
+ [Remove #div1: #nth_child_3n_1]
+ expected: FAIL
+
+ [Remove #div1: #nth_child_3n]
+ expected: FAIL
+
+ [Remove #div2: #last_child]
+ expected: FAIL
+
+ [Remove #div2: #nth_child_3n]
+ expected: FAIL
+
+ [Remove #div4: #only_child]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/defined.html.ini b/testing/web-platform/meta/css/selectors/invalidation/defined.html.ini
new file mode 100644
index 0000000000..710b7702b5
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/defined.html.ini
@@ -0,0 +1,3 @@
+[defined.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/dir-pseudo-class-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/dir-pseudo-class-in-has.html.ini
new file mode 100644
index 0000000000..94a862a94e
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/dir-pseudo-class-in-has.html.ini
@@ -0,0 +1,2 @@
+[dir-pseudo-class-in-has.html]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/empty-pseudo-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/empty-pseudo-in-has.html.ini
new file mode 100644
index 0000000000..dd67b0e45f
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/empty-pseudo-in-has.html.ini
@@ -0,0 +1,8 @@
+[empty-pseudo-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [Insert div#child to #subject]
+ expected: FAIL
+
+ [Insert div to div.#child]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/enabled-disabled.html.ini b/testing/web-platform/meta/css/selectors/invalidation/enabled-disabled.html.ini
new file mode 100644
index 0000000000..b0d268d36f
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/enabled-disabled.html.ini
@@ -0,0 +1,3 @@
+[enabled-disabled.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/first-child-last-child.html.ini b/testing/web-platform/meta/css/selectors/invalidation/first-child-last-child.html.ini
new file mode 100644
index 0000000000..761439c092
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/first-child-last-child.html.ini
@@ -0,0 +1,3 @@
+[first-child-last-child.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/fullscreen-pseudo-class-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/fullscreen-pseudo-class-in-has.html.ini
new file mode 100644
index 0000000000..94d29a6f79
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/fullscreen-pseudo-class-in-has.html.ini
@@ -0,0 +1,7 @@
+[fullscreen-pseudo-class-in-has.html]
+ expected: ERROR
+ [:fullscreen pseudo-class invalidation with requestFullscreen + exitFullscreen]
+ expected: FAIL
+
+ [:fullscreen pseudo-class invalidation with requestFullscreen + remove]
+ expected: TIMEOUT
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-complexity.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-complexity.html.ini
new file mode 100644
index 0000000000..1683123c1f
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-complexity.html.ini
@@ -0,0 +1,20 @@
+[has-complexity.html]
+ expected:
+ if (os == "linux") and not debug and fission and (processor == "x86_64"): [OK, TIMEOUT]
+ [After appending 25000 elements. This should not time out.]
+ expected: FAIL
+
+ [After appending another 25000 elements. This should not time out.]
+ expected: FAIL
+
+ [After appending div with 25000 elements. This should not time out.]
+ expected: FAIL
+
+ [After removing div with 25000 elements. This should not time out.]
+ expected: FAIL
+
+ [After removing 25000 elements one-by-one. This should not time out.]
+ expected: FAIL
+
+ [After removing the remaining elements. This should not time out.]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-in-adjacent-position.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-in-adjacent-position.html.ini
new file mode 100644
index 0000000000..c9741d4a5d
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-in-adjacent-position.html.ini
@@ -0,0 +1,294 @@
+[has-in-adjacent-position.html]
+ [add .test to previous_sibling_child]
+ expected: FAIL
+
+ [add .test to previous_sibling_descendant]
+ expected: FAIL
+
+ [add .test to subject]
+ expected: FAIL
+
+ [add .test to next_sibling]
+ expected: FAIL
+
+ [add .test to next_sibling_child]
+ expected: FAIL
+
+ [add .test to next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before previous_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before next_sibling]
+ expected: FAIL
+
+ [insert element div.test before next_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after previous_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after subject]
+ expected: FAIL
+
+ [insert element div.test after next_sibling]
+ expected: FAIL
+
+ [insert element div.test after next_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after next_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before previous_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after previous_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after subject]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before previous_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after previous_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before previous_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after previous_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after previous_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling_descendant]
+ expected: FAIL
+
+ [remove the class 'test' from the element in the tree inserted before subject]
+ expected: FAIL
+
+ [remove the class 'test' from the element in the tree inserted after previous_sibling]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-in-ancestor-position.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-in-ancestor-position.html.ini
new file mode 100644
index 0000000000..4b5179f883
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-in-ancestor-position.html.ini
@@ -0,0 +1,383 @@
+[has-in-ancestor-position.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [add .test to subject_parent]
+ expected: FAIL
+
+ [add .test to subject]
+ expected: FAIL
+
+ [add .test to subject_child]
+ expected: FAIL
+
+ [add .test to subject_descendant]
+ expected: FAIL
+
+ [add .test to next_sibling]
+ expected: FAIL
+
+ [add .test to next_sibling_child]
+ expected: FAIL
+
+ [add .test to next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before subject_parent]
+ expected: FAIL
+
+ [insert element div.test before subject]
+ expected: FAIL
+
+ [insert element div.test before subject_child]
+ expected: FAIL
+
+ [insert element div.test before subject_descendant]
+ expected: FAIL
+
+ [insert element div.test before next_sibling]
+ expected: FAIL
+
+ [insert element div.test before next_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after subject_ancestor]
+ expected: FAIL
+
+ [insert element div.test after subject_parent]
+ expected: FAIL
+
+ [insert element div.test after subject]
+ expected: FAIL
+
+ [insert element div.test after subject_child]
+ expected: FAIL
+
+ [insert element div.test after subject_descendant]
+ expected: FAIL
+
+ [insert element div.test after next_sibling]
+ expected: FAIL
+
+ [insert element div.test after next_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after next_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before subject_parent]
+ expected: FAIL
+
+ [insert tree div>div.test before subject]
+ expected: FAIL
+
+ [insert tree div>div.test before subject_child]
+ expected: FAIL
+
+ [insert tree div>div.test before subject_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_ancestor]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_parent]
+ expected: FAIL
+
+ [insert tree div>div.test after subject]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_child]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject_parent]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject_parent]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject_parent]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_ancestor]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_ancestor]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_ancestor]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_parent]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject_parent]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject_parent]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject_parent]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_ancestor]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_ancestor]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_ancestor]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_parent]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling_descendant]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-in-parent-position.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-in-parent-position.html.ini
new file mode 100644
index 0000000000..964a5aff89
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-in-parent-position.html.ini
@@ -0,0 +1,179 @@
+[has-in-parent-position.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [add .test to subject]
+ expected: FAIL
+
+ [add .test to subject_child]
+ expected: FAIL
+
+ [add .test to subject_descendant]
+ expected: FAIL
+
+ [insert element div.test before subject]
+ expected: FAIL
+
+ [insert element div.test before subject_child]
+ expected: FAIL
+
+ [insert element div.test before subject_descendant]
+ expected: FAIL
+
+ [insert element div.test after subject_parent]
+ expected: FAIL
+
+ [insert element div.test after subject]
+ expected: FAIL
+
+ [insert element div.test after subject_child]
+ expected: FAIL
+
+ [insert element div.test after subject_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before subject]
+ expected: FAIL
+
+ [insert tree div>div.test before subject_child]
+ expected: FAIL
+
+ [insert tree div>div.test before subject_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_parent]
+ expected: FAIL
+
+ [insert tree div>div.test after subject]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_child]
+ expected: FAIL
+
+ [insert tree div>div.test after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_parent]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_parent]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_parent]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject_descendant]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-in-sibling-position.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-in-sibling-position.html.ini
new file mode 100644
index 0000000000..eafdf664f0
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-in-sibling-position.html.ini
@@ -0,0 +1,312 @@
+[has-in-sibling-position.html]
+ [add .test to previous_sibling_child]
+ expected: FAIL
+
+ [add .test to previous_sibling_descendant]
+ expected: FAIL
+
+ [add .test to subject]
+ expected: FAIL
+
+ [add .test to next_sibling]
+ expected: FAIL
+
+ [add .test to next_sibling_child]
+ expected: FAIL
+
+ [add .test to next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before previous_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before next_sibling]
+ expected: FAIL
+
+ [insert element div.test before next_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after previous_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after subject]
+ expected: FAIL
+
+ [insert element div.test after next_sibling]
+ expected: FAIL
+
+ [insert element div.test after next_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after next_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before previous_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before next_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after previous_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after subject]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before previous_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before previous_sibling_descendant]
+ expected: FAIL
+
+ [remove the class 'test' from the element inserted before subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after previous_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after previous_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after subject]
+ expected: FAIL
+
+ [insert element div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling_child]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element inserted after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element inserted again after next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div[test_attr\] after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before previous_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before previous_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted before next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again before next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] before next_sibling_descendant]
+ expected: FAIL
+
+ [remove the class 'test' from the element inserted after previous_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after previous_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after previous_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after previous_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after previous_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after previous_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after subject]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after subject]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after subject]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling_child]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling_child]
+ expected: FAIL
+
+ [add the class 'test' again to the element in the tree inserted after next_sibling_descendant]
+ expected: FAIL
+
+ [add the class 'test' to the element in the tree inserted again after next_sibling_descendant]
+ expected: FAIL
+
+ [insert element div>div[test_attr\] after next_sibling_descendant]
+ expected: FAIL
+
+ [remove the class 'test' from the element in the tree inserted before previous_sibling]
+ expected: FAIL
+
+ [remove the class 'test' from the element in the tree inserted before subject]
+ expected: FAIL
+
+ [remove the class 'test' from the element in the tree inserted after previous_sibling]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html.ini
new file mode 100644
index 0000000000..f758a44ad4
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-invalidation-after-removing-non-first-element.html.ini
@@ -0,0 +1,5 @@
+[has-invalidation-after-removing-non-first-element.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [remove descendant: div#subject.color]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html.ini
new file mode 100644
index 0000000000..45884afd2a
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-invalidation-for-wiping-an-element.html.ini
@@ -0,0 +1,6 @@
+[has-invalidation-for-wiping-an-element.html]
+ [color after inserting text and div > .descendant: div#subject.color]
+ expected: FAIL
+
+ [color after inserting text and #child > .descendant: div#subject.color]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-sibling.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-sibling.html.ini
new file mode 100644
index 0000000000..b3e3445300
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-sibling.html.ini
@@ -0,0 +1,107 @@
+[has-sibling.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [add .test to first_sibling]
+ expected: FAIL
+
+ [add .test to second_sibling]
+ expected: FAIL
+
+ [add .test to third_sibling]
+ expected: FAIL
+
+ [add .test to first_sibling_child]
+ expected: FAIL
+
+ [add .test to first_sibling_descendant]
+ expected: FAIL
+
+ [add .test to third_sibling_child]
+ expected: FAIL
+
+ [add .test to third_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before first_sibling]
+ expected: FAIL
+
+ [insert element div.test before second_sibling]
+ expected: FAIL
+
+ [insert element div.test before third_sibling]
+ expected: FAIL
+
+ [insert element div.test before first_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before first_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test before third_sibling_child]
+ expected: FAIL
+
+ [insert element div.test before third_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after first_sibling]
+ expected: FAIL
+
+ [insert element div.test after second_sibling]
+ expected: FAIL
+
+ [insert element div.test after third_sibling]
+ expected: FAIL
+
+ [insert element div.test after first_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after first_sibling_descendant]
+ expected: FAIL
+
+ [insert element div.test after third_sibling_child]
+ expected: FAIL
+
+ [insert element div.test after third_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before first_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test before second_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test before third_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test before first_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before first_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test before third_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test before third_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after first_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test after second_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test after third_sibling]
+ expected: FAIL
+
+ [insert tree div>div.test after first_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after first_sibling_descendant]
+ expected: FAIL
+
+ [insert tree div>div.test after third_sibling_child]
+ expected: FAIL
+
+ [insert tree div>div.test after third_sibling_descendant]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-with-not.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-with-not.html.ini
new file mode 100644
index 0000000000..b7d643a644
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-with-not.html.ini
@@ -0,0 +1,32 @@
+[has-with-not.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [remove .test to subject_child]
+ expected: FAIL
+
+ [remove .test to subject_descendant]
+ expected: FAIL
+
+ [insert element div before subject_child]
+ expected: FAIL
+
+ [insert element div before subject_descendant]
+ expected: FAIL
+
+ [insert element div after subject_child]
+ expected: FAIL
+
+ [insert element div after subject_descendant]
+ expected: FAIL
+
+ [insert tree div>div before subject_child]
+ expected: FAIL
+
+ [insert tree div>div before subject_descendant]
+ expected: FAIL
+
+ [insert tree div.test after subject_child]
+ expected: FAIL
+
+ [insert tree div.test after subject_descendant]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/has-with-pseudo-class.html.ini b/testing/web-platform/meta/css/selectors/invalidation/has-with-pseudo-class.html.ini
new file mode 100644
index 0000000000..df9c3f5c5c
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/has-with-pseudo-class.html.ini
@@ -0,0 +1,44 @@
+[has-with-pseudo-class.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [Set checked on checkbox, testing subject]
+ expected: FAIL
+
+ [Set select on option]
+ expected: FAIL
+
+ [Set disabled on checkbox, testing subject]
+ expected: FAIL
+
+ [Set disabled on checkbox, testing subject3]
+ expected: FAIL
+
+ [Set disabled on option, testing subject]
+ expected: FAIL
+
+ [Set disabled on option, testing subject3]
+ expected: FAIL
+
+ [Set disabled on optgroup, testing subject]
+ expected: FAIL
+
+ [Set disabled on optgroup, testing subject2]
+ expected: FAIL
+
+ [Set disabled on optgroup, testing subject3]
+ expected: FAIL
+
+ [Set disabled on optgroup, testing subject4]
+ expected: FAIL
+
+ [Set value of text_input, testing subject]
+ expected: FAIL
+
+ [Set value of text_input, testing subject2]
+ expected: FAIL
+
+ [Set value of text_input, testing subject3]
+ expected: FAIL
+
+ [Set value of text_input, testing subject4]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/host-pseudo-class-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/host-pseudo-class-in-has.html.ini
new file mode 100644
index 0000000000..c0c220c4f9
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/host-pseudo-class-in-has.html.ini
@@ -0,0 +1,14 @@
+[host-pseudo-class-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [After adding 'a' to #host_parent: Check #subject1 color]
+ expected: FAIL
+
+ [After adding 'a' to #host_parent: Check #subject2 color]
+ expected: FAIL
+
+ [After adding 'a' to #host: Check #subject1 color]
+ expected: FAIL
+
+ [After adding 'a' to #host: Check #subject2 color]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/input-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/input-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..cd3b9fbf4f
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/input-pseudo-classes-in-has.html.ini
@@ -0,0 +1,29 @@
+[input-pseudo-classes-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [:checked & :indeterminate invalidation on <input>]
+ expected: FAIL
+
+ [:indeterminate invalidation on <progress>]
+ expected: FAIL
+
+ [:disabled invalidation]
+ expected: FAIL
+
+ [:read-only invalidation]
+ expected: FAIL
+
+ [:valid invalidation]
+ expected: FAIL
+
+ [:default invalidation with input[type=radio\]]
+ expected: FAIL
+
+ [:required invalidation]
+ expected: FAIL
+
+ [:out-of-range invalidation]
+ expected: FAIL
+
+ [:placeholder-shown invalidation]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-001.html.ini b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-001.html.ini
new file mode 100644
index 0000000000..21c4dc9672
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-001.html.ini
@@ -0,0 +1,3 @@
+[insert-sibling-001.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-002.html.ini b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-002.html.ini
new file mode 100644
index 0000000000..9c5c2fd229
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-002.html.ini
@@ -0,0 +1,3 @@
+[insert-sibling-002.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-003.html.ini b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-003.html.ini
new file mode 100644
index 0000000000..a030ae1e5f
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-003.html.ini
@@ -0,0 +1,3 @@
+[insert-sibling-003.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-004.html.ini b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-004.html.ini
new file mode 100644
index 0000000000..666a26b7a8
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/insert-sibling-004.html.ini
@@ -0,0 +1,3 @@
+[insert-sibling-004.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html.ini
new file mode 100644
index 0000000000..c05c94feed
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/is-pseudo-containing-complex-in-has.html.ini
@@ -0,0 +1,242 @@
+[is-pseudo-containing-complex-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [[ .orange:has(#descendant:is(:is(.m, .n) .o)) \] #parent.classList.add('m') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:is(:is(.m, .n) .o)) \] #parent.classList.add('n') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:is(:is(.m, .n) .o)) \] #has_scope.classList.add('m') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:is(:is(.m, .n) .o)) \] #has_scope.classList.add('n') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:is(:is(.m, .n) .o)) \] #child.classList.add('m') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:is(:is(.m, .n) .o)) \] #child.classList.add('n') : check #has_scope color]
+ expected: FAIL
+
+ [[ .red:has(#descendant:is(.a_has_scope .b)) \] #parent.classList.add('a_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .red:has(#descendant:is(.a_has_scope .b)) \] #has_scope.classList.add('a_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .red:has(#descendant:is(.a_has_scope .b)) \] #child.classList.add('a_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orangered:has(#descendant:is(.a_descendant .b)) #descendant \] #parent.classList.add('a_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .orangered:has(#descendant:is(.a_descendant .b)) #descendant \] #has_scope.classList.add('a_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .orangered:has(#descendant:is(.a_descendant .b)) #descendant \] #child.classList.add('a_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .darkred:has(#descendant:is(.a_indirect_next .b)) ~ #indirect_next \] #parent.classList.add('a_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkred:has(#descendant:is(.a_indirect_next .b)) ~ #indirect_next \] #has_scope.classList.add('a_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkred:has(#descendant:is(.a_indirect_next .b)) ~ #indirect_next \] #child.classList.add('a_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .pink:has(#descendant:is(.a_indirect_next_child .b)) ~ #indirect_next #indirect_next_child \] #parent.classList.add('a_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .pink:has(#descendant:is(.a_indirect_next_child .b)) ~ #indirect_next #indirect_next_child \] #has_scope.classList.add('a_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .pink:has(#descendant:is(.a_indirect_next_child .b)) ~ #indirect_next #indirect_next_child \] #child.classList.add('a_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] #parent_previous.classList.add('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] insert/remove .invalid before #parent_previous) : (removal) check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] insert/remove .c_has_scope before #parent_previous) : (insertion) check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] #previous.classList.add('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] #child_previous.classList.add('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] insert/remove .invalid before #child_previous) : (removal) check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] insert/remove .c_has_scope before #child_previous) : (insertion) check #has_scope color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:is(.p + .c_descendant ~ .d .e)) #descendant \] #parent_previous.classList.add('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:is(.p + .c_descendant ~ .d .e)) #descendant \] #previous.classList.add('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:is(.p + .c_descendant ~ .d .e)) #descendant \] #child_previous.classList.add('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #parent_previous.classList.add('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #previous.classList.add('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #child_previous.classList.add('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] insert/remove .invalid before #child_previous) : (removal) check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] insert/remove .c_indirect_next before #child_previous) : (insertion) check #indirect_next color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.add('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #previous.classList.add('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #child_previous.classList.add('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] insert/remove .invalid before #child_previous) : (removal) check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] insert/remove .c_indirect_next_child before #child_previous) : (insertion) check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:is(.p + .f_has_scope ~ .g)) \] #previous.classList.add('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:is(.p + .f_has_scope ~ .g)) \] #previous.classList.remove('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:is(.p + .f_has_scope ~ .g)) \] #has_scope.classList.add('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:is(.p + .f_has_scope ~ .g)) \] #direct_next.classList.add('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:is(.p + .f_has_scope ~ .g)) \] insert/remove .invalid before #direct_next) : (removal) check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:is(.p + .f_has_scope ~ .g)) \] insert/remove .f_has_scope before #direct_next) : (insertion) check #has_scope color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:is(.p + .f_descendant ~ .g)) #descendant \] #previous.classList.add('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:is(.p + .f_descendant ~ .g)) #descendant \] #previous.classList.remove('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:is(.p + .f_descendant ~ .g)) #descendant \] #has_scope.classList.add('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:is(.p + .f_descendant ~ .g)) #descendant \] #direct_next.classList.add('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:is(.p + .f_descendant ~ .g)) #descendant \] insert/remove .invalid before #direct_next) : (removal) check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:is(.p + .f_descendant ~ .g)) #descendant \] insert/remove .f_descendant before #direct_next) : (insertion) check #descendant color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:is(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #previous.classList.add('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:is(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #previous.classList.remove('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:is(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #has_scope.classList.add('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:is(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #direct_next.classList.add('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:is(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #direct_next.classList.remove('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:is(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #previous.classList.add('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:is(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #previous.classList.remove('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:is(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #has_scope.classList.add('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:is(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #direct_next.classList.add('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:is(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #direct_next.classList.remove('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellow:has(~ #indirect_next:is(.h_has_scope .i)) \] #parent.classList.add('h_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .ivory:has(~ #indirect_next:is(.h_descendant .i)) #descendant \] #parent.classList.add('h_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .greenyellow:has(~ #indirect_next:is(.h_indirect_next .i)) ~ #indirect_next \] #parent.classList.add('h_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .khaki:has(~ #indirect_next:is(.h_indirect_next_child .i)) ~ #indirect_next #indirect_next_child \] #parent.classList.add('h_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .purple:has(~ #indirect_next:is(.p + .j_has_scope ~ .k .l)) \] #parent_previous.classList.add('j_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .purple:has(~ #indirect_next:is(.p + .j_has_scope ~ .k .l)) \] #parent_previous.classList.remove('j_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .violet:has(~ #indirect_next:is(.p + .j_descendant ~ .k .l)) #descendant \] #parent_previous.classList.add('j_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .violet:has(~ #indirect_next:is(.p + .j_descendant ~ .k .l)) #descendant \] #parent_previous.classList.remove('j_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .orchid:has(~ #indirect_next:is(.p + .j_indirect_next ~ .k .l)) ~ #indirect_next \] #parent_previous.classList.add('j_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .orchid:has(~ #indirect_next:is(.p + .j_indirect_next ~ .k .l)) ~ #indirect_next \] #parent_previous.classList.remove('j_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .plum:has(~ #indirect_next:is(.p + .j_indirect_next_child ~ .k .l)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.add('j_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .plum:has(~ #indirect_next:is(.p + .j_indirect_next_child ~ .k .l)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.remove('j_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:is(.p + .c_has_scope ~ .d .e)) \] #previous.classList.remove('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:is(.p + .c_descendant ~ .d .e)) #descendant \] #parent_previous.classList.remove('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:is(.p + .c_descendant ~ .d .e)) #descendant \] #previous.classList.remove('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:is(.p + .c_descendant ~ .d .e)) #descendant \] #child_previous.classList.remove('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #parent_previous.classList.remove('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:is(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #previous.classList.remove('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.remove('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:is(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #previous.classList.remove('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/is.html.ini b/testing/web-platform/meta/css/selectors/invalidation/is.html.ini
new file mode 100644
index 0000000000..8d2dfa6362
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/is.html.ini
@@ -0,0 +1,3 @@
+[is.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-multiple-document-elements.html.ini b/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-multiple-document-elements.html.ini
new file mode 100644
index 0000000000..d31de72c1b
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-multiple-document-elements.html.ini
@@ -0,0 +1,3 @@
+[lang-pseudo-class-in-has-multiple-document-elements.html]
+ expected:
+ if os == "win": FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-xhtml.xhtml.ini b/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-xhtml.xhtml.ini
new file mode 100644
index 0000000000..ea5033743d
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has-xhtml.xhtml.ini
@@ -0,0 +1,2 @@
+[lang-pseudo-class-in-has-xhtml.xhtml]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has.html.ini
new file mode 100644
index 0000000000..a4e075f95e
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/lang-pseudo-class-in-has.html.ini
@@ -0,0 +1,2 @@
+[lang-pseudo-class-in-has.html]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/link-pseudo-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/link-pseudo-in-has.html.ini
new file mode 100644
index 0000000000..7903844f10
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/link-pseudo-in-has.html.ini
@@ -0,0 +1,5 @@
+[link-pseudo-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [CSS Selectors Invalidation: :link, :visited :any-link, pseudo-class in :has() argument]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..fde2638b5d
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/location-pseudo-classes-in-has.html.ini
@@ -0,0 +1,3 @@
+[location-pseudo-classes-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..468b68e88d
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/media-loading-pseudo-classes-in-has.html.ini
@@ -0,0 +1,7 @@
+[media-loading-pseudo-classes-in-has.html]
+ expected: TIMEOUT
+ [Test :has(:stalled) invalidation]
+ expected: TIMEOUT
+
+ [Test :has(:buffering) invalidation]
+ expected: NOTRUN
diff --git a/testing/web-platform/meta/css/selectors/invalidation/media-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/media-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..54159bc4bc
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/media-pseudo-classes-in-has.html.ini
@@ -0,0 +1,10 @@
+[media-pseudo-classes-in-has.html]
+ expected: TIMEOUT
+ [Test :playing pseudo-classes]
+ expected: FAIL
+
+ [Test :seeking pseudo-class]
+ expected: FAIL
+
+ [Test :muted pseudo-class]
+ expected: TIMEOUT
diff --git a/testing/web-platform/meta/css/selectors/invalidation/modal-pseudo-class-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/modal-pseudo-class-in-has.html.ini
new file mode 100644
index 0000000000..b46fda5685
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/modal-pseudo-class-in-has.html.ini
@@ -0,0 +1,15 @@
+[modal-pseudo-class-in-has.html]
+ expected:
+ if (os == "android") and fission: [ERROR, TIMEOUT, OK]
+ ERROR
+ [:modal pseudo-class invalidation with showModal + close]
+ expected: FAIL
+
+ [:modal pseudo-class invalidation with showModal + remove]
+ expected: FAIL
+
+ [:modal pseudo-class invalidation with requestFullscreen + exitFullscreen]
+ expected: TIMEOUT
+
+ [:modal pseudo-class invalidation with requestFullscreen + remove]
+ expected: NOTRUN
diff --git a/testing/web-platform/meta/css/selectors/invalidation/not-001.html.ini b/testing/web-platform/meta/css/selectors/invalidation/not-001.html.ini
new file mode 100644
index 0000000000..fc932d99ae
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/not-001.html.ini
@@ -0,0 +1,3 @@
+[not-001.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/not-002.html.ini b/testing/web-platform/meta/css/selectors/invalidation/not-002.html.ini
new file mode 100644
index 0000000000..ca0e613641
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/not-002.html.ini
@@ -0,0 +1,3 @@
+[not-002.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html.ini
new file mode 100644
index 0000000000..653a3b4696
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/not-pseudo-containing-complex-in-has.html.ini
@@ -0,0 +1,225 @@
+[not-pseudo-containing-complex-in-has.html]
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] #parent_previous.classList.remove('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] #previous.classList.remove('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:not(.p + .c_descendant ~ .d .e)) #descendant \] #parent_previous.classList.remove('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:not(.p + .c_descendant ~ .d .e)) #descendant \] #previous.classList.remove('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:not(.p + .c_descendant ~ .d .e)) #descendant \] #child_previous.classList.remove('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #parent_previous.classList.remove('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #previous.classList.remove('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.remove('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #previous.classList.remove('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:not(.p + .f_has_scope ~ .g)) \] #previous.classList.add('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:not(.p + .f_has_scope ~ .g)) \] #has_scope.classList.add('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:not(.p + .f_has_scope ~ .g)) \] insert/remove .f_has_scope before #direct_next) : (insertion) check #has_scope color]
+ expected: FAIL
+
+ [[ .blue:has(~ #indirect_next:not(.p + .f_has_scope ~ .g)) \] #direct_next.classList.add('f_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:not(.p + .f_descendant ~ .g)) #descendant \] #previous.classList.add('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:not(.p + .f_descendant ~ .g)) #descendant \] #has_scope.classList.add('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:not(.p + .f_descendant ~ .g)) #descendant \] #direct_next.classList.add('f_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .skyblue:has(~ #indirect_next:not(.p + .f_descendant ~ .g)) #descendant \] insert/remove .f_descendant before #direct_next) : (insertion) check #descendant color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:not(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #previous.classList.add('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:not(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #previous.classList.remove('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:not(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #has_scope.classList.add('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:not(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #direct_next.classList.add('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .lightblue:has(~ #indirect_next:not(.p + .f_indirect_next ~ .g)) ~ #indirect_next \] #direct_next.classList.remove('f_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:not(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #previous.classList.add('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:not(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #previous.classList.remove('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:not(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #has_scope.classList.add('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:not(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #direct_next.classList.add('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .darkblue:has(~ #indirect_next:not(.p + .f_indirect_next_child ~ .g)) ~ #indirect_next #indirect_next_child \] #direct_next.classList.remove('f_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellow:has(~ #indirect_next:not(.h_has_scope .i)) \] #parent.classList.add('h_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .ivory:has(~ #indirect_next:not(.h_descendant .i)) #descendant \] #parent.classList.add('h_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .greenyellow:has(~ #indirect_next:not(.h_indirect_next .i)) ~ #indirect_next \] #parent.classList.add('h_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .khaki:has(~ #indirect_next:not(.h_indirect_next_child .i)) ~ #indirect_next #indirect_next_child \] #parent.classList.add('h_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .purple:has(~ #indirect_next:not(.p + .j_has_scope ~ .k .l)) \] #parent_previous.classList.add('j_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .purple:has(~ #indirect_next:not(.p + .j_has_scope ~ .k .l)) \] #parent_previous.classList.remove('j_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .violet:has(~ #indirect_next:not(.p + .j_descendant ~ .k .l)) #descendant \] #parent_previous.classList.add('j_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .violet:has(~ #indirect_next:not(.p + .j_descendant ~ .k .l)) #descendant \] #parent_previous.classList.remove('j_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .orchid:has(~ #indirect_next:not(.p + .j_indirect_next ~ .k .l)) ~ #indirect_next \] #parent_previous.classList.add('j_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .orchid:has(~ #indirect_next:not(.p + .j_indirect_next ~ .k .l)) ~ #indirect_next \] #parent_previous.classList.remove('j_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .plum:has(~ #indirect_next:not(.p + .j_indirect_next_child ~ .k .l)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.add('j_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .plum:has(~ #indirect_next:not(.p + .j_indirect_next_child ~ .k .l)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.remove('j_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .red:has(#descendant:not(.a_has_scope .b)) \] #parent.classList.add('a_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .red:has(#descendant:not(.a_has_scope .b)) \] #has_scope.classList.add('a_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .red:has(#descendant:not(.a_has_scope .b)) \] #child.classList.add('a_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orangered:has(#descendant:not(.a_descendant .b)) #descendant \] #parent.classList.add('a_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .orangered:has(#descendant:not(.a_descendant .b)) #descendant \] #has_scope.classList.add('a_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .orangered:has(#descendant:not(.a_descendant .b)) #descendant \] #child.classList.add('a_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .darkred:has(#descendant:not(.a_indirect_next .b)) ~ #indirect_next \] #parent.classList.add('a_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkred:has(#descendant:not(.a_indirect_next .b)) ~ #indirect_next \] #has_scope.classList.add('a_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkred:has(#descendant:not(.a_indirect_next .b)) ~ #indirect_next \] #child.classList.add('a_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .pink:has(#descendant:not(.a_indirect_next_child .b)) ~ #indirect_next #indirect_next_child \] #parent.classList.add('a_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .pink:has(#descendant:not(.a_indirect_next_child .b)) ~ #indirect_next #indirect_next_child \] #has_scope.classList.add('a_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .pink:has(#descendant:not(.a_indirect_next_child .b)) ~ #indirect_next #indirect_next_child \] #child.classList.add('a_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] #parent_previous.classList.add('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] #previous.classList.add('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] #child_previous.classList.add('c_has_scope') : check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] insert/remove .invalid before #child_previous) : (removal) check #has_scope color]
+ expected: FAIL
+
+ [[ .green:has(#descendant:not(.p + .c_has_scope ~ .d .e)) \] insert/remove .c_has_scope before #child_previous) : (insertion) check #has_scope color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:not(.p + .c_descendant ~ .d .e)) #descendant \] #parent_previous.classList.add('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:not(.p + .c_descendant ~ .d .e)) #descendant \] #previous.classList.add('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .lightgreen:has(#descendant:not(.p + .c_descendant ~ .d .e)) #descendant \] #child_previous.classList.add('c_descendant') : check #descendant color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #parent_previous.classList.add('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #previous.classList.add('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] #child_previous.classList.add('c_indirect_next') : check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] insert/remove .invalid before #child_previous) : (removal) check #indirect_next color]
+ expected: FAIL
+
+ [[ .darkgreen:has(#descendant:not(.p + .c_indirect_next ~ .d .e)) ~ #indirect_next \] insert/remove .c_indirect_next before #child_previous) : (insertion) check #indirect_next color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #parent_previous.classList.add('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #previous.classList.add('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] #child_previous.classList.add('c_indirect_next_child') : check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] insert/remove .invalid before #child_previous) : (removal) check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .yellowgreen:has(#descendant:not(.p + .c_indirect_next_child ~ .d .e)) ~ #indirect_next #indirect_next_child \] insert/remove .c_indirect_next_child before #child_previous) : (insertion) check #indirect_next_child color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:not(.m:not(.n) .o)) \] #parent.classList.add('m') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:not(.m:not(.n) .o)) \] #parent.classList.remove('n') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:not(.m:not(.n) .o)) \] #has_scope.classList.add('m') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:not(.m:not(.n) .o)) \] #has_scope.classList.remove('n') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:not(.m:not(.n) .o)) \] #child.classList.add('m') : check #has_scope color]
+ expected: FAIL
+
+ [[ .orange:has(#descendant:not(.m:not(.n) .o)) \] #child.classList.remove('n') : check #has_scope color]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/nth-child-of-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/nth-child-of-has.html.ini
new file mode 100644
index 0000000000..f9ae9a26de
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/nth-child-of-has.html.ini
@@ -0,0 +1,2 @@
+[nth-child-of-has.html]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/nth-last-child-of-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/nth-last-child-of-has.html.ini
new file mode 100644
index 0000000000..a07aa32610
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/nth-last-child-of-has.html.ini
@@ -0,0 +1,2 @@
+[nth-last-child-of-has.html]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html.ini b/testing/web-platform/meta/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html.ini
new file mode 100644
index 0000000000..10344da254
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/quirks-mode-stylesheet-dynamic-add-001.html.ini
@@ -0,0 +1,3 @@
+[quirks-mode-stylesheet-dynamic-add-001.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/selectorText-dynamic-001.html.ini b/testing/web-platform/meta/css/selectors/invalidation/selectorText-dynamic-001.html.ini
new file mode 100644
index 0000000000..e77dabe940
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/selectorText-dynamic-001.html.ini
@@ -0,0 +1,3 @@
+[selectorText-dynamic-001.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/sheet-going-away-001.html.ini b/testing/web-platform/meta/css/selectors/invalidation/sheet-going-away-001.html.ini
new file mode 100644
index 0000000000..be648b42fa
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/sheet-going-away-001.html.ini
@@ -0,0 +1,3 @@
+[sheet-going-away-001.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/sibling.html.ini b/testing/web-platform/meta/css/selectors/invalidation/sibling.html.ini
new file mode 100644
index 0000000000..8956fdaf4e
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/sibling.html.ini
@@ -0,0 +1,3 @@
+[sibling.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
diff --git a/testing/web-platform/meta/css/selectors/invalidation/subject-has-invalidation-with-display-none-anchor-element.html.ini b/testing/web-platform/meta/css/selectors/invalidation/subject-has-invalidation-with-display-none-anchor-element.html.ini
new file mode 100644
index 0000000000..f47f72f03b
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/subject-has-invalidation-with-display-none-anchor-element.html.ini
@@ -0,0 +1,5 @@
+[subject-has-invalidation-with-display-none-anchor-element.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [CSS Selectors Invalidation: subject :has() invalidation with display: none anchor element]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/target-pseudo-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/target-pseudo-in-has.html.ini
new file mode 100644
index 0000000000..627ee91278
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/target-pseudo-in-has.html.ini
@@ -0,0 +1,5 @@
+[target-pseudo-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [CSS Selectors Invalidation: :target pseudo-class in :has() argument]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..dd11bba71d
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/typed-child-indexed-pseudo-classes-in-has.html.ini
@@ -0,0 +1,146 @@
+[typed-child-indexed-pseudo-classes-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [Prepend #div1.green: #only_of_type]
+ expected: FAIL
+
+ [Prepend #div1.green: #first_of_type]
+ expected: FAIL
+
+ [Prepend #div1.green: #last_of_type]
+ expected: FAIL
+
+ [Prepend #div1.green: #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend span (2): #only_of_type]
+ expected: FAIL
+
+ [Prepend span (2): #first_of_type]
+ expected: FAIL
+
+ [Prepend span (2): #last_of_type]
+ expected: FAIL
+
+ [Prepend span (2): #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #first_of_type]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #last_of_type]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend #div2.yellow: #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend span (3): #first_of_type]
+ expected: FAIL
+
+ [Prepend span (3): #last_of_type]
+ expected: FAIL
+
+ [Prepend span (3): #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend span (3): #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend #div3.orange: #first_of_type]
+ expected: FAIL
+
+ [Prepend #div3.orange: #last_of_type]
+ expected: FAIL
+
+ [Prepend #div3.orange: #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend #div3.orange: #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend #div3.orange: #nth_of_type_3n]
+ expected: FAIL
+
+ [Prepend span (4): #first_of_type]
+ expected: FAIL
+
+ [Prepend span (4): #last_of_type]
+ expected: FAIL
+
+ [Prepend span (4): #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend span (4): #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend span (4): #nth_of_type_3n]
+ expected: FAIL
+
+ [Prepend #div4: #last_of_type]
+ expected: FAIL
+
+ [Prepend #div4: #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend #div4: #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend #div4: #nth_of_type_3n]
+ expected: FAIL
+
+ [Prepend span (5): #last_of_type]
+ expected: FAIL
+
+ [Prepend span (5): #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend span (5): #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend span (5): #nth_of_type_3n]
+ expected: FAIL
+
+ [Prepend #div5: #last_of_type]
+ expected: FAIL
+
+ [Prepend #div5: #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend #div5: #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend #div5: #nth_of_type_3n]
+ expected: FAIL
+
+ [Prepend span (6): #last_of_type]
+ expected: FAIL
+
+ [Prepend span (6): #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Prepend span (6): #nth_of_type_3n_2]
+ expected: FAIL
+
+ [Prepend span (6): #nth_of_type_3n]
+ expected: FAIL
+
+ [Remove #div1: #last_of_type]
+ expected: FAIL
+
+ [Remove #div1: #nth_of_type_3n_1]
+ expected: FAIL
+
+ [Remove #div1: #nth_of_type_3n]
+ expected: FAIL
+
+ [Remove #div2: #last_of_type]
+ expected: FAIL
+
+ [Remove #div2: #nth_of_type_3n]
+ expected: FAIL
+
+ [Remove #div4: #only_of_type]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/user-action-pseudo-classes-in-has.html.ini b/testing/web-platform/meta/css/selectors/invalidation/user-action-pseudo-classes-in-has.html.ini
new file mode 100644
index 0000000000..7620ef4646
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/user-action-pseudo-classes-in-has.html.ini
@@ -0,0 +1,5 @@
+[user-action-pseudo-classes-in-has.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]
+ [Invalidation with :focus, :focus-within, :focus-visible in :has()]
+ expected: FAIL
diff --git a/testing/web-platform/meta/css/selectors/invalidation/where.html.ini b/testing/web-platform/meta/css/selectors/invalidation/where.html.ini
new file mode 100644
index 0000000000..232f9d15bd
--- /dev/null
+++ b/testing/web-platform/meta/css/selectors/invalidation/where.html.ini
@@ -0,0 +1,3 @@
+[where.html]
+ expected:
+ if (os == "android") and fission: [OK, TIMEOUT]