diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2016-10-01 03:44:05 +0200 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2016-10-06 20:59:11 +0200 |
commit | fe6fca9e1fe94fcefb61a1cde1812d575f164ace (patch) | |
tree | c4d0f3e55e23bbc3a932ba0cc121fe1de63495e6 /components | |
parent | 14a0b8d88c7def8a247603cb8548e50087acdbc9 (diff) | |
download | servo-fe6fca9e1fe94fcefb61a1cde1812d575f164ace.tar.gz servo-fe6fca9e1fe94fcefb61a1cde1812d575f164ace.zip |
Introduce GlobalScope::devtools_chan
Diffstat (limited to 'components')
-rw-r--r-- | components/script/devtools.rs | 3 | ||||
-rw-r--r-- | components/script/dom/bindings/global.rs | 10 | ||||
-rw-r--r-- | components/script/dom/console.rs | 2 | ||||
-rw-r--r-- | components/script/dom/globalscope.rs | 18 | ||||
-rw-r--r-- | components/script/dom/serviceworkerregistration.rs | 6 | ||||
-rw-r--r-- | components/script/dom/window.rs | 10 | ||||
-rw-r--r-- | components/script/dom/worker.rs | 5 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 17 |
8 files changed, 33 insertions, 38 deletions
diff --git a/components/script/devtools.rs b/components/script/devtools.rs index 9da8093f287..eb4a31d794c 100644 --- a/components/script/devtools.rs +++ b/components/script/devtools.rs @@ -272,7 +272,8 @@ pub fn handle_request_animation_frame(context: &BrowsingContext, }; let doc = context.active_document(); - let devtools_sender = context.active_window().devtools_chan().unwrap(); + let devtools_sender = + context.active_window().upcast::<GlobalScope>().devtools_chan().unwrap().clone(); doc.request_animation_frame(box move |time| { let msg = ScriptToDevtoolsControlMsg::FramerateTick(actor_name, time); devtools_sender.send(msg).unwrap(); diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs index 23925b314a5..b0a8f9cca75 100644 --- a/components/script/dom/bindings/global.rs +++ b/components/script/dom/bindings/global.rs @@ -7,7 +7,6 @@ //! This module contains smart pointers to global scopes, to simplify writing //! code that works in workers as well as window scopes. -use devtools_traits::ScriptToDevtoolsControlMsg; use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; use dom::bindings::conversions::root_from_object; use dom::bindings::error::{ErrorInfo, report_pending_exception}; @@ -122,15 +121,6 @@ impl<'a> GlobalRef<'a> { } } - /// Get an `IpcSender<ScriptToDevtoolsControlMsg>` to send messages to Devtools - /// thread when available. - pub fn devtools_chan(&self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>> { - match *self { - GlobalRef::Window(window) => window.devtools_chan(), - GlobalRef::Worker(worker) => worker.devtools_chan(), - } - } - /// Get the `ResourceThreads` for this global scope. pub fn resource_threads(&self) -> ResourceThreads { match *self { diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 09180ced2c2..d9660296e05 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -11,7 +11,7 @@ pub struct Console(()); impl Console { fn send_to_devtools(global: GlobalRef, level: LogLevel, message: DOMString) { - if let Some(chan) = global.devtools_chan() { + if let Some(chan) = global.as_global_scope().devtools_chan() { let console_message = prepare_message(level, message); let worker_id = if let GlobalRef::Worker(worker) = global { Some(worker.get_worker_id()) diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index 3fd485835e2..6b5c3810da6 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -2,13 +2,14 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use devtools_traits::WorkerId; +use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId}; use dom::bindings::cell::DOMRefCell; use dom::bindings::js::{JS, MutNullableHeap, Root}; use dom::bindings::reflector::Reflectable; use dom::bindings::str::DOMString; use dom::crypto::Crypto; use dom::eventtarget::EventTarget; +use ipc_channel::ipc::IpcSender; use js::jsapi::{JS_GetContext, JS_GetObjectRuntime, JSContext}; use std::cell::Cell; use std::collections::HashMap; @@ -27,16 +28,23 @@ pub struct GlobalScope { /// Timers used by the Console API. console_timers: DOMRefCell<HashMap<DOMString, u64>>, + + /// For providing instructions to an optional devtools server. + #[ignore_heap_size_of = "channels are hard"] + devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, } impl GlobalScope { - pub fn new_inherited() -> GlobalScope { + pub fn new_inherited( + devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>) + -> Self { GlobalScope { eventtarget: EventTarget::new_inherited(), crypto: Default::default(), next_worker_id: Cell::new(WorkerId(0)), devtools_wants_updates: Default::default(), console_timers: DOMRefCell::new(Default::default()), + devtools_chan: devtools_chan, } } @@ -91,6 +99,12 @@ impl GlobalScope { timestamp_in_ms(get_time()) - start }) } + + /// Get an `&IpcSender<ScriptToDevtoolsControlMsg>` to send messages + /// to the devtools thread when available. + pub fn devtools_chan(&self) -> Option<&IpcSender<ScriptToDevtoolsControlMsg>> { + self.devtools_chan.as_ref() + } } fn timestamp_in_ms(time: Timespec) -> u64 { diff --git a/components/script/dom/serviceworkerregistration.rs b/components/script/dom/serviceworkerregistration.rs index bc089c18dac..09c23570243 100644 --- a/components/script/dom/serviceworkerregistration.rs +++ b/components/script/dom/serviceworkerregistration.rs @@ -57,13 +57,15 @@ impl ServiceWorkerRegistration { pipeline_id: Some(global.pipeline_id()) }; - let worker_id = global.as_global_scope().get_next_worker_id(); + let global_scope = global.as_global_scope(); + let worker_id = global_scope.get_next_worker_id(); + let devtools_chan = global_scope.devtools_chan().cloned(); let init = prepare_workerscope_init(global, None); ScopeThings { script_url: script_url, init: init, worker_load_origin: worker_load_origin, - devtools_chan: global.devtools_chan(), + devtools_chan: devtools_chan, worker_id: worker_id } } diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index 92f99ec273d..f07e395a709 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -182,9 +182,6 @@ pub struct Window { #[ignore_heap_size_of = "channels are hard"] time_profiler_chan: ProfilerChan, - /// For providing instructions to an optional devtools server. - #[ignore_heap_size_of = "channels are hard"] - devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, /// For sending timeline markers. Will be ignored if /// no devtools server devtools_markers: DOMRefCell<HashSet<TimelineMarkerType>>, @@ -1391,10 +1388,6 @@ impl Window { &self.time_profiler_chan } - pub fn devtools_chan(&self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>> { - self.devtools_chan.clone() - } - pub fn layout_chan(&self) -> &Sender<Msg> { &self.layout_chan } @@ -1608,7 +1601,7 @@ impl Window { }; let current_time = time::get_time(); let win = box Window { - globalscope: GlobalScope::new_inherited(), + globalscope: GlobalScope::new_inherited(devtools_chan), script_chan: script_chan, dom_manipulation_task_source: dom_task_source, user_interaction_task_source: user_task_source, @@ -1620,7 +1613,6 @@ impl Window { image_cache_thread: image_cache_thread, mem_profiler_chan: mem_profiler_chan, time_profiler_chan: time_profiler_chan, - devtools_chan: devtools_chan, history: Default::default(), browsing_context: Default::default(), performance: Default::default(), diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs index 1e32b4375f1..067b564d595 100644 --- a/components/script/dom/worker.rs +++ b/components/script/dom/worker.rs @@ -91,8 +91,9 @@ impl Worker { }; let (devtools_sender, devtools_receiver) = ipc::channel().unwrap(); - let worker_id = global.as_global_scope().get_next_worker_id(); - if let Some(ref chan) = global.devtools_chan() { + let global_scope = global.as_global_scope(); + let worker_id = global_scope.get_next_worker_id(); + if let Some(ref chan) = global_scope.devtools_chan() { let pipeline_id = global.pipeline_id(); let title = format!("Worker for {}", worker_url); let page_info = DevtoolsPageInfo { diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index c3656daf8cf..af707508abf 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -use devtools_traits::{DevtoolScriptControlMsg, ScriptToDevtoolsControlMsg, WorkerId}; +use devtools_traits::{DevtoolScriptControlMsg, WorkerId}; use dom::bindings::codegen::Bindings::EventHandlerBinding::OnErrorEventHandlerNonNull; use dom::bindings::codegen::Bindings::FunctionBinding::Function; use dom::bindings::codegen::Bindings::RequestBinding::RequestInit; @@ -55,11 +55,13 @@ use url::Url; pub fn prepare_workerscope_init(global: GlobalRef, devtools_sender: Option<IpcSender<DevtoolScriptControlMsg>>) -> WorkerGlobalScopeInit { - let worker_id = global.as_global_scope().get_next_worker_id(); + let global_scope = global.as_global_scope(); + let worker_id = global_scope.get_next_worker_id(); + let to_devtools_sender = global_scope.devtools_chan().cloned(); let init = WorkerGlobalScopeInit { resource_threads: global.resource_threads(), mem_profiler_chan: global.mem_profiler_chan().clone(), - to_devtools_sender: global.devtools_chan(), + to_devtools_sender: to_devtools_sender, time_profiler_chan: global.time_profiler_chan().clone(), from_devtools_sender: devtools_sender, constellation_chan: global.constellation_chan().clone(), @@ -93,8 +95,6 @@ pub struct WorkerGlobalScope { mem_profiler_chan: mem::ProfilerChan, #[ignore_heap_size_of = "Defined in std"] time_profiler_chan: time::ProfilerChan, - #[ignore_heap_size_of = "Defined in ipc-channel"] - to_devtools_sender: Option<IpcSender<ScriptToDevtoolsControlMsg>>, #[ignore_heap_size_of = "Defined in ipc-channel"] /// Optional `IpcSender` for sending the `DevtoolScriptControlMsg` @@ -127,7 +127,7 @@ impl WorkerGlobalScope { closing: Option<Arc<AtomicBool>>) -> WorkerGlobalScope { WorkerGlobalScope { - globalscope: GlobalScope::new_inherited(), + globalscope: GlobalScope::new_inherited(init.to_devtools_sender), worker_id: init.worker_id, pipeline_id: init.pipeline_id, worker_url: worker_url, @@ -139,7 +139,6 @@ impl WorkerGlobalScope { timers: OneshotTimers::new(timer_event_chan, init.scheduler_chan.clone()), mem_profiler_chan: init.mem_profiler_chan, time_profiler_chan: init.time_profiler_chan, - to_devtools_sender: init.to_devtools_sender, from_devtools_sender: init.from_devtools_sender, from_devtools_receiver: from_devtools_receiver, constellation_chan: init.constellation_chan, @@ -157,10 +156,6 @@ impl WorkerGlobalScope { &self.time_profiler_chan } - pub fn devtools_chan(&self) -> Option<IpcSender<ScriptToDevtoolsControlMsg>> { - self.to_devtools_sender.clone() - } - pub fn from_devtools_sender(&self) -> Option<IpcSender<DevtoolScriptControlMsg>> { self.from_devtools_sender.clone() } |