Consider implementing Document.scrollingElement
authorweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 May 2015 00:59:01 +0000 (00:59 +0000)
committerweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 May 2015 00:59:01 +0000 (00:59 +0000)
<rdar://problem/20845213>
https://bugs.webkit.org/show_bug.cgi?id=143609

Reviewed by Simon Fraser.

Source/WebCore:

Add the non-compliant implementation of Document.scrollingElement that the spec,
found at http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement,
says we should have while we have non-compliant implementations of Element.scrollTop
and Element.scrollLeft (fixing that is tracked by https://bugs.webkit.org/show_bug.cgi?id=106133).

Tests: fast/dom/Document/scrollingElement-quirks-mode.html
       fast/dom/Document/scrollingElement-standards-mode.html

* dom/Document.cpp:
(WebCore::Document::scrollingElement):
* dom/Document.h:
* dom/Document.idl:

LayoutTests:

* fast/dom/Document/scrollingElement-quirks-mode-expected.txt: Added.
* fast/dom/Document/scrollingElement-quirks-mode.html: Added.
* fast/dom/Document/scrollingElement-standards-mode-expected.txt: Added.
* fast/dom/Document/scrollingElement-standards-mode.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183967 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/Document/scrollingElement-quirks-mode-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/Document/scrollingElement-quirks-mode.html [new file with mode: 0644]
LayoutTests/fast/dom/Document/scrollingElement-standards-mode-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/Document/scrollingElement-standards-mode.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Document.h
Source/WebCore/dom/Document.idl

index 7d73c34b2c46d99c87464b3c73327c779413aced..74b1661666468904b488d89e75caeaa2eeda4b76 100644 (file)
@@ -1,3 +1,16 @@
+2015-05-07  Sam Weinig  <sam@webkit.org>
+
+        Consider implementing Document.scrollingElement
+        <rdar://problem/20845213>
+        https://bugs.webkit.org/show_bug.cgi?id=143609
+
+        Reviewed by Simon Fraser.
+
+        * fast/dom/Document/scrollingElement-quirks-mode-expected.txt: Added.
+        * fast/dom/Document/scrollingElement-quirks-mode.html: Added.
+        * fast/dom/Document/scrollingElement-standards-mode-expected.txt: Added.
+        * fast/dom/Document/scrollingElement-standards-mode.html: Added.
+
 2015-05-07  Said Abou-Hallawa  <sabouhallawa@apple.com>
 
         Applying a filter on an SVG element, which is larger than 4096 pixels, causes this element to be rendered shifted to the left
diff --git a/LayoutTests/fast/dom/Document/scrollingElement-quirks-mode-expected.txt b/LayoutTests/fast/dom/Document/scrollingElement-quirks-mode-expected.txt
new file mode 100644 (file)
index 0000000..518696b
--- /dev/null
@@ -0,0 +1,18 @@
+Tests the behavior of document.scrollingElement in quirks mode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+In quirks mode the scrolling element is `BODY`
+PASS document.scrollingElement is document.body
+PASS document.scrollingElement is document.body
+PASS document.scrollingElement is document.body
+In quirks mode, if the `BODY` is scrollable, the scrolling element is `null`
+INTENTIONAL FAILURE. This can be fixed once https://bugs.webkit.org/show_bug.cgi?id=106133 is fixed.
+FAIL document.scrollingElement.scrollingElement should be null (of type object). Was undefined (of type undefined).
+In quirks mode, if the `BODY` is `display: none`, the scrolling element is `BODY`
+PASS document.scrollingElement is document.body
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/Document/scrollingElement-quirks-mode.html b/LayoutTests/fast/dom/Document/scrollingElement-quirks-mode.html
new file mode 100644 (file)
index 0000000..16c8ca4
--- /dev/null
@@ -0,0 +1,38 @@
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script>
+
+description("Tests the behavior of document.scrollingElement in quirks mode.");
+
+debug("In quirks mode the scrolling element is `BODY`");
+shouldBe("document.scrollingElement", "document.body");
+
+document.documentElement.setAttribute('style', 'overflow: scroll');
+document.body.setAttribute('style', 'overflow: visible');
+shouldBe("document.scrollingElement", "document.body");
+
+document.documentElement.setAttribute('style', 'overflow: visible');
+document.body.setAttribute('style', 'overflow: scroll');
+shouldBe("document.scrollingElement", "document.body");
+
+debug("In quirks mode, if the `BODY` is scrollable, the scrolling element is `null`");
+debug("INTENTIONAL FAILURE. This can be fixed once https://bugs.webkit.org/show_bug.cgi?id=106133 is fixed.");
+document.documentElement.setAttribute('style', 'overflow: scroll');
+document.body.setAttribute('style', 'overflow: scroll');
+shouldBeNull("document.scrollingElement.scrollingElement");
+
+debug("In quirks mode, if the `BODY` is `display: none`, the scrolling element is `BODY`");
+document.documentElement.setAttribute('style', 'overflow: scroll');
+document.body.setAttribute('style', 'overflow: scroll; display: none');
+shouldBe("document.scrollingElement", "document.body");
+
+document.body.setAttribute('style', '');
+
+</script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/dom/Document/scrollingElement-standards-mode-expected.txt b/LayoutTests/fast/dom/Document/scrollingElement-standards-mode-expected.txt
new file mode 100644 (file)
index 0000000..5bf5a1c
--- /dev/null
@@ -0,0 +1,12 @@
+Tests the behavior of document.scrollingElement in standards mode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+In standards mode the scrolling element is supposed to be `HTML`
+INTENTIONAL FAILURE. This can be fixed once https://bugs.webkit.org/show_bug.cgi?id=106133 is fixed.
+FAIL document.scrollingElement should be [object HTMLHtmlElement]. Was [object HTMLBodyElement].
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/Document/scrollingElement-standards-mode.html b/LayoutTests/fast/dom/Document/scrollingElement-standards-mode.html
new file mode 100644 (file)
index 0000000..0502956
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<script src="../../../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script>
+
+description("Tests the behavior of document.scrollingElement in standards mode.");
+
+debug("In standards mode the scrolling element is supposed to be `HTML`");
+debug("INTENTIONAL FAILURE. This can be fixed once https://bugs.webkit.org/show_bug.cgi?id=106133 is fixed.");
+shouldBe("document.scrollingElement", "document.documentElement");
+
+</script>
+<script src="../../../resources/js-test-post.js"></script>
+</body>
+</html>
index 94a7be49f8e50c107fb29a3940dcea9a3414079e..680480c20ded5cc45f2048488559e132f1170cda 100644 (file)
@@ -1,3 +1,24 @@
+2015-05-07  Sam Weinig  <sam@webkit.org>
+
+        Consider implementing Document.scrollingElement
+        <rdar://problem/20845213>
+        https://bugs.webkit.org/show_bug.cgi?id=143609
+
+        Reviewed by Simon Fraser.
+
+        Add the non-compliant implementation of Document.scrollingElement that the spec,
+        found at http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement, 
+        says we should have while we have non-compliant implementations of Element.scrollTop
+        and Element.scrollLeft (fixing that is tracked by https://bugs.webkit.org/show_bug.cgi?id=106133).
+
+        Tests: fast/dom/Document/scrollingElement-quirks-mode.html
+               fast/dom/Document/scrollingElement-standards-mode.html
+
+        * dom/Document.cpp:
+        (WebCore::Document::scrollingElement):
+        * dom/Document.h:
+        * dom/Document.idl:
+
 2015-05-07  Dean Jackson  <dino@apple.com>
 
         [iOS] While scrubbing and holding down, video continues to play
index 4396c724afbb0fadcfc0574f57e36d84578f8d4e..6d3e1a8b60053b9c3785da0f1c5ac722be0cc4ed 100644 (file)
@@ -1429,6 +1429,14 @@ RefPtr<Range> Document::caretRangeFromPoint(const LayoutPoint& clientPoint)
     return Range::create(*this, rangeCompliantPosition, rangeCompliantPosition);
 }
 
+Element* Document::scrollingElement()
+{
+    // FIXME: When we fix https://bugs.webkit.org/show_bug.cgi?id=106133, this should be replaced with the full implementation
+    // of Document.scrollingElement() as specified at http://dev.w3.org/csswg/cssom-view/#dom-document-scrollingelement.
+
+    return body();
+}
+
 /*
  * Performs three operations:
  *  1. Convert control characters to spaces
index d0d8ade813fbfa2623ed774d8586b1eca1ffb852..befb5a5296304d5cc75367f2199d3f6ba686a80a 100644 (file)
@@ -381,6 +381,8 @@ public:
     RefPtr<Range> caretRangeFromPoint(int x, int y);
     RefPtr<Range> caretRangeFromPoint(const LayoutPoint& clientPoint);
 
+    Element* scrollingElement();
+
     String readyState() const;
 
     String defaultCharset() const;
index 4bb6be5f666785ff0b9dd17bf0e563c455512d36..7b0da85ff8d59683cbbbcd88259db2a429142830 100644 (file)
 
     // http://www.w3.org/TR/2014/WD-dom-20140204/#dom-document-origin
     readonly attribute DOMString origin;
+
+    readonly attribute Element scrollingElement;
 };