From 37aa21d8db8a1e2e303100f6188b4a68e996e5ac Mon Sep 17 00:00:00 2001 From: Shanavas M Date: Fri, 11 Jan 2019 14:35:54 +0530 Subject: [PATCH 1/2] Set url attribute --- components/script/dom/element.rs | 15 ++++++++++----- components/script/dom/macros.rs | 4 ++-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index d461cd11527..b0f1e35d050 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1501,11 +1501,16 @@ impl Element { }; let value = &**attr.value(); // XXXManishearth this doesn't handle `javascript:` urls properly - document_from_node(self) - .base_url() - .join(value) - .map(|parsed| USVString(parsed.into_string())) - .unwrap_or_else(|_| USVString(value.to_owned())) + USVString(value.to_owned()) + } + + pub fn set_url_attribute(&self, local_name: &LocalName, value: USVString) { + assert!(*local_name == local_name.to_ascii_lowercase()); + let base_url = document_from_node(self).base_url(); + self.set_attribute( + local_name, + AttrValue::from_resolved_url(&base_url, value.to_string()), + ); } pub fn get_string_attribute(&self, local_name: &LocalName) -> DOMString { diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs index 454f1a678f8..a566fee4fb6 100644 --- a/components/script/dom/macros.rs +++ b/components/script/dom/macros.rs @@ -112,8 +112,8 @@ macro_rules! make_url_setter( use crate::dom::bindings::inheritance::Castable; use crate::dom::element::Element; let element = self.upcast::(); - element.set_string_attribute(&local_name!($htmlname), - DOMString::from(value.0)); + element.set_url_attribute(&local_name!($htmlname), + value); } ); ); From 02d28e02e35d28437503033c7fd1336227a1dc4e Mon Sep 17 00:00:00 2001 From: Shanavas M Date: Mon, 14 Jan 2019 18:50:59 +0530 Subject: [PATCH 2/2] Parse url in getter method --- components/script/dom/element.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index b0f1e35d050..155098247b6 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1501,16 +1501,16 @@ impl Element { }; let value = &**attr.value(); // XXXManishearth this doesn't handle `javascript:` urls properly - USVString(value.to_owned()) + document_from_node(self) + .base_url() + .join(value) + .map(|parsed| USVString(parsed.into_string())) + .unwrap_or_else(|_| USVString(value.to_owned())) } pub fn set_url_attribute(&self, local_name: &LocalName, value: USVString) { assert!(*local_name == local_name.to_ascii_lowercase()); - let base_url = document_from_node(self).base_url(); - self.set_attribute( - local_name, - AttrValue::from_resolved_url(&base_url, value.to_string()), - ); + self.set_attribute(local_name, AttrValue::String(value.to_string())); } pub fn get_string_attribute(&self, local_name: &LocalName) -> DOMString {