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); } ); );