diff options
author | Josh Matthews <josh@joshmatthews.net> | 2014-12-30 16:52:13 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2015-02-04 13:34:06 +0000 |
commit | ae2b74c783da97068f438097453fb8e63beb02d8 (patch) | |
tree | 4eba54204f2815f1ba0a491c014655400867807e /components/script/dom | |
parent | 19fbb9e568c6011abcfe883538ce03d9d2f42995 (diff) | |
download | servo-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.rs | 7 | ||||
-rw-r--r-- | components/script/dom/element.rs | 4 | ||||
-rw-r--r-- | components/script/dom/htmlformelement.rs | 2 | ||||
-rw-r--r-- | components/script/dom/node.rs | 2 |
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) |