diff options
author | Bastien Orivel <eijebong@bananium.fr> | 2018-12-09 19:11:45 +0100 |
---|---|---|
committer | Bastien Orivel <eijebong@bananium.fr> | 2018-12-20 20:53:13 +0100 |
commit | 16beb65d497d323ca64d2fd7f98ac11877c5296e (patch) | |
tree | 0d9094fbd007dcc08774c0393c1abb840dafbbcf /components | |
parent | 71f9619e60cbb47349e48cd679179ebd5678e789 (diff) | |
download | servo-16beb65d497d323ca64d2fd7f98ac11877c5296e.tar.gz servo-16beb65d497d323ca64d2fd7f98ac11877c5296e.zip |
Disable gaol on android
Diffstat (limited to 'components')
-rw-r--r-- | components/constellation/Cargo.toml | 2 | ||||
-rw-r--r-- | components/constellation/lib.rs | 4 | ||||
-rw-r--r-- | components/constellation/pipeline.rs | 24 | ||||
-rw-r--r-- | components/servo/Cargo.toml | 2 | ||||
-rw-r--r-- | components/servo/lib.rs | 10 |
5 files changed, 32 insertions, 10 deletions
diff --git a/components/constellation/Cargo.toml b/components/constellation/Cargo.toml index f9e9b351180..e023a2d2044 100644 --- a/components/constellation/Cargo.toml +++ b/components/constellation/Cargo.toml @@ -45,5 +45,5 @@ servo_url = {path = "../url"} webvr_traits = {path = "../webvr_traits"} webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]} -[target.'cfg(all(not(target_os = "windows"), not(target_os = "ios")))'.dependencies] +[target.'cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os="android")))'.dependencies] gaol = {git = "https://github.com/servo/gaol"} diff --git a/components/constellation/lib.rs b/components/constellation/lib.rs index e4278c595cc..77b367d25fd 100644 --- a/components/constellation/lib.rs +++ b/components/constellation/lib.rs @@ -17,7 +17,7 @@ mod constellation; mod event_loop; mod network_listener; mod pipeline; -#[cfg(all(not(target_os = "windows"), not(target_os = "ios")))] +#[cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android")))] mod sandboxing; mod session_history; mod timer_scheduler; @@ -26,5 +26,5 @@ pub use crate::constellation::{ Constellation, FromCompositorLogger, FromScriptLogger, InitialConstellationState, }; pub use crate::pipeline::UnprivilegedPipelineContent; -#[cfg(all(not(target_os = "windows"), not(target_os = "ios")))] +#[cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android")))] pub use crate::sandboxing::content_process_sandbox_profile; diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs index 4a04adec0dd..e1930b379eb 100644 --- a/components/constellation/pipeline.rs +++ b/components/constellation/pipeline.rs @@ -571,7 +571,29 @@ impl UnprivilegedPipelineContent { } } - #[cfg(all(not(target_os = "windows"), not(target_os = "ios")))] + #[cfg(target_os = "android")] + pub fn spawn_multiprocess(self) -> Result<(), Error> { + use ipc_channel::ipc::IpcOneShotServer; + // Note that this function can panic, due to process creation, + // avoiding this panic would require a mechanism for dealing + // with low-resource scenarios. + let (server, token) = IpcOneShotServer::<IpcSender<UnprivilegedPipelineContent>>::new() + .expect("Failed to create IPC one-shot server."); + + let path_to_self = env::current_exe().expect("Failed to get current executor."); + let mut child_process = process::Command::new(path_to_self); + self.setup_common(&mut child_process, token); + let _ = child_process + .spawn() + .expect("Failed to start unsandboxed child process!"); + + let (_receiver, sender) = server.accept().expect("Server failed to accept."); + sender.send(self)?; + + Ok(()) + } + + #[cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android")))] pub fn spawn_multiprocess(self) -> Result<(), Error> { use crate::sandboxing::content_process_sandbox_profile; use gaol::sandbox::{self, Sandbox, SandboxMethods}; diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml index 4be1917cc97..b69dd34da62 100644 --- a/components/servo/Cargo.toml +++ b/components/servo/Cargo.toml @@ -71,5 +71,5 @@ webdriver_server = {path = "../webdriver_server", optional = true} webvr = {path = "../webvr"} webvr_traits = {path = "../webvr_traits"} -[target.'cfg(all(not(target_os = "windows"), not(target_os = "ios")))'.dependencies] +[target.'cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os="android")))'.dependencies] gaol = {git = "https://github.com/servo/gaol"} diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 93cda15c419..a5fe0b5ffda 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -68,14 +68,14 @@ use canvas::webgl_thread::WebGLThreads; use compositing::compositor_thread::{CompositorProxy, CompositorReceiver, InitialCompositorState}; use compositing::windowing::{WindowEvent, WindowMethods}; use compositing::{IOCompositor, RenderNotifier, ShutdownState}; -#[cfg(all(not(target_os = "windows"), not(target_os = "ios")))] +#[cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android")))] use constellation::content_process_sandbox_profile; use constellation::{Constellation, InitialConstellationState, UnprivilegedPipelineContent}; use constellation::{FromCompositorLogger, FromScriptLogger}; use crossbeam_channel::{unbounded, Sender}; use embedder_traits::{EmbedderMsg, EmbedderProxy, EmbedderReceiver, EventLoopWaker}; use env_logger::Builder as EnvLoggerBuilder; -#[cfg(all(not(target_os = "windows"), not(target_os = "ios")))] +#[cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android")))] use gaol::sandbox::{ChildSandbox, ChildSandboxMethods}; use gfx::font_cache_thread::FontCacheThread; use ipc_channel::ipc::{self, IpcSender}; @@ -661,14 +661,14 @@ pub fn run_content_process(token: String) { ); } -#[cfg(all(not(target_os = "windows"), not(target_os = "ios")))] +#[cfg(all(not(target_os = "windows"), not(target_os = "ios"), not(target_os = "android")))] fn create_sandbox() { ChildSandbox::new(content_process_sandbox_profile()) .activate() .expect("Failed to activate sandbox!"); } -#[cfg(any(target_os = "windows", target_os = "ios"))] +#[cfg(any(target_os = "windows", target_os = "ios", target_os = "android"))] fn create_sandbox() { - panic!("Sandboxing is not supported on Windows or iOS."); + panic!("Sandboxing is not supported on Windows, iOS and android."); } |