mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Propagate more CanGc
(#35604)
Signed-off-by: Auguste Baum <auguste.apple@gmail.com>
This commit is contained in:
parent
1d7bb1337d
commit
d446b63cfd
3 changed files with 36 additions and 21 deletions
|
@ -715,7 +715,7 @@ impl ReadableStreamDefaultController {
|
||||||
// First, throw the exception.
|
// First, throw the exception.
|
||||||
// Note: this must be done manually here,
|
// Note: this must be done manually here,
|
||||||
// because `enqueue_value_with_size` does not call into JS.
|
// because `enqueue_value_with_size` does not call into JS.
|
||||||
throw_dom_exception(cx, &self.global(), error, CanGc::note());
|
throw_dom_exception(cx, &self.global(), error, can_gc);
|
||||||
|
|
||||||
// Then, get a handle to the JS val for the exception,
|
// Then, get a handle to the JS val for the exception,
|
||||||
// and use that to error the stream.
|
// and use that to error the stream.
|
||||||
|
|
|
@ -162,8 +162,10 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
||||||
let trusted_key = Trusted::new(key);
|
let trusted_key = Trusted::new(key);
|
||||||
let key_alg = key.algorithm();
|
let key_alg = key.algorithm();
|
||||||
let valid_usage = key.usages().contains(&KeyUsage::Encrypt);
|
let valid_usage = key.usages().contains(&KeyUsage::Encrypt);
|
||||||
self.global().task_manager().dom_manipulation_task_source().queue(
|
self.global()
|
||||||
task!(encrypt: move || {
|
.task_manager()
|
||||||
|
.dom_manipulation_task_source()
|
||||||
|
.queue(task!(encrypt: move || {
|
||||||
let subtle = this.root();
|
let subtle = this.root();
|
||||||
let promise = trusted_promise.root();
|
let promise = trusted_promise.root();
|
||||||
let key = trusted_key.root();
|
let key = trusted_key.root();
|
||||||
|
@ -176,15 +178,19 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
||||||
let cx = GlobalScope::get_cx();
|
let cx = GlobalScope::get_cx();
|
||||||
rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
|
rooted!(in(*cx) let mut array_buffer_ptr = ptr::null_mut::<JSObject>());
|
||||||
|
|
||||||
if let Err(e) = normalized_algorithm.encrypt(&subtle, &key, &data, cx, array_buffer_ptr.handle_mut(),
|
if let Err(e) = normalized_algorithm.encrypt(
|
||||||
CanGc::note()) {
|
&subtle,
|
||||||
|
&key,
|
||||||
|
&data,
|
||||||
|
cx,
|
||||||
|
array_buffer_ptr.handle_mut(),
|
||||||
|
CanGc::note(),
|
||||||
|
) {
|
||||||
promise.reject_error(e);
|
promise.reject_error(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
promise.resolve_native(&*array_buffer_ptr.handle(), CanGc::note());
|
promise.resolve_native(&*array_buffer_ptr.handle(), CanGc::note());
|
||||||
})
|
}));
|
||||||
);
|
|
||||||
|
|
||||||
promise
|
promise
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,8 +223,10 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
||||||
let trusted_key = Trusted::new(key);
|
let trusted_key = Trusted::new(key);
|
||||||
let key_alg = key.algorithm();
|
let key_alg = key.algorithm();
|
||||||
let valid_usage = key.usages().contains(&KeyUsage::Decrypt);
|
let valid_usage = key.usages().contains(&KeyUsage::Decrypt);
|
||||||
self.global().task_manager().dom_manipulation_task_source().queue(
|
self.global()
|
||||||
task!(decrypt: move || {
|
.task_manager()
|
||||||
|
.dom_manipulation_task_source()
|
||||||
|
.queue(task!(decrypt: move || {
|
||||||
let subtle = this.root();
|
let subtle = this.root();
|
||||||
let promise = trusted_promise.root();
|
let promise = trusted_promise.root();
|
||||||
let key = trusted_key.root();
|
let key = trusted_key.root();
|
||||||
|
@ -230,16 +238,20 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(e) = normalized_algorithm.decrypt(&subtle, &key, &data, cx, array_buffer_ptr.handle_mut(),
|
if let Err(e) = normalized_algorithm.decrypt(
|
||||||
CanGc::note()) {
|
&subtle,
|
||||||
|
&key,
|
||||||
|
&data,
|
||||||
|
cx,
|
||||||
|
array_buffer_ptr.handle_mut(),
|
||||||
|
CanGc::note(),
|
||||||
|
) {
|
||||||
promise.reject_error(e);
|
promise.reject_error(e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
promise.resolve_native(&*array_buffer_ptr.handle(), CanGc::note());
|
promise.resolve_native(&*array_buffer_ptr.handle(), CanGc::note());
|
||||||
})
|
}));
|
||||||
);
|
|
||||||
|
|
||||||
promise
|
promise
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -507,7 +519,7 @@ impl SubtleCryptoMethods<crate::DomTypeHolder> for SubtleCrypto {
|
||||||
.queue(task!(generate_key: move || {
|
.queue(task!(generate_key: move || {
|
||||||
let subtle = this.root();
|
let subtle = this.root();
|
||||||
let promise = trusted_promise.root();
|
let promise = trusted_promise.root();
|
||||||
let key = normalized_algorithm.generate_key(&subtle, key_usages, extractable);
|
let key = normalized_algorithm.generate_key(&subtle, key_usages, extractable, CanGc::note());
|
||||||
|
|
||||||
match key {
|
match key {
|
||||||
Ok(key) => promise.resolve_native(&key, CanGc::note()),
|
Ok(key) => promise.resolve_native(&key, CanGc::note()),
|
||||||
|
@ -2030,6 +2042,7 @@ impl SubtleCrypto {
|
||||||
usages: Vec<KeyUsage>,
|
usages: Vec<KeyUsage>,
|
||||||
key_gen_params: &SubtleAesKeyGenParams,
|
key_gen_params: &SubtleAesKeyGenParams,
|
||||||
extractable: bool,
|
extractable: bool,
|
||||||
|
can_gc: CanGc,
|
||||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||||
let mut rand = vec![0; key_gen_params.length as usize / 8];
|
let mut rand = vec![0; key_gen_params.length as usize / 8];
|
||||||
self.rng.borrow_mut().fill_bytes(&mut rand);
|
self.rng.borrow_mut().fill_bytes(&mut rand);
|
||||||
|
@ -2094,7 +2107,7 @@ impl SubtleCrypto {
|
||||||
algorithm_object.handle(),
|
algorithm_object.handle(),
|
||||||
usages,
|
usages,
|
||||||
handle,
|
handle,
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
);
|
);
|
||||||
|
|
||||||
Ok(crypto_key)
|
Ok(crypto_key)
|
||||||
|
@ -2107,6 +2120,7 @@ impl SubtleCrypto {
|
||||||
usages: Vec<KeyUsage>,
|
usages: Vec<KeyUsage>,
|
||||||
params: &SubtleHmacKeyGenParams,
|
params: &SubtleHmacKeyGenParams,
|
||||||
extractable: bool,
|
extractable: bool,
|
||||||
|
can_gc: CanGc,
|
||||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||||
// Step 1. If usages contains any entry which is not "sign" or "verify", then throw a SyntaxError.
|
// Step 1. If usages contains any entry which is not "sign" or "verify", then throw a SyntaxError.
|
||||||
if usages
|
if usages
|
||||||
|
@ -2172,7 +2186,7 @@ impl SubtleCrypto {
|
||||||
algorithm_object.handle(),
|
algorithm_object.handle(),
|
||||||
usages,
|
usages,
|
||||||
Handle::Hmac(key_data),
|
Handle::Hmac(key_data),
|
||||||
CanGc::note(),
|
can_gc,
|
||||||
);
|
);
|
||||||
|
|
||||||
// Step 15. Return key.
|
// Step 15. Return key.
|
||||||
|
@ -2943,10 +2957,11 @@ impl KeyGenerationAlgorithm {
|
||||||
subtle: &SubtleCrypto,
|
subtle: &SubtleCrypto,
|
||||||
usages: Vec<KeyUsage>,
|
usages: Vec<KeyUsage>,
|
||||||
extractable: bool,
|
extractable: bool,
|
||||||
|
can_gc: CanGc,
|
||||||
) -> Result<DomRoot<CryptoKey>, Error> {
|
) -> Result<DomRoot<CryptoKey>, Error> {
|
||||||
match self {
|
match self {
|
||||||
Self::Aes(params) => subtle.generate_key_aes(usages, params, extractable),
|
Self::Aes(params) => subtle.generate_key_aes(usages, params, extractable, can_gc),
|
||||||
Self::Hmac(params) => subtle.generate_key_hmac(usages, params, extractable),
|
Self::Hmac(params) => subtle.generate_key_hmac(usages, params, extractable, can_gc),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,7 +352,7 @@ impl ModuleTree {
|
||||||
&owner.global(),
|
&owner.global(),
|
||||||
Some(ModuleHandler::new_boxed(Box::new(
|
Some(ModuleHandler::new_boxed(Box::new(
|
||||||
task!(fetched_resolve: move || {
|
task!(fetched_resolve: move || {
|
||||||
this.notify_owner_to_finish(identity, options,CanGc::note());
|
this.notify_owner_to_finish(identity, options, CanGc::note());
|
||||||
}),
|
}),
|
||||||
))),
|
))),
|
||||||
None,
|
None,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue