aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorGregory Terzian <gterzian@users.noreply.github.com>2019-11-21 15:06:30 +0800
committerGregory Terzian <gterzian@users.noreply.github.com>2019-11-21 22:30:08 +0800
commita21c0bfd1a6463422f84b52b8781a5d6aee1c4d1 (patch)
treef75b12f6a49e679332750d502cb01041af1f0d6a /components/script
parentd553158e95cd5988eeb3e32310c11971c0450449 (diff)
downloadservo-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.rs13
-rw-r--r--components/script/script_thread.rs3
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| {