mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Auto merge of #18600 - servo:promises, r=<try>
Improve Promise The elephant 🐘 (not PHP's) still remains in the room: `Rc<Promise>` shouldn't require `#[allow(unrooted_must_root)]`. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/18600) <!-- Reviewable:end -->
This commit is contained in:
commit
4af0d9acb3
22 changed files with 184 additions and 245 deletions
|
@ -82,7 +82,7 @@ use html5ever::serialize;
|
|||
use html5ever::serialize::SerializeOpts;
|
||||
use html5ever::serialize::TraversalScope;
|
||||
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
|
||||
use js::jsapi::{HandleValue, Heap, JSAutoCompartment};
|
||||
use js::jsapi::Heap;
|
||||
use js::jsval::JSVal;
|
||||
use net_traits::request::CorsSettings;
|
||||
use ref_filter_map::ref_filter_map;
|
||||
|
@ -3057,17 +3057,13 @@ impl TaskOnce for ElementPerformFullscreenEnter {
|
|||
#[allow(unrooted_must_root)]
|
||||
fn run_once(self) {
|
||||
let element = self.element.root();
|
||||
let promise = self.promise.root();
|
||||
let document = document_from_node(element.r());
|
||||
|
||||
// Step 7.1
|
||||
if self.error || !element.fullscreen_element_ready_check() {
|
||||
// JSAutoCompartment needs to be manually made.
|
||||
// Otherwise, Servo will crash.
|
||||
let promise = self.promise.root();
|
||||
let promise_cx = promise.global().get_cx();
|
||||
let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
|
||||
document.upcast::<EventTarget>().fire_event(atom!("fullscreenerror"));
|
||||
promise.reject_error(promise.global().get_cx(), Error::Type(String::from("fullscreen is not connected")));
|
||||
promise.reject_error(Error::Type(String::from("fullscreen is not connected")));
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -3083,12 +3079,7 @@ impl TaskOnce for ElementPerformFullscreenEnter {
|
|||
document.upcast::<EventTarget>().fire_event(atom!("fullscreenchange"));
|
||||
|
||||
// Step 7.7
|
||||
// JSAutoCompartment needs to be manually made.
|
||||
// Otherwise, Servo will crash.
|
||||
let promise = self.promise.root();
|
||||
let promise_cx = promise.global().get_cx();
|
||||
let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
|
||||
promise.resolve(promise.global().get_cx(), HandleValue::undefined());
|
||||
promise.resolve_native(&());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3125,12 +3116,7 @@ impl TaskOnce for ElementPerformFullscreenExit {
|
|||
document.upcast::<EventTarget>().fire_event(atom!("fullscreenchange"));
|
||||
|
||||
// Step 9.10
|
||||
let promise = self.promise.root();
|
||||
// JSAutoCompartment needs to be manually made.
|
||||
// Otherwise, Servo will crash.
|
||||
let promise_cx = promise.global().get_cx();
|
||||
let _ac = JSAutoCompartment::new(promise_cx, promise.reflector().get_jsobject().get());
|
||||
promise.resolve(promise.global().get_cx(), HandleValue::undefined());
|
||||
self.promise.root().resolve_native(&());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue