diff --git a/components/devtools/actors/performance.rs b/components/devtools/actors/performance.rs index 17687f10ff2..78c36885e5a 100644 --- a/components/devtools/actors/performance.rs +++ b/components/devtools/actors/performance.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use actor::{Actor, ActorMessageStatus, ActorRegistry}; -use protocol::JsonPacketStream; +use protocol::{ActorDescription, JsonPacketStream, Method}; use serde_json::Value; use std::collections::BTreeMap; use std::net::TcpStream; @@ -70,4 +70,12 @@ impl PerformanceActor { name: name, } } + + pub fn description() -> ActorDescription { + ActorDescription { + category: "actor", + typeName: "performance", + methods: vec![], + } + } } diff --git a/components/devtools/actors/root.rs b/components/devtools/actors/root.rs index 1ce308403e8..6103e5a9a4f 100644 --- a/components/devtools/actors/root.rs +++ b/components/devtools/actors/root.rs @@ -8,8 +8,9 @@ /// that perform more specific actions (tabs, addons, browser chrome, etc.) use actor::{Actor, ActorMessageStatus, ActorRegistry}; +use actors::performance::PerformanceActor; use actors::tab::{TabActor, TabActorMsg}; -use protocol::JsonPacketStream; +use protocol::{ActorDescription, JsonPacketStream}; use serde_json::Value; use std::collections::BTreeMap; use std::net::TcpStream; @@ -44,6 +45,17 @@ pub struct RootActorMsg { traits: ActorTraits, } +#[derive(Serialize)] +pub struct ProtocolDescriptionReply { + from: String, + types: Types, +} + +#[derive(Serialize)] +pub struct Types { + performance: ActorDescription, +} + pub struct RootActor { pub tabs: Vec, } @@ -81,6 +93,17 @@ impl Actor for RootActor { ActorMessageStatus::Processed } + "protocolDescription" => { + let msg = ProtocolDescriptionReply { + from: self.name(), + types: Types { + performance: PerformanceActor::description(), + }, + }; + stream.write_json_packet(&msg); + ActorMessageStatus::Processed + } + _ => ActorMessageStatus::Ignored }) } diff --git a/components/devtools/protocol.rs b/components/devtools/protocol.rs index cb75572f3b8..3da44cc5323 100644 --- a/components/devtools/protocol.rs +++ b/components/devtools/protocol.rs @@ -12,6 +12,20 @@ use std::error::Error; use std::io::{Read, Write}; use std::net::TcpStream; +#[derive(Serialize)] +pub struct ActorDescription { + pub category: &'static str, + pub typeName: &'static str, + pub methods: Vec, +} + +#[derive(Serialize)] +pub struct Method { + pub name: &'static str, + pub request: Value, + pub response: Value, +} + pub trait JsonPacketStream { fn write_json_packet(&mut self, obj: &T); fn read_json_packet(&mut self) -> Result, String>;