aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/dedicatedworkerglobalscope.rs
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-07-17 15:34:04 +0200
committerMs2ger <ms2ger@gmail.com>2014-07-17 15:34:09 +0200
commit603c0b889a8e53b23f8a74a3fb01a875b394f1a6 (patch)
tree3fb63c3e8eaf65706c2d90d27871f8069348303d /src/components/script/dom/dedicatedworkerglobalscope.rs
parent90adcc6265ef3100b095a515be35b65fc1bd475d (diff)
downloadservo-603c0b889a8e53b23f8a74a3fb01a875b394f1a6.tar.gz
servo-603c0b889a8e53b23f8a74a3fb01a875b394f1a6.zip
Move the code to start the worker into DedicatedWorkerGlobalScope::run_worker_scope.
This is somewhat cleaner than keeping it all in the Worker constructor.
Diffstat (limited to 'src/components/script/dom/dedicatedworkerglobalscope.rs')
-rw-r--r--src/components/script/dom/dedicatedworkerglobalscope.rs36
1 files changed, 35 insertions, 1 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 {
}