From dc1d66d3ce621827189166f99dc324805bf0ccb7 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Fri, 3 Oct 2014 13:50:38 +1000 Subject: [PATCH 1/2] Add cmd line option to set user agent. Improves github when used. --- components/net/resource_task.rs | 17 +++++++++++------ components/util/opts.rs | 5 +++++ src/lib.rs | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 1b6e177350c..4a148876be2 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -164,24 +164,26 @@ pub fn load_whole_resource(resource_task: &ResourceTask, url: Url) pub type ResourceTask = Sender; /// Create a ResourceTask -pub fn new_resource_task() -> ResourceTask { +pub fn new_resource_task(user_agent: Option) -> ResourceTask { let (setup_chan, setup_port) = channel(); let builder = TaskBuilder::new().named("ResourceManager"); builder.spawn(proc() { - ResourceManager::new(setup_port).start(); + ResourceManager::new(setup_port, user_agent).start(); }); setup_chan } struct ResourceManager { from_client: Receiver, + user_agent: Option, } impl ResourceManager { - fn new(from_client: Receiver) -> ResourceManager { + fn new(from_client: Receiver, user_agent: Option) -> ResourceManager { ResourceManager { - from_client : from_client, + from_client: from_client, + user_agent: user_agent, } } } @@ -202,6 +204,9 @@ impl ResourceManager { } fn load(&self, load_data: LoadData, start_chan: Sender) { + let mut load_data = load_data; + load_data.headers.user_agent = self.user_agent.clone(); + let loader = match load_data.url.scheme.as_slice() { "file" => file_loader::factory, "http" | "https" => http_loader::factory, @@ -249,13 +254,13 @@ impl Iterator> for ProgressMsgPortIterator { #[test] fn test_exit() { - let resource_task = new_resource_task(); + let resource_task = new_resource_task(None); resource_task.send(Exit); } #[test] fn test_bad_scheme() { - let resource_task = new_resource_task(); + let resource_task = new_resource_task(None); let (start_chan, start) = channel(); let url = Url::parse("bogus://whatever").unwrap(); resource_task.send(Load(LoadData::new(url), start_chan)); diff --git a/components/util/opts.rs b/components/util/opts.rs index 677adba2592..ae3f01a21f6 100644 --- a/components/util/opts.rs +++ b/components/util/opts.rs @@ -90,6 +90,9 @@ pub struct Opts { /// The initial requested size of the window. pub initial_window_size: TypedSize2D, + + /// An optional string allowing the user agent to be set for testing. + pub user_agent: Option, } fn print_usage(app: &str, opts: &[getopts::OptGroup]) { @@ -126,6 +129,7 @@ pub fn from_cmdline_args(args: &[String]) -> Option { getopts::optflag("", "trace-layout", "Write layout trace to external file for debugging."), getopts::optflag("", "devtools", "Start remote devtools server"), getopts::optopt("", "resolution", "Set window resolution.", "800x600"), + getopts::optopt("u", "user-agent", "Set custom user agent string", "NCSA Mosaic/1.0 (X11;SunOS 4.1.4 sun4m)"), getopts::optflag("h", "help", "Print this message") ); @@ -238,6 +242,7 @@ pub fn from_cmdline_args(args: &[String]) -> Option { trace_layout: trace_layout, devtools_server: opt_match.opt_present("devtools"), initial_window_size: initial_window_size, + user_agent: opt_match.opt_str("u"), }) } diff --git a/src/lib.rs b/src/lib.rs index 6434f0c364c..a9b545fa51b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -110,7 +110,7 @@ pub fn run(opts: opts::Opts) { .spawn(proc() { let opts = &opts_clone; // Create a Servo instance. - let resource_task = new_resource_task(); + let resource_task = new_resource_task(opts.user_agent.clone()); // If we are emitting an output file, then we need to block on // image load or we risk emitting an output file missing the // image. From 69d98204a0e35ad1f4f9677b2592fed68530fa63 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Tue, 7 Oct 2014 08:17:51 +1000 Subject: [PATCH 2/2] Fix missing field in CEF port. --- ports/cef/core.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/cef/core.rs b/ports/cef/core.rs index 41f85f79110..6a40bafea7f 100644 --- a/ports/cef/core.rs +++ b/ports/cef/core.rs @@ -70,6 +70,7 @@ pub extern "C" fn cef_run_message_loop() { trace_layout: false, devtools_server: false, initial_window_size: TypedSize2D(800, 600), + user_agent: None, }; native::start(0, 0 as *const *const u8, proc() { servo::run(opts);