refactor: add CanGc as argument to Promise::reject_error (#35646)

Signed-off-by: Yerkebulan Tulibergenov <yerkebulan@gmail.com>
This commit is contained in:
Yerkebulan Tulibergenov 2025-02-25 02:12:58 -08:00 committed by GitHub
parent c844ed232a
commit 38b71087bd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
43 changed files with 323 additions and 249 deletions

View file

@ -80,7 +80,7 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
Ok(url) => url,
Err(_) => {
// B: Step 1
promise.reject_error(Error::Type("Invalid script URL".to_owned()));
promise.reject_error(Error::Type("Invalid script URL".to_owned()), can_gc);
return promise;
},
};
@ -92,7 +92,7 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
match api_base_url.join(inner_scope) {
Ok(url) => url,
Err(_) => {
promise.reject_error(Error::Type("Invalid scope URL".to_owned()));
promise.reject_error(Error::Type("Invalid scope URL".to_owned()), can_gc);
return promise;
},
}
@ -106,7 +106,10 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
match script_url.scheme() {
"https" | "http" => {},
_ => {
promise.reject_error(Error::Type("Only secure origins are allowed".to_owned()));
promise.reject_error(
Error::Type("Only secure origins are allowed".to_owned()),
can_gc,
);
return promise;
},
}
@ -114,9 +117,10 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
if script_url.path().to_ascii_lowercase().contains("%2f") ||
script_url.path().to_ascii_lowercase().contains("%5c")
{
promise.reject_error(Error::Type(
"Script URL contains forbidden characters".to_owned(),
));
promise.reject_error(
Error::Type("Script URL contains forbidden characters".to_owned()),
can_gc,
);
return promise;
}
@ -124,7 +128,10 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
match scope.scheme() {
"https" | "http" => {},
_ => {
promise.reject_error(Error::Type("Only secure origins are allowed".to_owned()));
promise.reject_error(
Error::Type("Only secure origins are allowed".to_owned()),
can_gc,
);
return promise;
},
}
@ -132,9 +139,10 @@ impl ServiceWorkerContainerMethods<crate::DomTypeHolder> for ServiceWorkerContai
if scope.path().to_ascii_lowercase().contains("%2f") ||
scope.path().to_ascii_lowercase().contains("%5c")
{
promise.reject_error(Error::Type(
"Scope URL contains forbidden characters".to_owned(),
));
promise.reject_error(
Error::Type("Scope URL contains forbidden characters".to_owned()),
can_gc,
);
return promise;
}
@ -198,21 +206,23 @@ impl RegisterJobResultHandler {
.expect("No promise to resolve for SW Register job.");
// Step 1
self.task_source.queue(
task!(reject_promise_with_security_error: move || {
self.task_source
.queue(task!(reject_promise_with_security_error: move || {
let promise = promise.root();
let _ac = enter_realm(&*promise.global());
match error {
JobError::TypeError => {
promise.reject_error(Error::Type("Failed to register a ServiceWorker".to_string()));
promise.reject_error(
Error::Type("Failed to register a ServiceWorker".to_string()),
CanGc::note(),
);
},
JobError::SecurityError => {
promise.reject_error(Error::Security);
promise.reject_error(Error::Security, CanGc::note());
},
}
})
);
}));
// TODO: step 2, handle equivalent jobs.
},