diff options
author | Simon Sapin <simon.sapin@exyr.org> | 2014-07-19 18:45:11 +0100 |
---|---|---|
committer | Simon Sapin <simon.sapin@exyr.org> | 2014-07-21 20:22:29 +0100 |
commit | 6917fbf28e977f1e1da2e349b8f1685e267eb045 (patch) | |
tree | 38ad2d20aeb111fdc4eec3cd6468b9d6415d94b8 /src | |
parent | 779cb44a44b195eb7a88e69a4f2e5551f85448e1 (diff) | |
download | servo-6917fbf28e977f1e1da2e349b8f1685e267eb045.tar.gz servo-6917fbf28e977f1e1da2e349b8f1685e267eb045.zip |
Used rust-url directly instead of servo_util::url
The latter now only calls the former.
Diffstat (limited to 'src')
-rw-r--r-- | src/components/compositing/compositor.rs | 5 | ||||
-rw-r--r-- | src/components/compositing/constellation.rs | 3 | ||||
-rw-r--r-- | src/components/layout/construct.rs | 9 | ||||
-rw-r--r-- | src/components/net/image_cache_task.rs | 42 | ||||
-rw-r--r-- | src/components/script/dom/htmliframeelement.rs | 7 | ||||
-rw-r--r-- | src/components/script/dom/htmlimageelement.rs | 19 | ||||
-rw-r--r-- | src/components/script/dom/htmlobjectelement.rs | 10 | ||||
-rw-r--r-- | src/components/script/dom/window.rs | 9 | ||||
-rw-r--r-- | src/components/script/dom/worker.rs | 5 | ||||
-rw-r--r-- | src/components/script/dom/xmlhttprequest.rs | 15 | ||||
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 15 | ||||
-rw-r--r-- | src/components/style/properties/common_types.rs | 7 | ||||
-rw-r--r-- | src/components/style/properties/mod.rs.mako | 3 |
13 files changed, 78 insertions, 71 deletions
diff --git a/src/components/compositing/compositor.rs b/src/components/compositing/compositor.rs index affbc4cdda7..9a808cfd052 100644 --- a/src/components/compositing/compositor.rs +++ b/src/components/compositing/compositor.rs @@ -42,12 +42,13 @@ use servo_util::geometry::{DevicePixel, PagePx, ScreenPx, ViewportPx}; use servo_util::memory::MemoryProfilerChan; use servo_util::opts::Opts; use servo_util::time::{profile, TimeProfilerChan}; -use servo_util::{memory, time, url}; +use servo_util::{memory, time}; use std::io::timer::sleep; use std::collections::hashmap::HashMap; use std::path::Path; use std::rc::Rc; use time::precise_time_s; +use url::Url; pub struct IOCompositor { @@ -626,7 +627,7 @@ impl IOCompositor { layers"), }; - let msg = LoadUrlMsg(root_pipeline_id, url::parse_url(url_string.as_slice(), None)); + let msg = LoadUrlMsg(root_pipeline_id, Url::parse(url_string.as_slice()).unwrap()); let ConstellationChan(ref chan) = self.constellation_chan; chan.send(msg); } diff --git a/src/components/compositing/constellation.rs b/src/components/compositing/constellation.rs index ad69287a1f5..3ba7a67e63b 100644 --- a/src/components/compositing/constellation.rs +++ b/src/components/compositing/constellation.rs @@ -29,7 +29,6 @@ use servo_net::resource_task; use servo_util::geometry::PagePx; use servo_util::opts::Opts; use servo_util::time::TimeProfilerChan; -use servo_util::url::parse_url; use servo_util::task::spawn_named; use std::cell::RefCell; use std::kinds::marker; @@ -446,7 +445,7 @@ impl<LTF: LayoutTaskFactory> Constellation<LTF> { debug!("creating replacement pipeline for about:failure"); let new_id = self.get_next_pipeline_id(); - let pipeline = self.new_pipeline(new_id, subpage_id, parse_url("about:failure", None)); + let pipeline = self.new_pipeline(new_id, subpage_id, Url::parse("about:failure").unwrap()); pipeline.load(); let pipeline_wrapped = Rc::new(pipeline); diff --git a/src/components/layout/construct.rs b/src/components/layout/construct.rs index 27d7f480677..3764a343eae 100644 --- a/src/components/layout/construct.rs +++ b/src/components/layout/construct.rs @@ -59,7 +59,6 @@ use script::dom::node::{TextNodeTypeId}; use script::dom::htmlobjectelement::is_image_data; use servo_util::namespace; use servo_util::range::Range; -use servo_util::url::parse_url; use std::mem; use std::sync::atomics::Relaxed; use style::ComputedValues; @@ -250,7 +249,7 @@ impl<'a> FlowConstructor<'a> { IframeFragment(IframeFragmentInfo::new(node)) } Some(ElementNodeTypeId(HTMLObjectElementTypeId)) => { - let data = node.get_object_data(&self.layout_context.url); + let data = node.get_object_data(); self.build_fragment_info_for_image(node, data) } Some(ElementNodeTypeId(HTMLTableElementTypeId)) => TableWrapperFragment, @@ -1008,7 +1007,7 @@ trait ObjectElement { fn has_object_data(&self) -> bool; /// Returns the "data" attribute value parsed as a URL - fn get_object_data(&self, base_url: &Url) -> Option<Url>; + fn get_object_data(&self) -> Option<Url>; } impl<'ln> ObjectElement for ThreadSafeLayoutNode<'ln> { @@ -1024,9 +1023,9 @@ impl<'ln> ObjectElement for ThreadSafeLayoutNode<'ln> { } } - fn get_object_data(&self, base_url: &Url) -> Option<Url> { + fn get_object_data(&self) -> Option<Url> { match self.get_type_and_data() { - (None, Some(uri)) if is_image_data(uri) => Some(parse_url(uri, Some(base_url.clone()))), + (None, Some(uri)) if is_image_data(uri) => Url::parse(uri).ok(), _ => None } } diff --git a/src/components/net/image_cache_task.rs b/src/components/net/image_cache_task.rs index 6bd719f316c..c70ebc3ebeb 100644 --- a/src/components/net/image_cache_task.rs +++ b/src/components/net/image_cache_task.rs @@ -493,8 +493,8 @@ mod tests { use resource_task; use resource_task::{ResourceTask, Metadata, start_sending}; use image::base::test_image_bin; - use servo_util::url::parse_url; use std::comm; + use url::Url; trait Closure { fn invoke(&self, _response: Sender<resource_task::ProgressMsg>) { } @@ -567,7 +567,8 @@ mod tests { loop { match port.recv() { resource_task::Load(_, response) => { - let chan = start_sending(response, Metadata::default(parse_url("file:///fake", None))); + let chan = start_sending(response, Metadata::default( + Url::parse("file:///fake").unwrap())); on_load.invoke(chan); } resource_task::Exit => break @@ -581,7 +582,6 @@ mod tests { let mock_resource_task = mock_resource_task(box DoesNothing); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let _url = parse_url("file", None); image_cache_task.exit(); mock_resource_task.send(resource_task::Exit); @@ -593,7 +593,7 @@ mod tests { let mock_resource_task = mock_resource_task(box DoesNothing); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let (chan, port) = channel(); image_cache_task.send(GetImage(url, chan)); @@ -607,7 +607,7 @@ mod tests { let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan}); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url)); url_requested.recv(); @@ -622,7 +622,7 @@ mod tests { let mock_resource_task = mock_resource_task(box JustSendOK { url_requested_chan: url_requested_chan}); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Prefetch(url)); @@ -642,7 +642,7 @@ mod tests { let mock_resource_task = mock_resource_task(box WaitSendTestImage{wait_port: wait_port}); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Decode(url.clone())); @@ -659,7 +659,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendTestImage); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let join_port = image_cache_task.wait_for_store(); @@ -685,7 +685,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendTestImage); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let join_port = image_cache_task.wait_for_store(); @@ -718,7 +718,8 @@ mod tests { loop { match port.recv() { resource_task::Load(_, response) => { - let chan = start_sending(response, Metadata::default(parse_url("file:///fake", None))); + let chan = start_sending(response, Metadata::default( + Url::parse("file:///fake").unwrap())); chan.send(resource_task::Payload(test_image_bin())); chan.send(resource_task::Done(Ok(()))); image_bin_sent_chan.send(()); @@ -732,7 +733,7 @@ mod tests { }); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); @@ -764,7 +765,8 @@ mod tests { loop { match port.recv() { resource_task::Load(_, response) => { - let chan = start_sending(response, Metadata::default(parse_url("file:///fake", None))); + let chan = start_sending(response, Metadata::default( + Url::parse("file:///fake").unwrap())); chan.send(resource_task::Payload(test_image_bin())); chan.send(resource_task::Done(Err("".to_string()))); image_bin_sent_chan.send(()); @@ -778,7 +780,7 @@ mod tests { }); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Decode(url.clone())); @@ -807,7 +809,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendTestImageErr); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let join_port = image_cache_task.wait_for_store_prefetched(); @@ -833,7 +835,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendTestImageErr); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let join_port = image_cache_task.wait_for_store_prefetched(); @@ -867,7 +869,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendBogusImage); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let join_port = image_cache_task.wait_for_store(); @@ -895,7 +897,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendTestImage); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); let join_port = image_cache_task.wait_for_store(); @@ -923,7 +925,7 @@ mod tests { let mock_resource_task = mock_resource_task(box WaitSendTestImage {wait_port: wait_port}); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Decode(url.clone())); @@ -949,7 +951,7 @@ mod tests { let mock_resource_task = mock_resource_task(box WaitSendTestImageErr{wait_port: wait_port}); let image_cache_task = ImageCacheTask::new(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Decode(url.clone())); @@ -973,7 +975,7 @@ mod tests { let mock_resource_task = mock_resource_task(box SendTestImage); let image_cache_task = ImageCacheTask::new_sync(mock_resource_task.clone()); - let url = parse_url("file", None); + let url = Url::parse("file:///").unwrap(); image_cache_task.send(Prefetch(url.clone())); image_cache_task.send(Decode(url.clone())); 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 diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index bc2c3e2c8f8..11e3ca81610 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -23,13 +23,12 @@ use servo_util::namespace; use servo_util::namespace::{Namespace, Null}; use servo_util::str::{DOMString, HTML_SPACE_CHARACTERS}; use servo_util::task::spawn_named; -use servo_util::url::try_parse_url; use std::ascii::StrAsciiExt; use std::mem; use std::cell::RefCell; use std::comm::{channel, Sender, Receiver}; use style::Stylesheet; -use url::Url; +use url::{Url, UrlParser}; macro_rules! handle_element( ($document: expr, @@ -421,8 +420,9 @@ pub fn parse_html(page: &Page, s.as_slice().eq_ignore_ascii_case("stylesheet") }) => { debug!("found CSS stylesheet: {:s}", *href); - match try_parse_url(href.as_slice(), Some(url2.clone())) { - Ok(url) => css_chan2.send(CSSTaskNewFile(UrlProvenance(url, resource_task.clone()))), + match UrlParser::new().base_url(&url2).parse(href.as_slice()) { + Ok(url) => css_chan2.send(CSSTaskNewFile( + UrlProvenance(url, resource_task.clone()))), Err(e) => debug!("Parsing url {:s} failed: {:s}", *href, e) }; } @@ -504,9 +504,10 @@ pub fn parse_html(page: &Page, match script.get_attribute(Null, "src").root() { Some(src) => { debug!("found script: {:s}", src.deref().Value()); - match try_parse_url(src.deref().value().as_slice(), Some(url3.clone())) { - Ok(new_url) => js_chan2.send(JSTaskNewFile(new_url)), - Err(e) => debug!("Parsing url {:s} failed: {:s}", src.deref().Value(), e) + match UrlParser::new().base_url(&url3) + .parse(src.deref().value().as_slice()) { + Ok(new_url) => js_chan2.send(JSTaskNewFile(new_url)), + Err(e) => debug!("Parsing url {:s} failed: {:s}", src.deref().Value(), e) }; } None => { diff --git a/src/components/style/properties/common_types.rs b/src/components/style/properties/common_types.rs index 5dbffb81938..6672daa1894 100644 --- a/src/components/style/properties/common_types.rs +++ b/src/components/style/properties/common_types.rs @@ -4,6 +4,8 @@ #![allow(non_camel_case_types)] +use url::{Url, UrlParser}; + pub use servo_util::geometry::Au; pub type CSSFloat = f64; @@ -253,3 +255,8 @@ pub mod computed { } } } + +pub fn parse_url(input: &str, base_url: &Url) -> Url { + UrlParser::new().base_url(base_url).parse(input) + .unwrap_or_else(|_| Url::parse("about:invalid").unwrap()) +} diff --git a/src/components/style/properties/mod.rs.mako b/src/components/style/properties/mod.rs.mako index e6506c4472d..5dc6a22012d 100644 --- a/src/components/style/properties/mod.rs.mako +++ b/src/components/style/properties/mod.rs.mako @@ -7,7 +7,6 @@ pub use std::ascii::StrAsciiExt; use serialize::{Encodable, Encoder}; -pub use servo_util::url::parse_url; use servo_util::logical_geometry::{WritingMode, LogicalMargin}; use sync::Arc; pub use url::Url; @@ -597,7 +596,7 @@ pub mod longhands { pub fn from_component_value(component_value: &ComponentValue, base_url: &Url) -> Option<SpecifiedValue> { match component_value { &ast::URL(ref url) => { - let image_url = parse_url(url.as_slice(), Some(base_url.clone())); + let image_url = parse_url(url.as_slice(), base_url); Some(Some(image_url)) }, &ast::Ident(ref value) if value.as_slice().eq_ignore_ascii_case("none") => Some(None), |