mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Auto merge of #11094 - nox:devtools, r=Ms2ger
Start implementing protocolDescription and canCurrentlyRecord in devtools We can merge it but it doesn't make things work more than before. Mostly filing it for comments, especially the `description` method. If you feel it's too verbose I guess the way to go would be to properly formalise all types involved in the devtools server, but that's going to be a gigantic task. <!-- 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/11094) <!-- Reviewable:end -->
This commit is contained in:
commit
4a01659983
4 changed files with 103 additions and 2 deletions
|
@ -3,7 +3,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
use actor::{Actor, ActorMessageStatus, ActorRegistry};
|
use actor::{Actor, ActorMessageStatus, ActorRegistry};
|
||||||
use protocol::JsonPacketStream;
|
use protocol::{ActorDescription, JsonPacketStream, Method};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::net::TcpStream;
|
use std::net::TcpStream;
|
||||||
|
@ -32,6 +32,21 @@ struct ConnectReply {
|
||||||
traits: PerformanceTraits,
|
traits: PerformanceTraits,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct CanCurrentlyRecordReply {
|
||||||
|
from: String,
|
||||||
|
value: SuccessMsg,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SuccessMsg {
|
||||||
|
success: bool,
|
||||||
|
errors: Vec<Error>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
enum Error {}
|
||||||
|
|
||||||
impl Actor for PerformanceActor {
|
impl Actor for PerformanceActor {
|
||||||
fn name(&self) -> String {
|
fn name(&self) -> String {
|
||||||
self.name.clone()
|
self.name.clone()
|
||||||
|
@ -59,6 +74,17 @@ impl Actor for PerformanceActor {
|
||||||
stream.write_json_packet(&msg);
|
stream.write_json_packet(&msg);
|
||||||
ActorMessageStatus::Processed
|
ActorMessageStatus::Processed
|
||||||
},
|
},
|
||||||
|
"canCurrentlyRecord" => {
|
||||||
|
let msg = CanCurrentlyRecordReply {
|
||||||
|
from: self.name(),
|
||||||
|
value: SuccessMsg {
|
||||||
|
success: true,
|
||||||
|
errors: vec![],
|
||||||
|
}
|
||||||
|
};
|
||||||
|
stream.write_json_packet(&msg);
|
||||||
|
ActorMessageStatus::Processed
|
||||||
|
}
|
||||||
_ => ActorMessageStatus::Ignored,
|
_ => ActorMessageStatus::Ignored,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -70,4 +96,24 @@ impl PerformanceActor {
|
||||||
name: name,
|
name: name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn description() -> ActorDescription {
|
||||||
|
ActorDescription {
|
||||||
|
category: "actor",
|
||||||
|
typeName: "performance",
|
||||||
|
methods: vec![
|
||||||
|
Method {
|
||||||
|
name: "canCurrentlyRecord",
|
||||||
|
request: Value::Object(vec![
|
||||||
|
("type".to_owned(), Value::String("canCurrentlyRecord".to_owned())),
|
||||||
|
].into_iter().collect()),
|
||||||
|
response: Value::Object(vec![
|
||||||
|
("value".to_owned(), Value::Object(vec![
|
||||||
|
("_retval".to_owned(), Value::String("json".to_owned())),
|
||||||
|
].into_iter().collect())),
|
||||||
|
].into_iter().collect()),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,9 @@
|
||||||
/// that perform more specific actions (tabs, addons, browser chrome, etc.)
|
/// that perform more specific actions (tabs, addons, browser chrome, etc.)
|
||||||
|
|
||||||
use actor::{Actor, ActorMessageStatus, ActorRegistry};
|
use actor::{Actor, ActorMessageStatus, ActorRegistry};
|
||||||
|
use actors::performance::PerformanceActor;
|
||||||
use actors::tab::{TabActor, TabActorMsg};
|
use actors::tab::{TabActor, TabActorMsg};
|
||||||
use protocol::JsonPacketStream;
|
use protocol::{ActorDescription, JsonPacketStream};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::net::TcpStream;
|
use std::net::TcpStream;
|
||||||
|
@ -44,6 +45,17 @@ pub struct RootActorMsg {
|
||||||
traits: ActorTraits,
|
traits: ActorTraits,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct ProtocolDescriptionReply {
|
||||||
|
from: String,
|
||||||
|
types: Types,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct Types {
|
||||||
|
performance: ActorDescription,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct RootActor {
|
pub struct RootActor {
|
||||||
pub tabs: Vec<String>,
|
pub tabs: Vec<String>,
|
||||||
}
|
}
|
||||||
|
@ -81,6 +93,17 @@ impl Actor for RootActor {
|
||||||
ActorMessageStatus::Processed
|
ActorMessageStatus::Processed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"protocolDescription" => {
|
||||||
|
let msg = ProtocolDescriptionReply {
|
||||||
|
from: self.name(),
|
||||||
|
types: Types {
|
||||||
|
performance: PerformanceActor::description(),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
stream.write_json_packet(&msg);
|
||||||
|
ActorMessageStatus::Processed
|
||||||
|
}
|
||||||
|
|
||||||
_ => ActorMessageStatus::Ignored
|
_ => ActorMessageStatus::Ignored
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,15 @@ struct ReconfigureReply {
|
||||||
from: String
|
from: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SourcesReply {
|
||||||
|
from: String,
|
||||||
|
sources: Vec<Source>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
enum Source {}
|
||||||
|
|
||||||
pub struct ThreadActor {
|
pub struct ThreadActor {
|
||||||
name: String,
|
name: String,
|
||||||
}
|
}
|
||||||
|
@ -88,6 +97,15 @@ impl Actor for ThreadActor {
|
||||||
ActorMessageStatus::Processed
|
ActorMessageStatus::Processed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
"sources" => {
|
||||||
|
let msg = SourcesReply {
|
||||||
|
from: self.name(),
|
||||||
|
sources: vec![],
|
||||||
|
};
|
||||||
|
stream.write_json_packet(&msg);
|
||||||
|
ActorMessageStatus::Processed
|
||||||
|
}
|
||||||
|
|
||||||
_ => ActorMessageStatus::Ignored,
|
_ => ActorMessageStatus::Ignored,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,20 @@ use std::error::Error;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::net::TcpStream;
|
use std::net::TcpStream;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct ActorDescription {
|
||||||
|
pub category: &'static str,
|
||||||
|
pub typeName: &'static str,
|
||||||
|
pub methods: Vec<Method>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
pub struct Method {
|
||||||
|
pub name: &'static str,
|
||||||
|
pub request: Value,
|
||||||
|
pub response: Value,
|
||||||
|
}
|
||||||
|
|
||||||
pub trait JsonPacketStream {
|
pub trait JsonPacketStream {
|
||||||
fn write_json_packet<T: Serialize>(&mut self, obj: &T);
|
fn write_json_packet<T: Serialize>(&mut self, obj: &T);
|
||||||
fn read_json_packet(&mut self) -> Result<Option<Value>, String>;
|
fn read_json_packet(&mut self) -> Result<Option<Value>, String>;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue