Use Url.join instead of UrlParser.base_url(...).parse (#9002)

This commit is contained in:
Mathieu Agopian 2015-12-18 17:02:41 +01:00
parent 6764cf0ee9
commit 11234f5370
41 changed files with 58 additions and 64 deletions

View file

@ -81,7 +81,6 @@ use style::properties::longhands::{self, background_image, border_spacing, font_
use style::properties::{PropertyDeclaration, PropertyDeclarationBlock, parse_style_attribute};
use style::values::CSSFloat;
use style::values::specified::{self, CSSColor, CSSRGBA, LengthOrPercentage};
use url::UrlParser;
use util::mem::HeapSizeOf;
use util::str::{DOMString, LengthOrPercentageOrAuto};
@ -1051,7 +1050,7 @@ impl Element {
let base = doc.url();
// https://html.spec.whatwg.org/multipage/#reflect
// XXXManishearth this doesn't handle `javascript:` urls properly
match UrlParser::new().base_url(&base).parse(&url) {
match base.join(&url) {
Ok(parsed) => DOMString::from(parsed.serialize()),
Err(_) => DOMString::from(""),
}

View file

@ -25,7 +25,6 @@ use dom::virtualmethods::VirtualMethods;
use num::ToPrimitive;
use std::default::Default;
use string_cache::Atom;
use url::UrlParser;
use util::str::DOMString;
#[dom_struct]
@ -187,7 +186,7 @@ fn follow_hyperlink(subject: &Element, hyperlink_suffix: Option<String>) {
// Step 4-5.
let document = document_from_node(subject);
let url = match UrlParser::new().base_url(&document.url()).parse(&href) {
let url = match document.url().join(&href) {
Ok(url) => url,
Err(_) => return,
};

View file

@ -12,7 +12,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, document_from_node};
use dom::virtualmethods::VirtualMethods;
use string_cache::Atom;
use url::{Url, UrlParser};
use url::Url;
use util::str::DOMString;
#[dom_struct]
@ -42,7 +42,7 @@ impl HTMLBaseElement {
that have a base url.");
let document = document_from_node(self);
let base = document.fallback_base_url();
let parsed = UrlParser::new().base_url(&base).parse(&href.value());
let parsed = base.join(&href.value());
parsed.unwrap_or(base)
}

View file

@ -22,7 +22,7 @@ use script_traits::ScriptMsg as ConstellationMsg;
use std::rc::Rc;
use string_cache::Atom;
use time;
use url::{Url, UrlParser};
use url::Url;
use util::str::DOMString;
/// How long we should wait before performing the initial reflow after `<body>` is parsed, in
@ -157,7 +157,7 @@ impl VirtualMethods for HTMLBodyElement {
*self.background.borrow_mut() = mutation.new_value(attr).and_then(|value| {
let document = document_from_node(self);
let base = document.url();
UrlParser::new().base_url(&base).parse(&value).ok()
base.join(&value).ok()
});
true
},

View file

@ -35,7 +35,6 @@ use script_task::{MainThreadScriptMsg, ScriptChan};
use std::borrow::ToOwned;
use std::cell::Cell;
use string_cache::Atom;
use url::UrlParser;
use url::form_urlencoded::serialize;
use util::str::DOMString;
@ -200,7 +199,7 @@ impl HTMLFormElement {
action = DOMString::from(base.serialize());
}
// Step 9-11
let action_components = match UrlParser::new().base_url(base).parse(&action) {
let action_components = match base.join(&action) {
Ok(url) => url,
Err(_) => return
};

View file

@ -32,7 +32,7 @@ use script_traits::ScriptMsg as ConstellationMsg;
use std::ascii::AsciiExt;
use std::cell::Cell;
use string_cache::Atom;
use url::{Url, UrlParser};
use url::Url;
use util::prefs;
use util::str::DOMString;
use util::str::{self, LengthOrPercentageOrAuto};
@ -74,8 +74,7 @@ impl HTMLIFrameElement {
None
} else {
let window = window_from_node(self);
UrlParser::new().base_url(&window.get_url())
.parse(&url).ok()
window.get_url().join(&url).ok()
}
})
}

View file

@ -27,7 +27,7 @@ use script_task::ScriptTaskEventCategory::UpdateReplacedElement;
use script_task::{CommonScriptMsg, Runnable, ScriptChan};
use std::sync::Arc;
use string_cache::Atom;
use url::{Url, UrlParser};
use url::Url;
use util::str::DOMString;
#[dom_struct]
@ -101,7 +101,7 @@ impl HTMLImageElement {
*self.image.borrow_mut() = None;
}
Some((src, base_url)) => {
let img_url = UrlParser::new().base_url(&base_url).parse(&src);
let img_url = base_url.join(&src);
// FIXME: handle URL parse errors more gracefully.
let img_url = img_url.unwrap();
*self.url.borrow_mut() = Some(img_url.clone());

View file

@ -37,7 +37,7 @@ use std::sync::{Arc, Mutex};
use string_cache::Atom;
use style::media_queries::{MediaQueryList, parse_media_query_list};
use style::stylesheets::{Origin, Stylesheet};
use url::{Url, UrlParser};
use url::Url;
use util::str::{DOMString, HTML_SPACE_CHARACTERS};
no_jsmanaged_fields!(Stylesheet);
@ -182,7 +182,7 @@ impl HTMLLinkElement {
fn handle_stylesheet_url(&self, href: &str) {
let window = window_from_node(self);
let window = window.r();
match UrlParser::new().base_url(&window.get_url()).parse(href) {
match window.get_url().join(href) {
Ok(url) => {
let element = self.upcast::<Element>();
@ -232,7 +232,7 @@ impl HTMLLinkElement {
fn handle_favicon_url(&self, rel: &str, href: &str, sizes: &Option<String>) {
let window = window_from_node(self);
let window = window.r();
match UrlParser::new().base_url(&window.get_url()).parse(href) {
match window.get_url().join(href) {
Ok(url) => {
let ConstellationChan(ref chan) = window.constellation_chan();
let event = ConstellationMsg::NewFavicon(url.clone());

View file

@ -41,7 +41,7 @@ use std::cell::Cell;
use std::mem;
use std::sync::{Arc, Mutex};
use string_cache::Atom;
use url::{Url, UrlParser};
use url::Url;
use util::str::{DOMString, HTML_SPACE_CHARACTERS, StaticStringVec};
#[dom_struct]
@ -263,7 +263,7 @@ impl HTMLScriptElement {
}
// Step 15.3
match UrlParser::new().base_url(&base_url).parse(&src) {
match base_url.join(&src) {
Err(_) => {
// Step 15.4
error!("error parsing URL for script {}", &**src);

View file

@ -10,7 +10,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::USVString;
use dom::urlhelper::UrlHelper;
use dom::window::Window;
use url::{Url, UrlParser};
use url::Url;
use util::str::DOMString;
#[dom_struct]
@ -51,7 +51,7 @@ impl LocationMethods for Location {
// TODO: per spec, we should use the _API base URL_ specified by the
// _entry settings object_.
let base_url = self.window.get_url();
if let Ok(url) = UrlParser::new().base_url(&base_url).parse(&url.0) {
if let Ok(url) = base_url.join(&url.0) {
self.window.load_url(url);
}
}
@ -98,7 +98,7 @@ impl LocationMethods for Location {
// https://html.spec.whatwg.org/multipage/#dom-location-href
fn SetHref(&self, value: USVString) {
if let Ok(url) = UrlParser::new().base_url(&self.window.get_url()).parse(&value.0) {
if let Ok(url) = self.window.get_url().join(&value.0) {
self.window.load_url(url);
}
}

View file

@ -26,7 +26,6 @@ use js::jsapi::{JSAutoCompartment, JSAutoRequest};
use js::jsval::UndefinedValue;
use script_task::{Runnable, ScriptChan};
use std::sync::mpsc::{Sender, channel};
use url::UrlParser;
use util::str::DOMString;
pub type TrustedWorkerAddress = Trusted<Worker>;
@ -64,7 +63,7 @@ impl Worker {
// https://html.spec.whatwg.org/multipage/#dom-worker
pub fn Constructor(global: GlobalRef, script_url: DOMString) -> Fallible<Root<Worker>> {
// Step 2-4.
let worker_url = match UrlParser::new().base_url(&global.get_url()).parse(&script_url) {
let worker_url = match global.get_url().join(&script_url) {
Ok(url) => url,
Err(_) => return Err(Error::Syntax),
};

View file

@ -31,7 +31,7 @@ use std::default::Default;
use std::rc::Rc;
use std::sync::mpsc::Receiver;
use timers::{ActiveTimers, IsInterval, ScheduledCallback, TimerCallback, TimerHandle};
use url::{Url, UrlParser};
use url::Url;
use util::str::DOMString;
#[derive(Copy, Clone, PartialEq)]
@ -195,8 +195,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
fn ImportScripts(&self, url_strings: Vec<DOMString>) -> ErrorResult {
let mut urls = Vec::with_capacity(url_strings.len());
for url in url_strings {
let url = UrlParser::new().base_url(&self.worker_url)
.parse(&url);
let url = self.worker_url.join(&url);
match url {
Ok(url) => urls.push(url),
Err(_) => return Err(Error::Syntax),

View file

@ -60,7 +60,7 @@ use std::sync::{Arc, Mutex};
use string_cache::Atom;
use time;
use timers::{ScheduledCallback, TimerHandle};
use url::{Url, UrlParser};
use url::Url;
use util::mem::HeapSizeOf;
use util::str::DOMString;
@ -326,7 +326,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
// Step 6
let base = self.global.root().r().get_url();
let parsed_url = match UrlParser::new().base_url(&base).parse(&url) {
let parsed_url = match base.join(&url) {
Ok(parsed) => parsed,
Err(_) => return Err(Error::Syntax) // Step 7
};
@ -1109,7 +1109,7 @@ impl XMLHttpRequest {
let doc = doc.r();
let docloader = DocumentLoader::new(&*doc.loader());
let base = self.global.root().r().get_url();
let parsed_url = match UrlParser::new().base_url(&base).parse(&self.ResponseURL()) {
let parsed_url = match base.join(&self.ResponseURL()) {
Ok(parsed) => Some(parsed),
Err(_) => None // Step 7
};