diff --git a/src/servo/resource/file_loader.rs b/src/servo/resource/file_loader.rs new file mode 100644 index 00000000000..e5c4eb95681 --- /dev/null +++ b/src/servo/resource/file_loader.rs @@ -0,0 +1,29 @@ +export factory; + +import comm::{chan, methods}; +import task::spawn; +import resource_task::{ProgressMsg, Payload, Done}; +import std::net::url::url; +import io::file_reader; +import result::{result, ok, err}; + +const READ_SIZE: uint = 1024; + +fn factory(url: url, progress_chan: chan) { + assert url.scheme == ~"file"; + + do spawn { + alt file_reader(url.path) { + ok(reader) { + while !reader.eof() { + let data = reader.read_bytes(READ_SIZE); + progress_chan.send(Payload(data)); + } + progress_chan.send(Done(ok(()))); + } + err(*) { + progress_chan.send(Done(err(()))); + } + }; + } +} \ No newline at end of file diff --git a/src/servo/resource/resource_task.rs b/src/servo/resource/resource_task.rs index 0d7fcca2f46..a3593cbac58 100644 --- a/src/servo/resource/resource_task.rs +++ b/src/servo/resource/resource_task.rs @@ -4,7 +4,9 @@ A task that takes a URL and streams back the binary data */ -export ControlMsg, ProgressMsg, ResourceTask, ResourceManager, LoaderTaskFactory; +export ControlMsg, Load, Exit; +export ProgressMsg, Payload, Done; +export ResourceTask, ResourceManager, LoaderTaskFactory; import comm::{chan, port, methods}; import task::{spawn, spawn_listener}; @@ -27,7 +29,10 @@ type ResourceTask = chan; type LoaderTaskFactory = fn~(url: url, chan); fn ResourceTask() -> ResourceTask { - create_resource_task_with_loaders(~[]) + let loaders = ~[ + (~"file", file_loader::factory) + ]; + create_resource_task_with_loaders(loaders) } fn create_resource_task_with_loaders(+loaders: ~[(~str, LoaderTaskFactory)]) -> ResourceTask { @@ -63,6 +68,7 @@ class ResourceManager { alt self.get_loader_factory(url) { some(loader_factory) { + #debug("resource_task: loading url: %s", url::to_str(url)); loader_factory(url, progress_chan); } none { diff --git a/src/servo/servo.rc b/src/servo/servo.rc index 7b846e855e6..db25821594b 100755 --- a/src/servo/servo.rc +++ b/src/servo/servo.rc @@ -112,6 +112,7 @@ mod engine; mod resource { mod resource_task; + mod file_loader; } import servo_text = text;