Expose user agent option to DOM navigator interface.

This commit is contained in:
Glenn Watson 2014-10-08 12:02:13 +10:00
parent 6317905342
commit eb5532c781
6 changed files with 38 additions and 12 deletions

View file

@ -51,6 +51,10 @@ impl<'a> NavigatorMethods for JSRef<'a, Navigator> {
fn Platform(self) -> DOMString { fn Platform(self) -> DOMString {
NavigatorInfo::Platform() NavigatorInfo::Platform()
} }
fn UserAgent(self) -> DOMString {
NavigatorInfo::UserAgent()
}
} }
impl Reflectable for Navigator { impl Reflectable for Navigator {

View file

@ -3,6 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use servo_util::str::DOMString; use servo_util::str::DOMString;
use servo_util::opts;
pub struct NavigatorInfo; pub struct NavigatorInfo;
@ -26,4 +27,11 @@ impl NavigatorInfo {
pub fn Platform() -> DOMString { pub fn Platform() -> DOMString {
"".to_string() "".to_string()
} }
pub fn UserAgent() -> DOMString {
match opts::get().user_agent {
Some(ref user_agent) => user_agent.clone(),
None => "".to_string(),
}
}
} }

View file

@ -23,5 +23,5 @@ interface NavigatorID {
readonly attribute DOMString platform; readonly attribute DOMString platform;
readonly attribute DOMString product; // constant "Gecko" readonly attribute DOMString product; // constant "Gecko"
boolean taintEnabled(); // constant false boolean taintEnabled(); // constant false
//readonly attribute DOMString userAgent; readonly attribute DOMString userAgent;
}; };

View file

@ -51,6 +51,10 @@ impl<'a> WorkerNavigatorMethods for JSRef<'a, WorkerNavigator> {
fn Platform(self) -> DOMString { fn Platform(self) -> DOMString {
NavigatorInfo::Platform() NavigatorInfo::Platform()
} }
fn UserAgent(self) -> DOMString {
NavigatorInfo::UserAgent()
}
} }
impl Reflectable for WorkerNavigator { impl Reflectable for WorkerNavigator {

View file

@ -15,6 +15,7 @@ use layers::geometry::DevicePixel;
use getopts; use getopts;
use std::cmp; use std::cmp;
use std::io; use std::io;
use std::mem;
use std::os; use std::os;
use std::rt; use std::rt;
@ -230,7 +231,7 @@ pub fn from_cmdline_args(args: &[String]) -> Option<Opts> {
} }
}; };
Some(Opts { let opts = Opts {
urls: urls, urls: urls,
render_backend: render_backend, render_backend: render_backend,
n_render_threads: n_render_threads, n_render_threads: n_render_threads,
@ -253,7 +254,14 @@ pub fn from_cmdline_args(args: &[String]) -> Option<Opts> {
initial_window_size: initial_window_size, initial_window_size: initial_window_size,
user_agent: opt_match.opt_str("u"), user_agent: opt_match.opt_str("u"),
dump_flow_tree: opt_match.opt_present("dump-flow-tree"), dump_flow_tree: opt_match.opt_present("dump-flow-tree"),
}) };
unsafe {
let box_opts = box opts.clone();
OPTIONS = mem::transmute(box_opts);
}
Some(opts)
} }
static mut EXPERIMENTAL_ENABLED: bool = false; static mut EXPERIMENTAL_ENABLED: bool = false;
@ -269,3 +277,14 @@ pub fn experimental_enabled() -> bool {
EXPERIMENTAL_ENABLED EXPERIMENTAL_ENABLED
} }
} }
// Make Opts available globally. This saves having to clone and pass
// opts everywhere it is used, which gets particularly cumbersome
// when passing through the DOM structures.
// GWTODO: Change existing code that takes copies of opts to instead
// make use of the global copy.
static mut OPTIONS: *mut Opts = 0 as *mut Opts;
pub fn get() -> &'static Opts {
unsafe { mem::transmute(OPTIONS) }
}

View file

@ -8802,9 +8802,6 @@
[Navigator interface: attribute appVersion] [Navigator interface: attribute appVersion]
expected: FAIL expected: FAIL
[Navigator interface: attribute userAgent]
expected: FAIL
[Navigator interface: attribute language] [Navigator interface: attribute language]
expected: FAIL expected: FAIL
@ -8850,9 +8847,6 @@
[Navigator interface: window.navigator must inherit property "appVersion" with the proper type (2)] [Navigator interface: window.navigator must inherit property "appVersion" with the proper type (2)]
expected: FAIL expected: FAIL
[Navigator interface: window.navigator must inherit property "userAgent" with the proper type (6)]
expected: FAIL
[Navigator interface: window.navigator must inherit property "language" with the proper type (7)] [Navigator interface: window.navigator must inherit property "language" with the proper type (7)]
expected: FAIL expected: FAIL
@ -9405,9 +9399,6 @@
[WorkerNavigator interface: attribute appVersion] [WorkerNavigator interface: attribute appVersion]
expected: FAIL expected: FAIL
[WorkerNavigator interface: attribute userAgent]
expected: FAIL
[WorkerNavigator interface: attribute language] [WorkerNavigator interface: attribute language]
expected: FAIL expected: FAIL