Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upImplement ExtendableEvent as base type for ServiceWorker events #13292
Conversation
highfive
commented
Sep 16, 2016
|
Heads up! This PR modifies the following files:
|
highfive
commented
Sep 16, 2016
|
|
||
| fn dispatch_activate(&self) { | ||
| let event = ExtendableEvent::new(GlobalRef::Worker(self.upcast::<WorkerGlobalScope>()), | ||
| atom!("activate"), |
This comment has been minimized.
This comment has been minimized.
| [Constructor(DOMString type, | ||
| optional ExtendableEventInit eventInitDict), | ||
| Exposed=ServiceWorker, | ||
| Pref="dom.serviceworker.enabled" ] |
This comment has been minimized.
This comment has been minimized.
|
|
||
| [ Constructor(DOMString type, optional ExtendableMessageEventInit eventInitDict), | ||
| Exposed=ServiceWorker, | ||
| Pref="dom.serviceworker.enabled" ] |
This comment has been minimized.
This comment has been minimized.
| impl ExtendableMessageEvent { | ||
| pub fn new_uninitialized(global: GlobalRef) -> Root<ExtendableMessageEvent> { | ||
| ExtendableMessageEvent::new_initialized(global, | ||
| HandleValue::undefined(), |
This comment has been minimized.
This comment has been minimized.
| extensions_allowed: true | ||
| } | ||
| } | ||
| pub fn new_uninitialized(global: GlobalRef) -> Root<ExtendableEvent> { |
This comment has been minimized.
This comment has been minimized.
jdm
Sep 16, 2016
Member
I don't see any need to have the split between initialized/uninitialized. That's only for older event types that can be created in an uninitialized states.
| init.parent.cancelable)) | ||
| } | ||
|
|
||
| fn init_extendable_event(&self, |
This comment has been minimized.
This comment has been minimized.
| DOMString::new()) | ||
| } | ||
|
|
||
| pub fn new_initialized(global: GlobalRef, |
This comment has been minimized.
This comment has been minimized.
| pub fn WaitUntil(&self, _cx: *mut JSContext, val: HandleValue) { | ||
| // Step 1 | ||
| if !self.extensions_allowed { | ||
| // TODO throw invalid state error, but this does not return a `Fallible` ? |
This comment has been minimized.
This comment has been minimized.
| type_: DOMString, | ||
| init: &ExtendableEventBinding::ExtendableEventInit) -> Fallible<Root<ExtendableEvent>> { | ||
| Ok(ExtendableEvent::new(global, | ||
| Atom::from(type_), |
This comment has been minimized.
This comment has been minimized.
|
The indentation in dispatch_activate is still incorrect. |
| let ev = reflect_dom_object(box ExtendableEvent::new_inherited(), global, ExtendableEventBinding::Wrap); | ||
| { | ||
| let ev = ev.upcast::<Event>(); | ||
| if !ev.dispatching() { |
This comment has been minimized.
This comment has been minimized.
| DOMString::new(), | ||
| DOMString::new()) | ||
| } | ||
|
|
||
| pub fn new_initialized(global: GlobalRef, |
This comment has been minimized.
This comment has been minimized.
|
We can include the update to string_cache now, since it's been published. |
| reflect_dom_object(box ExtendableEvent::new_inherited(), | ||
| global, | ||
| ExtendableEventBinding::Wrap) | ||
| } | ||
| pub fn new(global: GlobalRef, | ||
| type_: Atom, | ||
| bubbles: bool, | ||
| cancelable: bool) |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
| let ev = ExtendableEvent::new_uninitialized(global); | ||
| ev.init_extendable_event(type_, bubbles, cancelable); | ||
| ev | ||
| reflect_dom_object(box ExtendableEvent::new_inherited(), global, ExtendableEventBinding::Wrap) | ||
| } | ||
|
|
||
| pub fn Constructor(global: GlobalRef, | ||
| type_: DOMString, | ||
| init: &ExtendableEventBinding::ExtendableEventInit) -> Fallible<Root<ExtendableEvent>> { |
This comment has been minimized.
This comment has been minimized.
| } | ||
|
|
||
| // https://w3c.github.io/ServiceWorker/#wait-until-method | ||
| pub fn WaitUntil(&self, _cx: *mut JSContext, val: HandleValue) { | ||
| pub fn WaitUntil(&self, _cx: *mut JSContext, val: HandleValue) -> Fallible<()> { |
This comment has been minimized.
This comment has been minimized.
| { | ||
| let event = ev.upcast::<Event>(); | ||
| event.init_event(type_, bubbles, cancelable); | ||
| } | ||
| ev | ||
| reflect_dom_object(ev, global, ExtendableMessageEventBinding::Wrap) |
This comment has been minimized.
This comment has been minimized.
jdm
Sep 16, 2016
Member
We should reflect the object as soon as possible after creating it, otherwise we risk GC-unsafety.
| @@ -38,11 +38,12 @@ impl ExtendableMessageEvent { | |||
| lastEventId: lastEventId, | |||
| }; | |||
| ev.data.set(data.get()); | |||
| let ev = reflect_dom_object(ev, global, ExtendableMessageEventBinding::Wrap); | |||
| { | |||
This comment has been minimized.
This comment has been minimized.
creativcoder
Sep 17, 2016
•
Author
Contributor
@jdm Will this be safe place of invocation for reflect_dom_object ?
This comment has been minimized.
This comment has been minimized.
|
@bors-servo: delegate+ |
|
|
|
@bors-servo r=jdm |
|
|
Implement ExtendableEvent as base type for ServiceWorker events <!-- Please describe your changes on the following line: --> r? @jdm --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [X] These changes do not require tests because refactor <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- 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/13292) <!-- Reviewable:end -->
|
|
creativcoder commentedSep 16, 2016
•
edited
r? @jdm
./mach build -ddoes not report any errors./mach test-tidydoes not report any errorsThis change is