From 208209fa2c939edb2f3afaba18d9344ff238c6f5 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 27 Jul 2012 16:55:16 -0700 Subject: [PATCH] servo: Add make_url with some custom logic Source-Repo: https://github.com/servo/servo Source-Revision: 1d7e37e299a74d3192bdecf5aa7fbc5a174db75b --- servo/src/servo/servo.rc | 1 + servo/src/servo/util/url.rs | 39 +++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 servo/src/servo/util/url.rs diff --git a/servo/src/servo/servo.rc b/servo/src/servo/servo.rc index db25821594bc..6cadf75241d2 100755 --- a/servo/src/servo/servo.rc +++ b/servo/src/servo/servo.rc @@ -101,6 +101,7 @@ mod util { mod color; mod unsafe; mod time; + mod url; } #[warn(no_non_implicitly_copyable_typarams)] diff --git a/servo/src/servo/util/url.rs b/servo/src/servo/util/url.rs new file mode 100644 index 000000000000..cbdbae33d987 --- /dev/null +++ b/servo/src/servo/util/url.rs @@ -0,0 +1,39 @@ +export make_url; + +import std::net::url; +import url::{get_scheme, url}; + +/** +Create a URL object from a string. Does various helpful browsery things like + +* If there's no current url and the path looks like a file then it will + create a file url based of the current working directory +* If there's a current url and the new path is relative then the new url + is based off the current url + +*/ +fn make_url(str_url: ~str, current_url: option) -> url { + let str_url = if get_scheme(str_url).is_some() { + str_url + } else { + if current_url.is_none() { + // If all we have is a filename, assume it's a local relative file + // and build an absolute path with the cwd + ~"file://" + path::connect(os::getcwd(), str_url) + } else { + fail;//current_url.get().scheme + "://" + str_url + } + }; + + // FIXME: Need to handle errors + url::from_str(str_url).get() +} + +#[test] +fn should_create_absolute_file_url_if_current_url_is_none_and_str_url_looks_filey() { + let file = ~"local.html"; + let url = make_url(file, none); + #debug("url: %?", url); + assert url.scheme == ~"file"; + assert url.path.contains(os::getcwd()); +}