From 95763a87b06f6b9eca110948f5047b93d3185125 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 4 Aug 2015 11:10:03 +0200 Subject: [PATCH] Move the worker script evaluation into a method on WorkerGlobalScope. --- .../script/dom/dedicatedworkerglobalscope.rs | 16 ++-------------- components/script/dom/workerglobalscope.rs | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 7cf8fedc87f..7ede272035b 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -10,7 +10,7 @@ use dom::bindings::codegen::Bindings::ErrorEventBinding::ErrorEventMethods; use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull; use dom::bindings::codegen::InheritTypes::DedicatedWorkerGlobalScopeDerived; use dom::bindings::codegen::InheritTypes::{EventTargetCast, WorkerGlobalScopeCast}; -use dom::bindings::error::{ErrorResult, report_pending_exception}; +use dom::bindings::error::ErrorResult; use dom::bindings::global::GlobalRef; use dom::bindings::js::{RootCollection, Root}; use dom::bindings::refcounted::LiveDOMReferences; @@ -176,7 +176,6 @@ impl DedicatedWorkerGlobalScope { }; let runtime = Rc::new(ScriptTask::new_rt_and_cx()); - let serialized_url = url.serialize(); let (devtools_mpsc_chan, devtools_mpsc_port) = channel(); ROUTER.route_ipc_receiver_to_mpsc_sender(devtools_ipc_port, devtools_mpsc_chan); @@ -190,18 +189,7 @@ impl DedicatedWorkerGlobalScope { { let _ar = AutoWorkerReset::new(global.r(), worker); - - match runtime.evaluate_script( - global.r().reflector().get_jsobject(), source, serialized_url, 1) { - Ok(_) => (), - Err(_) => { - // TODO: An error needs to be dispatched to the parent. - // https://github.com/servo/servo/issues/6422 - println!("evaluate_script failed"); - let _ar = JSAutoRequest::new(runtime.cx()); - report_pending_exception(runtime.cx(), global.r().reflector().get_jsobject().get()); - } - } + scope.execute_script(source); } // Register this task as a memory reporter. diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index 550834f7d09..eba4cc26662 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -5,7 +5,7 @@ use dom::bindings::codegen::Bindings::FunctionBinding::Function; use dom::bindings::codegen::Bindings::WorkerGlobalScopeBinding::WorkerGlobalScopeMethods; use dom::bindings::codegen::InheritTypes::DedicatedWorkerGlobalScopeCast; -use dom::bindings::error::{ErrorResult, Fallible}; +use dom::bindings::error::{ErrorResult, Fallible, report_pending_exception}; use dom::bindings::error::Error::{Syntax, Network, JSFailed}; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, Root, MutNullableHeap}; @@ -28,7 +28,7 @@ use net_traits::{load_whole_resource, ResourceTask}; use util::str::DOMString; use ipc_channel::ipc::IpcSender; -use js::jsapi::{JSContext, HandleValue}; +use js::jsapi::{JSContext, HandleValue, JSAutoRequest}; use js::rust::Runtime; use url::{Url, UrlParser}; @@ -283,6 +283,7 @@ impl<'a> WorkerGlobalScopeMethods for &'a WorkerGlobalScope { } pub trait WorkerGlobalScopeHelpers { + fn execute_script(self, source: DOMString); fn handle_fire_timer(self, timer_id: TimerId); fn script_chan(self) -> Box; fn pipeline(self) -> PipelineId; @@ -293,6 +294,20 @@ pub trait WorkerGlobalScopeHelpers { } impl<'a> WorkerGlobalScopeHelpers for &'a WorkerGlobalScope { + fn execute_script(self, source: DOMString) { + match self.runtime.evaluate_script( + self.reflector().get_jsobject(), source, self.worker_url.serialize(), 1) { + Ok(_) => (), + Err(_) => { + // TODO: An error needs to be dispatched to the parent. + // https://github.com/servo/servo/issues/6422 + println!("evaluate_script failed"); + let _ar = JSAutoRequest::new(self.runtime.cx()); + report_pending_exception(self.runtime.cx(), self.reflector().get_jsobject().get()); + } + } + } + fn script_chan(self) -> Box { let dedicated = DedicatedWorkerGlobalScopeCast::to_ref(self);