diff --git a/Cargo.lock b/Cargo.lock index 872c4f62549..24560a47b48 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1219,6 +1219,7 @@ version = "0.0.1" dependencies = [ "crossbeam-channel", "devtools_traits", + "embedder_traits", "headers", "http", "hyper", diff --git a/components/devtools/Cargo.toml b/components/devtools/Cargo.toml index f59070b08b5..87380e66aa2 100644 --- a/components/devtools/Cargo.toml +++ b/components/devtools/Cargo.toml @@ -13,6 +13,7 @@ path = "lib.rs" [dependencies] crossbeam-channel = "0.3" devtools_traits = {path = "../devtools_traits"} +embedder_traits = {path = "../embedder_traits"} headers = "0.2" http = "0.1" hyper = "0.12" diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs index 7f958b2bb50..a33294f078f 100644 --- a/components/devtools/lib.rs +++ b/components/devtools/lib.rs @@ -39,7 +39,8 @@ use crossbeam_channel::{unbounded, Receiver, Sender}; use devtools_traits::{ChromeToDevtoolsControlMsg, ConsoleMessage, DevtoolsControlMsg}; use devtools_traits::{DevtoolScriptControlMsg, DevtoolsPageInfo, LogLevel, NetworkEvent}; 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 std::borrow::ToOwned; use std::cell::RefCell; @@ -135,13 +136,13 @@ struct ResponseStartUpdateMsg { } /// Spin up a devtools server that listens for connections on the specified port. -pub fn start_server(port: u16) -> Sender { +pub fn start_server(port: u16, embedder: EmbedderProxy) -> Sender { let (sender, receiver) = unbounded(); { let sender = sender.clone(); thread::Builder::new() .name("Devtools".to_owned()) - .spawn(move || run_server(sender, receiver, port)) + .spawn(move || run_server(sender, receiver, port, embedder)) .expect("Thread spawning failed"); } sender @@ -151,6 +152,7 @@ fn run_server( sender: Sender, receiver: Receiver, port: u16, + embedder: EmbedderProxy, ) { let listener = TcpListener::bind(&("0.0.0.0", port)).unwrap(); @@ -553,7 +555,17 @@ fn run_server( .spawn(move || { // accept connections and process them, spawning a new thread for each one 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 .send(DevtoolsControlMsg::FromChrome( ChromeToDevtoolsControlMsg::AddClient(stream.unwrap()), diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 708c1036a8b..117b3d04837 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -356,8 +356,11 @@ where opts.profile_heartbeats, ); 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 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 device_pixel_ratio = coordinates.hidpi_factor.get(); diff --git a/support/hololens/ServoApp/Package.appxmanifest b/support/hololens/ServoApp/Package.appxmanifest index f9492c07cd0..53255364338 100644 --- a/support/hololens/ServoApp/Package.appxmanifest +++ b/support/hololens/ServoApp/Package.appxmanifest @@ -45,5 +45,6 @@ + - \ No newline at end of file + diff --git a/support/hololens/ServoApp/ServoControl/Servo.cpp b/support/hololens/ServoApp/ServoControl/Servo.cpp index a6e4952956e..0db1bb93032 100644 --- a/support/hololens/ServoApp/ServoControl/Servo.cpp +++ b/support/hololens/ServoApp/ServoControl/Servo.cpp @@ -119,7 +119,7 @@ Servo::Servo(hstring url, hstring args, GLsizei width, GLsizei height, // Example Call when *pfilters[] is used: // 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 o.vslogger_mod_list = NULL; o.vslogger_mod_size = 0;