aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/workerglobalscope.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/workerglobalscope.rs')
-rw-r--r--components/script/dom/workerglobalscope.rs43
1 files changed, 38 insertions, 5 deletions
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index ef9afd34cf7..a8b5d9a48c3 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -17,12 +17,13 @@ use dom::eventtarget::EventTarget;
use dom::window::{base64_atob, base64_btoa};
use dom::workerlocation::WorkerLocation;
use dom::workernavigator::WorkerNavigator;
-use ipc_channel::ipc::IpcSender;
+use ipc_channel::ipc::{self, IpcSender};
+use ipc_channel::router::ROUTER;
use js::jsapi::{HandleValue, JSContext, JSRuntime, RootedValue};
use js::jsval::UndefinedValue;
use js::rust::Runtime;
-use msg::constellation_msg::{PanicMsg, PipelineId};
-use net_traits::{LoadContext, CoreResourceThread, load_whole_resource};
+use msg::constellation_msg::{PipelineId, ReferrerPolicy, PanicMsg};
+use net_traits::{LoadContext, CoreResourceThread, load_whole_resource, RequestSource, LoadOrigin, CustomResponseSender};
use profile_traits::{mem, time};
use script_runtime::{CommonScriptMsg, ScriptChan, ScriptPort};
use script_traits::ScriptMsg as ConstellationMsg;
@@ -101,6 +102,12 @@ pub struct WorkerGlobalScope {
#[ignore_heap_size_of = "Defined in ipc-channel"]
panic_chan: IpcSender<PanicMsg>,
+
+ #[ignore_heap_size_of = "Defined in ipc-channel"]
+ custom_msg_chan: IpcSender<CustomResponseSender>,
+
+ #[ignore_heap_size_of = "Defined in std"]
+ custom_msg_port: Receiver<CustomResponseSender>,
}
impl WorkerGlobalScope {
@@ -110,7 +117,8 @@ impl WorkerGlobalScope {
from_devtools_receiver: Receiver<DevtoolScriptControlMsg>,
timer_event_chan: IpcSender<TimerEvent>)
-> WorkerGlobalScope {
-
+ let (msg_chan, msg_port) = ipc::channel().unwrap();
+ let custom_msg_port = ROUTER.route_ipc_receiver_to_new_mpsc_receiver(msg_port);
WorkerGlobalScope {
eventtarget: EventTarget::new_inherited(),
next_worker_id: Cell::new(WorkerId(0)),
@@ -133,6 +141,8 @@ impl WorkerGlobalScope {
constellation_chan: init.constellation_chan,
scheduler_chan: init.scheduler_chan,
panic_chan: init.panic_chan,
+ custom_msg_chan: msg_chan,
+ custom_msg_port: custom_msg_port
}
}
@@ -182,6 +192,14 @@ impl WorkerGlobalScope {
self.runtime.cx()
}
+ pub fn custom_message_chan(&self) -> IpcSender<CustomResponseSender> {
+ self.custom_msg_chan.clone()
+ }
+
+ pub fn custom_message_port(&self) -> &Receiver<CustomResponseSender> {
+ &self.custom_msg_port
+ }
+
pub fn is_closing(&self) -> bool {
self.closing.load(Ordering::SeqCst)
}
@@ -210,6 +228,21 @@ impl WorkerGlobalScope {
}
}
+impl LoadOrigin for WorkerGlobalScope {
+ fn referrer_url(&self) -> Option<Url> {
+ None
+ }
+ fn referrer_policy(&self) -> Option<ReferrerPolicy> {
+ None
+ }
+ fn request_source(&self) -> RequestSource {
+ RequestSource::None
+ }
+ fn pipeline_id(&self) -> Option<PipelineId> {
+ Some(self.pipeline())
+ }
+}
+
impl WorkerGlobalScopeMethods for WorkerGlobalScope {
// https://html.spec.whatwg.org/multipage/#dom-workerglobalscope-self
fn Self_(&self) -> Root<WorkerGlobalScope> {
@@ -236,7 +269,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
let mut rval = RootedValue::new(self.runtime.cx(), UndefinedValue());
for url in urls {
- let (url, source) = match load_whole_resource(LoadContext::Script, &self.core_resource_thread, url, None) {
+ let (url, source) = match load_whole_resource(LoadContext::Script, &self.core_resource_thread, url, self) {
Err(_) => return Err(Error::Network),
Ok((metadata, bytes)) => {
(metadata.final_url, String::from_utf8(bytes).unwrap())