script: Added missing spec step in Location::SetHash (#33380)

* Implement missing spec step in Location::SetHash

Signed-off-by: crbrz <cristianb@gmail.com>

* Fixed wrong URL fragment when hash set to empty string

Signed-off-by: crbrz <cristianb@gmail.com>

* Add WPT tests

Signed-off-by: crbrz <cristianb@gmail.com>

---------

Signed-off-by: crbrz <cristianb@gmail.com>
This commit is contained in:
Cristian Brinza 2024-09-09 19:58:26 +03:00 committed by GitHub
parent cc3c69b953
commit 2993577ac0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 64 additions and 6 deletions

View file

@ -315,13 +315,19 @@ impl LocationMethods for Location {
// Step 5: Set copyURL's fragment to the empty string.
// Step 6: Basic URL parse input, with copyURL as url and fragment state as
// state override.
copy_url.as_mut_url().set_fragment(match value.0.as_str() {
"" => Some("#"),
_ if value.0.starts_with('#') => Some(&value.0[1..]),
_ => Some(&value.0),
});
let new_fragment = if value.0.starts_with('#') {
Some(&value.0[1..])
} else {
Some(value.0.as_str())
};
// Step 7: If copyURL's fragment is this's url's fragment, then return.
if copy_url.fragment() == new_fragment {
Ok(None)
} else {
copy_url.as_mut_url().set_fragment(new_fragment);
Ok(Some(copy_url))
Ok(Some(copy_url))
}
})
}