diff options
author | Gregory Terzian <gterzian@users.noreply.github.com> | 2019-11-21 15:06:30 +0800 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2019-11-21 22:30:08 +0800 |
commit | a21c0bfd1a6463422f84b52b8781a5d6aee1c4d1 (patch) | |
tree | f75b12f6a49e679332750d502cb01041af1f0d6a /components/script | |
parent | d553158e95cd5988eeb3e32310c11971c0450449 (diff) | |
download | servo-a21c0bfd1a6463422f84b52b8781a5d6aee1c4d1.tar.gz servo-a21c0bfd1a6463422f84b52b8781a5d6aee1c4d1.zip |
ensure unload run with old pipeline as currently-active, do not nullify proxy unless currently-active
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/window.rs | 13 | ||||
-rw-r--r-- | components/script/script_thread.rs | 3 |
2 files changed, 14 insertions, 2 deletions
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 87c80ce62d0..0c3a2db0899 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -1389,7 +1389,18 @@ impl Window { self.current_state.set(WindowState::Zombie); *self.js_runtime.borrow_mut() = None; - self.window_proxy.set(None); + + // If this is the currently active pipeline, + // nullify the window_proxy. + if let Some(proxy) = self.window_proxy.get() { + let pipeline_id = self.upcast::<GlobalScope>().pipeline_id(); + if let Some(currently_active) = proxy.currently_active() { + if currently_active == pipeline_id { + self.window_proxy.set(None); + } + } + } + if let Some(performance) = self.performance.get() { performance.clear_and_disable_performance_entry_buffer(); } diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index dbc4f0fb444..0318843fc7e 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -3118,7 +3118,8 @@ impl ScriptThread { opener: Option<BrowsingContextId>, ) -> DomRoot<WindowProxy> { if let Some(window_proxy) = self.window_proxies.borrow().get(&browsing_context_id) { - window_proxy.set_currently_active(&*window); + // Note: we do not set the window to be the currently-active one, + // this will be done instead when the script-thread handles the `SetDocumentActivity` msg. return DomRoot::from_ref(window_proxy); } let iframe = parent_info.and_then(|parent_id| { |