diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs index 17fea7100be8..4487c064fe12 100644 --- a/components/script/dom/serviceworkercontainer.rs +++ b/components/script/dom/serviceworkercontainer.rs @@ -6,6 +6,7 @@ use dom::bindings::codegen::Bindings::ServiceWorkerContainerBinding::Registratio use dom::bindings::codegen::Bindings::ServiceWorkerContainerBinding::{ServiceWorkerContainerMethods, Wrap}; use dom::bindings::error::{Error, Fallible}; use dom::bindings::global::GlobalRef; +use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root}; use dom::bindings::reflector::{Reflectable, reflect_dom_object}; use dom::bindings::str::USVString; @@ -41,7 +42,8 @@ pub trait Controllable { impl Controllable for ServiceWorkerContainer { fn set_controller(&self, active_worker: &ServiceWorker) { - self.controller.set(Some(active_worker)) + self.controller.set(Some(active_worker)); + self.upcast::().fire_simple_event("controllerchange"); } } diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index c6a238ac10fd..dc8a8788a61d 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -15,6 +15,7 @@ use dom::bindings::js::{Root, RootCollection}; use dom::bindings::refcounted::LiveDOMReferences; use dom::bindings::reflector::Reflectable; use dom::bindings::str::DOMString; +use dom::eventtarget::EventTarget; use dom::messageevent::MessageEvent; use dom::serviceworker::TrustedServiceWorkerAddress; use dom::workerglobalscope::WorkerGlobalScope; @@ -161,11 +162,9 @@ impl ServiceWorkerGlobalScope { let (devtools_mpsc_chan, devtools_mpsc_port) = channel(); ROUTER.route_ipc_receiver_to_mpsc_sender(devtools_receiver, devtools_mpsc_chan); - // TODO XXXcreativcoder use this timer_ipc_port, when we have a service worker instance here let (timer_ipc_chan, _timer_ipc_port) = ipc::channel().unwrap(); let (timer_chan, timer_port) = channel(); - let global = ServiceWorkerGlobalScope::new( init, url, pipeline_id, devtools_mpsc_port, runtime, own_sender, receiver, @@ -178,7 +177,6 @@ impl ServiceWorkerGlobalScope { } scope.execute_script(DOMString::from(source)); - // Service workers are time limited spawn_named("SWTimeoutThread".to_owned(), move || { let sw_lifetime_timeout = PREFS.get("dom.serviceworker.timeout_seconds").as_u64().unwrap(); @@ -186,6 +184,7 @@ impl ServiceWorkerGlobalScope { let _ = timer_chan.send(()); }); + scope.upcast::().fire_simple_event("activate"); let reporter_name = format!("service-worker-reporter-{}", random::()); scope.mem_profiler_chan().run_with_memory_reporting(|| { while let Ok(event) = global.receive_event() { @@ -250,6 +249,10 @@ impl ServiceWorkerGlobalScope { reports_chan.send(reports); }, Response(mediator) => { + // TODO XXXcreativcoder This will eventually use a FetchEvent interface to fire event + // when we have the Request and Response dom api's implemented + // https://slightlyoff.github.io/ServiceWorker/spec/service_worker_1/index.html#fetch-event-section + self.upcast::().fire_simple_event("fetch"); let _ = mediator.response_chan.send(None); } } diff --git a/tests/html/service-worker/assets/tty.gif b/tests/html/service-worker/assets/tty.gif deleted file mode 100644 index 7c9b2c26c658..000000000000 Binary files a/tests/html/service-worker/assets/tty.gif and /dev/null differ diff --git a/tests/html/service-worker/dashboard_helper.js b/tests/html/service-worker/dashboard_helper.js new file mode 100644 index 000000000000..2160ed8420cf --- /dev/null +++ b/tests/html/service-worker/dashboard_helper.js @@ -0,0 +1,3 @@ +function status_from_dashboard() { + console.log("Dashboard Service worker is active"); +} \ No newline at end of file diff --git a/tests/html/service-worker/demo_iframe.html b/tests/html/service-worker/demo_iframe.html index f016b5d71aa2..ea0f4fb94941 100644 --- a/tests/html/service-worker/demo_iframe.html +++ b/tests/html/service-worker/demo_iframe.html @@ -2,7 +2,7 @@ - An iframe + Servo Browser Engine
diff --git a/tests/html/service-worker/dummy.js b/tests/html/service-worker/dummy.js deleted file mode 100644 index e627bfc5539d..000000000000 --- a/tests/html/service-worker/dummy.js +++ /dev/null @@ -1 +0,0 @@ -console.log("dummy test file"); \ No newline at end of file diff --git a/tests/html/service-worker/iframe_sw.js b/tests/html/service-worker/iframe_sw.js index c57a92d7bf3e..d9c76b8d6f12 100644 --- a/tests/html/service-worker/iframe_sw.js +++ b/tests/html/service-worker/iframe_sw.js @@ -1 +1,7 @@ -console.log("iframe service worker active"); \ No newline at end of file +self.addEventListener('activate', function(e) { + console.log("iframe service worker active"); +}); + +self.addEventListener('fetch', function(e) { + console.log("A fetch event detected by /iframe service worker"); +}); \ No newline at end of file diff --git a/tests/html/service-worker/index.html b/tests/html/service-worker/index.html index ab11b754f315..1b38ffafd3b2 100644 --- a/tests/html/service-worker/index.html +++ b/tests/html/service-worker/index.html @@ -6,38 +6,46 @@

This page tests the registration and initialization of Service Workers in Servo.

-
+ +
+ +
Go to Dashboard Go to Profile -
- - - + + +
+ \ No newline at end of file diff --git a/tests/html/service-worker/sw.js b/tests/html/service-worker/sw.js index df748f34ebb9..e69de29bb2d1 100644 --- a/tests/html/service-worker/sw.js +++ b/tests/html/service-worker/sw.js @@ -1 +0,0 @@ -console.log("root service worker: active"); \ No newline at end of file diff --git a/tests/html/service-worker/sw_dashboard.js b/tests/html/service-worker/sw_dashboard.js index 1d18a5d47dd0..472fe03cca1b 100644 --- a/tests/html/service-worker/sw_dashboard.js +++ b/tests/html/service-worker/sw_dashboard.js @@ -1,2 +1,9 @@ -importScripts('dummy.js'); -console.log("dashboard service worker: active"); +importScripts('dashboard_helper.js'); + +self.addEventListener('activate', function(e) { + status_from_dashboard(); +}); + +self.addEventListener('fetch', function(e) { + console.log("A fetch event detected by /dashboard service worker"); +}); \ No newline at end of file diff --git a/tests/html/service-worker/sw_profile.js b/tests/html/service-worker/sw_profile.js index 10e206ce01aa..8834ece77195 100644 --- a/tests/html/service-worker/sw_profile.js +++ b/tests/html/service-worker/sw_profile.js @@ -1 +1,8 @@ -console.log("profile service worker: active"); \ No newline at end of file + +self.addEventListener('activate', function(e) { + console.log("profile service worker active"); +}); + +self.addEventListener('fetch', function(e) { + console.log("A fetch event detected by /profile service worker"); +}); \ No newline at end of file