diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-24 15:48:23 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-24 15:48:23 +0530 |
commit | 5faab270c6babaaa5ee6b75fecf537e7a648d752 (patch) | |
tree | 628d926434f4a4d08d210f60b171840d978a3bb0 /components | |
parent | edcf24fd4d39e86548717ecdfe36e2f1df30daac (diff) | |
parent | 04e085a4e50df45ed38e43172ceee055d3e68280 (diff) | |
download | servo-5faab270c6babaaa5ee6b75fecf537e7a648d752.tar.gz servo-5faab270c6babaaa5ee6b75fecf537e7a648d752.zip |
Auto merge of #10158 - nox:devtools, r=Ms2ger
Allow Firefox to be able to connect to devtools again
This doesn't fix the performance tab, but at least lets Firefox initialise the devtools window.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10158)
<!-- Reviewable:end -->
Diffstat (limited to 'components')
-rw-r--r-- | components/devtools/actors/console.rs | 15 | ||||
-rw-r--r-- | components/devtools/actors/root.rs | 13 | ||||
-rw-r--r-- | components/devtools/actors/tab.rs | 3 | ||||
-rw-r--r-- | components/devtools/actors/thread.rs | 90 | ||||
-rw-r--r-- | components/devtools/lib.rs | 10 |
5 files changed, 122 insertions, 9 deletions
diff --git a/components/devtools/actors/console.rs b/components/devtools/actors/console.rs index 31c404966e8..427e7eee043 100644 --- a/components/devtools/actors/console.rs +++ b/components/devtools/actors/console.rs @@ -77,6 +77,12 @@ struct EvaluateJSReply { helperResult: Json, } +#[derive(RustcEncodable)] +struct SetPreferencesReply { + from: String, + updated: Vec<String>, +} + pub struct ConsoleActor { pub name: String, pub pipeline: PipelineId, @@ -237,6 +243,15 @@ impl Actor for ConsoleActor { ActorMessageStatus::Processed } + "setPreferences" => { + let msg = SetPreferencesReply { + from: self.name(), + updated: vec![], + }; + stream.write_json_packet(&msg); + ActorMessageStatus::Processed + } + _ => ActorMessageStatus::Ignored }) } diff --git a/components/devtools/actors/root.rs b/components/devtools/actors/root.rs index 0a589db3466..b9e6fee98c9 100644 --- a/components/devtools/actors/root.rs +++ b/components/devtools/actors/root.rs @@ -21,13 +21,15 @@ struct ActorTraits { } #[derive(RustcEncodable)] -struct ErrorReply { +struct ListAddonsReply { from: String, - error: String, - message: String, + addons: Vec<AddonMsg>, } #[derive(RustcEncodable)] +enum AddonMsg {} + +#[derive(RustcEncodable)] struct ListTabsReply { from: String, selected: u32, @@ -57,10 +59,9 @@ impl Actor for RootActor { stream: &mut TcpStream) -> Result<ActorMessageStatus, ()> { Ok(match msg_type { "listAddons" => { - let actor = ErrorReply { + let actor = ListAddonsReply { from: "root".to_owned(), - error: "noAddons".to_owned(), - message: "This root actor has no browser addons.".to_owned(), + addons: vec![], }; stream.write_json_packet(&actor); ActorMessageStatus::Processed diff --git a/components/devtools/actors/tab.rs b/components/devtools/actors/tab.rs index 90a03688f12..7c93f3b4a71 100644 --- a/components/devtools/actors/tab.rs +++ b/components/devtools/actors/tab.rs @@ -74,6 +74,7 @@ pub struct TabActor { pub timeline: String, pub profiler: String, pub performance: String, + pub thread: String, } impl Actor for TabActor { @@ -98,7 +99,7 @@ impl Actor for TabActor { let msg = TabAttachedReply { from: self.name(), __type__: "tabAttached".to_owned(), - threadActor: self.name(), + threadActor: self.thread.clone(), cacheDisabled: false, javascriptEnabled: true, traits: TabTraits, diff --git a/components/devtools/actors/thread.rs b/components/devtools/actors/thread.rs new file mode 100644 index 00000000000..232e91d0a56 --- /dev/null +++ b/components/devtools/actors/thread.rs @@ -0,0 +1,90 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * 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 actor::{Actor, ActorMessageStatus, ActorRegistry}; +use protocol::JsonPacketStream; +use rustc_serialize::json; +use std::net::TcpStream; + +#[derive(RustcEncodable)] +struct ThreadAttachedReply { + from: String, + __type__: String, + actor: String, + poppedFrames: Vec<PoppedFrameMsg>, + why: WhyMsg, +} + +#[derive(RustcEncodable)] +enum PoppedFrameMsg {} + +#[derive(RustcEncodable)] +struct WhyMsg { + __type__: String, +} + +#[derive(RustcEncodable)] +struct ThreadResumedReply { + from: String, + __type__: String, +} + +#[derive(RustcEncodable)] +struct ReconfigureReply { + from: String +} + +pub struct ThreadActor { + name: String, +} + +impl ThreadActor { + pub fn new(name: String) -> ThreadActor { + ThreadActor { + name: name, + } + } +} + +impl Actor for ThreadActor { + fn name(&self) -> String { + self.name.clone() + } + + fn handle_message(&self, + registry: &ActorRegistry, + msg_type: &str, + _msg: &json::Object, + stream: &mut TcpStream) -> Result<ActorMessageStatus, ()> { + Ok(match msg_type { + "attach" => { + let msg = ThreadAttachedReply { + from: self.name(), + __type__: "paused".to_owned(), + actor: registry.new_name("pause"), + poppedFrames: vec![], + why: WhyMsg { __type__: "attached".to_owned() }, + }; + stream.write_json_packet(&msg); + ActorMessageStatus::Processed + }, + + "resume" => { + let msg = ThreadResumedReply { + from: self.name(), + __type__: "resumed".to_owned(), + }; + stream.write_json_packet(&msg); + ActorMessageStatus::Processed + }, + + "reconfigure" => { + stream.write_json_packet(&ReconfigureReply { from: self.name() }); + ActorMessageStatus::Processed + } + + _ => ActorMessageStatus::Ignored, + }) + } +} diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index 3ee14422d53..2a6c532e05b 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -42,6 +42,7 @@ use actors::performance::PerformanceActor; use actors::profiler::ProfilerActor; use actors::root::RootActor; use actors::tab::TabActor; +use actors::thread::ThreadActor; use actors::timeline::TimelineActor; use actors::worker::WorkerActor; use devtools_traits::{ChromeToDevtoolsControlMsg, ConsoleMessage, DevtoolsControlMsg}; @@ -73,6 +74,7 @@ mod actors { pub mod profiler; pub mod root; pub mod tab; + pub mod thread; pub mod timeline; pub mod worker; } @@ -248,7 +250,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, let (pipeline, worker_id) = ids; //TODO: move all this actor creation into a constructor method on TabActor - let (tab, console, inspector, timeline, profiler, performance) = { + let (tab, console, inspector, timeline, profiler, performance, thread) = { let console = ConsoleActor { name: actors.new_name("console"), script_chan: script_sender.clone(), @@ -271,6 +273,8 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, let profiler = ProfilerActor::new(actors.new_name("profiler")); let performance = PerformanceActor::new(actors.new_name("performance")); + let thread = ThreadActor::new(actors.new_name("context")); + let DevtoolsPageInfo { title, url } = page_info; let tab = TabActor { name: actors.new_name("tab"), @@ -281,12 +285,13 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, timeline: timeline.name(), profiler: profiler.name(), performance: performance.name(), + thread: thread.name(), }; let root = actors.find_mut::<RootActor>("root"); root.tabs.push(tab.name.clone()); - (tab, console, inspector, timeline, profiler, performance) + (tab, console, inspector, timeline, profiler, performance, thread) }; if let Some(id) = worker_id { @@ -306,6 +311,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>, actors.register(box timeline); actors.register(box profiler); actors.register(box performance); + actors.register(box thread); } fn handle_console_message(actors: Arc<Mutex<ActorRegistry>>, |