diff options
Diffstat (limited to 'components/script/dom/serviceworkerglobalscope.rs')
-rw-r--r-- | components/script/dom/serviceworkerglobalscope.rs | 12 |
1 files changed, 8 insertions, 4 deletions
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>()); |