diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/dedicatedworkerglobalscope.rs | 3 | ||||
-rw-r--r-- | components/script/dom/serviceworkerglobalscope.rs | 12 | ||||
-rw-r--r-- | components/script/dom/window.rs | 2 |
3 files changed, 13 insertions, 4 deletions
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 22bd6195389..4960fed32b5 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -443,6 +443,7 @@ impl DedicatedWorkerGlobalScope { TaskSourceName::DOMManipulation, )) .unwrap(); + scope.clear_js_runtime(context_for_interrupt); return; }, Ok((metadata, bytes)) => (metadata, bytes), @@ -457,11 +458,13 @@ impl DedicatedWorkerGlobalScope { } if scope.is_closing() { + scope.clear_js_runtime(context_for_interrupt); return; } { let _ar = AutoWorkerReset::new(&global, worker.clone()); + let _ac = enter_realm(&*scope); scope.execute_script(DOMString::from(source)); } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index cbbb63ea998..2dc5b8fb577 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -349,6 +349,8 @@ impl ServiceWorkerGlobalScope { closing, ); + let scope = global.upcast::<WorkerGlobalScope>(); + let referrer = referrer_url .map(|url| Referrer::ReferrerUrl(url)) .unwrap_or_else(|| global.upcast::<GlobalScope>().get_referrer()); @@ -367,6 +369,7 @@ impl ServiceWorkerGlobalScope { { Err(_) => { println!("error loading script {}", serialized_worker_url); + scope.clear_js_runtime(context_for_interrupt); return; }, Ok((metadata, bytes)) => { @@ -374,15 +377,16 @@ impl ServiceWorkerGlobalScope { }, }; - let scope = global.upcast::<WorkerGlobalScope>(); - let _ac = enter_realm(&*scope); - unsafe { // Handle interrupt requests JS_AddInterruptCallback(*scope.get_cx(), Some(interrupt_callback)); } - scope.execute_script(DOMString::from(source)); + { + // TODO: use AutoWorkerReset as in dedicated worker? + let _ac = enter_realm(&*scope); + scope.execute_script(DOMString::from(source)); + } global.dispatch_activate(); let reporter_name = format!("service-worker-reporter-{}", random::<u64>()); diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 22afc565546..c822c9cded4 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -393,6 +393,8 @@ impl Window { #[allow(unsafe_code)] pub fn clear_js_runtime_for_script_deallocation(&self) { + self.upcast::<GlobalScope>() + .remove_web_messaging_and_dedicated_workers_infra(); unsafe { *self.js_runtime.borrow_for_script_deallocation() = None; self.window_proxy.set(None); |