mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
require entered realm, use aes, to append native promise handler
This commit is contained in:
parent
bd5796c90b
commit
48d4aec5b6
4 changed files with 29 additions and 26 deletions
|
@ -10,7 +10,6 @@ use crate::dom::bindings::error::{Error, Fallible};
|
||||||
use crate::dom::bindings::refcounted::Trusted;
|
use crate::dom::bindings::refcounted::Trusted;
|
||||||
use crate::dom::bindings::reflector::DomObject;
|
use crate::dom::bindings::reflector::DomObject;
|
||||||
use crate::dom::bindings::root::DomRoot;
|
use crate::dom::bindings::root::DomRoot;
|
||||||
use crate::dom::bindings::settings_stack::AutoIncumbentScript;
|
|
||||||
use crate::dom::bindings::str::{DOMString, USVString};
|
use crate::dom::bindings::str::{DOMString, USVString};
|
||||||
use crate::dom::bindings::trace::RootedTraceableBox;
|
use crate::dom::bindings::trace::RootedTraceableBox;
|
||||||
use crate::dom::blob::{normalize_type_string, Blob};
|
use crate::dom::blob::{normalize_type_string, Blob};
|
||||||
|
@ -137,11 +136,9 @@ impl TransmitBodyConnectHandler {
|
||||||
|
|
||||||
let handler = PromiseNativeHandler::new(&global, Some(promise_handler), Some(rejection_handler));
|
let handler = PromiseNativeHandler::new(&global, Some(promise_handler), Some(rejection_handler));
|
||||||
|
|
||||||
// Enter a realm, and a script,
|
let realm = enter_realm(&*global);
|
||||||
// before appending the native handler.
|
let comp = InRealm::Entered(&realm);
|
||||||
let _realm = enter_realm(&*global);
|
promise.append_native_handler(&handler, comp);
|
||||||
let _ais = AutoIncumbentScript::new(&*global);
|
|
||||||
promise.append_native_handler(&handler);
|
|
||||||
}),
|
}),
|
||||||
&self.canceller,
|
&self.canceller,
|
||||||
);
|
);
|
||||||
|
@ -556,11 +553,9 @@ impl Callback for ConsumeBodyPromiseHandler {
|
||||||
let handler =
|
let handler =
|
||||||
PromiseNativeHandler::new(&global, Some(promise_handler), Some(rejection_handler));
|
PromiseNativeHandler::new(&global, Some(promise_handler), Some(rejection_handler));
|
||||||
|
|
||||||
// Enter a realm, and a script,
|
let realm = enter_realm(&*global);
|
||||||
// before appending the native handler.
|
let comp = InRealm::Entered(&realm);
|
||||||
let _realm = enter_realm(&*global);
|
read_promise.append_native_handler(&handler, comp);
|
||||||
let _ais = AutoIncumbentScript::new(&*global);
|
|
||||||
read_promise.append_native_handler(&handler);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -581,7 +576,12 @@ pub fn consume_body<T: BodyMixin + DomObject>(object: &T, body_type: BodyType) -
|
||||||
return promise;
|
return promise;
|
||||||
}
|
}
|
||||||
|
|
||||||
consume_body_with_promise(object, body_type, promise.clone());
|
consume_body_with_promise(
|
||||||
|
object,
|
||||||
|
body_type,
|
||||||
|
promise.clone(),
|
||||||
|
InRealm::Already(&in_realm_proof),
|
||||||
|
);
|
||||||
|
|
||||||
promise
|
promise
|
||||||
}
|
}
|
||||||
|
@ -592,6 +592,7 @@ fn consume_body_with_promise<T: BodyMixin + DomObject>(
|
||||||
object: &T,
|
object: &T,
|
||||||
body_type: BodyType,
|
body_type: BodyType,
|
||||||
promise: Rc<Promise>,
|
promise: Rc<Promise>,
|
||||||
|
comp: InRealm,
|
||||||
) {
|
) {
|
||||||
let global = object.global();
|
let global = object.global();
|
||||||
|
|
||||||
|
@ -637,7 +638,7 @@ fn consume_body_with_promise<T: BodyMixin + DomObject>(
|
||||||
Some(rejection_handler),
|
Some(rejection_handler),
|
||||||
);
|
);
|
||||||
// We are already in a realm and a script.
|
// We are already in a realm and a script.
|
||||||
read_promise.append_native_handler(&handler);
|
read_promise.append_native_handler(&handler, comp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://fetch.spec.whatwg.org/#concept-body-package-data
|
// https://fetch.spec.whatwg.org/#concept-body-package-data
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
use crate::dom::bindings::conversions::root_from_object;
|
use crate::dom::bindings::conversions::root_from_object;
|
||||||
use crate::dom::bindings::error::{Error, Fallible};
|
use crate::dom::bindings::error::{Error, Fallible};
|
||||||
use crate::dom::bindings::reflector::{DomObject, MutDomObject, Reflector};
|
use crate::dom::bindings::reflector::{DomObject, MutDomObject, Reflector};
|
||||||
|
use crate::dom::bindings::settings_stack::AutoEntryScript;
|
||||||
use crate::dom::bindings::utils::AsCCharPtrPtr;
|
use crate::dom::bindings::utils::AsCCharPtrPtr;
|
||||||
use crate::dom::globalscope::GlobalScope;
|
use crate::dom::globalscope::GlobalScope;
|
||||||
use crate::dom::promisenativehandler::PromiseNativeHandler;
|
use crate::dom::promisenativehandler::PromiseNativeHandler;
|
||||||
|
@ -242,7 +243,8 @@ impl Promise {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
pub fn append_native_handler(&self, handler: &PromiseNativeHandler) {
|
pub fn append_native_handler(&self, handler: &PromiseNativeHandler, _comp: InRealm) {
|
||||||
|
let _ais = AutoEntryScript::new(&*handler.global());
|
||||||
let cx = self.global().get_cx();
|
let cx = self.global().get_cx();
|
||||||
rooted!(in(*cx) let resolve_func =
|
rooted!(in(*cx) let resolve_func =
|
||||||
create_native_handler_function(*cx,
|
create_native_handler_function(*cx,
|
||||||
|
|
|
@ -1003,8 +1003,8 @@ impl TestBindingMethods for TestBinding {
|
||||||
resolve.map(SimpleHandler::new),
|
resolve.map(SimpleHandler::new),
|
||||||
reject.map(SimpleHandler::new),
|
reject.map(SimpleHandler::new),
|
||||||
);
|
);
|
||||||
let p = Promise::new_in_current_realm(&global, comp);
|
let p = Promise::new_in_current_realm(&global, comp.clone());
|
||||||
p.append_native_handler(&handler);
|
p.append_native_handler(&handler, comp);
|
||||||
return p;
|
return p;
|
||||||
|
|
||||||
#[derive(JSTraceable, MallocSizeOf)]
|
#[derive(JSTraceable, MallocSizeOf)]
|
||||||
|
|
|
@ -321,13 +321,13 @@ impl ModuleTree {
|
||||||
))),
|
))),
|
||||||
);
|
);
|
||||||
|
|
||||||
let _realm = enter_realm(&*owner.global());
|
let global = owner.global();
|
||||||
AlreadyInRealm::assert(&*owner.global());
|
let realm = enter_realm(&*global);
|
||||||
let _ais = AutoIncumbentScript::new(&*owner.global());
|
let comp = InRealm::Entered(&realm);
|
||||||
|
|
||||||
let promise = promise.as_ref().unwrap();
|
let promise = promise.as_ref().unwrap();
|
||||||
|
|
||||||
promise.append_native_handler(&handler);
|
promise.append_native_handler(&handler, comp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -723,13 +723,13 @@ impl ModuleOwner {
|
||||||
))),
|
))),
|
||||||
);
|
);
|
||||||
|
|
||||||
let realm = enter_realm(&*self.global());
|
let global = self.global();
|
||||||
|
let realm = enter_realm(&*global);
|
||||||
let comp = InRealm::Entered(&realm);
|
let comp = InRealm::Entered(&realm);
|
||||||
let _ais = AutoIncumbentScript::new(&*self.global());
|
|
||||||
|
|
||||||
let promise = Promise::new_in_current_realm(&self.global(), comp);
|
let promise = Promise::new_in_current_realm(&self.global(), comp);
|
||||||
|
|
||||||
promise.append_native_handler(&handler);
|
promise.append_native_handler(&handler, comp);
|
||||||
|
|
||||||
promise
|
promise
|
||||||
}
|
}
|
||||||
|
@ -1362,8 +1362,7 @@ fn fetch_module_descendants_and_link(
|
||||||
unsafe {
|
unsafe {
|
||||||
let global = owner.global();
|
let global = owner.global();
|
||||||
|
|
||||||
let _realm = enter_realm(&*global);
|
let realm = enter_realm(&*global);
|
||||||
AlreadyInRealm::assert(&*global);
|
|
||||||
let _ais = AutoIncumbentScript::new(&*global);
|
let _ais = AutoIncumbentScript::new(&*global);
|
||||||
|
|
||||||
let abv = RootedObjectVectorWrapper::new(*global.get_cx());
|
let abv = RootedObjectVectorWrapper::new(*global.get_cx());
|
||||||
|
@ -1402,7 +1401,8 @@ fn fetch_module_descendants_and_link(
|
||||||
))),
|
))),
|
||||||
);
|
);
|
||||||
|
|
||||||
promise_all.append_native_handler(&handler);
|
let comp = InRealm::Entered(&realm);
|
||||||
|
promise_all.append_native_handler(&handler, comp);
|
||||||
|
|
||||||
return Some(promise_all);
|
return Some(promise_all);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue