aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/net/resource_task.rs17
-rw-r--r--components/util/opts.rs5
-rw-r--r--src/lib.rs2
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<ControlMsg>;
/// Create a ResourceTask
-pub fn new_resource_task() -> ResourceTask {
+pub fn new_resource_task(user_agent: Option<String>) -> 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<ControlMsg>,
+ user_agent: Option<String>,
}
impl ResourceManager {
- fn new(from_client: Receiver<ControlMsg>) -> ResourceManager {
+ fn new(from_client: Receiver<ControlMsg>, user_agent: Option<String>) -> 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<LoadResponse>) {
+ 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<Vec<u8>> 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<ScreenPx, uint>,
+
+ /// An optional string allowing the user agent to be set for testing.
+ pub user_agent: Option<String>,
}
fn print_usage(app: &str, opts: &[getopts::OptGroup]) {
@@ -126,6 +129,7 @@ pub fn from_cmdline_args(args: &[String]) -> Option<Opts> {
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<Opts> {
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.