Disable gaol on android

This commit is contained in:
Bastien Orivel 2018-12-09 19:11:45 +01:00
parent 71f9619e60
commit 16beb65d49
5 changed files with 32 additions and 10 deletions

View file

@ -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"}

View file

@ -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;

View file

@ -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};

View file

@ -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"}

View file

@ -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.");
}