aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom')
-rw-r--r--src/components/script/dom/htmliframeelement.rs7
-rw-r--r--src/components/script/dom/htmlimageelement.rs19
-rw-r--r--src/components/script/dom/htmlobjectelement.rs10
-rw-r--r--src/components/script/dom/window.rs9
-rw-r--r--src/components/script/dom/worker.rs5
-rw-r--r--src/components/script/dom/xmlhttprequest.rs15
6 files changed, 32 insertions, 33 deletions
diff --git a/src/components/script/dom/htmliframeelement.rs b/src/components/script/dom/htmliframeelement.rs
index 83638ad44e1..31a41b9f956 100644
--- a/src/components/script/dom/htmliframeelement.rs
+++ b/src/components/script/dom/htmliframeelement.rs
@@ -21,11 +21,10 @@ use servo_msg::constellation_msg::{IFrameSandboxed, IFrameUnsandboxed};
use servo_msg::constellation_msg::{ConstellationChan, LoadIframeUrlMsg};
use servo_util::namespace::Null;
use servo_util::str::DOMString;
-use servo_util::url::try_parse_url;
use std::ascii::StrAsciiExt;
use std::cell::Cell;
-use url::Url;
+use url::{Url, UrlParser};
enum SandboxAllowance {
AllowNothing = 0x00,
@@ -70,8 +69,8 @@ impl<'a> HTMLIFrameElementHelpers for JSRef<'a, HTMLIFrameElement> {
let element: &JSRef<Element> = ElementCast::from_ref(self);
element.get_attribute(Null, "src").root().and_then(|src| {
let window = window_from_node(self).root();
- try_parse_url(src.deref().value().as_slice(),
- Some(window.deref().page().get_url())).ok()
+ UrlParser::new().base_url(&window.deref().page().get_url())
+ .parse(src.deref().value().as_slice()).ok()
})
}
}
diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs
index dbf3e6cefca..31eb2687aab 100644
--- a/src/components/script/dom/htmlimageelement.rs
+++ b/src/components/script/dom/htmlimageelement.rs
@@ -17,10 +17,9 @@ use dom::node::{Node, ElementNodeTypeId, NodeHelpers, window_from_node};
use dom::virtualmethods::VirtualMethods;
use servo_util::geometry::to_px;
use servo_net::image_cache_task;
-use servo_util::url::parse_url;
use servo_util::str::DOMString;
use std::cell::RefCell;
-use url::Url;
+use url::{Url, UrlParser};
#[deriving(Encodable)]
pub struct HTMLImageElement {
@@ -35,13 +34,13 @@ impl HTMLImageElementDerived for EventTarget {
}
trait PrivateHTMLImageElementHelpers {
- fn update_image(&self, value: Option<DOMString>, url: Option<Url>);
+ fn update_image(&self, value: Option<(DOMString, &Url)>);
}
impl<'a> PrivateHTMLImageElementHelpers for JSRef<'a, HTMLImageElement> {
/// Makes the local `image` member match the status of the `src` attribute and starts
/// prefetching the image. This method must be called after `src` is changed.
- fn update_image(&self, value: Option<DOMString>, url: Option<Url>) {
+ fn update_image(&self, value: Option<(DOMString, &Url)>) {
let node: &JSRef<Node> = NodeCast::from_ref(self);
let document = node.owner_doc().root();
let window = document.deref().window.root();
@@ -50,8 +49,10 @@ impl<'a> PrivateHTMLImageElementHelpers for JSRef<'a, HTMLImageElement> {
None => {
*self.image.deref().borrow_mut() = None;
}
- Some(src) => {
- let img_url = parse_url(src.as_slice(), url);
+ Some((src, base_url)) => {
+ let img_url = UrlParser::new().base_url(base_url).parse(src.as_slice());
+ // FIXME: handle URL parse errors more gracefully.
+ let img_url = img_url.unwrap();
*self.image.deref().borrow_mut() = Some(img_url.clone());
// inform the image cache to load this, but don't store a
@@ -254,8 +255,8 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> {
if "src" == name.as_slice() {
let window = window_from_node(self).root();
- let url = Some(window.deref().get_url());
- self.update_image(Some(value), url);
+ let url = window.deref().get_url();
+ self.update_image(Some((value, &url)));
}
}
@@ -266,7 +267,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLImageElement> {
}
if "src" == name.as_slice() {
- self.update_image(None, None);
+ self.update_image(None);
}
}
diff --git a/src/components/script/dom/htmlobjectelement.rs b/src/components/script/dom/htmlobjectelement.rs
index 9fdabdae318..eff1718ac69 100644
--- a/src/components/script/dom/htmlobjectelement.rs
+++ b/src/components/script/dom/htmlobjectelement.rs
@@ -20,7 +20,6 @@ use servo_util::str::DOMString;
use servo_net::image_cache_task;
use servo_net::image_cache_task::ImageCacheTask;
-use servo_util::url::parse_url;
use servo_util::namespace::Null;
use url::Url;
@@ -49,13 +48,13 @@ impl HTMLObjectElement {
}
trait ProcessDataURL {
- fn process_data_url(&self, image_cache: ImageCacheTask, url: Option<Url>);
+ fn process_data_url(&self, image_cache: ImageCacheTask);
}
impl<'a> ProcessDataURL for JSRef<'a, HTMLObjectElement> {
// Makes the local `data` member match the status of the `data` attribute and starts
/// prefetching the image. This method must be called after `data` is changed.
- fn process_data_url(&self, image_cache: ImageCacheTask, url: Option<Url>) {
+ fn process_data_url(&self, image_cache: ImageCacheTask) {
let elem: &JSRef<Element> = ElementCast::from_ref(self);
// TODO: support other values
@@ -63,7 +62,7 @@ impl<'a> ProcessDataURL for JSRef<'a, HTMLObjectElement> {
elem.get_attribute(Null, "data").map(|x| x.root().Value())) {
(None, Some(uri)) => {
if is_image_data(uri.as_slice()) {
- let data_url = parse_url(uri.as_slice(), url);
+ let data_url = Url::parse(uri.as_slice()).unwrap();
// Issue #84
image_cache.send(image_cache_task::Prefetch(data_url));
}
@@ -103,8 +102,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLObjectElement> {
if "data" == name.as_slice() {
let window = window_from_node(self).root();
- let url = Some(window.deref().get_url());
- self.process_data_url(window.deref().image_cache_task.clone(), url);
+ self.process_data_url(window.deref().image_cache_task.clone());
}
}
}
diff --git a/src/components/script/dom/window.rs b/src/components/script/dom/window.rs
index b8a1bb8dce5..ee1cce1a22e 100644
--- a/src/components/script/dom/window.rs
+++ b/src/components/script/dom/window.rs
@@ -24,7 +24,6 @@ use servo_msg::compositor_msg::ScriptListener;
use servo_net::image_cache_task::ImageCacheTask;
use servo_util::str::DOMString;
use servo_util::task::{spawn_named};
-use servo_util::url::parse_url;
use js::jsapi::JS_CallFunctionValue;
use js::jsapi::JSContext;
@@ -46,7 +45,7 @@ use std::rc::Rc;
use time;
use serialize::{Encoder, Encodable};
-use url::Url;
+use url::{Url, UrlParser};
#[deriving(PartialEq, Encodable, Eq)]
pub struct TimerId(i32);
@@ -316,9 +315,11 @@ impl<'a> WindowHelpers for JSRef<'a, Window> {
/// Commence a new URL load which will either replace this window or scroll to a fragment.
fn load_url(&self, href: DOMString) {
- let base_url = Some(self.page().get_url());
+ let base_url = self.page().get_url();
debug!("current page url is {:?}", base_url);
- let url = parse_url(href.as_slice(), base_url);
+ let url = UrlParser::new().base_url(&base_url).parse(href.as_slice());
+ // FIXME: handle URL parse errors more gracefully.
+ let url = url.unwrap();
let ScriptChan(ref script_chan) = self.script_chan;
if href.as_slice().starts_with("#") {
script_chan.send(TriggerFragmentMsg(self.page.id, url));
diff --git a/src/components/script/dom/worker.rs b/src/components/script/dom/worker.rs
index bd6ce75486d..74768594cdb 100644
--- a/src/components/script/dom/worker.rs
+++ b/src/components/script/dom/worker.rs
@@ -12,7 +12,7 @@ use dom::dedicatedworkerglobalscope::DedicatedWorkerGlobalScope;
use dom::eventtarget::{EventTarget, WorkerTypeId};
use servo_util::str::DOMString;
-use servo_util::url::try_parse_url;
+use url::UrlParser;
#[deriving(Encodable)]
pub struct Worker {
@@ -37,7 +37,8 @@ impl Worker {
// http://www.whatwg.org/html/#dom-worker
pub fn Constructor(global: &GlobalRef, scriptURL: DOMString) -> Fallible<Temporary<Worker>> {
// Step 2-4.
- let worker_url = match try_parse_url(scriptURL.as_slice(), Some(global.get_url())) {
+ let worker_url = match UrlParser::new().base_url(&global.get_url())
+ .parse(scriptURL.as_slice()) {
Ok(url) => url,
Err(_) => return Err(Syntax),
};
diff --git a/src/components/script/dom/xmlhttprequest.rs b/src/components/script/dom/xmlhttprequest.rs
index b253e4209bb..d6813ed253b 100644
--- a/src/components/script/dom/xmlhttprequest.rs
+++ b/src/components/script/dom/xmlhttprequest.rs
@@ -46,7 +46,6 @@ use net::resource_task::{ResourceTask, Load, LoadData, Payload, Done};
use script_task::{ScriptChan, XHRProgressMsg};
use servo_util::str::DOMString;
use servo_util::task::spawn_named;
-use servo_util::url::{parse_url, try_parse_url};
use std::ascii::StrAsciiExt;
use std::cell::{Cell, RefCell};
@@ -56,7 +55,7 @@ use std::from_str::FromStr;
use std::path::BytesContainer;
use std::task::TaskBuilder;
use time;
-use url::Url;
+use url::{Url, UrlParser};
use dom::bindings::codegen::UnionTypes::StringOrURLSearchParams::{eString, eURLSearchParams, StringOrURLSearchParams};
pub type SendParam = StringOrURLSearchParams;
@@ -113,7 +112,7 @@ pub struct XMLHttpRequest {
// Associated concepts
request_method: Untraceable<RefCell<Method>>,
- request_url: Untraceable<RefCell<Url>>,
+ request_url: Untraceable<RefCell<Option<Url>>>,
request_headers: Untraceable<RefCell<RequestHeaderCollection>>,
request_body_len: Traceable<Cell<uint>>,
sync: Traceable<Cell<bool>>,
@@ -146,7 +145,7 @@ impl XMLHttpRequest {
response_headers: Untraceable::new(RefCell::new(ResponseHeaderCollection::new())),
request_method: Untraceable::new(RefCell::new(Get)),
- request_url: Untraceable::new(RefCell::new(parse_url("", None))),
+ request_url: Untraceable::new(RefCell::new(None)),
request_headers: Untraceable::new(RefCell::new(RequestHeaderCollection::new())),
request_body_len: Traceable::new(Cell::new(0)),
sync: Traceable::new(Cell::new(false)),
@@ -293,7 +292,6 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
Method::from_str_or_new(s.as_slice())
});
// Step 2
- let base: Option<Url> = Some(self.global.root().root_ref().get_url());
match maybe_method {
// Step 4
Some(Connect) | Some(Trace) => Err(Security),
@@ -303,7 +301,8 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
*self.request_method.deref().borrow_mut() = maybe_method.unwrap();
// Step 6
- let parsed_url = match try_parse_url(url.as_slice(), base) {
+ let base = self.global.root().root_ref().get_url();
+ let parsed_url = match UrlParser::new().base_url(&base).parse(url.as_slice()) {
Ok(parsed) => parsed,
Err(_) => return Err(Syntax) // Step 7
};
@@ -316,7 +315,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
}
// XXXManishearth abort existing requests
// Step 12
- *self.request_url.deref().borrow_mut() = parsed_url;
+ *self.request_url.deref().borrow_mut() = Some(parsed_url);
*self.request_headers.deref().borrow_mut() = RequestHeaderCollection::new();
self.send_flag.deref().set(false);
*self.status_text.deref().borrow_mut() = ByteString::new(vec!());
@@ -487,7 +486,7 @@ impl<'a> XMLHttpRequestMethods<'a> for JSRef<'a, XMLHttpRequest> {
let global = self.global.root();
let resource_task = global.root_ref().resource_task();
- let mut load_data = LoadData::new(self.request_url.deref().borrow().clone());
+ let mut load_data = LoadData::new(self.request_url.deref().borrow().clone().unwrap());
load_data.data = extracted;
// Default headers