Auto merge of #11548 - kevgs:default_view2, r=Ms2ger

Make Document::DefaultView return a null value when there's no browsing context

Fixes #11469.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11548)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-06-09 02:48:30 -05:00
commit 77e0089c12
7 changed files with 66 additions and 28 deletions

View file

@ -2551,8 +2551,12 @@ impl DocumentMethods for Document {
} }
// https://html.spec.whatwg.org/multipage/#dom-document-defaultview // https://html.spec.whatwg.org/multipage/#dom-document-defaultview
fn DefaultView(&self) -> Root<Window> { fn GetDefaultView(&self) -> Option<Root<Window>> {
Root::from_ref(&*self.window) if self.browsing_context.is_none() {
None
} else {
Some(Root::from_ref(&*self.window))
}
} }
// https://html.spec.whatwg.org/multipage/#dom-document-cookie // https://html.spec.whatwg.org/multipage/#dom-document-cookie

View file

@ -1315,7 +1315,10 @@ impl Element {
} }
// Step 5 // Step 5
let win = doc.DefaultView(); let win = match doc.GetDefaultView() {
None => return,
Some(win) => win,
};
// Step 7 // Step 7
if *self.root_element() == *self { if *self.root_element() == *self {
@ -1653,7 +1656,10 @@ impl ElementMethods for Element {
} }
// Step 3 // Step 3
let win = doc.DefaultView(); let win = match doc.GetDefaultView() {
None => return 0.0,
Some(win) => win,
};
// Step 5 // Step 5
if *self.root_element() == *self { if *self.root_element() == *self {
@ -1701,7 +1707,10 @@ impl ElementMethods for Element {
} }
// Step 5 // Step 5
let win = doc.DefaultView(); let win = match doc.GetDefaultView() {
None => return,
Some(win) => win,
};
// Step 7 // Step 7
if *self.root_element() == *self { if *self.root_element() == *self {
@ -1739,7 +1748,10 @@ impl ElementMethods for Element {
} }
// Step 3 // Step 3
let win = doc.DefaultView(); let win = match doc.GetDefaultView() {
None => return 0.0,
Some(win) => win,
};
// Step 5 // Step 5
if *self.root_element() == *self { if *self.root_element() == *self {
@ -1787,7 +1799,10 @@ impl ElementMethods for Element {
} }
// Step 5 // Step 5
let win = doc.DefaultView(); let win = match doc.GetDefaultView() {
None => return,
Some(win) => win,
};
// Step 7 // Step 7
if *self.root_element() == *self { if *self.root_element() == *self {

View file

@ -118,7 +118,7 @@ partial /*sealed*/ interface Document {
// void writeln(DOMString... text); // void writeln(DOMString... text);
// user interaction // user interaction
readonly attribute Window/*Proxy?*/ defaultView; readonly attribute Window?/*Proxy?*/ defaultView;
readonly attribute Element? activeElement; readonly attribute Element? activeElement;
boolean hasFocus(); boolean hasFocus();
// attribute DOMString designMode; // attribute DOMString designMode;

View file

@ -36030,6 +36030,12 @@
"deleted_reftests": {}, "deleted_reftests": {},
"items": { "items": {
"testharness": { "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": [ "url/url-domainToUnicode.html": [
{ {
"path": "url/url-domainToUnicode.html", "path": "url/url-domainToUnicode.html",

View file

@ -9,9 +9,6 @@
[readyState] [readyState]
expected: FAIL expected: FAIL
[defaultView]
expected: FAIL
[body] [body]
expected: FAIL expected: FAIL

View file

@ -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

View file

@ -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>