diff --git a/components/script/dom/bindings/codegen/Bindings.conf b/components/script/dom/bindings/codegen/Bindings.conf index 6b3d2eee8fb..1ea05480b88 100644 --- a/components/script/dom/bindings/codegen/Bindings.conf +++ b/components/script/dom/bindings/codegen/Bindings.conf @@ -347,6 +347,7 @@ DOMInterfaces = { 'MessagePort': { 'weakReferenceable': True, + 'canGc': ['GetOnmessage'], }, 'NavigationPreloadManager': { diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 47b508ab09f..5b106fd649b 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -464,7 +464,7 @@ impl DedicatedWorkerGlobalScope { { let _ar = AutoWorkerReset::new(&global, worker.clone()); let _ac = enter_realm(scope); - scope.execute_script(DOMString::from(source)); + scope.execute_script(DOMString::from(source), CanGc::note()); } let reporter_name = format!("dedicated-worker-reporter-{}", random::()); diff --git a/components/script/dom/messageport.rs b/components/script/dom/messageport.rs index 9ef658f78b3..a915d92b503 100644 --- a/components/script/dom/messageport.rs +++ b/components/script/dom/messageport.rs @@ -322,12 +322,12 @@ impl MessagePortMethods for MessagePort { } /// - fn GetOnmessage(&self) -> Option> { + fn GetOnmessage(&self, can_gc: CanGc) -> Option> { if self.detached.get() { return None; } let eventtarget = self.upcast::(); - eventtarget.get_event_handler_common("message", CanGc::note()) + eventtarget.get_event_handler_common("message", can_gc) } /// diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index a164dbee06c..479c4d82fcd 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -384,7 +384,7 @@ impl ServiceWorkerGlobalScope { { // TODO: use AutoWorkerReset as in dedicated worker? let _ac = enter_realm(scope); - scope.execute_script(DOMString::from(source)); + scope.execute_script(DOMString::from(source), CanGc::note()); } global.dispatch_activate(CanGc::note()); diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index cd3e02cc7e6..f89ff975322 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -447,7 +447,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { impl WorkerGlobalScope { #[allow(unsafe_code)] - pub fn execute_script(&self, source: DOMString) { + pub fn execute_script(&self, source: DOMString, can_gc: CanGc) { let _aes = AutoEntryScript::new(self.upcast()); let cx = self.runtime.borrow().as_ref().unwrap().cx(); rooted!(in(cx) let mut rval = UndefinedValue()); @@ -468,7 +468,7 @@ impl WorkerGlobalScope { println!("evaluate_script failed"); unsafe { let ar = enter_realm(self); - report_pending_exception(cx, true, InRealm::Entered(&ar), CanGc::note()); + report_pending_exception(cx, true, InRealm::Entered(&ar), can_gc); } } },