зеркало из https://github.com/mozilla/gecko-dev.git
servo: Merge #7246 - Add a simple method to emulate a platform UA (e.g. pretend a desktop build is an android UA) (from glennw:platform-ua); r=larsbergstrom
Source-Repo: https://github.com/servo/servo Source-Revision: f340900c38768122ee8647eb3dc3f7cd0e2a6254
This commit is contained in:
Родитель
098b50f43d
Коммит
d58f2c501d
|
@ -128,7 +128,7 @@ pub fn start_sending_opt(start_chan: LoadConsumer, metadata: Metadata) -> Result
|
|||
}
|
||||
|
||||
/// Create a ResourceTask
|
||||
pub fn new_resource_task(user_agent: Option<String>,
|
||||
pub fn new_resource_task(user_agent: String,
|
||||
devtools_chan: Option<Sender<DevtoolsControlMsg>>) -> ResourceTask {
|
||||
let hsts_preload = match preload_hsts_domains() {
|
||||
Some(list) => list,
|
||||
|
@ -184,7 +184,7 @@ impl ResourceChannelManager {
|
|||
}
|
||||
|
||||
pub struct ResourceManager {
|
||||
user_agent: Option<String>,
|
||||
user_agent: String,
|
||||
cookie_storage: CookieStorage,
|
||||
resource_task: IpcSender<ControlMsg>,
|
||||
mime_classifier: Arc<MIMEClassifier>,
|
||||
|
@ -193,7 +193,7 @@ pub struct ResourceManager {
|
|||
}
|
||||
|
||||
impl ResourceManager {
|
||||
pub fn new(user_agent: Option<String>,
|
||||
pub fn new(user_agent: String,
|
||||
resource_task: IpcSender<ControlMsg>,
|
||||
hsts_list: HSTSList,
|
||||
devtools_channel: Option<Sender<DevtoolsControlMsg>>) -> ResourceManager {
|
||||
|
@ -229,9 +229,7 @@ impl ResourceManager {
|
|||
}
|
||||
|
||||
fn load(&mut self, mut load_data: LoadData, consumer: LoadConsumer) {
|
||||
self.user_agent.as_ref().map(|ua| {
|
||||
load_data.preserved_headers.set(UserAgent(ua.clone()));
|
||||
});
|
||||
load_data.preserved_headers.set(UserAgent(self.user_agent.clone()));
|
||||
|
||||
fn from_factory(factory: fn(LoadData, LoadConsumer, Arc<MIMEClassifier>))
|
||||
-> Box<FnBox(LoadData, LoadConsumer, Arc<MIMEClassifier>) + Send> {
|
||||
|
|
|
@ -28,10 +28,7 @@ pub fn Platform() -> DOMString {
|
|||
}
|
||||
|
||||
pub fn UserAgent() -> DOMString {
|
||||
match opts::get().user_agent {
|
||||
Some(ref user_agent) => user_agent.clone(),
|
||||
None => "".to_owned(),
|
||||
}
|
||||
opts::get().user_agent.clone()
|
||||
}
|
||||
|
||||
pub fn AppVersion() -> DOMString {
|
||||
|
|
|
@ -135,7 +135,7 @@ pub struct Opts {
|
|||
pub initial_window_size: TypedSize2D<ScreenPx, u32>,
|
||||
|
||||
/// An optional string allowing the user agent to be set for testing.
|
||||
pub user_agent: Option<String>,
|
||||
pub user_agent: String,
|
||||
|
||||
/// Whether to run in multiprocess mode.
|
||||
pub multiprocess: bool,
|
||||
|
@ -337,17 +337,36 @@ static FORCE_CPU_PAINTING: bool = true;
|
|||
#[cfg(not(target_os="android"))]
|
||||
static FORCE_CPU_PAINTING: bool = false;
|
||||
|
||||
enum UserAgent {
|
||||
Desktop,
|
||||
Android,
|
||||
Gonk,
|
||||
}
|
||||
|
||||
fn default_user_agent_string(agent: UserAgent) -> String {
|
||||
match agent {
|
||||
UserAgent::Desktop => {
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Servo/1.0 Firefox/37.0"
|
||||
}
|
||||
UserAgent::Android => {
|
||||
"Mozilla/5.0 (Android; Mobile; rv:37.0) Servo/1.0 Firefox/37.0"
|
||||
}
|
||||
UserAgent::Gonk => {
|
||||
"Mozilla/5.0 (Mobile; rv:37.0) Servo/1.0 Firefox/37.0"
|
||||
}
|
||||
}.to_owned()
|
||||
}
|
||||
|
||||
#[cfg(target_os="android")]
|
||||
const DEFAULT_USER_AGENT: &'static str = "Mozilla/5.0 (Android; Mobile; rv:37.0) Servo/1.0 Firefox/37.0";
|
||||
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Android;
|
||||
|
||||
// FIXME: This requires https://github.com/servo/servo/issues/7138 to provide the
|
||||
// correct string in Gonk builds (i.e., it will never be chosen today).
|
||||
#[cfg(target_os="gonk")]
|
||||
const DEFAULT_USER_AGENT: &'static str = "Mozilla/5.0 (Mobile; rv:37.0) Servo/1.0 Firefox/37.0";
|
||||
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Gonk;
|
||||
|
||||
#[cfg(not(any(target_os="android", target_os="gonk")))]
|
||||
const DEFAULT_USER_AGENT: &'static str =
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0) Servo/1.0 Firefox/37.0";
|
||||
const DEFAULT_USER_AGENT: UserAgent = UserAgent::Desktop;
|
||||
|
||||
pub fn default_opts() -> Opts {
|
||||
Opts {
|
||||
|
@ -381,7 +400,7 @@ pub fn default_opts() -> Opts {
|
|||
devtools_port: None,
|
||||
webdriver_port: None,
|
||||
initial_window_size: Size2D::typed(800, 600),
|
||||
user_agent: None,
|
||||
user_agent: default_user_agent_string(DEFAULT_USER_AGENT),
|
||||
multiprocess: false,
|
||||
dump_flow_tree: false,
|
||||
dump_display_list: false,
|
||||
|
@ -424,7 +443,10 @@ pub fn from_cmdline_args(args: &[String]) {
|
|||
opts.optflagopt("", "devtools", "Start remote devtools server on port", "6000");
|
||||
opts.optflagopt("", "webdriver", "Start remote WebDriver server on port", "7000");
|
||||
opts.optopt("", "resolution", "Set window resolution.", "800x600");
|
||||
opts.optopt("u", "user-agent", "Set custom user agent string", "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)");
|
||||
opts.optopt("u",
|
||||
"user-agent",
|
||||
"Set custom user agent string (or android / gonk / desktop for platform default)",
|
||||
"NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)");
|
||||
opts.optflag("M", "multiprocess", "Run in multiprocess mode");
|
||||
opts.optopt("Z", "debug",
|
||||
"A comma-separated string of debug options. Pass help to show available options.", "");
|
||||
|
@ -532,7 +554,13 @@ pub fn from_cmdline_args(args: &[String]) {
|
|||
}
|
||||
};
|
||||
|
||||
let user_agent = opt_match.opt_str("u").or(Some(DEFAULT_USER_AGENT.to_string()));
|
||||
let user_agent = match opt_match.opt_str("u") {
|
||||
Some(ref ua) if ua == "android" => default_user_agent_string(UserAgent::Android),
|
||||
Some(ref ua) if ua == "gonk" => default_user_agent_string(UserAgent::Gonk),
|
||||
Some(ref ua) if ua == "desktop" => default_user_agent_string(UserAgent::Desktop),
|
||||
Some(ua) => ua,
|
||||
None => default_user_agent_string(DEFAULT_USER_AGENT),
|
||||
};
|
||||
|
||||
let user_stylesheets = opt_match.opt_strs("user-stylesheet").iter().map(|filename| {
|
||||
let path = cwd.join(filename);
|
||||
|
|
|
@ -19,7 +19,7 @@ fn test_add_hsts_entry_to_resource_manager_adds_an_hsts_entry() {
|
|||
};
|
||||
|
||||
let (tx, _) = ipc::channel().unwrap();
|
||||
let mut manager = ResourceManager::new(None, tx, list, None);
|
||||
let mut manager = ResourceManager::new("".to_owned(), tx, list, None);
|
||||
|
||||
let entry = HSTSEntry::new(
|
||||
"mozilla.org".to_string(), IncludeSubdomains::NotIncluded, None
|
||||
|
|
|
@ -14,13 +14,13 @@ use url::Url;
|
|||
|
||||
#[test]
|
||||
fn test_exit() {
|
||||
let resource_task = new_resource_task(None, None);
|
||||
let resource_task = new_resource_task("".to_owned(), None);
|
||||
resource_task.send(ControlMsg::Exit).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_bad_scheme() {
|
||||
let resource_task = new_resource_task(None, None);
|
||||
let resource_task = new_resource_task("".to_owned(), None);
|
||||
let (start_chan, start) = ipc::channel().unwrap();
|
||||
let url = Url::parse("bogus://whatever").unwrap();
|
||||
resource_task.send(ControlMsg::Load(LoadData::new(url, None), LoadConsumer::Channel(start_chan))).unwrap();
|
||||
|
|
Загрузка…
Ссылка в новой задаче