diff --git a/src/servo/parser/html_lexer.rs b/src/servo/parser/html_lexer.rs
index ca95e1177fe..911ca60e828 100644
--- a/src/servo/parser/html_lexer.rs
+++ b/src/servo/parser/html_lexer.rs
@@ -184,7 +184,6 @@ fn spawn_html_lexer_task(-url: url, resource_task: ResourceTask) -> port
let html_chan = chan(html_port);
task::spawn(|| {
- assert url.path.ends_with(~".html");
let input_port = port();
resource_task.send(Load(url, input_port.chan()));
diff --git a/src/servo/resource/http_loader.rs b/src/servo/resource/http_loader.rs
new file mode 100644
index 00000000000..fdde14d7a6d
--- /dev/null
+++ b/src/servo/resource/http_loader.rs
@@ -0,0 +1,48 @@
+export factory;
+
+import comm::{chan, methods};
+import task::spawn;
+import resource_task::{ProgressMsg, Payload, Done};
+import std::net::url::url;
+import http_client::{
+ uv_http_request,
+ Uri
+};
+import result::{ok, err};
+
+fn factory(url: url, progress_chan: chan) {
+ assert url.scheme == ~"http";
+
+ do spawn {
+ #debug("http_loader: requesting via http: %?", url);
+ let request = uv_http_request(url_to_http_client_uri(url));
+ let errored = @mut false;
+ do request.begin |event| {
+ alt event {
+ http_client::Status(*) { }
+ http_client::Payload(data) {
+ #debug("http_loader: got data from %?", url);
+ let mut crap = none;
+ *data <-> crap;
+ progress_chan.send(Payload(option::unwrap(crap)));
+ }
+ http_client::Error(*) {
+ #debug("http_loader: error loading %?", url);
+ *errored = true;
+ progress_chan.send(Done(err(())));
+ }
+ }
+ }
+
+ if !*errored {
+ progress_chan.send(Done(ok(())));
+ }
+ }
+}
+
+fn url_to_http_client_uri(url: url) -> Uri {
+ {
+ host: url.host,
+ path: url.path
+ }
+}
\ No newline at end of file
diff --git a/src/servo/resource/resource_task.rs b/src/servo/resource/resource_task.rs
index a3593cbac58..a5684436fc6 100644
--- a/src/servo/resource/resource_task.rs
+++ b/src/servo/resource/resource_task.rs
@@ -30,7 +30,8 @@ type LoaderTaskFactory = fn~(url: url, chan);
fn ResourceTask() -> ResourceTask {
let loaders = ~[
- (~"file", file_loader::factory)
+ (~"file", file_loader::factory),
+ (~"http", http_loader::factory)
];
create_resource_task_with_loaders(loaders)
}
diff --git a/src/servo/servo.rc b/src/servo/servo.rc
index 6cadf75241d..3cc8e816db2 100755
--- a/src/servo/servo.rc
+++ b/src/servo/servo.rc
@@ -114,6 +114,7 @@ mod engine;
mod resource {
mod resource_task;
mod file_loader;
+ mod http_loader;
}
import servo_text = text;