aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-07-27 16:55:16 -0700
committerBrian Anderson <banderson@mozilla.com>2012-07-27 16:55:16 -0700
commit1d7e37e299a74d3192bdecf5aa7fbc5a174db75b (patch)
tree691dd949c477d6726e4c9750b36974bdd8bd466b /src
parentf48309739f780103f875b8d0cba2079f76ad588c (diff)
downloadservo-1d7e37e299a74d3192bdecf5aa7fbc5a174db75b.tar.gz
servo-1d7e37e299a74d3192bdecf5aa7fbc5a174db75b.zip
Add make_url with some custom logic
Diffstat (limited to 'src')
-rwxr-xr-xsrc/servo/servo.rc1
-rw-r--r--src/servo/util/url.rs39
2 files changed, 40 insertions, 0 deletions
diff --git a/src/servo/servo.rc b/src/servo/servo.rc
index db25821594b..6cadf75241d 100755
--- a/src/servo/servo.rc
+++ b/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/src/servo/util/url.rs b/src/servo/util/url.rs
new file mode 100644
index 00000000000..cbdbae33d98
--- /dev/null
+++ b/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>) -> 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());
+}