aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs3
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs12
-rw-r--r--components/script/dom/window.rs2
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);