Implement a resource_task getter on GlobalRef.

This is needed to fetch resources on all threads.
This commit is contained in:
Ms2ger 2014-07-17 16:22:52 +02:00
parent e22c8f9290
commit 9fd67a751f
5 changed files with 15 additions and 6 deletions

View file

@ -8,9 +8,10 @@ use dom::bindings::js::{JS, JSRef, Root};
use dom::bindings::utils::{Reflectable, Reflector}; use dom::bindings::utils::{Reflectable, Reflector};
use dom::workerglobalscope::WorkerGlobalScope; use dom::workerglobalscope::WorkerGlobalScope;
use dom::window::Window; use dom::window::Window;
use page::Page;
use script_task::ScriptChan; use script_task::ScriptChan;
use servo_net::resource_task::ResourceTask;
use js::jsapi::JSContext; use js::jsapi::JSContext;
use url::Url; use url::Url;
@ -46,8 +47,11 @@ impl<'a> GlobalRef<'a> {
} }
} }
pub fn page<'b>(&'b self) -> &'b Page { pub fn resource_task(&self) -> ResourceTask {
self.as_window().page() match *self {
Window(ref window) => window.page().resource_task.deref().clone(),
Worker(ref worker) => worker.resource_task().clone(),
}
} }
pub fn get_url(&self) -> Url { pub fn get_url(&self) -> Url {

View file

@ -65,7 +65,8 @@ impl DedicatedWorkerGlobalScope {
}; };
let (_js_runtime, js_context) = ScriptTask::new_rt_and_cx(); 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( match js_context.evaluate_script(
global.reflector().get_jsobject(), source, filename.to_str(), 1) { global.reflector().get_jsobject(), source, filename.to_str(), 1) {
Ok(_) => (), Ok(_) => (),

View file

@ -39,7 +39,7 @@ impl Worker {
Err(_) => return Err(Syntax), 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); DedicatedWorkerGlobalScope::run_worker_scope(worker_url, resource_task);
Ok(Worker::new(global)) Ok(Worker::new(global))
} }

View file

@ -45,6 +45,10 @@ impl WorkerGlobalScope {
pub fn get_cx(&self) -> *mut JSContext { pub fn get_cx(&self) -> *mut JSContext {
self.js_context.ptr self.js_context.ptr
} }
pub fn resource_task<'a>(&'a self) -> &'a ResourceTask {
&*self.resource_task
}
} }
pub trait WorkerGlobalScopeMethods { pub trait WorkerGlobalScopeMethods {

View file

@ -486,7 +486,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
} }
let global = self.global.root(); 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()); let mut load_data = LoadData::new(self.request_url.deref().borrow().clone());
load_data.data = extracted; load_data.data = extracted;