From 603c0b889a8e53b23f8a74a3fb01a875b394f1a6 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 15:34:04 +0200 Subject: [PATCH 1/6] Move the code to start the worker into DedicatedWorkerGlobalScope::run_worker_scope. This is somewhat cleaner than keeping it all in the Worker constructor. --- .../script/dom/dedicatedworkerglobalscope.rs | 36 ++++++++++++++++++- src/components/script/dom/worker.rs | 33 ++--------------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 13eb6c958da..4d554ec8871 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -4,17 +4,23 @@ use dom::bindings::codegen::Bindings::DedicatedWorkerGlobalScopeBinding; use dom::bindings::codegen::InheritTypes::DedicatedWorkerGlobalScopeDerived; -use dom::bindings::js::Temporary; +use dom::bindings::js::{Temporary, RootCollection}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::eventtarget::EventTarget; use dom::eventtarget::WorkerGlobalScopeTypeId; use dom::workerglobalscope::DedicatedGlobalScope; use dom::workerglobalscope::WorkerGlobalScope; use script_task::ScriptTask; +use script_task::StackRootTLS; + +use servo_net::resource_task::{ResourceTask, load_whole_resource}; use js::rust::Cx; use std::rc::Rc; +use native; +use rustrt::task::TaskOpts; +use url::Url; #[deriving(Encodable)] pub struct DedicatedWorkerGlobalScope { @@ -43,6 +49,34 @@ impl DedicatedWorkerGlobalScope { } } +impl DedicatedWorkerGlobalScope { + pub fn run_worker_scope(worker_url: Url, resource_task: ResourceTask) { + let mut task_opts = TaskOpts::new(); + task_opts.name = Some(format!("Web Worker at {}", worker_url).into_maybe_owned()); + native::task::spawn_opts(task_opts, proc() { + let roots = RootCollection::new(); + let _stack_roots_tls = StackRootTLS::new(&roots); + + let (filename, source) = match load_whole_resource(&resource_task, worker_url.clone()) { + Err(_) => { + println!("error loading script {}", worker_url); + return; + } + Ok((metadata, bytes)) => { + (metadata.final_url, String::from_utf8(bytes).unwrap()) + } + }; + + let global = DedicatedWorkerGlobalScope::init().root(); + match global.get_rust_cx().evaluate_script( + global.reflector().get_jsobject(), source, filename.to_str(), 1) { + Ok(_) => (), + Err(_) => println!("evaluate_script failed") + } + }); + } +} + pub trait DedicatedWorkerGlobalScopeMethods { } diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs index d28d4958ab8..503632de5a8 100644 --- a/src/components/script/dom/worker.rs +++ b/src/components/script/dom/worker.rs @@ -5,19 +5,14 @@ use dom::bindings::codegen::Bindings::WorkerBinding; use dom::bindings::error::{Fallible, Syntax}; use dom::bindings::global::GlobalRef; -use dom::bindings::js::{Temporary, RootCollection}; +use dom::bindings::js::Temporary; use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object}; use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope; use dom::eventtarget::{EventTarget, WorkerTypeId}; -use script_task::StackRootTLS; -use servo_net::resource_task::load_whole_resource; use servo_util::str::DOMString; use servo_util::url::try_parse_url; -use native; -use rustrt::task::TaskOpts; - #[deriving(Encodable)] pub struct Worker { eventtarget: EventTarget, @@ -45,31 +40,7 @@ impl Worker { }; let resource_task = global.page().resource_task.deref().clone(); - - let mut task_opts = TaskOpts::new(); - task_opts.name = Some(format!("Web Worker at {}", worker_url).into_maybe_owned()); - native::task::spawn_opts(task_opts, proc() { - let roots = RootCollection::new(); - let _stack_roots_tls = StackRootTLS::new(&roots); - - let (filename, source) = match load_whole_resource(&resource_task, worker_url.clone()) { - Err(_) => { - println!("error loading script {}", worker_url); - return; - } - Ok((metadata, bytes)) => { - (metadata.final_url, String::from_utf8(bytes).unwrap()) - } - }; - - let global = DedicatedWorkerGlobalScope::init().root(); - match global.get_rust_cx().evaluate_script( - global.reflector().get_jsobject(), source, filename.to_str(), 1) { - Ok(_) => (), - Err(_) => println!("evaluate_script failed") - } - }); - + DedicatedWorkerGlobalScope::run_worker_scope(worker_url, resource_task); Ok(Worker::new(global)) } } From 31376a6a796beba282cc0af1853b1fb5db603593 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 15:45:32 +0200 Subject: [PATCH 2/6] Inline DedicatedWorkerGlobalScope::init. This was an unnecessary abstraction. --- .../script/dom/dedicatedworkerglobalscope.rs | 14 +++----------- src/components/script/dom/workerglobalscope.rs | 3 --- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 4d554ec8871..0f10552cdbe 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -38,15 +38,6 @@ impl DedicatedWorkerGlobalScope { let scope = box DedicatedWorkerGlobalScope::new_inherited(cx.clone()); DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) } - - pub fn init() -> Temporary { - let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); - DedicatedWorkerGlobalScope::new(js_context.clone()) - } - - pub fn get_rust_cx<'a>(&'a self) -> &'a Rc { - self.workerglobalscope.get_rust_cx() - } } impl DedicatedWorkerGlobalScope { @@ -67,8 +58,9 @@ impl DedicatedWorkerGlobalScope { } }; - let global = DedicatedWorkerGlobalScope::init().root(); - match global.get_rust_cx().evaluate_script( + let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); + let global = DedicatedWorkerGlobalScope::new(js_context.clone()).root(); + match js_context.evaluate_script( global.reflector().get_jsobject(), source, filename.to_str(), 1) { Ok(_) => (), Err(_) => println!("evaluate_script failed") diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index e6f9235723d..649de7628d9 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -37,9 +37,6 @@ impl WorkerGlobalScope { } } - pub fn get_rust_cx<'a>(&'a self) -> &'a Rc { - &*self.js_context - } pub fn get_cx(&self) -> *mut JSContext { self.js_context.ptr } From e22c8f9290526b6813915cc95e4bf521627f1a02 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 16:06:22 +0200 Subject: [PATCH 3/6] Store the ResourceTask on the WorkerGlobalScope. This is necessary to load dependent resources, such as through new Worker(), importScripts, XHR, ... --- .../script/dom/dedicatedworkerglobalscope.rs | 14 ++++++++++---- src/components/script/dom/workerglobalscope.rs | 7 ++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 0f10552cdbe..8023b949c20 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -28,14 +28,20 @@ pub struct DedicatedWorkerGlobalScope { } impl DedicatedWorkerGlobalScope { - pub fn new_inherited(cx: Rc) -> DedicatedWorkerGlobalScope { + pub fn new_inherited(cx: Rc, + resource_task: ResourceTask) + -> DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope { - workerglobalscope: WorkerGlobalScope::new_inherited(DedicatedGlobalScope, cx), + workerglobalscope: WorkerGlobalScope::new_inherited( + DedicatedGlobalScope, cx, resource_task), } } - pub fn new(cx: Rc) -> Temporary { - let scope = box DedicatedWorkerGlobalScope::new_inherited(cx.clone()); + pub fn new(cx: Rc, + resource_task: ResourceTask) + -> Temporary { + let scope = box DedicatedWorkerGlobalScope::new_inherited( + cx.clone(), resource_task); DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) } } diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index 649de7628d9..f4b78cde827 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -9,6 +9,8 @@ use dom::bindings::utils::{Reflectable, Reflector}; use dom::console::Console; use dom::eventtarget::{EventTarget, WorkerGlobalScopeTypeId}; +use servo_net::resource_task::ResourceTask; + use js::jsapi::JSContext; use js::rust::Cx; @@ -24,15 +26,18 @@ pub enum WorkerGlobalScopeId { pub struct WorkerGlobalScope { pub eventtarget: EventTarget, js_context: Untraceable>, + resource_task: Untraceable, console: Cell>>, } impl WorkerGlobalScope { pub fn new_inherited(type_id: WorkerGlobalScopeId, - cx: Rc) -> WorkerGlobalScope { + cx: Rc, + resource_task: ResourceTask) -> WorkerGlobalScope { WorkerGlobalScope { eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)), js_context: Untraceable::new(cx), + resource_task: Untraceable::new(resource_task), console: Cell::new(None), } } From 9fd67a751f0ce4990eaacad21c1845f6a6f2576e Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 16:22:52 +0200 Subject: [PATCH 4/6] Implement a resource_task getter on GlobalRef. This is needed to fetch resources on all threads. --- src/components/script/dom/bindings/global.rs | 10 +++++++--- .../script/dom/dedicatedworkerglobalscope.rs | 3 ++- src/components/script/dom/worker.rs | 2 +- src/components/script/dom/workerglobalscope.rs | 4 ++++ src/components/script/dom/xmlhttprequest.rs | 2 +- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/components/script/dom/bindings/global.rs b/src/components/script/dom/bindings/global.rs index 6d3f9c5cc44..00ec81ec006 100644 --- a/src/components/script/dom/bindings/global.rs +++ b/src/components/script/dom/bindings/global.rs @@ -8,9 +8,10 @@ use dom::bindings::js::{JS, JSRef, Root}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::workerglobalscope::WorkerGlobalScope; use dom::window::Window; -use page::Page; use script_task::ScriptChan; +use servo_net::resource_task::ResourceTask; + use js::jsapi::JSContext; use url::Url; @@ -46,8 +47,11 @@ impl<'a> GlobalRef<'a> { } } - pub fn page<'b>(&'b self) -> &'b Page { - self.as_window().page() + pub fn resource_task(&self) -> ResourceTask { + match *self { + Window(ref window) => window.page().resource_task.deref().clone(), + Worker(ref worker) => worker.resource_task().clone(), + } } pub fn get_url(&self) -> Url { diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 8023b949c20..6fc2b0c5fec 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -65,7 +65,8 @@ impl DedicatedWorkerGlobalScope { }; let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); - let global = DedicatedWorkerGlobalScope::new(js_context.clone()).root(); + let global = DedicatedWorkerGlobalScope::new( + js_context.clone(), resource_task).root(); match js_context.evaluate_script( global.reflector().get_jsobject(), source, filename.to_str(), 1) { Ok(_) => (), diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs index 503632de5a8..f357eca8ce3 100644 --- a/src/components/script/dom/worker.rs +++ b/src/components/script/dom/worker.rs @@ -39,7 +39,7 @@ impl Worker { Err(_) => return Err(Syntax), }; - let resource_task = global.page().resource_task.deref().clone(); + let resource_task = global.resource_task(); DedicatedWorkerGlobalScope::run_worker_scope(worker_url, resource_task); Ok(Worker::new(global)) } diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index f4b78cde827..f5cead5b1b0 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -45,6 +45,10 @@ impl WorkerGlobalScope { pub fn get_cx(&self) -> *mut JSContext { self.js_context.ptr } + + pub fn resource_task<'a>(&'a self) -> &'a ResourceTask { + &*self.resource_task + } } pub trait WorkerGlobalScopeMethods { diff --git a/src/components/script/dom/xmlhttprequest.rs b/src/components/script/dom/xmlhttprequest.rs index 6d93c5a95da..4487d4160d5 100644 --- a/src/components/script/dom/xmlhttprequest.rs +++ b/src/components/script/dom/xmlhttprequest.rs @@ -486,7 +486,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> { } let global = self.global.root(); - let resource_task = global.root_ref().page().resource_task.deref().clone(); + let resource_task = global.root_ref().resource_task(); let mut load_data = LoadData::new(self.request_url.deref().borrow().clone()); load_data.data = extracted; From 68cb00a32fba7e01222de8cef0df6c8ab94bb012 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 17:15:24 +0200 Subject: [PATCH 5/6] Store the worker's URL in the WorkerGlobalScope. This will be necessary to resolve relative URLs in the worker. --- src/components/script/dom/bindings/global.rs | 5 ++++- .../script/dom/dedicatedworkerglobalscope.rs | 12 +++++++----- src/components/script/dom/workerglobalscope.rs | 8 ++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/components/script/dom/bindings/global.rs b/src/components/script/dom/bindings/global.rs index 00ec81ec006..b2d0b765cc8 100644 --- a/src/components/script/dom/bindings/global.rs +++ b/src/components/script/dom/bindings/global.rs @@ -55,7 +55,10 @@ impl<'a> GlobalRef<'a> { } pub fn get_url(&self) -> Url { - self.as_window().get_url() + match *self { + Window(ref window) => window.get_url(), + Worker(ref worker) => worker.get_url().clone(), + } } pub fn script_chan<'b>(&'b self) -> &'b ScriptChan { diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 6fc2b0c5fec..268c4df54f4 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -28,20 +28,22 @@ pub struct DedicatedWorkerGlobalScope { } impl DedicatedWorkerGlobalScope { - pub fn new_inherited(cx: Rc, + pub fn new_inherited(worker_url: Url, + cx: Rc, resource_task: ResourceTask) -> DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope { workerglobalscope: WorkerGlobalScope::new_inherited( - DedicatedGlobalScope, cx, resource_task), + DedicatedGlobalScope, worker_url, cx, resource_task), } } - pub fn new(cx: Rc, + pub fn new(worker_url: Url, + cx: Rc, resource_task: ResourceTask) -> Temporary { let scope = box DedicatedWorkerGlobalScope::new_inherited( - cx.clone(), resource_task); + worker_url, cx.clone(), resource_task); DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) } } @@ -66,7 +68,7 @@ impl DedicatedWorkerGlobalScope { let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); let global = DedicatedWorkerGlobalScope::new( - js_context.clone(), resource_task).root(); + worker_url, js_context.clone(), resource_task).root(); match js_context.evaluate_script( global.reflector().get_jsobject(), source, filename.to_str(), 1) { Ok(_) => (), diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index f5cead5b1b0..c8114fd6ba8 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -16,6 +16,7 @@ use js::rust::Cx; use std::cell::Cell; use std::rc::Rc; +use url::Url; #[deriving(PartialEq,Encodable)] pub enum WorkerGlobalScopeId { @@ -25,6 +26,7 @@ pub enum WorkerGlobalScopeId { #[deriving(Encodable)] pub struct WorkerGlobalScope { pub eventtarget: EventTarget, + worker_url: Untraceable, js_context: Untraceable>, resource_task: Untraceable, console: Cell>>, @@ -32,10 +34,12 @@ pub struct WorkerGlobalScope { impl WorkerGlobalScope { pub fn new_inherited(type_id: WorkerGlobalScopeId, + worker_url: Url, cx: Rc, resource_task: ResourceTask) -> WorkerGlobalScope { WorkerGlobalScope { eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)), + worker_url: Untraceable::new(worker_url), js_context: Untraceable::new(cx), resource_task: Untraceable::new(resource_task), console: Cell::new(None), @@ -49,6 +53,10 @@ impl WorkerGlobalScope { pub fn resource_task<'a>(&'a self) -> &'a ResourceTask { &*self.resource_task } + + pub fn get_url<'a>(&'a self) -> &'a Url { + &*self.worker_url + } } pub trait WorkerGlobalScopeMethods { From ed946a747d86e4da78310f6d59acffe4bf3def48 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 18:02:55 +0200 Subject: [PATCH 6/6] Store the ScriptChan in the WorkerGlobalScope. This is necessary to make XMLHttpRequest and postMessage work. --- src/components/script/dom/bindings/global.rs | 5 ++++- .../script/dom/dedicatedworkerglobalscope.rs | 19 ++++++++++++------- src/components/script/dom/worker.rs | 2 +- .../script/dom/workerglobalscope.rs | 10 +++++++++- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/components/script/dom/bindings/global.rs b/src/components/script/dom/bindings/global.rs index b2d0b765cc8..2c4d9537fd2 100644 --- a/src/components/script/dom/bindings/global.rs +++ b/src/components/script/dom/bindings/global.rs @@ -62,7 +62,10 @@ impl<'a> GlobalRef<'a> { } pub fn script_chan<'b>(&'b self) -> &'b ScriptChan { - &self.as_window().script_chan + match *self { + Window(ref window) => &window.script_chan, + Worker(ref worker) => worker.script_chan(), + } } } diff --git a/src/components/script/dom/dedicatedworkerglobalscope.rs b/src/components/script/dom/dedicatedworkerglobalscope.rs index 268c4df54f4..578b13042a5 100644 --- a/src/components/script/dom/dedicatedworkerglobalscope.rs +++ b/src/components/script/dom/dedicatedworkerglobalscope.rs @@ -10,7 +10,7 @@ use dom::eventtarget::EventTarget; use dom::eventtarget::WorkerGlobalScopeTypeId; use dom::workerglobalscope::DedicatedGlobalScope; use dom::workerglobalscope::WorkerGlobalScope; -use script_task::ScriptTask; +use script_task::{ScriptTask, ScriptChan}; use script_task::StackRootTLS; use servo_net::resource_task::{ResourceTask, load_whole_resource}; @@ -30,26 +30,30 @@ pub struct DedicatedWorkerGlobalScope { impl DedicatedWorkerGlobalScope { pub fn new_inherited(worker_url: Url, cx: Rc, - resource_task: ResourceTask) + resource_task: ResourceTask, + script_chan: ScriptChan) -> DedicatedWorkerGlobalScope { DedicatedWorkerGlobalScope { workerglobalscope: WorkerGlobalScope::new_inherited( - DedicatedGlobalScope, worker_url, cx, resource_task), + DedicatedGlobalScope, worker_url, cx, resource_task, + script_chan), } } pub fn new(worker_url: Url, cx: Rc, - resource_task: ResourceTask) + resource_task: ResourceTask, + script_chan: ScriptChan) -> Temporary { let scope = box DedicatedWorkerGlobalScope::new_inherited( - worker_url, cx.clone(), resource_task); + worker_url, cx.clone(), resource_task, script_chan); DedicatedWorkerGlobalScopeBinding::Wrap(cx.ptr, scope) } } impl DedicatedWorkerGlobalScope { - pub fn run_worker_scope(worker_url: Url, resource_task: ResourceTask) { + pub fn run_worker_scope(worker_url: Url, resource_task: ResourceTask, + script_chan: ScriptChan) { let mut task_opts = TaskOpts::new(); task_opts.name = Some(format!("Web Worker at {}", worker_url).into_maybe_owned()); native::task::spawn_opts(task_opts, proc() { @@ -68,7 +72,8 @@ impl DedicatedWorkerGlobalScope { let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); let global = DedicatedWorkerGlobalScope::new( - worker_url, js_context.clone(), resource_task).root(); + worker_url, js_context.clone(), resource_task, + script_chan).root(); match js_context.evaluate_script( global.reflector().get_jsobject(), source, filename.to_str(), 1) { Ok(_) => (), diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs index f357eca8ce3..f0850d72e93 100644 --- a/src/components/script/dom/worker.rs +++ b/src/components/script/dom/worker.rs @@ -40,7 +40,7 @@ impl Worker { }; let resource_task = global.resource_task(); - DedicatedWorkerGlobalScope::run_worker_scope(worker_url, resource_task); + DedicatedWorkerGlobalScope::run_worker_scope(worker_url, resource_task, global.script_chan().clone()); Ok(Worker::new(global)) } } diff --git a/src/components/script/dom/workerglobalscope.rs b/src/components/script/dom/workerglobalscope.rs index c8114fd6ba8..4ce8a05247c 100644 --- a/src/components/script/dom/workerglobalscope.rs +++ b/src/components/script/dom/workerglobalscope.rs @@ -8,6 +8,7 @@ use dom::bindings::js::{JS, JSRef, Temporary, OptionalSettable}; use dom::bindings::utils::{Reflectable, Reflector}; use dom::console::Console; use dom::eventtarget::{EventTarget, WorkerGlobalScopeTypeId}; +use script_task::ScriptChan; use servo_net::resource_task::ResourceTask; @@ -29,6 +30,7 @@ pub struct WorkerGlobalScope { worker_url: Untraceable, js_context: Untraceable>, resource_task: Untraceable, + script_chan: ScriptChan, console: Cell>>, } @@ -36,12 +38,14 @@ impl WorkerGlobalScope { pub fn new_inherited(type_id: WorkerGlobalScopeId, worker_url: Url, cx: Rc, - resource_task: ResourceTask) -> WorkerGlobalScope { + resource_task: ResourceTask, + script_chan: ScriptChan) -> WorkerGlobalScope { WorkerGlobalScope { eventtarget: EventTarget::new_inherited(WorkerGlobalScopeTypeId(type_id)), worker_url: Untraceable::new(worker_url), js_context: Untraceable::new(cx), resource_task: Untraceable::new(resource_task), + script_chan: script_chan, console: Cell::new(None), } } @@ -57,6 +61,10 @@ impl WorkerGlobalScope { pub fn get_url<'a>(&'a self) -> &'a Url { &*self.worker_url } + + pub fn script_chan<'a>(&'a self) -> &'a ScriptChan { + &self.script_chan + } } pub trait WorkerGlobalScopeMethods {