diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-02-05 14:45:45 -0700 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-02-05 14:45:45 -0700 |
commit | 0d560806f8fd621c2744429ae534e93e1f2563cb (patch) | |
tree | 98df788b8adb6d0fb32b46ac0751aba75afffc33 /components/script | |
parent | 149053c2a770f919538133350f9398510c998bcf (diff) | |
parent | 6699738cae3a82ae2114897ff5dc0dfdf7c59743 (diff) | |
download | servo-0d560806f8fd621c2744429ae534e93e1f2563cb.tar.gz servo-0d560806f8fd621c2744429ae534e93e1f2563cb.zip |
auto merge of #4853 : jdm/servo/consoleapicall, r=jdm
... to occur in the remote console.
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/console.rs | 29 | ||||
-rw-r--r-- | components/script/page.rs | 18 | ||||
-rw-r--r-- | components/script/script_task.rs | 6 |
3 files changed, 40 insertions, 13 deletions
diff --git a/components/script/dom/console.rs b/components/script/dom/console.rs index 70323c510d9..cff30395d2a 100644 --- a/components/script/dom/console.rs +++ b/components/script/dom/console.rs @@ -4,31 +4,35 @@ use dom::bindings::codegen::Bindings::ConsoleBinding; use dom::bindings::codegen::Bindings::ConsoleBinding::ConsoleMethods; -use dom::bindings::global::GlobalRef; +use dom::bindings::global::{GlobalRef, GlobalField}; use dom::bindings::js::{JSRef, Temporary}; use dom::bindings::utils::{Reflector, reflect_dom_object}; +use devtools_traits::{SendConsoleMessage, ConsoleMessage}; use util::str::DOMString; #[dom_struct] pub struct Console { - reflector_: Reflector + reflector_: Reflector, + global: GlobalField, } impl Console { - fn new_inherited() -> Console { + fn new_inherited(global: GlobalRef) -> Console { Console { - reflector_: Reflector::new() + reflector_: Reflector::new(), + global: GlobalField::from_rooted(&global), } } pub fn new(global: GlobalRef) -> Temporary<Console> { - reflect_dom_object(box Console::new_inherited(), global, ConsoleBinding::Wrap) + reflect_dom_object(box Console::new_inherited(global), global, ConsoleBinding::Wrap) } } impl<'a> ConsoleMethods for JSRef<'a, Console> { fn Log(self, message: DOMString) { println!("{}", message); + propagate_console_msg(&self, ConsoleMessage::LogMessage(message)); } fn Debug(self, message: DOMString) { @@ -58,3 +62,18 @@ impl<'a> ConsoleMethods for JSRef<'a, Console> { } } +fn propagate_console_msg(console: &JSRef<Console>, console_message: ConsoleMessage) { + let global = console.global.root(); + match global.r() { + GlobalRef::Window(window_ref) => { + let pipelineId = window_ref.page().id; + console.global.root().r().as_window().page().devtools_chan.as_ref().map(|chan| { + chan.send(SendConsoleMessage(pipelineId, console_message.clone())).unwrap(); + }); + }, + + GlobalRef::Worker(_) => { + // TODO: support worker console logs + } + } +} diff --git a/components/script/page.rs b/components/script/page.rs index a7a24608b4e..61de79ff038 100644 --- a/components/script/page.rs +++ b/components/script/page.rs @@ -11,6 +11,7 @@ use dom::document::{Document, DocumentHelpers}; use dom::element::Element; use dom::node::{Node, NodeHelpers}; use dom::window::Window; +use devtools_traits::DevtoolsControlChan; use layout_interface::{ ContentBoxResponse, ContentBoxesResponse, HitTestResponse, LayoutChan, LayoutRPC, MouseOverResponse, Msg, Reflow, @@ -100,6 +101,9 @@ pub struct Page { /// A flag to indicate whether the developer tools have requested live updates of /// page changes. pub devtools_wants_updates: Cell<bool>, + + /// For providing instructions to an optional devtools server. + pub devtools_chan: Option<DevtoolsControlChan>, } pub struct PageIterator { @@ -130,12 +134,13 @@ impl IterablePage for Rc<Page> { impl Page { pub fn new(id: PipelineId, subpage_id: Option<SubpageId>, - layout_chan: LayoutChan, - window_size: WindowSizeData, - resource_task: ResourceTask, - storage_task: StorageTask, - constellation_chan: ConstellationChan, - js_context: Rc<Cx>) -> Page { + layout_chan: LayoutChan, + window_size: WindowSizeData, + resource_task: ResourceTask, + storage_task: StorageTask, + constellation_chan: ConstellationChan, + js_context: Rc<Cx>, + devtools_chan: Option<DevtoolsControlChan>) -> Page { let js_info = JSPageInfo { dom_static: GlobalStaticData::new(), js_context: js_context, @@ -166,6 +171,7 @@ impl Page { children: DOMRefCell::new(vec!()), page_clip_rect: Cell::new(MAX_RECT), devtools_wants_updates: Cell::new(false), + devtools_chan: devtools_chan, } } diff --git a/components/script/script_task.rs b/components/script/script_task.rs index 03451b903a7..8440da0dd2a 100644 --- a/components/script/script_task.rs +++ b/components/script/script_task.rs @@ -379,7 +379,8 @@ impl ScriptTask { resource_task.clone(), storage_task, constellation_chan.clone(), - js_context.clone()); + js_context.clone(), + devtools_chan.clone()); let (devtools_sender, devtools_receiver) = channel(); ScriptTask { @@ -662,7 +663,8 @@ impl ScriptTask { parent_page.resource_task.clone(), parent_page.storage_task.clone(), self.constellation_chan.clone(), - self.js_context.borrow().as_ref().unwrap().clone()) + self.js_context.borrow().as_ref().unwrap().clone(), + self.devtools_chan.clone()) }; parent_page.children.borrow_mut().push(Rc::new(new_page)); } |