diff --git a/components/script/dom/html/htmlhyperlinkelementutils.rs b/components/script/dom/html/htmlhyperlinkelementutils.rs
index 699db4d62f4..215bd0f52ce 100644
--- a/components/script/dom/html/htmlhyperlinkelementutils.rs
+++ b/components/script/dom/html/htmlhyperlinkelementutils.rs
@@ -42,7 +42,7 @@ pub(crate) trait HyperlinkElementTraits {
fn get_username(&self) -> USVString;
fn set_url(&self);
fn set_username(&self, value: USVString, can_gc: CanGc);
- fn update_href(&self, url: DOMString, can_gc: CanGc);
+ fn update_href(&self, url: &ServoUrl, can_gc: CanGc);
fn reinitialize_url(&self);
}
@@ -75,24 +75,22 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
- // Step 3. If url is null, then return.
- None => return,
- // Step 4. If the given value is the empty string, set url's fragment to null.
- // Note this step is taken care of by UrlHelper::SetHash when the value is Some
- // Steps 5. Otherwise:
- Some(url) => {
- // Step 5.1. Let input be the given value with a single leading "#" removed, if any.
- // Step 5.2. Set url's fragment to the empty string.
- // Note these steps are taken care of by UrlHelper::SetHash
- UrlHelper::SetHash(url, value);
-
- // Step 5.4. Basic URL parse input, with url as url and fragment state as state
- // override.
- DOMString::from(url.as_str())
- },
+ // Step 3. If url is null, then return.
+ let mut url = self.get_url().borrow_mut();
+ let Some(url) = url.as_mut() else {
+ return;
};
+ // Step 4. If the given value is the empty string, set url's fragment to null.
+ // Note this step is taken care of by UrlHelper::SetHash when the value is Some
+ // Steps 5. Otherwise:
+ // Step 5.1. Let input be the given value with a single leading "#" removed, if any.
+ // Step 5.2. Set url's fragment to the empty string.
+ // Note these steps are taken care of by UrlHelper::SetHash
+ // Step 5.4. Basic URL parse input, with url as url and fragment state as state
+ // override.
+ UrlHelper::SetHash(url, value);
+
// Step 6. Update href.
self.update_href(url, can_gc);
}
@@ -125,18 +123,18 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url or url's host is null, return the empty string.
Some(ref url) if url.cannot_be_a_base() => return,
None => return,
- // Step 4. Basic URL parse the given value, with url as url and host state as state
- // override.
- Some(url) => {
- UrlHelper::SetHost(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. Basic URL parse the given value, with url as url and host state as state
+ // override.
+ UrlHelper::SetHost(url, value);
+
// Step 5. Update href.
self.update_href(url, can_gc);
}
@@ -163,18 +161,18 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url is null or url has an opaque path, then return.
None => return,
Some(ref url) if url.cannot_be_a_base() => return,
- // Step 4. Basic URL parse the given value, with url as url and hostname state as state
- // override.
- Some(url) => {
- UrlHelper::SetHostname(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. Basic URL parse the given value, with url as url and hostname state as state
+ // override.
+ UrlHelper::SetHostname(url, value);
+
// Step 5. Update href.
self.update_href(url, can_gc);
}
@@ -248,17 +246,17 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url is null or url cannot have a username/password/port, then return.
None => return,
Some(ref url) if url.host().is_none() || url.cannot_be_a_base() => return,
- // Step 4. Set the password, given url and the given value.
- Some(url) => {
- UrlHelper::SetPassword(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. Set the password, given url and the given value.
+ UrlHelper::SetPassword(url, value);
+
// Step 5. Update href.
self.update_href(url, can_gc);
}
@@ -283,18 +281,18 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url is null or url has an opaque path, then return.
None => return,
Some(ref url) if url.cannot_be_a_base() => return,
- // Step 4. Set url's path to the empty list.
- // Step 5. Basic URL parse the given value, with url as url and path start state as state override.
- Some(url) => {
- UrlHelper::SetPathname(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. Set url's path to the empty list.
+ // Step 5. Basic URL parse the given value, with url as url and path start state as state override.
+ UrlHelper::SetPathname(url, value);
+
// Step 6. Update href.
self.update_href(url, can_gc);
}
@@ -319,7 +317,8 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url is null or url cannot have a username/password/port, then return.
None => return,
Some(ref url)
@@ -328,15 +327,14 @@ impl + Castable + NodeTraits> Hyperli
{
return;
},
- // Step 4. If the given value is the empty string, then set url's port to null.
- // Step 5. Otherwise, basic URL parse the given value, with url as url and port state as
- // state override.
- Some(url) => {
- UrlHelper::SetPort(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. If the given value is the empty string, then set url's port to null.
+ // Step 5. Otherwise, basic URL parse the given value, with url as url and port state as
+ // state override.
+ UrlHelper::SetPort(url, value);
+
// Step 6. Update href.
self.update_href(url, can_gc);
}
@@ -359,17 +357,17 @@ impl + Castable + NodeTraits> Hyperli
// Step 1. Reinitialize url.
self.reinitialize_url();
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 2. If this's url is null, then return.
None => return,
- // Step 3. Basic URL parse the given value, followed by ":", with this's url as url and
- // scheme start state as state override.
- Some(url) => {
- UrlHelper::SetProtocol(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 3. Basic URL parse the given value, followed by ":", with this's url as url and
+ // scheme start state as state override.
+ UrlHelper::SetProtocol(url, value);
+
// Step 4. Update href.
self.update_href(url, can_gc);
}
@@ -396,18 +394,18 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url is null, terminate these steps.
None => return,
- // Step 4. If the given value is the empty string, set url's query to null.
- // Step 5. Otherwise:
- Some(url) => {
- // Note: Inner steps are handled by UrlHelper::SetSearch
- UrlHelper::SetSearch(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. If the given value is the empty string, set url's query to null.
+ // Step 5. Otherwise:
+ // Note: Inner steps are handled by UrlHelper::SetSearch
+ UrlHelper::SetSearch(url, value);
+
// Step 6. Update href.
self.update_href(url, can_gc);
}
@@ -457,25 +455,28 @@ impl + Castable + NodeTraits> Hyperli
self.reinitialize_url();
// Step 2. Let url be this's url.
- let url = match self.get_url().borrow_mut().as_mut() {
+ let mut url = self.get_url().borrow_mut();
+ let url = match url.as_mut() {
// Step 3. If url is null or url cannot have a username/password/port, then return.
None => return,
Some(ref url) if url.host().is_none() || url.cannot_be_a_base() => return,
- // Step 4. Set the username, given url and the given value.
- Some(url) => {
- UrlHelper::SetUsername(url, value);
- DOMString::from(url.as_str())
- },
+ Some(url) => url,
};
+ // Step 4. Set the username, given url and the given value.
+ UrlHelper::SetUsername(url, value);
+
// Step 5. Update href.
self.update_href(url, can_gc);
}
///
- fn update_href(&self, url: DOMString, can_gc: CanGc) {
- self.upcast::()
- .set_string_attribute(&local_name!("href"), url, can_gc);
+ fn update_href(&self, url: &ServoUrl, can_gc: CanGc) {
+ self.upcast::().set_string_attribute(
+ &local_name!("href"),
+ DOMString::from(url.as_str()),
+ can_gc,
+ );
}
///