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 {