mirror of
https://github.com/servo/servo.git
synced 2025-06-11 01:50:10 +00:00
Extract user_agent from global opts
This commit is contained in:
parent
50ea9fc02d
commit
2c306227e9
9 changed files with 108 additions and 75 deletions
|
@ -193,6 +193,11 @@ pub trait EmbedderMethods {
|
||||||
_: EmbedderProxy,
|
_: EmbedderProxy,
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the user agent string to report in network requests.
|
||||||
|
fn get_user_agent_string(&self) -> Option<String> {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
|
|
|
@ -10,7 +10,6 @@ use euclid::Size2D;
|
||||||
use getopts::{Matches, Options};
|
use getopts::{Matches, Options};
|
||||||
use servo_geometry::DeviceIndependentPixel;
|
use servo_geometry::DeviceIndependentPixel;
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
use std::borrow::Cow;
|
|
||||||
use std::default::Default;
|
use std::default::Default;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::{self, File};
|
use std::fs::{self, File};
|
||||||
|
@ -130,9 +129,6 @@ pub struct Opts {
|
||||||
/// The initial requested size of the window.
|
/// The initial requested size of the window.
|
||||||
pub initial_window_size: Size2D<u32, DeviceIndependentPixel>,
|
pub initial_window_size: Size2D<u32, DeviceIndependentPixel>,
|
||||||
|
|
||||||
/// An optional string allowing the user agent to be set for testing.
|
|
||||||
pub user_agent: Cow<'static, str>,
|
|
||||||
|
|
||||||
/// Whether we're running in multiprocess mode.
|
/// Whether we're running in multiprocess mode.
|
||||||
pub multiprocess: bool,
|
pub multiprocess: bool,
|
||||||
|
|
||||||
|
@ -473,51 +469,6 @@ pub fn multiprocess() -> bool {
|
||||||
MULTIPROCESS.load(Ordering::Relaxed)
|
MULTIPROCESS.load(Ordering::Relaxed)
|
||||||
}
|
}
|
||||||
|
|
||||||
enum UserAgent {
|
|
||||||
Desktop,
|
|
||||||
Android,
|
|
||||||
#[allow(non_camel_case_types)]
|
|
||||||
iOS,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn default_user_agent_string(agent: UserAgent) -> &'static str {
|
|
||||||
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
|
|
||||||
const DESKTOP_UA_STRING: &'static str =
|
|
||||||
"Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Servo/1.0 Firefox/72.0";
|
|
||||||
#[cfg(all(target_os = "linux", not(target_arch = "x86_64")))]
|
|
||||||
const DESKTOP_UA_STRING: &'static str =
|
|
||||||
"Mozilla/5.0 (X11; Linux i686; rv:72.0) Servo/1.0 Firefox/72.0";
|
|
||||||
|
|
||||||
#[cfg(all(target_os = "windows", target_arch = "x86_64"))]
|
|
||||||
const DESKTOP_UA_STRING: &'static str =
|
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Servo/1.0 Firefox/72.0";
|
|
||||||
#[cfg(all(target_os = "windows", not(target_arch = "x86_64")))]
|
|
||||||
const DESKTOP_UA_STRING: &'static str =
|
|
||||||
"Mozilla/5.0 (Windows NT 10.0; rv:72.0) Servo/1.0 Firefox/72.0";
|
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "linux", target_os = "windows")))]
|
|
||||||
// Neither Linux nor Windows, so maybe OS X, and if not then OS X is an okay fallback.
|
|
||||||
const DESKTOP_UA_STRING: &'static str =
|
|
||||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:72.0) Servo/1.0 Firefox/72.0";
|
|
||||||
|
|
||||||
match agent {
|
|
||||||
UserAgent::Desktop => DESKTOP_UA_STRING,
|
|
||||||
UserAgent::Android => "Mozilla/5.0 (Android; Mobile; rv:68.0) Servo/1.0 Firefox/68.0",
|
|
||||||
UserAgent::iOS => {
|
|
||||||
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X; rv:72.0) Servo/1.0 Firefox/72.0"
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(target_os = "android")]
|
|
||||||
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Android;
|
|
||||||
|
|
||||||
#[cfg(target_os = "ios")]
|
|
||||||
const DEFAULT_USER_AGENT: UserAgent = UserAgent::iOS;
|
|
||||||
|
|
||||||
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
|
||||||
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Desktop;
|
|
||||||
|
|
||||||
pub fn default_opts() -> Opts {
|
pub fn default_opts() -> Opts {
|
||||||
Opts {
|
Opts {
|
||||||
is_running_problem_test: false,
|
is_running_problem_test: false,
|
||||||
|
@ -546,7 +497,6 @@ pub fn default_opts() -> Opts {
|
||||||
devtools_port: None,
|
devtools_port: None,
|
||||||
webdriver_port: None,
|
webdriver_port: None,
|
||||||
initial_window_size: Size2D::new(1024, 740),
|
initial_window_size: Size2D::new(1024, 740),
|
||||||
user_agent: default_user_agent_string(DEFAULT_USER_AGENT).into(),
|
|
||||||
multiprocess: false,
|
multiprocess: false,
|
||||||
background_hang_monitor: false,
|
background_hang_monitor: false,
|
||||||
random_pipeline_closure_probability: None,
|
random_pipeline_closure_probability: None,
|
||||||
|
@ -661,12 +611,6 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
|
||||||
"7000",
|
"7000",
|
||||||
);
|
);
|
||||||
opts.optopt("", "resolution", "Set window resolution.", "1024x740");
|
opts.optopt("", "resolution", "Set window resolution.", "1024x740");
|
||||||
opts.optopt(
|
|
||||||
"u",
|
|
||||||
"user-agent",
|
|
||||||
"Set custom user agent string (or ios / android / desktop for platform default)",
|
|
||||||
"NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)",
|
|
||||||
);
|
|
||||||
opts.optflag("M", "multiprocess", "Run in multiprocess mode");
|
opts.optflag("M", "multiprocess", "Run in multiprocess mode");
|
||||||
opts.optflag("B", "bhm", "Background Hang Monitor enabled");
|
opts.optflag("B", "bhm", "Background Hang Monitor enabled");
|
||||||
opts.optflag("S", "sandbox", "Run in a sandbox if multiprocess");
|
opts.optflag("S", "sandbox", "Run in a sandbox if multiprocess");
|
||||||
|
@ -912,14 +856,6 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
|
||||||
MULTIPROCESS.store(true, Ordering::SeqCst)
|
MULTIPROCESS.store(true, Ordering::SeqCst)
|
||||||
}
|
}
|
||||||
|
|
||||||
let user_agent = match opt_match.opt_str("u") {
|
|
||||||
Some(ref ua) if ua == "ios" => default_user_agent_string(UserAgent::iOS).into(),
|
|
||||||
Some(ref ua) if ua == "android" => default_user_agent_string(UserAgent::Android).into(),
|
|
||||||
Some(ref ua) if ua == "desktop" => default_user_agent_string(UserAgent::Desktop).into(),
|
|
||||||
Some(ua) => ua.into(),
|
|
||||||
None => default_user_agent_string(DEFAULT_USER_AGENT).into(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let user_stylesheets = opt_match
|
let user_stylesheets = opt_match
|
||||||
.opt_strs("user-stylesheet")
|
.opt_strs("user-stylesheet")
|
||||||
.iter()
|
.iter()
|
||||||
|
@ -964,7 +900,6 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR
|
||||||
devtools_port: devtools_port,
|
devtools_port: devtools_port,
|
||||||
webdriver_port: webdriver_port,
|
webdriver_port: webdriver_port,
|
||||||
initial_window_size: initial_window_size,
|
initial_window_size: initial_window_size,
|
||||||
user_agent: user_agent,
|
|
||||||
multiprocess: opt_match.opt_present("M"),
|
multiprocess: opt_match.opt_present("M"),
|
||||||
background_hang_monitor: opt_match.opt_present("B"),
|
background_hang_monitor: opt_match.opt_present("B"),
|
||||||
sandbox: opt_match.opt_present("S"),
|
sandbox: opt_match.opt_present("S"),
|
||||||
|
|
|
@ -166,7 +166,7 @@ use servo_config::{opts, pref};
|
||||||
use servo_rand::{random, Rng, ServoRng, SliceRandom};
|
use servo_rand::{random, Rng, ServoRng, SliceRandom};
|
||||||
use servo_remutex::ReentrantMutex;
|
use servo_remutex::ReentrantMutex;
|
||||||
use servo_url::{Host, ImmutableOrigin, ServoUrl};
|
use servo_url::{Host, ImmutableOrigin, ServoUrl};
|
||||||
use std::borrow::ToOwned;
|
use std::borrow::{Cow, ToOwned};
|
||||||
use std::collections::hash_map::Entry;
|
use std::collections::hash_map::Entry;
|
||||||
use std::collections::{HashMap, HashSet, VecDeque};
|
use std::collections::{HashMap, HashSet, VecDeque};
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
@ -503,6 +503,9 @@ pub struct Constellation<Message, LTF, STF, SWF> {
|
||||||
|
|
||||||
/// Pipeline ID of the active media session.
|
/// Pipeline ID of the active media session.
|
||||||
active_media_session: Option<PipelineId>,
|
active_media_session: Option<PipelineId>,
|
||||||
|
|
||||||
|
/// User agent string to report in network requests.
|
||||||
|
user_agent: Cow<'static, str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// State needed to construct a constellation.
|
/// State needed to construct a constellation.
|
||||||
|
@ -562,6 +565,9 @@ pub struct InitialConstellationState {
|
||||||
|
|
||||||
/// A flag share with the compositor to indicate that a WR frame is in progress.
|
/// A flag share with the compositor to indicate that a WR frame is in progress.
|
||||||
pub pending_wr_frame: Arc<AtomicBool>,
|
pub pending_wr_frame: Arc<AtomicBool>,
|
||||||
|
|
||||||
|
/// User agent string to report in network requests.
|
||||||
|
pub user_agent: Cow<'static, str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Data needed for webdriver
|
/// Data needed for webdriver
|
||||||
|
@ -1021,6 +1027,7 @@ where
|
||||||
player_context: state.player_context,
|
player_context: state.player_context,
|
||||||
event_loop_waker: state.event_loop_waker,
|
event_loop_waker: state.event_loop_waker,
|
||||||
active_media_session: None,
|
active_media_session: None,
|
||||||
|
user_agent: state.user_agent,
|
||||||
};
|
};
|
||||||
|
|
||||||
constellation.run();
|
constellation.run();
|
||||||
|
@ -1268,6 +1275,7 @@ where
|
||||||
webxr_registry: self.webxr_registry.clone(),
|
webxr_registry: self.webxr_registry.clone(),
|
||||||
player_context: self.player_context.clone(),
|
player_context: self.player_context.clone(),
|
||||||
event_loop_waker: self.event_loop_waker.as_ref().map(|w| (*w).clone_box()),
|
event_loop_waker: self.event_loop_waker.as_ref().map(|w| (*w).clone_box()),
|
||||||
|
user_agent: self.user_agent.clone(),
|
||||||
});
|
});
|
||||||
|
|
||||||
let pipeline = match result {
|
let pipeline = match result {
|
||||||
|
|
|
@ -41,6 +41,7 @@ use script_traits::{ScriptThreadFactory, TimerSchedulerMsg, WindowSizeData};
|
||||||
use servo_config::opts::{self, Opts};
|
use servo_config::opts::{self, Opts};
|
||||||
use servo_config::{prefs, prefs::PrefValue};
|
use servo_config::{prefs, prefs::PrefValue};
|
||||||
use servo_url::ServoUrl;
|
use servo_url::ServoUrl;
|
||||||
|
use std::borrow::Cow;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::sync::atomic::AtomicBool;
|
use std::sync::atomic::AtomicBool;
|
||||||
|
@ -201,6 +202,9 @@ pub struct InitialPipelineState {
|
||||||
|
|
||||||
/// Mechanism to force the compositor to process events.
|
/// Mechanism to force the compositor to process events.
|
||||||
pub event_loop_waker: Option<Box<dyn EventLoopWaker>>,
|
pub event_loop_waker: Option<Box<dyn EventLoopWaker>>,
|
||||||
|
|
||||||
|
/// User agent string to report in network requests.
|
||||||
|
pub user_agent: Cow<'static, str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct NewPipeline {
|
pub struct NewPipeline {
|
||||||
|
@ -304,6 +308,7 @@ impl Pipeline {
|
||||||
webvr_chan: state.webvr_chan,
|
webvr_chan: state.webvr_chan,
|
||||||
webxr_registry: state.webxr_registry,
|
webxr_registry: state.webxr_registry,
|
||||||
player_context: state.player_context,
|
player_context: state.player_context,
|
||||||
|
user_agent: state.user_agent,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Spawn the child process.
|
// Spawn the child process.
|
||||||
|
@ -520,6 +525,7 @@ pub struct UnprivilegedPipelineContent {
|
||||||
webvr_chan: Option<IpcSender<WebVRMsg>>,
|
webvr_chan: Option<IpcSender<WebVRMsg>>,
|
||||||
webxr_registry: webxr_api::Registry,
|
webxr_registry: webxr_api::Registry,
|
||||||
player_context: WindowGLContext,
|
player_context: WindowGLContext,
|
||||||
|
user_agent: Cow<'static, str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UnprivilegedPipelineContent {
|
impl UnprivilegedPipelineContent {
|
||||||
|
@ -588,7 +594,7 @@ impl UnprivilegedPipelineContent {
|
||||||
self.opts.userscripts,
|
self.opts.userscripts,
|
||||||
self.opts.headless,
|
self.opts.headless,
|
||||||
self.opts.replace_surrogates,
|
self.opts.replace_surrogates,
|
||||||
self.opts.user_agent,
|
self.user_agent,
|
||||||
);
|
);
|
||||||
|
|
||||||
LTF::create(
|
LTF::create(
|
||||||
|
|
|
@ -321,7 +321,11 @@ impl<Window> Servo<Window>
|
||||||
where
|
where
|
||||||
Window: WindowMethods + 'static + ?Sized,
|
Window: WindowMethods + 'static + ?Sized,
|
||||||
{
|
{
|
||||||
pub fn new(mut embedder: Box<dyn EmbedderMethods>, window: Rc<Window>) -> Servo<Window> {
|
pub fn new(
|
||||||
|
mut embedder: Box<dyn EmbedderMethods>,
|
||||||
|
window: Rc<Window>,
|
||||||
|
user_agent: Option<String>,
|
||||||
|
) -> Servo<Window> {
|
||||||
// Global configuration options, parsed from the command line.
|
// Global configuration options, parsed from the command line.
|
||||||
let opts = opts::get();
|
let opts = opts::get();
|
||||||
|
|
||||||
|
@ -338,6 +342,21 @@ where
|
||||||
media_platform::init();
|
media_platform::init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let user_agent = match user_agent {
|
||||||
|
Some(ref ua) if ua == "ios" => default_user_agent_string_for(UserAgent::iOS).into(),
|
||||||
|
Some(ref ua) if ua == "android" => {
|
||||||
|
default_user_agent_string_for(UserAgent::Android).into()
|
||||||
|
},
|
||||||
|
Some(ref ua) if ua == "desktop" => {
|
||||||
|
default_user_agent_string_for(UserAgent::Desktop).into()
|
||||||
|
},
|
||||||
|
Some(ua) => ua.into(),
|
||||||
|
None => embedder
|
||||||
|
.get_user_agent_string()
|
||||||
|
.map(Into::into)
|
||||||
|
.unwrap_or(default_user_agent_string_for(DEFAULT_USER_AGENT).into()),
|
||||||
|
};
|
||||||
|
|
||||||
// Make sure the gl context is made current.
|
// Make sure the gl context is made current.
|
||||||
window.make_gl_context_current();
|
window.make_gl_context_current();
|
||||||
|
|
||||||
|
@ -521,7 +540,7 @@ where
|
||||||
// pipelines, including the script and layout threads, as well
|
// pipelines, including the script and layout threads, as well
|
||||||
// as the navigation context.
|
// as the navigation context.
|
||||||
let constellation_chan = create_constellation(
|
let constellation_chan = create_constellation(
|
||||||
opts.user_agent.clone(),
|
user_agent,
|
||||||
opts.config_dir.clone(),
|
opts.config_dir.clone(),
|
||||||
embedder_proxy,
|
embedder_proxy,
|
||||||
compositor_proxy.clone(),
|
compositor_proxy.clone(),
|
||||||
|
@ -885,7 +904,7 @@ fn create_constellation(
|
||||||
BluetoothThreadFactory::new(embedder_proxy.clone());
|
BluetoothThreadFactory::new(embedder_proxy.clone());
|
||||||
|
|
||||||
let (public_resource_threads, private_resource_threads) = new_resource_threads(
|
let (public_resource_threads, private_resource_threads) = new_resource_threads(
|
||||||
user_agent,
|
user_agent.clone(),
|
||||||
devtools_chan.clone(),
|
devtools_chan.clone(),
|
||||||
time_profiler_chan.clone(),
|
time_profiler_chan.clone(),
|
||||||
mem_profiler_chan.clone(),
|
mem_profiler_chan.clone(),
|
||||||
|
@ -918,6 +937,7 @@ fn create_constellation(
|
||||||
player_context,
|
player_context,
|
||||||
event_loop_waker,
|
event_loop_waker,
|
||||||
pending_wr_frame,
|
pending_wr_frame,
|
||||||
|
user_agent,
|
||||||
};
|
};
|
||||||
|
|
||||||
let (canvas_chan, ipc_canvas_chan) = canvas::canvas_paint_thread::CanvasPaintThread::start();
|
let (canvas_chan, ipc_canvas_chan) = canvas::canvas_paint_thread::CanvasPaintThread::start();
|
||||||
|
@ -1146,3 +1166,47 @@ where
|
||||||
Some((webxr_surface_providers, webgl_executor)),
|
Some((webxr_surface_providers, webgl_executor)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum UserAgent {
|
||||||
|
Desktop,
|
||||||
|
Android,
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
|
iOS,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_user_agent_string_for(agent: UserAgent) -> &'static str {
|
||||||
|
#[cfg(all(target_os = "linux", target_arch = "x86_64"))]
|
||||||
|
const DESKTOP_UA_STRING: &'static str =
|
||||||
|
"Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Servo/1.0 Firefox/72.0";
|
||||||
|
#[cfg(all(target_os = "linux", not(target_arch = "x86_64")))]
|
||||||
|
const DESKTOP_UA_STRING: &'static str =
|
||||||
|
"Mozilla/5.0 (X11; Linux i686; rv:72.0) Servo/1.0 Firefox/72.0";
|
||||||
|
|
||||||
|
#[cfg(all(target_os = "windows", target_arch = "x86_64"))]
|
||||||
|
const DESKTOP_UA_STRING: &'static str =
|
||||||
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Servo/1.0 Firefox/72.0";
|
||||||
|
#[cfg(all(target_os = "windows", not(target_arch = "x86_64")))]
|
||||||
|
const DESKTOP_UA_STRING: &'static str =
|
||||||
|
"Mozilla/5.0 (Windows NT 10.0; rv:72.0) Servo/1.0 Firefox/72.0";
|
||||||
|
|
||||||
|
#[cfg(target_os = "macos")]
|
||||||
|
const DESKTOP_UA_STRING: &'static str =
|
||||||
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:72.0) Servo/1.0 Firefox/72.0";
|
||||||
|
|
||||||
|
match agent {
|
||||||
|
UserAgent::Desktop => DESKTOP_UA_STRING,
|
||||||
|
UserAgent::Android => "Mozilla/5.0 (Android; Mobile; rv:68.0) Servo/1.0 Firefox/68.0",
|
||||||
|
UserAgent::iOS => {
|
||||||
|
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X; rv:72.0) Servo/1.0 Firefox/72.0"
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "android")]
|
||||||
|
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Android;
|
||||||
|
|
||||||
|
#[cfg(target_os = "ios")]
|
||||||
|
const DEFAULT_USER_AGENT: UserAgent = UserAgent::iOS;
|
||||||
|
|
||||||
|
#[cfg(not(any(target_os = "android", target_os = "ios")))]
|
||||||
|
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Desktop;
|
||||||
|
|
|
@ -40,6 +40,7 @@ impl App {
|
||||||
use_msaa: bool,
|
use_msaa: bool,
|
||||||
no_native_titlebar: bool,
|
no_native_titlebar: bool,
|
||||||
device_pixels_per_px: Option<f32>,
|
device_pixels_per_px: Option<f32>,
|
||||||
|
user_agent: Option<String>,
|
||||||
) {
|
) {
|
||||||
let events_loop = EventsLoop::new(opts::get().headless);
|
let events_loop = EventsLoop::new(opts::get().headless);
|
||||||
|
|
||||||
|
@ -70,7 +71,7 @@ impl App {
|
||||||
// Handle browser state.
|
// Handle browser state.
|
||||||
let browser = Browser::new(window.clone());
|
let browser = Browser::new(window.clone());
|
||||||
|
|
||||||
let mut servo = Servo::new(embedder, window.clone());
|
let mut servo = Servo::new(embedder, window.clone(), user_agent);
|
||||||
let browser_id = BrowserId::new();
|
let browser_id = BrowserId::new();
|
||||||
servo.handle_events(vec![WindowEvent::NewBrowser(get_default_url(), browser_id)]);
|
servo.handle_events(vec![WindowEvent::NewBrowser(get_default_url(), browser_id)]);
|
||||||
servo.setup_logging();
|
servo.setup_logging();
|
||||||
|
|
|
@ -104,6 +104,12 @@ pub fn main() {
|
||||||
opts.optflag("", "msaa", "Use multisample antialiasing in WebRender.");
|
opts.optflag("", "msaa", "Use multisample antialiasing in WebRender.");
|
||||||
opts.optflag("b", "no-native-titlebar", "Do not use native titlebar");
|
opts.optflag("b", "no-native-titlebar", "Do not use native titlebar");
|
||||||
opts.optopt("", "device-pixel-ratio", "Device pixels per px", "");
|
opts.optopt("", "device-pixel-ratio", "Device pixels per px", "");
|
||||||
|
opts.optopt(
|
||||||
|
"u",
|
||||||
|
"user-agent",
|
||||||
|
"Set custom user agent string (or ios / android / desktop for platform default)",
|
||||||
|
"NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)",
|
||||||
|
);
|
||||||
|
|
||||||
let opts_matches;
|
let opts_matches;
|
||||||
let content_process_token;
|
let content_process_token;
|
||||||
|
@ -173,12 +179,20 @@ pub fn main() {
|
||||||
let use_msaa = opts_matches.opt_present("msaa");
|
let use_msaa = opts_matches.opt_present("msaa");
|
||||||
let device_pixels_per_px = opts_matches.opt_str("device-pixel-ratio").map(|dppx_str| {
|
let device_pixels_per_px = opts_matches.opt_str("device-pixel-ratio").map(|dppx_str| {
|
||||||
dppx_str.parse().unwrap_or_else(|err| {
|
dppx_str.parse().unwrap_or_else(|err| {
|
||||||
error!( "Error parsing option: --device-pixel-ratio ({})", err);
|
error!("Error parsing option: --device-pixel-ratio ({})", err);
|
||||||
process::exit(1);
|
process::exit(1);
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
let user_agent = opts_matches.opt_str("u");
|
||||||
|
|
||||||
App::run(angle, enable_vsync, use_msaa, do_not_use_native_titlebar, device_pixels_per_px);
|
App::run(
|
||||||
|
angle,
|
||||||
|
enable_vsync,
|
||||||
|
use_msaa,
|
||||||
|
do_not_use_native_titlebar,
|
||||||
|
device_pixels_per_px,
|
||||||
|
user_agent,
|
||||||
|
);
|
||||||
|
|
||||||
platform::deinit(clean_shutdown)
|
platform::deinit(clean_shutdown)
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,7 +205,7 @@ impl ServoThread {
|
||||||
let window = Rc::new(ServoWebSrcWindow::new(connection, version));
|
let window = Rc::new(ServoWebSrcWindow::new(connection, version));
|
||||||
let swap_chain = window.swap_chain.clone();
|
let swap_chain = window.swap_chain.clone();
|
||||||
let gfx = window.gfx.clone();
|
let gfx = window.gfx.clone();
|
||||||
let mut servo = Servo::new(embedder, window);
|
let mut servo = Servo::new(embedder, window, None);
|
||||||
let id = TopLevelBrowsingContextId::new();
|
let id = TopLevelBrowsingContextId::new();
|
||||||
servo.handle_events(vec![WindowEvent::NewBrowser(url, id)]);
|
servo.handle_events(vec![WindowEvent::NewBrowser(url, id)]);
|
||||||
|
|
||||||
|
|
|
@ -235,7 +235,7 @@ pub fn init(
|
||||||
gl: gl.clone(),
|
gl: gl.clone(),
|
||||||
});
|
});
|
||||||
|
|
||||||
let servo = Servo::new(embedder_callbacks, window_callbacks.clone());
|
let servo = Servo::new(embedder_callbacks, window_callbacks.clone(), None);
|
||||||
|
|
||||||
SERVO.with(|s| {
|
SERVO.with(|s| {
|
||||||
let mut servo_glue = ServoGlue {
|
let mut servo_glue = ServoGlue {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue