Files
tubestation/servo/components/script/dom/client.rs
Rahul Sharma bf2cbfad51 servo: Merge #13574 - Implement job queue for ServiceWorkerRegistration (from creativcoder:job-iface); r=jdm
<!-- Please describe your changes on the following line: -->

Fixes #13424
As of now this PR (Work in Progress), will try to implement (partially) on algorithms namely : [Schedule_Job](https://w3c.github.io/ServiceWorker/#schedule-job-algorithm), [Run_Job](https://w3c.github.io/ServiceWorker/#run-job-algorithm), [Register_Job](https://w3c.github.io/ServiceWorker/#register-algorithm).

 An issue that needs to be addressed:
Resolving the promise value after queueing it as a `dom_manipulation_task` by wrapping it in a runnable `RunJobHandler` (which holds a `TrustedPromise`) and trying to call `resolve_native` results in a crash. [stack trace](http://paste.ofcode.org/zdjJ9npBgX6JsyWQkJjnYk)

@jdm I am not sure what's causing the crash ?

---

<!-- 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: -->
- [ ] There are tests for these changes OR
- [ ] These changes do not require tests because _____

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

Source-Repo: https://github.com/servo/servo
Source-Revision: 0ea0ade71dfd445841035abb5f3ea35161b075d2
2016-11-21 14:52:02 -06:00

73 lines
2.1 KiB
Rust

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::ClientBinding::{ClientMethods, Wrap};
use dom::bindings::codegen::Bindings::ClientBinding::FrameType;
use dom::bindings::js::{JS, Root, MutNullableHeap};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::serviceworker::ServiceWorker;
use dom::window::Window;
use servo_url::ServoUrl;
use std::default::Default;
use uuid::Uuid;
#[dom_struct]
pub struct Client {
reflector_: Reflector,
active_worker: MutNullableHeap<JS<ServiceWorker>>,
url: ServoUrl,
frame_type: FrameType,
#[ignore_heap_size_of = "Defined in uuid"]
id: Uuid
}
impl Client {
fn new_inherited(url: ServoUrl) -> Client {
Client {
reflector_: Reflector::new(),
active_worker: Default::default(),
url: url,
frame_type: FrameType::None,
id: Uuid::new_v4()
}
}
pub fn new(window: &Window) -> Root<Client> {
reflect_dom_object(box Client::new_inherited(window.get_url()),
window,
Wrap)
}
pub fn creation_url(&self) -> ServoUrl {
self.url.clone()
}
pub fn get_controller(&self) -> Option<Root<ServiceWorker>> {
self.active_worker.get()
}
pub fn set_controller(&self, worker: &ServiceWorker) {
self.active_worker.set(Some(worker));
}
}
impl ClientMethods for Client {
// https://w3c.github.io/ServiceWorker/#client-url-attribute
fn Url(&self) -> USVString {
USVString(self.url.as_str().to_owned())
}
// https://w3c.github.io/ServiceWorker/#client-frametype
fn FrameType(&self) -> FrameType {
self.frame_type
}
// https://w3c.github.io/ServiceWorker/#client-id
fn Id(&self) -> DOMString {
let uid_str = format!("{}", self.id);
DOMString::from_string(uid_str)
}
}