aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/devtools/actors/console.rs15
-rw-r--r--components/devtools/actors/root.rs13
-rw-r--r--components/devtools/actors/tab.rs3
-rw-r--r--components/devtools/actors/thread.rs90
-rw-r--r--components/devtools/lib.rs10
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>>,