diff --git a/components/compositing/pipeline.rs b/components/compositing/pipeline.rs index 8c22ce0348b..3a45a486b8a 100644 --- a/components/compositing/pipeline.rs +++ b/components/compositing/pipeline.rs @@ -26,6 +26,7 @@ use profile_traits::time; use script_traits::{ConstellationControlMsg, InitialScriptState, MozBrowserEvent}; use script_traits::{LayoutControlMsg, LayoutMsg, NewLayoutInfo, ScriptMsg}; use script_traits::{ScriptToCompositorMsg, ScriptThreadFactory, TimerEventRequest}; +use std::collections::HashMap; use std::mem; use std::sync::mpsc::{Receiver, Sender, channel}; use url::Url; @@ -33,7 +34,7 @@ use util; use util::geometry::{PagePx, ViewportPx}; use util::ipc::OptionalIpcSender; use util::opts::{self, Opts}; -use util::prefs; +use util::prefs::{self, Pref}; use util::thread; use webrender_traits; @@ -232,6 +233,7 @@ impl Pipeline { failure: failure, script_port: script_port, opts: (*opts::get()).clone(), + prefs: prefs::get_cloned(), layout_to_paint_chan: layout_to_paint_chan, pipeline_port: pipeline_port, layout_shutdown_chan: layout_shutdown_chan, @@ -408,6 +410,7 @@ pub struct UnprivilegedPipelineContent { script_port: Option>, layout_to_paint_chan: OptionalIpcSender, opts: Opts, + prefs: HashMap, paint_shutdown_chan: IpcSender<()>, pipeline_port: Option>, pipeline_namespace_id: PipelineNamespaceId, @@ -472,6 +475,10 @@ impl UnprivilegedPipelineContent { pub fn opts(&self) -> Opts { self.opts.clone() } + + pub fn prefs(&self) -> HashMap { + self.prefs.clone() + } } pub struct PrivilegedPipelineContent { diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 66657543fb0..47c66b97590 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -81,8 +81,8 @@ use profile_traits::mem; use profile_traits::time; use std::rc::Rc; use std::sync::mpsc::Sender; -use util::opts; use util::resource_files::resources_dir_path; +use util::{opts, prefs}; pub use gleam::gl; @@ -251,6 +251,7 @@ pub fn run_content_process(token: String) { let unprivileged_content = unprivileged_content_receiver.recv().unwrap(); opts::set_defaults(unprivileged_content.opts()); + prefs::extend_prefs(unprivileged_content.prefs()); // Enter the sandbox if necessary. if opts::get().sandbox { diff --git a/components/util/prefs.rs b/components/util/prefs.rs index 5679233a41f..43286f2137f 100644 --- a/components/util/prefs.rs +++ b/components/util/prefs.rs @@ -19,7 +19,7 @@ lazy_static! { }; } -#[derive(PartialEq, Clone, Debug)] +#[derive(PartialEq, Clone, Debug, Deserialize, Serialize)] pub enum PrefValue { Boolean(bool), String(String), @@ -83,7 +83,7 @@ impl ToJson for PrefValue { } } -#[derive(Debug)] +#[derive(Clone, Debug, Deserialize, Serialize)] pub enum Pref { NoDefault(Arc), WithDefault(Arc, Option>) @@ -157,6 +157,10 @@ pub fn read_prefs_from_file(mut file: T) Ok(prefs) } +pub fn get_cloned() -> HashMap { + PREFS.lock().unwrap().clone() +} + pub fn extend_prefs(extension: HashMap) { PREFS.lock().unwrap().extend(extension); }