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:
Glenn Watson 2015-08-17 22:44:38 -06:00
Родитель 098b50f43d
Коммит d58f2c501d
5 изменённых файлов: 44 добавлений и 21 удалений

Просмотреть файл

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