aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2014-12-30 16:52:13 -0500
committerJosh Matthews <josh@joshmatthews.net>2015-02-04 13:34:06 +0000
commitae2b74c783da97068f438097453fb8e63beb02d8 (patch)
tree4eba54204f2815f1ba0a491c014655400867807e /components/script/dom
parent19fbb9e568c6011abcfe883538ce03d9d2f42995 (diff)
downloadservo-ae2b74c783da97068f438097453fb8e63beb02d8.tar.gz
servo-ae2b74c783da97068f438097453fb8e63beb02d8.zip
Make Document::url return the page's URL to avoid stale URLs after redirects.
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/document.rs7
-rw-r--r--components/script/dom/element.rs4
-rw-r--r--components/script/dom/htmlformelement.rs2
-rw-r--r--components/script/dom/node.rs2
4 files changed, 8 insertions, 7 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index b6a5659a88a..a8161c62640 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -170,7 +170,7 @@ pub trait DocumentHelpers<'a> {
fn window(self) -> Temporary<Window>;
fn encoding_name(self) -> Ref<'a, DOMString>;
fn is_html_document(self) -> bool;
- fn url(self) -> &'a Url;
+ fn url(self) -> Url;
fn quirks_mode(self) -> QuirksMode;
fn set_quirks_mode(self, mode: QuirksMode);
fn set_last_modified(self, value: DOMString);
@@ -206,8 +206,9 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
self.is_html_document
}
- fn url(self) -> &'a Url {
- &self.extended_deref().url
+ fn url(self) -> Url {
+ let window = self.window().root();
+ window.page().get_url()
}
fn quirks_mode(self) -> QuirksMode {
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index b1b458bad40..69eb3f2ee23 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -777,7 +777,7 @@ impl<'a> AttributeHandlers for JSRef<'a, Element> {
let base = doc.r().url();
// https://html.spec.whatwg.org/multipage/infrastructure.html#reflect
// XXXManishearth this doesn't handle `javascript:` urls properly
- match UrlParser::new().base_url(base).parse(url.as_slice()) {
+ match UrlParser::new().base_url(&base).parse(url.as_slice()) {
Ok(parsed) => parsed.serialize(),
Err(_) => "".to_owned()
}
@@ -1174,7 +1174,7 @@ impl<'a> VirtualMethods for JSRef<'a, Element> {
// Modifying the `style` attribute might change style.
let node: JSRef<Node> = NodeCast::from_ref(*self);
let doc = document_from_node(*self).root();
- let base_url = doc.r().url().clone();
+ let base_url = doc.r().url();
let value = attr.value();
let style = Some(parse_style_attribute(value.as_slice(), &base_url));
*self.style_attribute.borrow_mut() = style;
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index 3543c9a26fc..74f789ab491 100644
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -180,7 +180,7 @@ impl<'a> HTMLFormElementHelpers for JSRef<'a, HTMLFormElement> {
}
// TODO: Resolve the url relative to the submitter element
// Step 10-15
- let action_components = UrlParser::new().base_url(base).parse(action.as_slice()).unwrap_or(base.clone());
+ let action_components = UrlParser::new().base_url(&base).parse(action.as_slice()).unwrap_or(base);
let _action = action_components.serialize();
let scheme = action_components.scheme.clone();
let enctype = submitter.enctype();
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 745c5a3a135..cdd52e78855 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -1574,7 +1574,7 @@ impl Node {
false => IsHTMLDocument::NonHTMLDocument,
};
let window = document.window().root();
- let document = Document::new(window.r(), Some(document.url().clone()),
+ let document = Document::new(window.r(), Some(document.url()),
is_html_doc, None,
DocumentSource::NotFromParser);
NodeCast::from_temporary(document)