Document.dir should reflect the 'dir' attribute of the root html element
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Jan 2015 05:54:05 +0000 (05:54 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 27 Jan 2015 05:54:05 +0000 (05:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=140922

Reviewed by Darin Adler.

Source/WebCore:

Document.dir should reflect the 'dir' content attribute of the root
<html> element as per the specification:
https://html.spec.whatwg.org/multipage/dom.html#dom-document-dir

Previously, WebKit was reflecting the 'dir' content attribute of the
body element. This patch aligns WebKit with the specification and the
behavior of other browsers (tested Firefox 28, IE11 and Chrome).

This patch is based on the following Blink revision by me:
https://src.chromium.org/viewvc/blink?revision=171734&view=revision

Test: fast/dom/document-dir-property.html

* html/HTMLDocument.cpp:
(WebCore::HTMLDocument::dir):
(WebCore::HTMLDocument::setDir):
* html/HTMLDocument.h:

LayoutTests:

Update fast/dom/document-dir-property.html to reflect the behavior
change.

* fast/dom/document-dir-property-expected.txt:
* fast/dom/document-dir-property.html:

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

LayoutTests/ChangeLog
LayoutTests/fast/dom/document-dir-property-expected.txt
LayoutTests/fast/dom/document-dir-property.html
Source/WebCore/ChangeLog
Source/WebCore/html/HTMLDocument.cpp
Source/WebCore/html/HTMLDocument.h

index 0986666..8367445 100644 (file)
@@ -1,3 +1,16 @@
+2015-01-26  Chris Dumez  <cdumez@apple.com>
+
+        Document.dir should reflect the 'dir' attribute of the root html element
+        https://bugs.webkit.org/show_bug.cgi?id=140922
+
+        Reviewed by Darin Adler.
+
+        Update fast/dom/document-dir-property.html to reflect the behavior
+        change.
+
+        * fast/dom/document-dir-property-expected.txt:
+        * fast/dom/document-dir-property.html:
+
 2015-01-26  Csaba Osztrogon√°c  <ossy@webkit.org>
 
         [Win] Enable JSC stress tests by default
index 5ccd801..7fef734 100644 (file)
@@ -1,26 +1,31 @@
-This tests:
-Bug 9954 REGRESSION: document.dir should return empty string in <head>
-https://bugs.webkit.org/show_bug.cgi?id=9954
+document.dir should reflect the 'dir' content attribute of the <html> element and should be settable in <head>.
 
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
+
 Read document.dir in head
-PASS headReadDocumentDir is ''
+PASS headReadDocumentDir is ""
 
 Write document.dir in head
-PASS headWriteDocumentDir is ''
+PASS headWriteDocumentDir is "rtl"
 
 Read document.dir in body
-PASS document.dir is ''
+PASS document.dir is "rtl"
+
+Read document.documentElement.dir in body
+PASS document.documentElement.dir is "rtl"
 
 Read document.body.dir in body
-PASS document.body.dir is ''
+PASS document.body.dir is ""
 
 Write document.dir in body
-PASS document.dir is 'ltr'
+PASS document.dir is "ltr"
+
+Read document.documentElement.dir in body
+PASS document.documentElement.dir is "ltr"
 
 Read document.body.dir in body
-PASS document.body.dir is 'ltr'
+PASS document.body.dir is ""
 
 PASS successfullyParsed is true
 
index fa70a13..6566c6a 100644 (file)
@@ -7,39 +7,42 @@ var headWriteDocumentDir = document.dir;
 </script>
 </head>
 <body>
-<div id="description"></div>
-<div id="console"></div>
-<script src="../../resources/js-test-pre.js"></script>
+<script src="../../resources/js-test.js"></script>
 <script>
-description("This tests:<br>"
-          + "Bug 9954 REGRESSION: document.dir should return empty string in &lt;head&gt;<br>"
-          + "<a href=\"https://bugs.webkit.org/show_bug.cgi?id=9954\">https://bugs.webkit.org/show_bug.cgi?id=9954</a><br>");
+description("document.dir should reflect the 'dir' content attribute of the &lt;html&gt; element and should be settable in &lt;head&gt;.");
 
 debug("Read document.dir in head");
-shouldBe("headReadDocumentDir", "''");
+shouldBeEqualToString("headReadDocumentDir", "");
 debug("");
 
 debug("Write document.dir in head");
-shouldBe("headWriteDocumentDir", "''");
+shouldBeEqualToString("headWriteDocumentDir", "rtl");
 debug("");
 
 debug("Read document.dir in body");
-shouldBe("document.dir", "''");
+shouldBeEqualToString("document.dir", "rtl");
+debug("");
+
+debug("Read document.documentElement.dir in body");
+shouldBeEqualToString("document.documentElement.dir", "rtl");
 debug("");
 
 debug("Read document.body.dir in body");
-shouldBe("document.body.dir", "''");
+shouldBeEqualToString("document.body.dir", "");
 debug("");
 
 debug("Write document.dir in body");
 document.dir = "ltr";
-shouldBe("document.dir", "'ltr'");
+shouldBeEqualToString("document.dir", "ltr");
+debug("");
+
+debug("Read document.documentElement.dir in body");
+shouldBeEqualToString("document.documentElement.dir", "ltr");
 debug("");
 
 debug("Read document.body.dir in body");
-shouldBe("document.body.dir", "'ltr'");
+shouldBeEqualToString("document.body.dir", "");
 debug("");
 </script>
-<script src="../../resources/js-test-post.js"></script>
 </body>
 </html>
index e9e0064..0778f4f 100644 (file)
@@ -1,3 +1,28 @@
+2015-01-26  Chris Dumez  <cdumez@apple.com>
+
+        Document.dir should reflect the 'dir' attribute of the root html element
+        https://bugs.webkit.org/show_bug.cgi?id=140922
+
+        Reviewed by Darin Adler.
+
+        Document.dir should reflect the 'dir' content attribute of the root
+        <html> element as per the specification:
+        https://html.spec.whatwg.org/multipage/dom.html#dom-document-dir
+
+        Previously, WebKit was reflecting the 'dir' content attribute of the
+        body element. This patch aligns WebKit with the specification and the
+        behavior of other browsers (tested Firefox 28, IE11 and Chrome).
+
+        This patch is based on the following Blink revision by me:
+        https://src.chromium.org/viewvc/blink?revision=171734&view=revision
+
+        Test: fast/dom/document-dir-property.html
+
+        * html/HTMLDocument.cpp:
+        (WebCore::HTMLDocument::dir):
+        (WebCore::HTMLDocument::setDir):
+        * html/HTMLDocument.h:
+
 2015-01-26  Darin Adler  <darin@apple.com>
 
         REGRESSION (r179101): SVGUseElement::expandUseElementsInShadowTree has an object lifetime mistake
index a3d0521..5400e49 100644 (file)
@@ -105,17 +105,19 @@ int HTMLDocument::height()
     return frameView ? frameView->contentsHeight() : 0;
 }
 
-String HTMLDocument::dir()
+const AtomicString& HTMLDocument::dir()
 {
-    if (auto* body = bodyOrFrameset())
-        return body->fastGetAttribute(dirAttr);
-    return String();
+    auto* documentElement = this->documentElement();
+    if (!is<HTMLHtmlElement>(*documentElement))
+        return nullAtom;
+    return documentElement->fastGetAttribute(dirAttr);
 }
 
-void HTMLDocument::setDir(const String& value)
+void HTMLDocument::setDir(const AtomicString& value)
 {
-    if (auto* body = bodyOrFrameset())
-        body->setAttribute(dirAttr, value);
+    auto* documentElement = this->documentElement();
+    if (is<HTMLHtmlElement>(documentElement))
+        documentElement->setAttribute(dirAttr, value);
 }
 
 String HTMLDocument::designMode() const
index 4a6a46c..38a9b99 100644 (file)
@@ -46,8 +46,8 @@ public:
     int width();
     int height();
 
-    String dir();
-    void setDir(const String&);
+    const AtomicString& dir();
+    void setDir(const AtomicString&);
 
     String designMode() const;
     void setDesignMode(const String&);