mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Add console message support to devtools. Does not actually cause logging to occur in the remote console.
This commit is contained in:
parent
149053c2a7
commit
6699738cae
7 changed files with 112 additions and 16 deletions
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue