diff --git a/Userland/Libraries/LibWeb/HTML/WorkerLocation.cpp b/Userland/Libraries/LibWeb/HTML/WorkerLocation.cpp
index 247c3b6c2c..80084957a7 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerLocation.cpp
+++ b/Userland/Libraries/LibWeb/HTML/WorkerLocation.cpp
@@ -11,109 +11,123 @@
namespace Web::HTML {
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-href
-DeprecatedString WorkerLocation::href() const
+WebIDL::ExceptionOr WorkerLocation::href() const
{
+ auto& vm = realm().vm();
// The href getter steps are to return this's WorkerGlobalScope object's url, serialized.
- return m_global_scope.url().serialize();
+ return TRY_OR_THROW_OOM(vm, String::from_deprecated_string(m_global_scope.url().serialize()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-origin
-DeprecatedString WorkerLocation::origin() const
+WebIDL::ExceptionOr WorkerLocation::origin() const
{
+ auto& vm = realm().vm();
// The origin getter steps are to return the serialization of this's WorkerGlobalScope object's url's origin.
- return m_global_scope.url().serialize_origin();
+ return TRY_OR_THROW_OOM(vm, String::from_deprecated_string(m_global_scope.url().serialize_origin()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-protocol
-DeprecatedString WorkerLocation::protocol() const
+WebIDL::ExceptionOr WorkerLocation::protocol() const
{
+ auto& vm = realm().vm();
// The protocol getter steps are to return this's WorkerGlobalScope object's url's scheme, followed by ":".
- return DeprecatedString::formatted("{}:", m_global_scope.url().scheme());
+ return TRY_OR_THROW_OOM(vm, String::formatted("{}:", m_global_scope.url().scheme().view()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-host
-DeprecatedString WorkerLocation::host() const
+WebIDL::ExceptionOr WorkerLocation::host() const
{
+ auto& vm = realm().vm();
+
// The host getter steps are:
// 1. Let url be this's WorkerGlobalScope object's url.
auto const& url = m_global_scope.url();
// 2. If url's host is null, return the empty string.
if (url.host().is_empty())
- return "";
+ return String {};
// 3. If url's port is null, return url's host, serialized.
if (!url.port().has_value())
- return url.host();
+ return TRY_OR_THROW_OOM(vm, String::from_deprecated_string(url.host()));
// 4. Return url's host, serialized, followed by ":" and url's port, serialized.
- return DeprecatedString::formatted("{}:{}", url.host(), url.port().value());
+ return TRY_OR_THROW_OOM(vm, String::formatted("{}:{}", url.host().view(), url.port().value()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-hostname
-DeprecatedString WorkerLocation::hostname() const
+WebIDL::ExceptionOr WorkerLocation::hostname() const
{
+ auto& vm = realm().vm();
+
// The hostname getter steps are:
// 1. Let host be this's WorkerGlobalScope object's url's host.
auto const& host = m_global_scope.url().host();
// 2. If host is null, return the empty string.
if (host.is_empty())
- return "";
+ return String {};
// 3. Return host, serialized.
- return host;
+ return TRY_OR_THROW_OOM(vm, String::from_deprecated_string(host));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-port
-DeprecatedString WorkerLocation::port() const
+WebIDL::ExceptionOr WorkerLocation::port() const
{
+ auto& vm = realm().vm();
+
// The port getter steps are:
// 1. Let port be this's WorkerGlobalScope object's url's port.
auto const& port = m_global_scope.url().port();
// 2. If port is null, return the empty string.
if (!port.has_value())
- return "";
+ return String {};
// 3. Return port, serialized.
- return DeprecatedString::number(port.value());
+ return TRY_OR_THROW_OOM(vm, String::number(port.value()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-pathname
-DeprecatedString WorkerLocation::pathname() const
+WebIDL::ExceptionOr WorkerLocation::pathname() const
{
+ auto& vm = realm().vm();
// The pathname getter steps are to return the result of URL path serializing this's WorkerGlobalScope object's url.
- return m_global_scope.url().path();
+ return TRY_OR_THROW_OOM(vm, String::from_deprecated_string(m_global_scope.url().path()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-search
-DeprecatedString WorkerLocation::search() const
+WebIDL::ExceptionOr WorkerLocation::search() const
{
+ auto& vm = realm().vm();
+
// The search getter steps are:
// 1. Let query be this's WorkerGlobalScope object's url's query.
auto const& query = m_global_scope.url().query();
// 2. If query is either null or the empty string, return the empty string.
if (query.is_empty())
- return "";
+ return String {};
// 3. Return "?", followed by query.
- return DeprecatedString::formatted("?{}", query);
+ return TRY_OR_THROW_OOM(vm, String::formatted("?{}", query.view()));
}
// https://html.spec.whatwg.org/multipage/workers.html#dom-workerlocation-hash
-DeprecatedString WorkerLocation::hash() const
+WebIDL::ExceptionOr WorkerLocation::hash() const
{
+ auto& vm = realm().vm();
+
// The hash getter steps are:
// 1. Let fragment be this's WorkerGlobalScope object's url's fragment.
auto const& fragment = m_global_scope.url().fragment();
// 2. If fragment is either null or the empty string, return the empty string.
if (fragment.is_empty())
- return "";
+ return String {};
// 3. Return "#", followed by fragment.
- return DeprecatedString::formatted("#{}", fragment);
+ return TRY_OR_THROW_OOM(vm, String::formatted("#{}", fragment.view()));
}
WorkerLocation::WorkerLocation(WorkerGlobalScope& global_scope)
diff --git a/Userland/Libraries/LibWeb/HTML/WorkerLocation.h b/Userland/Libraries/LibWeb/HTML/WorkerLocation.h
index bc46999701..4425925046 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerLocation.h
+++ b/Userland/Libraries/LibWeb/HTML/WorkerLocation.h
@@ -17,15 +17,15 @@ class WorkerLocation : public Bindings::PlatformObject {
public:
virtual ~WorkerLocation() override;
- DeprecatedString href() const;
- DeprecatedString origin() const;
- DeprecatedString protocol() const;
- DeprecatedString host() const;
- DeprecatedString hostname() const;
- DeprecatedString port() const;
- DeprecatedString pathname() const;
- DeprecatedString search() const;
- DeprecatedString hash() const;
+ WebIDL::ExceptionOr href() const;
+ WebIDL::ExceptionOr origin() const;
+ WebIDL::ExceptionOr protocol() const;
+ WebIDL::ExceptionOr host() const;
+ WebIDL::ExceptionOr hostname() const;
+ WebIDL::ExceptionOr port() const;
+ WebIDL::ExceptionOr pathname() const;
+ WebIDL::ExceptionOr search() const;
+ WebIDL::ExceptionOr hash() const;
private:
explicit WorkerLocation(WorkerGlobalScope&);
diff --git a/Userland/Libraries/LibWeb/HTML/WorkerLocation.idl b/Userland/Libraries/LibWeb/HTML/WorkerLocation.idl
index 464ca0c321..8e05fd0bf8 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerLocation.idl
+++ b/Userland/Libraries/LibWeb/HTML/WorkerLocation.idl
@@ -1,4 +1,4 @@
-[Exposed=Worker]
+[Exposed=Worker, UseNewAKString]
interface WorkerLocation {
stringifier readonly attribute USVString href;
readonly attribute USVString origin;