diff options
author | Andriy Sultanov <53952748+last-genius@users.noreply.github.com> | 2024-09-09 23:38:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-09 22:38:01 +0000 |
commit | e5150dbda1f89ff07294dbd1ca4e8f4f08cf4874 (patch) | |
tree | e77fae25f33905e1c8c626cf532e7222f521335c /components/script/serviceworker_manager.rs | |
parent | 10e5bb72d9e16655b625b8971e346ff479b17fd2 (diff) | |
download | servo-e5150dbda1f89ff07294dbd1ca4e8f4f08cf4874.tar.gz servo-e5150dbda1f89ff07294dbd1ca4e8f4f08cf4874.zip |
Propagate `CanGc` from `Document::new()` (#33386)
* Add canGc as a parameter to autogenerated trait methods
Signed-off-by: Andriy Sultanov <sultanovandriy@gmail.com>
* Propagate CanGc from Document::new()
Signed-off-by: Andriy Sultanov <sultanovandriy@gmail.com>
---------
Signed-off-by: Andriy Sultanov <sultanovandriy@gmail.com>
Diffstat (limited to 'components/script/serviceworker_manager.rs')
-rw-r--r-- | components/script/serviceworker_manager.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/components/script/serviceworker_manager.rs b/components/script/serviceworker_manager.rs index 8059e4ee41b..1c377bfc8a1 100644 --- a/components/script/serviceworker_manager.rs +++ b/components/script/serviceworker_manager.rs @@ -29,7 +29,7 @@ use crate::dom::serviceworkerglobalscope::{ ServiceWorkerControlMsg, ServiceWorkerGlobalScope, ServiceWorkerScriptMsg, }; use crate::dom::serviceworkerregistration::longest_prefix_match; -use crate::script_runtime::ContextForRequestInterrupt; +use crate::script_runtime::{CanGc, ContextForRequestInterrupt}; enum Message { FromResource(CustomResponseMediator), @@ -250,10 +250,12 @@ impl ServiceWorkerManager { None } - fn handle_message(&mut self) { + fn handle_message(&mut self, _can_gc: CanGc) { while let Ok(message) = self.receive_message() { let should_continue = match message { - Message::FromConstellation(msg) => self.handle_message_from_constellation(msg), + Message::FromConstellation(msg) => { + self.handle_message_from_constellation(msg, CanGc::note()) + }, Message::FromResource(msg) => self.handle_message_from_resource(msg), }; if !should_continue { @@ -288,7 +290,7 @@ impl ServiceWorkerManager { } } - fn handle_message_from_constellation(&mut self, msg: ServiceWorkerMsg) -> bool { + fn handle_message_from_constellation(&mut self, msg: ServiceWorkerMsg, can_gc: CanGc) -> bool { match msg { ServiceWorkerMsg::Timeout(_scope) => { // TODO: https://w3c.github.io/ServiceWorker/#terminate-service-worker @@ -305,7 +307,7 @@ impl ServiceWorkerManager { self.handle_register_job(job); }, JobType::Update => { - self.handle_update_job(job); + self.handle_update_job(job, can_gc); }, JobType::Unregister => { // TODO: https://w3c.github.io/ServiceWorker/#unregister-algorithm @@ -380,7 +382,7 @@ impl ServiceWorkerManager { } /// <https://w3c.github.io/ServiceWorker/#update> - fn handle_update_job(&mut self, job: Job) { + fn handle_update_job(&mut self, job: Job, can_gc: CanGc) { // Step 1: Get registation if let Some(registration) = self.registrations.get_mut(&job.scope_url) { // Step 3. @@ -403,8 +405,12 @@ impl ServiceWorkerManager { // Very roughly steps 5 to 18. // TODO: implement all steps precisely. - let (new_worker, join_handle, control_sender, context, closing) = - update_serviceworker(self.own_sender.clone(), job.scope_url.clone(), scope_things); + let (new_worker, join_handle, control_sender, context, closing) = update_serviceworker( + self.own_sender.clone(), + job.scope_url.clone(), + scope_things, + can_gc, + ); // Since we've just started the worker thread, ensure we can shut it down later. registration.note_worker_thread(join_handle, control_sender, context, closing); @@ -443,6 +449,7 @@ fn update_serviceworker( own_sender: IpcSender<ServiceWorkerMsg>, scope_url: ServoUrl, scope_things: ScopeThings, + can_gc: CanGc, ) -> ( ServiceWorker, JoinHandle<()>, @@ -468,6 +475,7 @@ fn update_serviceworker( control_receiver, context_sender, closing.clone(), + can_gc, ); let context = context_receiver @@ -504,7 +512,7 @@ impl ServiceWorkerManagerFactory for ServiceWorkerManager { resource_port, constellation_sender, ) - .handle_message() + .handle_message(CanGc::note()) }; if thread::Builder::new() .name("SvcWorkerManager".to_owned()) |