mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Prompt user before accepting incoming devtools connection
This commit is contained in:
parent
51f15a055e
commit
49376e3b31
6 changed files with 25 additions and 7 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -1219,6 +1219,7 @@ version = "0.0.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"devtools_traits",
|
"devtools_traits",
|
||||||
|
"embedder_traits",
|
||||||
"headers",
|
"headers",
|
||||||
"http",
|
"http",
|
||||||
"hyper",
|
"hyper",
|
||||||
|
|
|
@ -13,6 +13,7 @@ path = "lib.rs"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
crossbeam-channel = "0.3"
|
crossbeam-channel = "0.3"
|
||||||
devtools_traits = {path = "../devtools_traits"}
|
devtools_traits = {path = "../devtools_traits"}
|
||||||
|
embedder_traits = {path = "../embedder_traits"}
|
||||||
headers = "0.2"
|
headers = "0.2"
|
||||||
http = "0.1"
|
http = "0.1"
|
||||||
hyper = "0.12"
|
hyper = "0.12"
|
||||||
|
|
|
@ -39,7 +39,8 @@ use crossbeam_channel::{unbounded, Receiver, Sender};
|
||||||
use devtools_traits::{ChromeToDevtoolsControlMsg, ConsoleMessage, DevtoolsControlMsg};
|
use devtools_traits::{ChromeToDevtoolsControlMsg, ConsoleMessage, DevtoolsControlMsg};
|
||||||
use devtools_traits::{DevtoolScriptControlMsg, DevtoolsPageInfo, LogLevel, NetworkEvent};
|
use devtools_traits::{DevtoolScriptControlMsg, DevtoolsPageInfo, LogLevel, NetworkEvent};
|
||||||
use devtools_traits::{PageError, ScriptToDevtoolsControlMsg, WorkerId};
|
use devtools_traits::{PageError, ScriptToDevtoolsControlMsg, WorkerId};
|
||||||
use ipc_channel::ipc::IpcSender;
|
use embedder_traits::{EmbedderMsg, EmbedderProxy, PromptDefinition, PromptOrigin, PromptResult};
|
||||||
|
use ipc_channel::ipc::{self, IpcSender};
|
||||||
use msg::constellation_msg::PipelineId;
|
use msg::constellation_msg::PipelineId;
|
||||||
use std::borrow::ToOwned;
|
use std::borrow::ToOwned;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
@ -135,13 +136,13 @@ struct ResponseStartUpdateMsg {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Spin up a devtools server that listens for connections on the specified port.
|
/// Spin up a devtools server that listens for connections on the specified port.
|
||||||
pub fn start_server(port: u16) -> Sender<DevtoolsControlMsg> {
|
pub fn start_server(port: u16, embedder: EmbedderProxy) -> Sender<DevtoolsControlMsg> {
|
||||||
let (sender, receiver) = unbounded();
|
let (sender, receiver) = unbounded();
|
||||||
{
|
{
|
||||||
let sender = sender.clone();
|
let sender = sender.clone();
|
||||||
thread::Builder::new()
|
thread::Builder::new()
|
||||||
.name("Devtools".to_owned())
|
.name("Devtools".to_owned())
|
||||||
.spawn(move || run_server(sender, receiver, port))
|
.spawn(move || run_server(sender, receiver, port, embedder))
|
||||||
.expect("Thread spawning failed");
|
.expect("Thread spawning failed");
|
||||||
}
|
}
|
||||||
sender
|
sender
|
||||||
|
@ -151,6 +152,7 @@ fn run_server(
|
||||||
sender: Sender<DevtoolsControlMsg>,
|
sender: Sender<DevtoolsControlMsg>,
|
||||||
receiver: Receiver<DevtoolsControlMsg>,
|
receiver: Receiver<DevtoolsControlMsg>,
|
||||||
port: u16,
|
port: u16,
|
||||||
|
embedder: EmbedderProxy,
|
||||||
) {
|
) {
|
||||||
let listener = TcpListener::bind(&("0.0.0.0", port)).unwrap();
|
let listener = TcpListener::bind(&("0.0.0.0", port)).unwrap();
|
||||||
|
|
||||||
|
@ -553,7 +555,17 @@ fn run_server(
|
||||||
.spawn(move || {
|
.spawn(move || {
|
||||||
// accept connections and process them, spawning a new thread for each one
|
// accept connections and process them, spawning a new thread for each one
|
||||||
for stream in listener.incoming() {
|
for stream in listener.incoming() {
|
||||||
// connection succeeded
|
// Prompt user for permission
|
||||||
|
let (embedder_sender, receiver) =
|
||||||
|
ipc::channel().expect("Failed to create IPC channel!");
|
||||||
|
let message = "Accept incoming devtools connection?".to_owned();
|
||||||
|
let prompt = PromptDefinition::YesNo(message, embedder_sender);
|
||||||
|
let msg = EmbedderMsg::Prompt(prompt, PromptOrigin::Trusted);
|
||||||
|
embedder.send((None, msg));
|
||||||
|
if receiver.recv().unwrap() != PromptResult::Primary {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// connection succeeded and accepted
|
||||||
sender
|
sender
|
||||||
.send(DevtoolsControlMsg::FromChrome(
|
.send(DevtoolsControlMsg::FromChrome(
|
||||||
ChromeToDevtoolsControlMsg::AddClient(stream.unwrap()),
|
ChromeToDevtoolsControlMsg::AddClient(stream.unwrap()),
|
||||||
|
|
|
@ -356,8 +356,11 @@ where
|
||||||
opts.profile_heartbeats,
|
opts.profile_heartbeats,
|
||||||
);
|
);
|
||||||
let mem_profiler_chan = profile_mem::Profiler::create(opts.mem_profiler_period);
|
let mem_profiler_chan = profile_mem::Profiler::create(opts.mem_profiler_period);
|
||||||
|
|
||||||
let debugger_chan = opts.debugger_port.map(|port| debugger::start_server(port));
|
let debugger_chan = opts.debugger_port.map(|port| debugger::start_server(port));
|
||||||
let devtools_chan = opts.devtools_port.map(|port| devtools::start_server(port));
|
let devtools_chan = opts
|
||||||
|
.devtools_port
|
||||||
|
.map(|port| devtools::start_server(port, embedder_proxy.clone()));
|
||||||
|
|
||||||
let coordinates = window.get_coordinates();
|
let coordinates = window.get_coordinates();
|
||||||
let device_pixel_ratio = coordinates.hidpi_factor.get();
|
let device_pixel_ratio = coordinates.hidpi_factor.get();
|
||||||
|
|
|
@ -45,5 +45,6 @@
|
||||||
<Capability Name="internetClient" />
|
<Capability Name="internetClient" />
|
||||||
<Capability Name="codeGeneration" />
|
<Capability Name="codeGeneration" />
|
||||||
<Capability Name="privateNetworkClientServer" />
|
<Capability Name="privateNetworkClientServer" />
|
||||||
|
<Capability Name="internetClientServer" />
|
||||||
</Capabilities>
|
</Capabilities>
|
||||||
</Package>
|
</Package>
|
||||||
|
|
|
@ -119,7 +119,7 @@ Servo::Servo(hstring url, hstring args, GLsizei width, GLsizei height,
|
||||||
|
|
||||||
// Example Call when *pfilters[] is used:
|
// Example Call when *pfilters[] is used:
|
||||||
// o.vslogger_mod_list = pfilters; // servo log modules
|
// o.vslogger_mod_list = pfilters; // servo log modules
|
||||||
// o.vslogger_mod_size = sizeof(pfilters) / sizeof(pfilters[0]) -1; //
|
// o.vslogger_mod_size = sizeof(pfilters) / sizeof(pfilters[0]); //
|
||||||
// Important: Number of modules in pfilters
|
// Important: Number of modules in pfilters
|
||||||
o.vslogger_mod_list = NULL;
|
o.vslogger_mod_list = NULL;
|
||||||
o.vslogger_mod_size = 0;
|
o.vslogger_mod_size = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue