aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/browsingcontext.rs6
-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--components/script/script_thread.rs6
5 files changed, 37 insertions, 10 deletions
diff --git a/components/script/dom/browsingcontext.rs b/components/script/dom/browsingcontext.rs
index 99c72e1e4be..1b78fb7572d 100644
--- a/components/script/dom/browsingcontext.rs
+++ b/components/script/dom/browsingcontext.rs
@@ -108,6 +108,12 @@ impl BrowsingContext {
Root::from_ref(&self.history.borrow()[self.active_index.get()].document)
}
+ pub fn maybe_active_document(&self) -> Option<Root<Document>> {
+ self.history.borrow().get(self.active_index.get()).map(|entry| {
+ Root::from_ref(&*entry.document)
+ })
+ }
+
pub fn active_window(&self) -> Root<Window> {
Root::from_ref(self.active_document().window())
}
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 6e4b4b030e8..4dfb484a301 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 5b7c9ecf4aa..0b639539f5f 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -1315,7 +1315,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 {
@@ -1653,7 +1656,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 {
@@ -1701,7 +1707,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 {
@@ -1739,7 +1748,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 {
@@ -1787,7 +1799,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/components/script/script_thread.rs b/components/script/script_thread.rs
index 63fed6cf115..eec1853239e 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -422,8 +422,10 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> {
Some(owner) => {
let context = owner.browsing_context.get();
for context in context.iter() {
- let window = context.active_window();
- window.clear_js_runtime_for_script_deallocation();
+ if let Some(document) = context.maybe_active_document() {
+ let window = document.window();
+ window.clear_js_runtime_for_script_deallocation();
+ }
}
}
None => (),