From 603c0b889a8e53b23f8a74a3fb01a875b394f1a6 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Thu, 17 Jul 2014 15:34:04 +0200 Subject: [PATCH] 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)) } }