aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKosov Eugene <claprix@yandex.ru>2016-06-04 23:42:43 +0300
committerKosov Eugene <claprix@yandex.ru>2016-06-08 23:10:20 +0300
commit3bb093cc16875c6fcfe5e7de9c9f6760ff9e18fc (patch)
tree849084e169234cfdc0d40ce79c36dfdb12582b1d
parenta80767993b6b2b885dfac9666f16fb1e1649ac99 (diff)
downloadservo-3bb093cc16875c6fcfe5e7de9c9f6760ff9e18fc.tar.gz
servo-3bb093cc16875c6fcfe5e7de9c9f6760ff9e18fc.zip
Make Document::DefaultView return a null value when there's no browsing context
-rw-r--r--components/script/dom/document.rs8
-rw-r--r--components/script/dom/element.rs25
-rw-r--r--components/script/dom/webidls/Document.webidl2
-rw-r--r--tests/wpt/metadata/MANIFEST.json6
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini3
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/Document-defaultView.html.ini17
-rw-r--r--tests/wpt/web-platform-tests/cssom-view/scrolling-no-browsing-context.html33
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>