diff options
author | Kosov Eugene <claprix@yandex.ru> | 2016-06-04 23:42:43 +0300 |
---|---|---|
committer | Kosov Eugene <claprix@yandex.ru> | 2016-06-08 23:10:20 +0300 |
commit | 3bb093cc16875c6fcfe5e7de9c9f6760ff9e18fc (patch) | |
tree | 849084e169234cfdc0d40ce79c36dfdb12582b1d | |
parent | a80767993b6b2b885dfac9666f16fb1e1649ac99 (diff) | |
download | servo-3bb093cc16875c6fcfe5e7de9c9f6760ff9e18fc.tar.gz servo-3bb093cc16875c6fcfe5e7de9c9f6760ff9e18fc.zip |
Make Document::DefaultView return a null value when there's no browsing context
7 files changed, 66 insertions, 28 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 2a7466dc2eb..c142945d131 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -2551,8 +2551,12 @@ impl DocumentMethods for Document { } // https://html.spec.whatwg.org/multipage/#dom-document-defaultview - fn DefaultView(&self) -> Root<Window> { - Root::from_ref(&*self.window) + fn GetDefaultView(&self) -> Option<Root<Window>> { + if self.browsing_context.is_none() { + None + } else { + Some(Root::from_ref(&*self.window)) + } } // https://html.spec.whatwg.org/multipage/#dom-document-cookie diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 34791c3417c..e2398a14139 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1297,7 +1297,10 @@ impl Element { } // Step 5 - let win = doc.DefaultView(); + let win = match doc.GetDefaultView() { + None => return, + Some(win) => win, + }; // Step 7 if *self.root_element() == *self { @@ -1635,7 +1638,10 @@ impl ElementMethods for Element { } // Step 3 - let win = doc.DefaultView(); + let win = match doc.GetDefaultView() { + None => return 0.0, + Some(win) => win, + }; // Step 5 if *self.root_element() == *self { @@ -1683,7 +1689,10 @@ impl ElementMethods for Element { } // Step 5 - let win = doc.DefaultView(); + let win = match doc.GetDefaultView() { + None => return, + Some(win) => win, + }; // Step 7 if *self.root_element() == *self { @@ -1721,7 +1730,10 @@ impl ElementMethods for Element { } // Step 3 - let win = doc.DefaultView(); + let win = match doc.GetDefaultView() { + None => return 0.0, + Some(win) => win, + }; // Step 5 if *self.root_element() == *self { @@ -1769,7 +1781,10 @@ impl ElementMethods for Element { } // Step 5 - let win = doc.DefaultView(); + let win = match doc.GetDefaultView() { + None => return, + Some(win) => win, + }; // Step 7 if *self.root_element() == *self { diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl index 0e5c7b661a6..6b365378c92 100644 --- a/components/script/dom/webidls/Document.webidl +++ b/components/script/dom/webidls/Document.webidl @@ -118,7 +118,7 @@ partial /*sealed*/ interface Document { // void writeln(DOMString... text); // user interaction - readonly attribute Window/*Proxy?*/ defaultView; + readonly attribute Window?/*Proxy?*/ defaultView; readonly attribute Element? activeElement; boolean hasFocus(); // attribute DOMString designMode; diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 7033fdde433..c6171166249 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -36030,6 +36030,12 @@ "deleted_reftests": {}, "items": { "testharness": { + "cssom-view/scrolling-no-browsing-context.html": [ + { + "path": "cssom-view/scrolling-no-browsing-context.html", + "url": "/cssom-view/scrolling-no-browsing-context.html" + } + ], "url/url-domainToUnicode.html": [ { "path": "url/url-domainToUnicode.html", diff --git a/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini b/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini index fd87c9906e8..65e883336d0 100644 --- a/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini +++ b/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini @@ -9,9 +9,6 @@ [readyState] expected: FAIL - [defaultView] - expected: FAIL - [body] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/Document-defaultView.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/Document-defaultView.html.ini deleted file mode 100644 index 6ba3fcf80dd..00000000000 --- a/tests/wpt/metadata/html/browsers/the-window-object/Document-defaultView.html.ini +++ /dev/null @@ -1,17 +0,0 @@ -[Document-defaultView.html] - type: testharness - [Document created with the Document constructor] - expected: FAIL - - [Document created with createDocument] - expected: FAIL - - [Document created with createHTMLDocument] - expected: FAIL - - [Document created with XML DOMParser] - expected: FAIL - - [Document created with HTML DOMParser] - expected: FAIL - diff --git a/tests/wpt/web-platform-tests/cssom-view/scrolling-no-browsing-context.html b/tests/wpt/web-platform-tests/cssom-view/scrolling-no-browsing-context.html new file mode 100644 index 00000000000..94357605b70 --- /dev/null +++ b/tests/wpt/web-platform-tests/cssom-view/scrolling-no-browsing-context.html @@ -0,0 +1,33 @@ +<!doctype html> +<meta charset="utf-8"> +<title>cssom-view scrolling-no-browsing-context</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> +setup({explicit_done:true}); +window.onload = function () { + test(function () { + var doc = document.implementation.createDocument("http://example.com/", "html", null); + + var element = doc.createElement("tag") + assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); + assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); + + element.scrollTop = 10; + element.scrollLeft = 10; + assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); + assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); + + element.scroll(10, 10); + assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); + assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); + + element.scrollTo(10, 10); + assert_equals(element.scrollTop, 0, "scrollTop should be always 0"); + assert_equals(element.scrollLeft, 0, "scrollLeft should be always 0"); + + }, "Element get and set scrollTop, scrollLeft, scroll() and scrollTo() test"); + + done(); +}; +</script> |