Diff
Modified: trunk/LayoutTests/ChangeLog (269252 => 269253)
--- trunk/LayoutTests/ChangeLog 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/LayoutTests/ChangeLog 2020-11-02 18:53:36 UTC (rev 269253)
@@ -1,3 +1,20 @@
+2020-11-01 Darin Adler <[email protected]>
+
+ Start removing functions that implicitly use composed tree
+ https://bugs.webkit.org/show_bug.cgi?id=218424
+
+ Reviewed by Ryosuke Niwa.
+
+ * fast/dom/rangeContainsNode-expected.txt: Added.
+ * fast/dom/rangeContainsNode.html: Added.
+ * fast/dom/rangeContainsRange-expected.txt: Added.
+ * fast/dom/rangeContainsRange.html: Added.
+ * fast/dom/treeOrder-expected.txt: Added.
+ * fast/dom/treeOrder.html: Added.
+ These tests were formerly part of TestWebKitAPI, although treeOrder was named documentOrder.
+ Moving to internals-style tests at Ryosuke's suggestion since these are not something exposed
+ as API or even SPI.
+
2020-11-02 Martin Robinson <[email protected]>
[GLIB] REGRESSION(r269144) imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html is failing
Added: trunk/LayoutTests/fast/dom/rangeContainsNode-expected.txt (0 => 269253)
--- trunk/LayoutTests/fast/dom/rangeContainsNode-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/dom/rangeContainsNode-expected.txt 2020-11-02 18:53:36 UTC (rev 269253)
@@ -0,0 +1,22 @@
+Test the contains function that checks if a range contains a node.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS internals.rangeContainsNode(contentsRange(document), documentElement, 'ComposedTree') is true
+PASS internals.rangeContainsNode(contentsRange(document), body, 'ComposedTree') is true
+PASS internals.rangeContainsNode(contentsRange(documentElement), body, 'ComposedTree') is true
+PASS internals.rangeContainsNode(contentsRange(document), document, 'ComposedTree') is false
+PASS internals.rangeContainsNode(range(document, 0, document, 2), document, 'ComposedTree') is false
+PASS internals.rangeContainsNode(range(document, 0, documentElement, 0), body, 'ComposedTree') is false
+PASS internals.rangeContainsNode(range(document, 0, documentElement, 1), body, 'ComposedTree') is false
+PASS internals.rangeContainsNode(range(document, 0, body, 0), body, 'ComposedTree') is false
+PASS internals.rangeContainsNode(range(document, 0, body, 1), body, 'ComposedTree') is false
+PASS internals.rangeContainsNode(range(document, 0, documentElement, 2), body, 'ComposedTree') is true
+PASS internals.rangeContainsNode(contentsRange(document), a, 'ComposedTree') is false
+PASS internals.rangeContainsNode(contentsRange(body), f, 'ComposedTree') is false
+PASS internals.rangeContainsNode(contentsRange(body), h, 'ComposedTree') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/dom/rangeContainsNode.html (0 => 269253)
--- trunk/LayoutTests/fast/dom/rangeContainsNode.html (rev 0)
+++ trunk/LayoutTests/fast/dom/rangeContainsNode.html 2020-11-02 18:53:36 UTC (rev 269253)
@@ -0,0 +1,57 @@
+<html><head></head><body>
+<script src=""
+<script>
+
+description("Test the contains function that checks if a range contains a node.")
+
+function range(startContainer, startOffset, endContainer, endOffset)
+{
+ return new StaticRange({ startContainer: startContainer, startOffset: startOffset, endContainer: endContainer, endOffset: endOffset })
+}
+
+function contentsRange(node)
+{
+ return range(node, 0, node, node.childNodes.length)
+}
+
+let documentElement = document.documentElement;
+let body = document.body;
+
+shouldBeTrue("internals.rangeContainsNode(contentsRange(document), documentElement, 'ComposedTree')")
+shouldBeTrue("internals.rangeContainsNode(contentsRange(document), body, 'ComposedTree')");
+shouldBeTrue("internals.rangeContainsNode(contentsRange(documentElement), body, 'ComposedTree')");
+
+shouldBeFalse("internals.rangeContainsNode(contentsRange(document), document, 'ComposedTree')");
+shouldBeFalse("internals.rangeContainsNode(range(document, 0, document, 2), document, 'ComposedTree')");
+shouldBeFalse("internals.rangeContainsNode(range(document, 0, documentElement, 0), body, 'ComposedTree')");
+shouldBeFalse("internals.rangeContainsNode(range(document, 0, documentElement, 1), body, 'ComposedTree')");
+shouldBeFalse("internals.rangeContainsNode(range(document, 0, body, 0), body, 'ComposedTree')");
+shouldBeFalse("internals.rangeContainsNode(range(document, 0, body, 1), body, 'ComposedTree')");
+shouldBeTrue("internals.rangeContainsNode(range(document, 0, documentElement, 2), body, 'ComposedTree')");
+
+let a = document.createElement("div")
+shouldBeFalse("internals.rangeContainsNode(contentsRange(document), a, 'ComposedTree')")
+
+body.appendChild(a)
+
+let b = document.createElement("div")
+body.appendChild(b)
+
+let c = document.createElement("div")
+b.appendChild(c)
+
+let d = document.createElement("div")
+a.appendChild(d)
+
+let e = document.createElement("div")
+let f = document.createElement("div")
+e.appendChild(f)
+shouldBeFalse("internals.rangeContainsNode(contentsRange(body), f, 'ComposedTree')")
+
+let g = document.createElement("textarea");
+c.appendChild(g)
+let h = internals.ensureUserAgentShadowRoot(g).firstChild
+shouldBeTrue("internals.rangeContainsNode(contentsRange(body), h, 'ComposedTree')")
+
+</script>
+</body></html>
Added: trunk/LayoutTests/fast/dom/rangeContainsRange-expected.txt (0 => 269253)
--- trunk/LayoutTests/fast/dom/rangeContainsRange-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/dom/rangeContainsRange-expected.txt 2020-11-02 18:53:36 UTC (rev 269253)
@@ -0,0 +1,42 @@
+Test the contains function that checks if a range contains another range.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS internals.rangeContainsRange(contentsRange(document), contentsRange(document), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(documentElement), contentsRange(documentElement), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(body), contentsRange(body), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(document), contentsRange(documentElement), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(documentElement), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), contentsRange(body), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(body), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(documentElement), contentsRange(body), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(body), contentsRange(documentElement), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), contentsRange(documentElement), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(documentElement), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(documentElement), contentsRange(body), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(body), contentsRange(documentElement), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), collapsedRange(document, 0), 'ComposedTree') is true
+PASS internals.rangeContainsRange(collapsedRange(document, 0), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), collapsedRange(document, 1), 'ComposedTree') is true
+PASS internals.rangeContainsRange(collapsedRange(document, 1), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), collapsedRange(document, 2), 'ComposedTree') is false
+PASS internals.rangeContainsRange(collapsedRange(document, 2), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(range(document, 0, document, 2), contentsRange(document), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(document), range(document, 0, document, 2), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), range(document, 1, document, 2), 'ComposedTree') is false
+PASS internals.rangeContainsRange(range(document, 1, document, 2), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(range(document, 0, documentElement, 0), contentsRange(body), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(body), range(document, 0, documentElement, 0), 'ComposedTree') is false
+PASS internals.rangeContainsRange(range(document, 0, body, 0), collapsedRange(body, 0), 'ComposedTree') is true
+PASS internals.rangeContainsRange(collapsedRange(body, 0), range(document, 0, body, 0), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(document), contentsRange(a), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(a), contentsRange(document), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(body), contentsRange(f), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(f), contentsRange(body), 'ComposedTree') is false
+PASS internals.rangeContainsRange(contentsRange(body), contentsRange(h), 'ComposedTree') is true
+PASS internals.rangeContainsRange(contentsRange(h), contentsRange(body), 'ComposedTree') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/dom/rangeContainsRange.html (0 => 269253)
--- trunk/LayoutTests/fast/dom/rangeContainsRange.html (rev 0)
+++ trunk/LayoutTests/fast/dom/rangeContainsRange.html 2020-11-02 18:53:36 UTC (rev 269253)
@@ -0,0 +1,89 @@
+<html><head></head><body>
+<script src=""
+<script>
+
+description("Test the contains function that checks if a range contains another range.")
+
+function range(startContainer, startOffset, endContainer, endOffset)
+{
+ return new StaticRange({ startContainer: startContainer, startOffset: startOffset, endContainer: endContainer, endOffset: endOffset })
+}
+
+function collapsedRange(container, offset)
+{
+ return range(container, offset, container, offset)
+}
+
+function contentsRange(node)
+{
+ return range(node, 0, node, node.childNodes.length)
+}
+
+function shouldContainSelf(a)
+{
+ shouldBeTrue("internals.rangeContainsRange(" + a + ", " + a + ", 'ComposedTree')")
+}
+
+function shouldBeNested(a, b)
+{
+ shouldBeTrue("internals.rangeContainsRange(" + a + ", " + b + ", 'ComposedTree')")
+ shouldBeFalse("internals.rangeContainsRange(" + b + ", " + a + ", 'ComposedTree')")
+}
+
+function shouldNotContain(a, b)
+{
+ shouldBeFalse("internals.rangeContainsRange(" + a + ", " + b + ", 'ComposedTree')")
+ shouldBeFalse("internals.rangeContainsRange(" + b + ", " + a + ", 'ComposedTree')")
+}
+
+let documentElement = document.documentElement;
+let body = document.body;
+
+shouldContainSelf("contentsRange(document)")
+shouldContainSelf("contentsRange(documentElement)")
+shouldContainSelf("contentsRange(body)")
+
+shouldBeNested("contentsRange(document)", "contentsRange(documentElement)")
+shouldBeNested("contentsRange(document)", "contentsRange(body)")
+shouldBeNested("contentsRange(documentElement)", "contentsRange(body)")
+
+shouldBeNested("contentsRange(document)", "contentsRange(documentElement)")
+
+shouldBeNested("contentsRange(documentElement)", "contentsRange(body)")
+
+shouldBeNested("contentsRange(document)", "collapsedRange(document, 0)")
+shouldBeNested("contentsRange(document)", "collapsedRange(document, 1)")
+shouldNotContain("contentsRange(document)", "collapsedRange(document, 2)")
+
+shouldBeNested("range(document, 0, document, 2)", "contentsRange(document)")
+shouldNotContain("contentsRange(document)", "range(document, 1, document, 2)")
+
+shouldNotContain("range(document, 0, documentElement, 0)", "contentsRange(body)")
+shouldBeNested("range(document, 0, body, 0)", "collapsedRange(body, 0)")
+
+let a = document.createElement("div")
+shouldNotContain("contentsRange(document)", "contentsRange(a)")
+
+body.appendChild(a)
+
+let b = document.createElement("div")
+body.appendChild(b)
+
+let c = document.createElement("div")
+b.appendChild(c)
+
+let d = document.createElement("div")
+a.appendChild(d)
+
+let e = document.createElement("div")
+let f = document.createElement("div")
+e.appendChild(f)
+shouldNotContain("contentsRange(body)", "contentsRange(f)")
+
+let g = document.createElement("textarea");
+c.appendChild(g)
+let h = internals.ensureUserAgentShadowRoot(g).firstChild
+shouldBeNested("contentsRange(body)", "contentsRange(h)")
+
+</script>
+</body></html>
Added: trunk/LayoutTests/fast/dom/treeOrder-expected.txt (0 => 269253)
--- trunk/LayoutTests/fast/dom/treeOrder-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/dom/treeOrder-expected.txt 2020-11-02 18:53:36 UTC (rev 269253)
@@ -0,0 +1,59 @@
+Test the tree ordering.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS internals.treeOrder(document, document, 'ComposedTree') is "equivalent"
+PASS internals.treeOrder(body, body, 'ComposedTree') is "equivalent"
+PASS internals.treeOrder(document, body, 'ComposedTree') is "less"
+PASS internals.treeOrder(body, document, 'ComposedTree') is "greater"
+PASS internals.treeOrder(a, a, 'ComposedTree') is "equivalent"
+PASS internals.treeOrder(body, a, 'ComposedTree') is "unordered"
+PASS internals.treeOrder(a, body, 'ComposedTree') is "unordered"
+PASS internals.treeOrder(body, a, 'ComposedTree') is "less"
+PASS internals.treeOrder(a, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(a, a, 'ComposedTree') is "equivalent"
+PASS internals.treeOrder(body, b, 'ComposedTree') is "less"
+PASS internals.treeOrder(b, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(a, b, 'ComposedTree') is "less"
+PASS internals.treeOrder(b, a, 'ComposedTree') is "greater"
+PASS internals.treeOrder(body, c, 'ComposedTree') is "less"
+PASS internals.treeOrder(c, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(a, c, 'ComposedTree') is "less"
+PASS internals.treeOrder(c, a, 'ComposedTree') is "greater"
+PASS internals.treeOrder(b, c, 'ComposedTree') is "less"
+PASS internals.treeOrder(c, b, 'ComposedTree') is "greater"
+PASS internals.treeOrder(body, d, 'ComposedTree') is "less"
+PASS internals.treeOrder(d, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(body, d, 'ComposedTree') is "less"
+PASS internals.treeOrder(d, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(a, d, 'ComposedTree') is "less"
+PASS internals.treeOrder(d, a, 'ComposedTree') is "greater"
+PASS internals.treeOrder(d, b, 'ComposedTree') is "less"
+PASS internals.treeOrder(b, d, 'ComposedTree') is "greater"
+PASS internals.treeOrder(d, c, 'ComposedTree') is "less"
+PASS internals.treeOrder(c, d, 'ComposedTree') is "greater"
+PASS internals.treeOrder(a, d, 'ComposedTree') is "less"
+PASS internals.treeOrder(d, a, 'ComposedTree') is "greater"
+PASS internals.treeOrder(d, b, 'ComposedTree') is "less"
+PASS internals.treeOrder(b, d, 'ComposedTree') is "greater"
+PASS internals.treeOrder(d, c, 'ComposedTree') is "less"
+PASS internals.treeOrder(c, d, 'ComposedTree') is "greater"
+PASS internals.treeOrder(body, f, 'ComposedTree') is "unordered"
+PASS internals.treeOrder(f, body, 'ComposedTree') is "unordered"
+PASS internals.treeOrder(f, body, 'ComposedTree') is "unordered"
+PASS internals.treeOrder(body, f, 'ComposedTree') is "unordered"
+PASS internals.treeOrder(body, g, 'ComposedTree') is "less"
+PASS internals.treeOrder(g, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(body, h, 'ComposedTree') is "less"
+PASS internals.treeOrder(h, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(body, i, 'ComposedTree') is "less"
+PASS internals.treeOrder(i, body, 'ComposedTree') is "greater"
+PASS internals.treeOrder(i, d, 'ComposedTree') is "less"
+PASS internals.treeOrder(d, i, 'ComposedTree') is "greater"
+PASS internals.treeOrder(i, b, 'ComposedTree') is "less"
+PASS internals.treeOrder(b, i, 'ComposedTree') is "greater"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/dom/treeOrder.html (0 => 269253)
--- trunk/LayoutTests/fast/dom/treeOrder.html (rev 0)
+++ trunk/LayoutTests/fast/dom/treeOrder.html 2020-11-02 18:53:36 UTC (rev 269253)
@@ -0,0 +1,85 @@
+<html><body>
+<script src=""
+<script>
+
+description("Test the tree ordering.")
+
+function shouldBeBoth(a, b, forward, reversed)
+{
+ shouldBeEqualToString("internals.treeOrder(" + a + ", " + (b ? b : a) + ", 'ComposedTree')", forward)
+ if (a != b)
+ shouldBeEqualToString("internals.treeOrder(" + b + ", " + a + ", 'ComposedTree')", reversed)
+}
+
+function shouldBeEquivalent(a, b)
+{
+ shouldBeBoth(a, b, "equivalent", "equivalent")
+}
+
+function shouldBeLess(a, b)
+{
+ shouldBeBoth(a, b, "less", "greater")
+}
+
+function shouldBeUnordered(a, b)
+{
+ shouldBeBoth(a, b, "unordered", "unordered")
+}
+
+shouldBeEquivalent("document", "document")
+
+let body = document.body;
+
+shouldBeEquivalent("body", "body")
+shouldBeLess("document", "body")
+
+let a = document.createElement("div")
+shouldBeEquivalent("a", "a")
+shouldBeUnordered("body", "a")
+
+body.appendChild(a)
+shouldBeLess("body", "a")
+shouldBeEquivalent("a", "a")
+
+let b = document.createElement("div")
+body.appendChild(b)
+shouldBeLess("body", "b")
+shouldBeLess("a", "b")
+
+let c = document.createElement("div")
+b.appendChild(c)
+shouldBeLess("body", "c")
+shouldBeLess("a", "c")
+shouldBeLess("b", "c")
+
+let d = document.createElement("div")
+a.appendChild(d)
+shouldBeLess("body", "d")
+shouldBeLess("body", "d")
+shouldBeLess("a", "d")
+shouldBeLess("d", "b")
+shouldBeLess("d", "c")
+shouldBeLess("a", "d")
+shouldBeLess("d", "b")
+shouldBeLess("d", "c")
+
+let e = document.createElement("div")
+let f = document.createElement("div")
+e.appendChild(f)
+shouldBeUnordered("body", "f")
+shouldBeUnordered("f", "body")
+
+let g = document.createElement("textarea")
+c.appendChild(g)
+shouldBeLess("body", "g")
+
+let h = internals.ensureUserAgentShadowRoot(g).firstChild
+shouldBeLess("body", "h")
+
+let i = a.attachShadow({ mode: "closed" })
+shouldBeLess("body", "i")
+shouldBeLess("i", "d")
+shouldBeLess("i", "b")
+
+</script>
+</body></html>
Modified: trunk/Source/WebCore/ChangeLog (269252 => 269253)
--- trunk/Source/WebCore/ChangeLog 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/ChangeLog 2020-11-02 18:53:36 UTC (rev 269253)
@@ -1,3 +1,72 @@
+2020-11-01 Darin Adler <[email protected]>
+
+ Start removing functions that implicitly use composed tree
+ https://bugs.webkit.org/show_bug.cgi?id=218424
+
+ Reviewed by Ryosuke Niwa.
+
+ Tests: fast/dom/rangeContainsNode.html
+ fast/dom/rangeContainsRange.html
+ fast/dom/treeOrder.html
+
+ Ryosuke pointed out that most clients should not be using the composed tree, so this
+ is a step in work to make the use of the composed tree explicit. After that we can
+ more easily find and correct call sites where use of the composed tree is incorrect.
+
+ Likely that most or all cases of treeOrder<ComposedTree> can be changed to just
+ treeOrder and contains<ComposedTree> to just contains; will do those in follow-ups.
+
+ * Modules/highlight/Highlight.cpp:
+ (WebCore::repaintRange): Simplified code to use boundary points, and changed to use
+ treeOrder<ComposedTree>.
+
+ * dom/AbstractRange.h: Export makeSimpleRange so it can be used in Internals.
+ * dom/AbstractRange.idl: Export the class so it can be used in Internals.
+
+ * dom/Node.cpp:
+ (WebCore::parent<ShadowIncludingTree>): Added.
+ (WebCore::treeOrderForTesting): Added.
+ (WebCore::documentOrder): Deleted.
+ * dom/Node.h: Updated for the above.
+
+ * dom/RadioButtonGroups.cpp:
+ (WebCore::RadioButtonGroup::members const): Use treeOrder<ComposedTree>.
+
+ * dom/SimpleRange.cpp:
+ (WebCore::contains): Removed a couple contains functions that implicitly use
+ composed tree.
+ (WebCore::containsForTesting): Added.
+ * dom/SimpleRange.h: Updated for the above. Should also make contains<Tree> the
+ default and remove the <Tree> at all call sites, but it's safer to do that in a
+ separate patch after this is landed and builds on all platforms.
+
+ * editing/Editing.cpp:
+ (WebCore::isNodeVisiblyContainedWithin): Use contains<ComposedTree>.
+ * page/DragController.cpp:
+ (WebCore::DragController::draggableElement const): Ditto.
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::dispatchMouseEvent): Ditto. Note that this has a call to
+ isDescendantOf right next to it, which does not use the composed tree.
+
+ * page/Page.cpp:
+ (WebCore::Page::findTextMatches): Use treeOrder<ComposedTree>.
+ (WebCore::replaceRanges): Ditto.
+
+ * page/mac/ServicesOverlayController.mm:
+ (WebCore::ServicesOverlayController::findTelephoneNumberHighlightContainingSelectionHighlight):
+ Use contains<ComposedTree>.
+
+ * testing/Internals.cpp:
+ (WebCore::string): Added.
+ (WebCore::convertType): Added.
+ (WebCore::Internals::treeOrder): Added.
+ (WebCore::Internals::rangeContainsNode): Added.
+ (WebCore::Internals::rangeContainsRange): Added.
+ * testing/Internals.h: Updated for added functions above.
+ * testing/Internals.idl: Ditto. These functions were tested in a
+ TestWebKitAPI test, but we plan to move those types of tests to
+ internals-based tests instead.
+
2020-11-02 Martin Robinson <[email protected]>
[GLIB] REGRESSION(r269144) imported/w3c/web-platform-tests/css/cssom-view/scrollIntoView-scrollMargin.html is failing
Modified: trunk/Source/WebCore/Modules/highlight/Highlight.cpp (269252 => 269253)
--- trunk/Source/WebCore/Modules/highlight/Highlight.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/Modules/highlight/Highlight.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -55,27 +55,16 @@
set.add<IDLInterface<StaticRange>>(rangeData->range);
}
-static void repaintRange(const StaticRange& range)
+static void repaintRange(const SimpleRange& range)
{
- auto startNode = makeRefPtr(&range.startContainer());
- auto endNode = makeRefPtr(&range.endContainer());
- auto ordering = documentOrder(*startNode.get(), *endNode.get());
- if (is_eq(ordering)) {
- if (auto renderer = startNode->renderer())
+ // FIXME: Unclear precisely why we need to handle out of order cases here, but not unordered cases.
+ auto sortedRange = range;
+ if (is_gt(treeOrder<ComposedTree>(range.start, range.end)))
+ std::swap(sortedRange.start, sortedRange.end);
+ for (auto& node : intersectingNodes(sortedRange)) {
+ if (auto renderer = node.renderer())
renderer->repaint();
- return;
}
- if (is_gt(ordering)) {
- startNode = &range.endContainer();
- endNode = &range.startContainer();
- }
- auto simpleRange = makeSimpleRange(makeBoundaryPointBeforeNode(*startNode.get()), makeBoundaryPointAfterNode(*endNode.get()));
- if (simpleRange) {
- for (auto& node : intersectingNodes(simpleRange.value())) {
- if (auto renderer = node.renderer())
- renderer->repaint();
- }
- }
}
bool Highlight::removeFromSetLike(const StaticRange& range)
@@ -90,7 +79,6 @@
{
for (auto& data : m_rangesData)
repaintRange(data->range);
-
m_rangesData.clear();
}
@@ -100,7 +88,6 @@
return false;
repaintRange(range);
m_rangesData.append(HighlightRangeData::create(range));
-
return true;
}
Modified: trunk/Source/WebCore/dom/AbstractRange.h (269252 => 269253)
--- trunk/Source/WebCore/dom/AbstractRange.h 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/AbstractRange.h 2020-11-02 18:53:36 UTC (rev 269253)
@@ -47,7 +47,7 @@
virtual bool isLiveRange() const = 0;
};
-SimpleRange makeSimpleRange(const AbstractRange&);
+WEBCORE_EXPORT SimpleRange makeSimpleRange(const AbstractRange&);
SimpleRange makeSimpleRange(const Ref<AbstractRange>&);
Optional<SimpleRange> makeSimpleRange(const AbstractRange*);
Optional<SimpleRange> makeSimpleRange(const RefPtr<AbstractRange>&);
Modified: trunk/Source/WebCore/dom/AbstractRange.idl (269252 => 269253)
--- trunk/Source/WebCore/dom/AbstractRange.idl 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/AbstractRange.idl 2020-11-02 18:53:36 UTC (rev 269253)
@@ -29,6 +29,7 @@
[
CustomToJSObject,
+ ExportMacro=WEBCORE_EXPORT,
Exposed=Window,
] interface AbstractRange {
readonly attribute Node startContainer;
Modified: trunk/Source/WebCore/dom/Node.cpp (269252 => 269253)
--- trunk/Source/WebCore/dom/Node.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/Node.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -2627,6 +2627,11 @@
return node.parentNode();
}
+template<> ContainerNode* parent<ShadowIncludingTree>(const Node& node)
+{
+ return node.parentOrShadowHostNode();
+}
+
template<> ContainerNode* parent<ComposedTree>(const Node& node)
{
return node.parentInComposedTree();
@@ -2720,11 +2725,21 @@
}
template PartialOrdering treeOrder<Tree>(const Node&, const Node&);
+template PartialOrdering treeOrder<ShadowIncludingTree>(const Node&, const Node&);
template PartialOrdering treeOrder<ComposedTree>(const Node&, const Node&);
-PartialOrdering documentOrder(const Node& a, const Node& b)
+PartialOrdering treeOrderForTesting(TreeType type, const Node& a, const Node& b)
{
- return treeOrder<ComposedTree>(a, b);
+ switch (type) {
+ case Tree:
+ return treeOrder<Tree>(a, b);
+ case ShadowIncludingTree:
+ return treeOrder<ShadowIncludingTree>(a, b);
+ case ComposedTree:
+ return treeOrder<ComposedTree>(a, b);
+ }
+ ASSERT_NOT_REACHED();
+ return PartialOrdering::unordered;
}
TextStream& operator<<(TextStream& ts, const Node& node)
Modified: trunk/Source/WebCore/dom/Node.h (269252 => 269253)
--- trunk/Source/WebCore/dom/Node.h 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/Node.h 2020-11-02 18:53:36 UTC (rev 269253)
@@ -759,8 +759,7 @@
template<TreeType = Tree> ContainerNode* parent(const Node&);
template<TreeType = Tree> PartialOrdering treeOrder(const Node&, const Node&);
-// FIXME: Dprecated because this silently defaults to ComposedTree. Use treeOrder instead.
-WEBCORE_EXPORT PartialOrdering documentOrder(const Node&, const Node&);
+WEBCORE_EXPORT PartialOrdering treeOrderForTesting(TreeType, const Node&, const Node&);
#if ASSERT_ENABLED
Modified: trunk/Source/WebCore/dom/RadioButtonGroups.cpp (269252 => 269253)
--- trunk/Source/WebCore/dom/RadioButtonGroups.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/RadioButtonGroups.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -63,7 +63,7 @@
for (auto& member : m_members)
sortedMembers.append(member);
std::sort(sortedMembers.begin(), sortedMembers.end(), [](auto& a, auto& b) {
- return is_lt(documentOrder(a, b));
+ return is_lt(treeOrder<ComposedTree>(a, b));
});
return sortedMembers;
}
Modified: trunk/Source/WebCore/dom/SimpleRange.cpp (269252 => 269253)
--- trunk/Source/WebCore/dom/SimpleRange.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/SimpleRange.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -263,10 +263,20 @@
}
template bool contains<Tree>(const SimpleRange&, const SimpleRange&);
+template bool contains<ComposedTree>(const SimpleRange&, const SimpleRange&);
-bool contains(const SimpleRange& outerRange, const SimpleRange& innerRange)
+bool containsForTesting(TreeType type, const SimpleRange& outerRange, const SimpleRange& innerRange)
{
- return contains<ComposedTree>(outerRange, innerRange);
+ switch (type) {
+ case Tree:
+ return contains<Tree>(outerRange, innerRange);
+ case ShadowIncludingTree:
+ return contains<ShadowIncludingTree>(outerRange, innerRange);
+ case ComposedTree:
+ return contains<ComposedTree>(outerRange, innerRange);
+ }
+ ASSERT_NOT_REACHED();
+ return false;
}
template<TreeType treeType> bool intersects(const SimpleRange& a, const SimpleRange& b)
@@ -308,10 +318,20 @@
}
template bool contains<Tree>(const SimpleRange&, const Node&);
+template bool contains<ComposedTree>(const SimpleRange&, const Node&);
-bool contains(const SimpleRange& range, const Node& node)
+bool containsForTesting(TreeType type, const SimpleRange& range, const Node& node)
{
- return contains<ComposedTree>(range, node);
+ switch (type) {
+ case Tree:
+ return contains<Tree>(range, node);
+ case ShadowIncludingTree:
+ return contains<ShadowIncludingTree>(range, node);
+ case ComposedTree:
+ return contains<ComposedTree>(range, node);
+ }
+ ASSERT_NOT_REACHED();
+ return false;
}
template<TreeType treeType> bool contains(const Node& outer, const Node& inner);
Modified: trunk/Source/WebCore/dom/SimpleRange.h (269252 => 269253)
--- trunk/Source/WebCore/dom/SimpleRange.h 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/dom/SimpleRange.h 2020-11-02 18:53:36 UTC (rev 269253)
@@ -68,6 +68,9 @@
template<TreeType> bool contains(const SimpleRange& outerRange, const SimpleRange& innerRange);
template<TreeType> bool contains(const SimpleRange&, const Node&);
+WEBCORE_EXPORT bool containsForTesting(TreeType, const SimpleRange& outerRange, const SimpleRange& innerRange);
+WEBCORE_EXPORT bool containsForTesting(TreeType, const SimpleRange&, const Node&);
+
template<TreeType> bool intersects(const SimpleRange&, const SimpleRange&);
template<TreeType> bool intersects(const SimpleRange&, const Node&);
@@ -84,7 +87,6 @@
// FIXME: Start of functions that are deprecated since they silently default to ComposedTree.
WEBCORE_EXPORT RefPtr<Node> commonInclusiveAncestor(const SimpleRange&);
-WEBCORE_EXPORT bool contains(const SimpleRange& outerRange, const SimpleRange& innerRange);
template<typename TreeType> bool intersects(const SimpleRange&, const SimpleRange&);
WEBCORE_EXPORT bool intersects(const SimpleRange&, const SimpleRange&);
WEBCORE_EXPORT bool intersects(const SimpleRange&, const Node&);
@@ -91,7 +93,6 @@
WEBCORE_EXPORT SimpleRange unionRange(const SimpleRange&, const SimpleRange&);
WEBCORE_EXPORT Optional<SimpleRange> intersection(const Optional<SimpleRange>&, const Optional<SimpleRange>&);
-WEBCORE_EXPORT bool contains(const SimpleRange&, const Node&);
template<typename TreeType> bool intersects(const SimpleRange&, const Node&);
WEBCORE_EXPORT bool intersects(const SimpleRange&, const Node&);
Modified: trunk/Source/WebCore/editing/Editing.cpp (269252 => 269253)
--- trunk/Source/WebCore/editing/Editing.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/editing/Editing.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -1124,7 +1124,7 @@
// Call this function to determine whether a node is visibly fit inside selectedRange
bool isNodeVisiblyContainedWithin(Node& node, const SimpleRange& range)
{
- if (contains(range, node))
+ if (contains<ComposedTree>(range, node))
return true;
auto startPosition = makeDeprecatedLegacyPosition(range.start);
Modified: trunk/Source/WebCore/page/DragController.cpp (269252 => 269253)
--- trunk/Source/WebCore/page/DragController.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/page/DragController.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -781,7 +781,7 @@
auto& selection = sourceFrame->selection().selection();
bool isSingleAttachmentSelection = selection.start() == Position(attachment.get(), Position::PositionIsBeforeAnchor) && selection.end() == Position(attachment.get(), Position::PositionIsAfterAnchor);
auto selectedRange = selection.firstRange();
- if (isSingleAttachmentSelection || !selectedRange || !contains(*selectedRange, *attachment)) {
+ if (isSingleAttachmentSelection || !selectedRange || !contains<ComposedTree>(*selectedRange, *attachment)) {
state.type = DragSourceAction::Attachment;
return attachment.get();
}
Modified: trunk/Source/WebCore/page/EventHandler.cpp (269252 => 269253)
--- trunk/Source/WebCore/page/EventHandler.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/page/EventHandler.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -2738,7 +2738,7 @@
// will set a selection inside it, which will also set the focused element.
if (element && m_frame.selection().isRange()) {
if (auto range = m_frame.selection().selection().toNormalizedRange()) {
- if (contains(*range, *element) && element->isDescendantOf(m_frame.document()->focusedElement()))
+ if (contains<ComposedTree>(*range, *element) && element->isDescendantOf(m_frame.document()->focusedElement()))
return true;
}
}
Modified: trunk/Source/WebCore/page/Page.cpp (269252 => 269253)
--- trunk/Source/WebCore/page/Page.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/page/Page.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -736,7 +736,7 @@
if (options.contains(Backwards)) {
for (size_t i = result.ranges.size(); i > 0; --i) {
// FIXME: Seems like this should be is_gteq to correctly handle the same string found twice in a row.
- if (is_gt(documentOrder(selectedRange.start, result.ranges[i - 1].end))) {
+ if (is_gt(treeOrder<ComposedTree>(selectedRange.start, result.ranges[i - 1].end))) {
result.indexForSelection = i - 1;
break;
}
@@ -744,7 +744,7 @@
} else {
for (size_t i = 0, size = result.ranges.size(); i < size; ++i) {
// FIXME: Seems like this should be is_lteq to correctly handle the same string found twice in a row.
- if (is_lt(documentOrder(selectedRange.end, result.ranges[i].start))) {
+ if (is_lt(treeOrder<ComposedTree>(selectedRange.end, result.ranges[i].start))) {
result.indexForSelection = i;
break;
}
@@ -861,8 +861,8 @@
return false;
if (firstFrame == secondFrame) {
- // Use documentOrder instead of Node::compareDocumentPosition because some editing roots are inside shadow roots.
- return is_gt(documentOrder(*firstNode, *secondNode));
+ // Must not use Node::compareDocumentPosition here because some editing roots are inside shadow roots.
+ return is_gt(treeOrder<ComposedTree>(*firstNode, *secondNode));
}
return frameToTraversalIndexMap.get(firstFrame) > frameToTraversalIndexMap.get(secondFrame);
Modified: trunk/Source/WebCore/page/mac/ServicesOverlayController.mm (269252 => 269253)
--- trunk/Source/WebCore/page/mac/ServicesOverlayController.mm 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/page/mac/ServicesOverlayController.mm 2020-11-02 18:53:36 UTC (rev 269253)
@@ -630,7 +630,7 @@
return nullptr;
for (auto& highlight : m_potentialHighlights) {
- if (highlight->type() == Highlight::TelephoneNumberType && contains(highlight->range(), *selectionRange))
+ if (highlight->type() == Highlight::TelephoneNumberType && contains<ComposedTree>(highlight->range(), *selectionRange))
return highlight.get();
}
Modified: trunk/Source/WebCore/testing/Internals.cpp (269252 => 269253)
--- trunk/Source/WebCore/testing/Internals.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/testing/Internals.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -6001,5 +6001,44 @@
}
#endif
+constexpr ASCIILiteral string(PartialOrdering ordering)
+{
+ if (is_lt(ordering))
+ return "less"_s;
+ if (is_gt(ordering))
+ return "greater"_s;
+ if (is_eq(ordering))
+ return "equivalent"_s;
+ return "unordered"_s;
+}
+constexpr TreeType convertType(Internals::TreeType type)
+{
+ switch (type) {
+ case Internals::Tree:
+ return Tree;
+ case Internals::ShadowIncludingTree:
+ return ShadowIncludingTree;
+ case Internals::ComposedTree:
+ return ComposedTree;
+ }
+ ASSERT_NOT_REACHED();
+ return Tree;
+}
+
+String Internals::treeOrder(Node& a, Node& b, TreeType type)
+{
+ return string(treeOrderForTesting(convertType(type), a, b));
+}
+
+bool Internals::rangeContainsNode(const AbstractRange& range, Node& node, TreeType type)
+{
+ return containsForTesting(convertType(type), makeSimpleRange(range), node);
+}
+
+bool Internals::rangeContainsRange(const AbstractRange& outerRange, const AbstractRange& innerRange, TreeType type)
+{
+ return containsForTesting(convertType(type), makeSimpleRange(outerRange), makeSimpleRange(innerRange));
+}
+
} // namespace WebCore
Modified: trunk/Source/WebCore/testing/Internals.h (269252 => 269253)
--- trunk/Source/WebCore/testing/Internals.h 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/testing/Internals.h 2020-11-02 18:53:36 UTC (rev 269253)
@@ -47,6 +47,7 @@
namespace WebCore {
+class AbstractRange;
class AnimationTimeline;
class AudioContext;
class AudioTrack;
@@ -1063,6 +1064,11 @@
ExceptionOr<void> sendMediaSessionAction(MediaSession&, const MediaSessionActionDetails&);
#endif
+ enum TreeType : uint8_t { Tree, ShadowIncludingTree, ComposedTree };
+ String treeOrder(Node&, Node&, TreeType);
+ bool rangeContainsNode(const AbstractRange&, Node&, TreeType);
+ bool rangeContainsRange(const AbstractRange&, const AbstractRange&, TreeType);
+
private:
explicit Internals(Document&);
Document* contextDocument() const;
Modified: trunk/Source/WebCore/testing/Internals.idl (269252 => 269253)
--- trunk/Source/WebCore/testing/Internals.idl 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebCore/testing/Internals.idl 2020-11-02 18:53:36 UTC (rev 269253)
@@ -93,6 +93,12 @@
"XXXL"
};
+enum TreeType {
+ "Tree",
+ "ShadowIncludingTree",
+ "ComposedTree"
+};
+
[
ExportMacro=WEBCORE_TESTSUPPORT_EXPORT,
Conditional=VIDEO,
@@ -958,4 +964,8 @@
[Conditional=MEDIA_SESSION, MayThrowException] double currentMediaSessionPosition(MediaSession session);
[Conditional=MEDIA_SESSION, MayThrowException] undefined sendMediaSessionAction(MediaSession session, MediaSessionActionDetails actionDetails);
+
+ DOMString treeOrder(Node a, Node b, optional TreeType tree = "Tree");
+ boolean rangeContainsNode(AbstractRange range, Node node, optional TreeType tree = "Tree");
+ boolean rangeContainsRange(AbstractRange outerRange, AbstractRange innerRange, optional TreeType tree = "Tree");
};
Modified: trunk/Source/WebKit/ChangeLog (269252 => 269253)
--- trunk/Source/WebKit/ChangeLog 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebKit/ChangeLog 2020-11-02 18:53:36 UTC (rev 269253)
@@ -1,3 +1,13 @@
+2020-11-01 Darin Adler <[email protected]>
+
+ Start removing functions that implicitly use composed tree
+ https://bugs.webkit.org/show_bug.cgi?id=218424
+
+ Reviewed by Ryosuke Niwa.
+
+ * WebProcess/WebPage/glib/WebPageGLib.cpp:
+ (WebKit::WebPage::getPlatformEditorState const): Use contains<ComposedTree>.
+
2020-11-02 David Kilzer <[email protected]>
Fix link error with WebKit.framework
Modified: trunk/Source/WebKit/WebProcess/WebPage/glib/WebPageGLib.cpp (269252 => 269253)
--- trunk/Source/WebKit/WebProcess/WebPage/glib/WebPageGLib.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Source/WebKit/WebProcess/WebPage/glib/WebPageGLib.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -109,7 +109,7 @@
auto surroundingStart = startOfEditableContent(selectionStart);
auto surroundingRange = makeSimpleRange(surroundingStart, endOfEditableContent(selectionStart));
auto compositionRange = frame.editor().compositionRange();
- if (surroundingRange && compositionRange && contains(*surroundingRange, *compositionRange)) {
+ if (surroundingRange && compositionRange && contains<ComposedTree>(*surroundingRange, *compositionRange)) {
auto beforeText = plainText({ surroundingRange->start, compositionRange->start });
postLayoutData.surroundingContext = beforeText + plainText({ compositionRange->end, surroundingRange->end });
postLayoutData.surroundingContextCursorPosition = beforeText.length();
Modified: trunk/Tools/ChangeLog (269252 => 269253)
--- trunk/Tools/ChangeLog 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Tools/ChangeLog 2020-11-02 18:53:36 UTC (rev 269253)
@@ -1,3 +1,14 @@
+2020-11-01 Darin Adler <[email protected]>
+
+ Start removing functions that implicitly use composed tree
+ https://bugs.webkit.org/show_bug.cgi?id=218424
+
+ Reviewed by Ryosuke Niwa.
+
+ * TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp: Moved the tests of documentOrder
+ for two nodes and contains for range/range or range/node into internals-based tests
+ in the LayoutTests directory. Eventually we'll move the rest of these tests, too.
+
2020-11-02 Angelos Oikonomopoulos <[email protected]>
Don't fail the build on S3 upload failure
Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp (269252 => 269253)
--- trunk/Tools/TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp 2020-11-02 18:35:19 UTC (rev 269252)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/DocumentOrder.cpp 2020-11-02 18:53:36 UTC (rev 269253)
@@ -44,10 +44,6 @@
#define EXPECT_LESS(a, b) EXPECT_BOTH(a, b, "less", "greater")
#define EXPECT_UNORDERED(a, b) EXPECT_BOTH(a, b, "unordered", "unordered")
-#define EXPECT_CONTAINS_SELF(a) EXPECT_TRUE(contains(a, a))
-#define EXPECT_NESTED(a, b) do { EXPECT_TRUE(contains(a, b)); EXPECT_FALSE(contains(b, a)); } while (0)
-#define EXPECT_NOT_CONTAINED(a, b) do { EXPECT_FALSE(contains(a, b)); EXPECT_FALSE(contains(b, a)); } while (0)
-
#define EXPECT_INTERSECTS_SELF(a) EXPECT_TRUE(intersects(a, a))
#define EXPECT_INTERSECTS_BOTH_WAYS(a, b) do { EXPECT_TRUE(intersects(a, b)); EXPECT_TRUE(intersects(b, a)); } while (0)
#define EXPECT_NOT_INTERSECTING_BOTH_WAYS(a, b) do { EXPECT_FALSE(intersects(a, b)); EXPECT_FALSE(intersects(b, a)); } while (0)
@@ -93,77 +89,6 @@
return ordering;
}
-TEST(DocumentOrder, Node)
-{
- HTMLNames::init();
-
- auto document = createDocument();
- auto& body = *document->body();
-
- EXPECT_EQUIVALENT(document, document);
-
- EXPECT_EQUIVALENT(body, body);
- EXPECT_LESS(document, body);
- EXPECT_LESS(document, body);
-
- auto a = HTMLDivElement::create(document);
- EXPECT_EQUIVALENT(a, a);
- EXPECT_UNORDERED(body, a);
- EXPECT_UNORDERED(a, body);
-
- body.appendChild(a);
- EXPECT_LESS(body, a);
- EXPECT_LESS(body, a);
- EXPECT_EQUIVALENT(a, a);
-
- auto b = HTMLDivElement::create(document);
- body.appendChild(b);
- EXPECT_LESS(body, b);
- EXPECT_LESS(body, b);
- EXPECT_LESS(a, b);
- EXPECT_LESS(a, b);
-
- auto c = HTMLDivElement::create(document);
- b->appendChild(c);
- EXPECT_LESS(body, c);
- EXPECT_LESS(body, c);
- EXPECT_LESS(a, c);
- EXPECT_LESS(b, c);
- EXPECT_LESS(a, c);
- EXPECT_LESS(b, c);
-
- auto d = HTMLDivElement::create(document);
- a->appendChild(d);
- EXPECT_LESS(body, d);
- EXPECT_LESS(body, d);
- EXPECT_LESS(a, d);
- EXPECT_LESS(d, b);
- EXPECT_LESS(d, c);
- EXPECT_LESS(a, d);
- EXPECT_LESS(d, b);
- EXPECT_LESS(d, c);
-
- auto e = HTMLDivElement::create(document);
- auto f = HTMLDivElement::create(document);
- e->appendChild(f);
- EXPECT_UNORDERED(body, f);
- EXPECT_UNORDERED(f, body);
-
- auto g = HTMLTextAreaElement::create(document);
- c->appendChild(g);
- EXPECT_LESS(body, g);
-
- auto& h = *g->innerTextElement();
- EXPECT_LESS(body, h);
-
- auto& i = a->attachShadow({ ShadowRootMode::Closed }).releaseReturnValue();
- EXPECT_LESS(body, i);
- EXPECT_LESS(i, d);
- EXPECT_LESS(i, b);
-
- // FIXME: Add tests that cover slots and assignment.
-}
-
TEST(DocumentOrder, BoundaryPointOffsetZero)
{
auto document = createDocument();
@@ -535,61 +460,6 @@
#endif
-TEST(DocumentOrder, RangeContainsRange)
-{
- auto document = createDocument();
- auto& documentElement = *document->documentElement();
- auto& body = *document->body();
-
- EXPECT_CONTAINS_SELF(makeRangeSelectingNodeContents(document));
- EXPECT_CONTAINS_SELF(makeRangeSelectingNodeContents(documentElement));
- EXPECT_CONTAINS_SELF(makeRangeSelectingNodeContents(body));
-
- EXPECT_NESTED(makeRangeSelectingNodeContents(document), makeRangeSelectingNodeContents(documentElement));
- EXPECT_NESTED(makeRangeSelectingNodeContents(document), makeRangeSelectingNodeContents(body));
- EXPECT_NESTED(makeRangeSelectingNodeContents(documentElement), makeRangeSelectingNodeContents(body));
-
- EXPECT_NESTED(makeRangeSelectingNodeContents(document), makeRangeSelectingNodeContents(documentElement));
-
- EXPECT_NESTED(makeRangeSelectingNodeContents(documentElement), makeRangeSelectingNodeContents(body));
-
- EXPECT_NESTED(makeRangeSelectingNodeContents(document), makeSimpleRange(makeBoundaryPoint(document, 0)));
- EXPECT_NESTED(makeRangeSelectingNodeContents(document), makeSimpleRange(makeBoundaryPoint(document, 1)));
- EXPECT_NOT_CONTAINED(makeRangeSelectingNodeContents(document), makeSimpleRange(makeBoundaryPoint(document, 2)));
-
- EXPECT_NESTED(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(document, 2)), makeRangeSelectingNodeContents(document));
- EXPECT_NOT_CONTAINED(makeRangeSelectingNodeContents(document), makeSimpleRange(makeBoundaryPoint(document, 1), makeBoundaryPoint(document, 2)));
-
- EXPECT_NOT_CONTAINED(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(documentElement, 0)), makeRangeSelectingNodeContents(body));
- EXPECT_NESTED(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(body, 0)), makeSimpleRange(makeBoundaryPoint(body, 0)));
-
- auto a = HTMLDivElement::create(document);
- EXPECT_NOT_CONTAINED(makeRangeSelectingNodeContents(document), makeRangeSelectingNodeContents(a));
-
- body.appendChild(a);
-
- auto b = HTMLDivElement::create(document);
- body.appendChild(b);
-
- auto c = HTMLDivElement::create(document);
- b->appendChild(c);
-
- auto d = HTMLDivElement::create(document);
- a->appendChild(d);
-
- auto e = HTMLDivElement::create(document);
- auto f = HTMLDivElement::create(document);
- e->appendChild(f);
- EXPECT_NOT_CONTAINED(makeRangeSelectingNodeContents(body), makeRangeSelectingNodeContents(f));
-
- auto g = HTMLTextAreaElement::create(document);
- auto& h = *g->innerTextElement();
- c->appendChild(g);
- EXPECT_NESTED(makeRangeSelectingNodeContents(body), makeRangeSelectingNodeContents(h));
-
- // FIXME: Add tests that cover shadow trees.
-}
-
TEST(DocumentOrder, RangeIntersectsRange)
{
auto document = createDocument();
@@ -645,50 +515,6 @@
// FIXME: Add tests that cover shadow trees.
}
-TEST(DocumentOrder, RangeContainsNode)
-{
- auto document = createDocument();
- auto& documentElement = *document->documentElement();
- auto& body = *document->body();
-
- EXPECT_TRUE(contains(makeRangeSelectingNodeContents(document), documentElement));
- EXPECT_TRUE(contains(makeRangeSelectingNodeContents(document), body));
- EXPECT_TRUE(contains(makeRangeSelectingNodeContents(documentElement), body));
-
- EXPECT_FALSE(contains(makeRangeSelectingNodeContents(document), document));
- EXPECT_FALSE(contains(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(document, 2)), document));
- EXPECT_FALSE(contains(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(documentElement, 0)), body));
- EXPECT_FALSE(contains(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(body, 0)), body));
- EXPECT_FALSE(contains(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(body, 1)), body));
- EXPECT_TRUE(contains(makeSimpleRange(makeBoundaryPoint(document, 0), makeBoundaryPoint(documentElement, 1)), body));
-
- auto a = HTMLDivElement::create(document);
- EXPECT_FALSE(contains(makeRangeSelectingNodeContents(document), a));
-
- body.appendChild(a);
-
- auto b = HTMLDivElement::create(document);
- body.appendChild(b);
-
- auto c = HTMLDivElement::create(document);
- b->appendChild(c);
-
- auto d = HTMLDivElement::create(document);
- a->appendChild(d);
-
- auto e = HTMLDivElement::create(document);
- auto f = HTMLDivElement::create(document);
- e->appendChild(f);
- EXPECT_FALSE(contains(makeRangeSelectingNodeContents(body), f));
-
- auto g = HTMLTextAreaElement::create(document);
- auto& h = *g->innerTextElement();
- c->appendChild(g);
- EXPECT_TRUE(contains(makeRangeSelectingNodeContents(body), h));
-
- // FIXME: Add tests that cover shadow trees.
-}
-
TEST(DocumentOrder, RangeIntersectsNode)
{
auto document = createDocument();