diff --git a/Userland/Libraries/LibWeb/URL/URL.cpp b/Userland/Libraries/LibWeb/URL/URL.cpp index 8e6ed49b85..949910afae 100644 --- a/Userland/Libraries/LibWeb/URL/URL.cpp +++ b/Userland/Libraries/LibWeb/URL/URL.cpp @@ -75,6 +75,42 @@ DOM::ExceptionOr URL::set_href(String const& href) return {}; } +String URL::origin() const +{ + // return the serialization of this’s URL’s origin. + return m_url.serialize_origin(); +} + +String URL::username() const +{ + // return this’s URL’s username. + return m_url.username(); +} + +void URL::set_username(const String& username) +{ + // 1. If this’s URL cannot have a username/password/port, then return. + if (m_url.cannot_have_a_username_or_password_or_port()) + return; + // 2. Set the username given this’s URL and the given value. + m_url.set_username(AK::URL::percent_encode(username, AK::URL::PercentEncodeSet::Userinfo)); +} + +String URL::password() const +{ + // return this’s URL’s password. + return m_url.password(); +} + +void URL::set_password(String const& password) +{ + // 1. If this’s URL cannot have a username/password/port, then return. + if (m_url.cannot_have_a_username_or_password_or_port()) + return; + // 2. Set the password given this’s URL and the given value. + m_url.set_password(AK::URL::percent_encode(password, AK::URL::PercentEncodeSet::Userinfo)); +} + URLSearchParams const* URL::search_params() const { return m_query; diff --git a/Userland/Libraries/LibWeb/URL/URL.h b/Userland/Libraries/LibWeb/URL/URL.h index 7406aa86e8..0b1b2461ec 100644 --- a/Userland/Libraries/LibWeb/URL/URL.h +++ b/Userland/Libraries/LibWeb/URL/URL.h @@ -31,6 +31,14 @@ public: String href() const; DOM::ExceptionOr set_href(String const&); + String origin() const; + + String username() const; + void set_username(String const&); + + String password() const; + void set_password(String const&); + URLSearchParams const* search_params() const; String to_json() const; diff --git a/Userland/Libraries/LibWeb/URL/URL.idl b/Userland/Libraries/LibWeb/URL/URL.idl index a32ea6e5e5..7ea731e04f 100644 --- a/Userland/Libraries/LibWeb/URL/URL.idl +++ b/Userland/Libraries/LibWeb/URL/URL.idl @@ -2,10 +2,10 @@ interface URL { constructor(USVString url, optional USVString base); stringifier attribute USVString href; - // TODO: readonly attribute USVString origin; + readonly attribute USVString origin; // TODO: attribute USVString protocol; - // TODO: attribute USVString username; - // TODO: attribute USVString password; + attribute USVString username; + attribute USVString password; // TODO: attribute USVString host; // TODO: attribute USVString hostname; // TODO: attribute USVString port;