diff options
author | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-09-20 13:47:12 -0500 |
---|---|---|
committer | Alan Jeffrey <ajeffrey@mozilla.com> | 2017-09-20 14:20:04 -0500 |
commit | 3d00b0e2ac3920124df0820c09167dd741920717 (patch) | |
tree | 99ca132a4872eaece6459f105d66835e866da65a /components/script | |
parent | eefd59e9332ea054908548eaba63ac12ff4bf46c (diff) | |
download | servo-3d00b0e2ac3920124df0820c09167dd741920717.tar.gz servo-3d00b0e2ac3920124df0820c09167dd741920717.zip |
Window should own Location, Document shouldn't
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/document.rs | 9 | ||||
-rw-r--r-- | components/script/dom/window.rs | 4 |
2 files changed, 8 insertions, 5 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index e3bb46bf5c0..e50ff071f6e 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -226,7 +226,6 @@ pub struct Document { node: Node, window: JS<Window>, implementation: MutNullableJS<DOMImplementation>, - location: MutNullableJS<Location>, content_type: DOMString, last_modified: Option<String>, encoding: Cell<EncodingRef>, @@ -2222,7 +2221,6 @@ impl Document { window: JS::from_ref(window), has_browsing_context: has_browsing_context == HasBrowsingContext::Yes, implementation: Default::default(), - location: Default::default(), content_type: match content_type { Some(string) => string, None => DOMString::from(match is_html_document { @@ -3438,7 +3436,11 @@ impl DocumentMethods for Document { // https://html.spec.whatwg.org/multipage/#dom-document-location fn GetLocation(&self) -> Option<Root<Location>> { - self.browsing_context().map(|_| self.location.or_init(|| Location::new(&self.window))) + if self.is_fully_active() { + Some(self.window.Location()) + } else { + None + } } // https://dom.spec.whatwg.org/#dom-parentnode-children @@ -3815,7 +3817,6 @@ impl DocumentMethods for Document { // Step 19. self.implementation.set(None); - self.location.set(None); self.images.set(None); self.embeds.set(None); self.links.set(None); diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 1cb38d0a7ca..7ad5d0c02ac 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -183,6 +183,7 @@ pub struct Window { image_cache_chan: Sender<ImageCacheMsg>, window_proxy: MutNullableJS<WindowProxy>, document: MutNullableJS<Document>, + location: MutNullableJS<Location>, history: MutNullableJS<History>, custom_element_registry: MutNullableJS<CustomElementRegistry>, performance: MutNullableJS<Performance>, @@ -568,7 +569,7 @@ impl WindowMethods for Window { // https://html.spec.whatwg.org/multipage/#dom-location fn Location(&self) -> Root<Location> { - self.Document().GetLocation().unwrap() + self.location.or_init(|| Location::new(self)) } // https://html.spec.whatwg.org/multipage/#dom-sessionstorage @@ -1854,6 +1855,7 @@ impl Window { image_cache_chan, image_cache, navigator: Default::default(), + location: Default::default(), history: Default::default(), custom_element_registry: Default::default(), window_proxy: Default::default(), |