From 0e3f066e8a971b1d90a07b4448e12a57c34b114c Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Sat, 9 Jan 2016 16:02:41 +0100 Subject: [PATCH 1/2] Remove the global field from Console We can just go through the reflector. --- components/script/dom/console.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index c19855b76ff..8d5769afcd2 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -5,7 +5,7 @@ use devtools_traits::{ConsoleMessage, LogLevel, ScriptToDevtoolsControlMsg}; use dom::bindings::codegen::Bindings::ConsoleBinding; use dom::bindings::codegen::Bindings::ConsoleBinding::ConsoleMethods; -use dom::bindings::global::{GlobalField, GlobalRef}; +use dom::bindings::global::{GlobalRef, global_root_from_reflector}; use dom::bindings::js::Root; use dom::bindings::reflector::{Reflector, reflect_dom_object}; use util::str::DOMString; @@ -14,19 +14,17 @@ use util::str::DOMString; #[dom_struct] pub struct Console { reflector_: Reflector, - global: GlobalField, } impl Console { - fn new_inherited(global: GlobalRef) -> Console { + fn new_inherited() -> Console { Console { reflector_: Reflector::new(), - global: GlobalField::from_rooted(&global), } } pub fn new(global: GlobalRef) -> Root { - reflect_dom_object(box Console::new_inherited(global), + reflect_dom_object(box Console::new_inherited(), global, ConsoleBinding::Wrap) } @@ -95,7 +93,7 @@ fn prepare_message(logLevel: LogLevel, message: DOMString) -> ConsoleMessage { } fn propagate_console_msg(console: &&Console, console_message: ConsoleMessage) { - let global = console.global.root(); + let global = global_root_from_reflector(*console); let pipelineId = global.r().pipeline(); global.r().devtools_chan().as_ref().map(|chan| { chan.send(ScriptToDevtoolsControlMsg::ConsoleAPI(pipelineId, From 189d373cbeaf7a6325c369fa6e854231081d3a49 Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Sat, 9 Jan 2016 17:31:32 +0100 Subject: [PATCH 2/2] Introduce Console::send_to_devtools This replaces propagate_console_msg and wraps prepare_message. --- components/script/dom/console.rs | 36 +++++++++++++++++--------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 8d5769afcd2..d4fd97a81d8 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -28,6 +28,19 @@ impl Console { global, ConsoleBinding::Wrap) } + + fn send_to_devtools(&self, level: LogLevel, message: DOMString) { + let global = global_root_from_reflector(self); + let global = global.r(); + if let Some(chan) = global.devtools_chan() { + let console_message = prepare_message(level, message); + let devtools_message = ScriptToDevtoolsControlMsg::ConsoleAPI( + global.pipeline(), + console_message, + global.get_worker_id()); + chan.send(devtools_message).unwrap(); + } + } } impl ConsoleMethods for Console { @@ -35,7 +48,7 @@ impl ConsoleMethods for Console { fn Log(&self, messages: Vec) { for message in messages { println!("{}", message); - propagate_console_msg(&self, prepare_message(LogLevel::Log, message)); + self.send_to_devtools(LogLevel::Log, message); } } @@ -43,7 +56,7 @@ impl ConsoleMethods for Console { fn Debug(&self, messages: Vec) { for message in messages { println!("{}", message); - propagate_console_msg(&self, prepare_message(LogLevel::Debug, message)); + self.send_to_devtools(LogLevel::Debug, message); } } @@ -51,7 +64,7 @@ impl ConsoleMethods for Console { fn Info(&self, messages: Vec) { for message in messages { println!("{}", message); - propagate_console_msg(&self, prepare_message(LogLevel::Info, message)); + self.send_to_devtools(LogLevel::Info, message); } } @@ -59,7 +72,7 @@ impl ConsoleMethods for Console { fn Warn(&self, messages: Vec) { for message in messages { println!("{}", message); - propagate_console_msg(&self, prepare_message(LogLevel::Warn, message)); + self.send_to_devtools(LogLevel::Warn, message); } } @@ -67,7 +80,7 @@ impl ConsoleMethods for Console { fn Error(&self, messages: Vec) { for message in messages { println!("{}", message); - propagate_console_msg(&self, prepare_message(LogLevel::Error, message)); + self.send_to_devtools(LogLevel::Error, message); } } @@ -76,7 +89,7 @@ impl ConsoleMethods for Console { if !condition { let message = message.unwrap_or_else(|| DOMString::from("no message")); println!("Assertion failed: {}", message); - propagate_console_msg(&self, prepare_message(LogLevel::Error, message)); + self.send_to_devtools(LogLevel::Error, message); } } } @@ -91,14 +104,3 @@ fn prepare_message(logLevel: LogLevel, message: DOMString) -> ConsoleMessage { columnNumber: 1, } } - -fn propagate_console_msg(console: &&Console, console_message: ConsoleMessage) { - let global = global_root_from_reflector(*console); - let pipelineId = global.r().pipeline(); - global.r().devtools_chan().as_ref().map(|chan| { - chan.send(ScriptToDevtoolsControlMsg::ConsoleAPI(pipelineId, - console_message.clone(), - global.r().get_worker_id())) - .unwrap(); - }); -}