diff --git a/Userland/Libraries/LibWeb/Fetch/Enums.cpp b/Userland/Libraries/LibWeb/Fetch/Enums.cpp index fc9779a83c..ef452d44b3 100644 --- a/Userland/Libraries/LibWeb/Fetch/Enums.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Enums.cpp @@ -23,11 +23,11 @@ namespace Web::Fetch { // - Fetch has use-cases beyond its JS interface, so having to refer to the 'Bindings' namespace // constantly is irritating. -Optional from_bindings_enum(Bindings::ReferrerPolicy referrer_policy) +ReferrerPolicy::ReferrerPolicy from_bindings_enum(Bindings::ReferrerPolicy referrer_policy) { switch (referrer_policy) { case Bindings::ReferrerPolicy::Empty: - return {}; + return ReferrerPolicy::ReferrerPolicy::EmptyString; case Bindings::ReferrerPolicy::NoReferrer: return ReferrerPolicy::ReferrerPolicy::NoReferrer; case Bindings::ReferrerPolicy::NoReferrerWhenDowngrade: @@ -113,11 +113,11 @@ Infrastructure::Request::RedirectMode from_bindings_enum(Bindings::RequestRedire } } -Bindings::ReferrerPolicy to_bindings_enum(Optional const& referrer_policy) +Bindings::ReferrerPolicy to_bindings_enum(ReferrerPolicy::ReferrerPolicy referrer_policy) { - if (!referrer_policy.has_value()) + switch (referrer_policy) { + case ReferrerPolicy::ReferrerPolicy::EmptyString: return Bindings::ReferrerPolicy::Empty; - switch (*referrer_policy) { case ReferrerPolicy::ReferrerPolicy::NoReferrer: return Bindings::ReferrerPolicy::NoReferrer; case ReferrerPolicy::ReferrerPolicy::NoReferrerWhenDowngrade: diff --git a/Userland/Libraries/LibWeb/Fetch/Enums.h b/Userland/Libraries/LibWeb/Fetch/Enums.h index 2890f97330..8e559a8197 100644 --- a/Userland/Libraries/LibWeb/Fetch/Enums.h +++ b/Userland/Libraries/LibWeb/Fetch/Enums.h @@ -13,13 +13,13 @@ namespace Web::Fetch { -[[nodiscard]] Optional from_bindings_enum(Bindings::ReferrerPolicy); +[[nodiscard]] ReferrerPolicy::ReferrerPolicy from_bindings_enum(Bindings::ReferrerPolicy); [[nodiscard]] Infrastructure::Request::Mode from_bindings_enum(Bindings::RequestMode); [[nodiscard]] Infrastructure::Request::CredentialsMode from_bindings_enum(Bindings::RequestCredentials); [[nodiscard]] Infrastructure::Request::CacheMode from_bindings_enum(Bindings::RequestCache); [[nodiscard]] Infrastructure::Request::RedirectMode from_bindings_enum(Bindings::RequestRedirect); -[[nodiscard]] Bindings::ReferrerPolicy to_bindings_enum(Optional const&); +[[nodiscard]] Bindings::ReferrerPolicy to_bindings_enum(ReferrerPolicy::ReferrerPolicy); [[nodiscard]] Bindings::RequestDestination to_bindings_enum(Optional const&); [[nodiscard]] Bindings::RequestMode to_bindings_enum(Infrastructure::Request::Mode); [[nodiscard]] Bindings::RequestCredentials to_bindings_enum(Infrastructure::Request::CredentialsMode); diff --git a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp index a1278395c1..746e0927b7 100644 --- a/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Fetching/Fetching.cpp @@ -236,7 +236,7 @@ WebIDL::ExceptionOr>> main_fetch(JS:: // 8. If request’s referrer policy is the empty string, then set request’s referrer policy to request’s policy // container’s referrer policy. - if (!request->referrer_policy().has_value()) { + if (request->referrer_policy() == ReferrerPolicy::ReferrerPolicy::EmptyString) { VERIFY(request->policy_container().has()); request->set_referrer_policy(request->policy_container().get().referrer_policy); } diff --git a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.cpp b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.cpp index b2fac3a52d..10bd89b0bd 100644 --- a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.cpp +++ b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.cpp @@ -309,8 +309,8 @@ ErrorOr Request::add_origin_header() // 3. Otherwise, if request’s method is neither `GET` nor `HEAD`, then: else if (!StringView { m_method }.is_one_of("GET"sv, "HEAD"sv)) { // 1. If request’s mode is not "cors", then switch on request’s referrer policy: - if (m_mode != Mode::CORS && m_referrer_policy.has_value()) { - switch (*m_referrer_policy) { + if (m_mode != Mode::CORS) { + switch (m_referrer_policy) { // -> "no-referrer" case ReferrerPolicy::ReferrerPolicy::NoReferrer: // Set serializedOrigin to `null`. diff --git a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.h b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.h index 9323561c16..6f790e8fd7 100644 --- a/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.h +++ b/Userland/Libraries/LibWeb/Fetch/Infrastructure/HTTP/Requests.h @@ -273,8 +273,8 @@ public: [[nodiscard]] ReferrerType const& referrer() const { return m_referrer; } void set_referrer(ReferrerType referrer) { m_referrer = move(referrer); } - [[nodiscard]] Optional const& referrer_policy() const { return m_referrer_policy; } - void set_referrer_policy(Optional referrer_policy) { m_referrer_policy = move(referrer_policy); } + [[nodiscard]] ReferrerPolicy::ReferrerPolicy const& referrer_policy() const { return m_referrer_policy; } + void set_referrer_policy(ReferrerPolicy::ReferrerPolicy referrer_policy) { m_referrer_policy = move(referrer_policy); } [[nodiscard]] ResponseTainting response_tainting() const { return m_response_tainting; } void set_response_tainting(ResponseTainting response_tainting) { m_response_tainting = response_tainting; } @@ -420,7 +420,7 @@ private: // https://fetch.spec.whatwg.org/#concept-request-referrer-policy // A request has an associated referrer policy, which is a referrer policy. Unless stated otherwise it is the empty // string. - Optional m_referrer_policy; + ReferrerPolicy::ReferrerPolicy m_referrer_policy { ReferrerPolicy::ReferrerPolicy::EmptyString }; // https://fetch.spec.whatwg.org/#concept-request-mode // A request has an associated mode, which is "same-origin", "cors", "no-cors", "navigate", or "websocket". Unless diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp index 997c350e9d..c6e94eb8cc 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp @@ -559,7 +559,7 @@ after_step_7: request->set_initiator(Fetch::Infrastructure::Request::Initiator::ImageSet); // 21. Set request's referrer policy to the current state of the element's referrerpolicy attribute. - request->set_referrer_policy(ReferrerPolicy::from_string(get_attribute_value(HTML::AttributeNames::referrerpolicy))); + request->set_referrer_policy(ReferrerPolicy::from_string(get_attribute_value(HTML::AttributeNames::referrerpolicy)).value_or(ReferrerPolicy::ReferrerPolicy::EmptyString)); // FIXME: 22. Set request's priority to the current state of the element's fetchpriority attribute. @@ -774,7 +774,7 @@ void HTMLImageElement::react_to_changes_in_the_environment() request->set_initiator(Fetch::Infrastructure::Request::Initiator::ImageSet); // 3. Set request's referrer policy to the current state of the element's referrerpolicy attribute. - request->set_referrer_policy(ReferrerPolicy::from_string(get_attribute_value(HTML::AttributeNames::referrerpolicy))); + request->set_referrer_policy(ReferrerPolicy::from_string(get_attribute_value(HTML::AttributeNames::referrerpolicy)).value_or(ReferrerPolicy::ReferrerPolicy::EmptyString)); // FIXME: 4. Set request's priority to the current state of the element's fetchpriority attribute. diff --git a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h index 9570221588..3b45374539 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLLinkElement.h @@ -70,7 +70,7 @@ private: CORSSettingAttribute crossorigin { CORSSettingAttribute::NoCORS }; // referrer policy (default the empty string) // A referrer policy - Optional referrer_policy {}; + ReferrerPolicy::ReferrerPolicy referrer_policy { ReferrerPolicy::ReferrerPolicy::EmptyString }; // FIXME: source set (default null) // Null or a source set // base URL diff --git a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.cpp index 7f973061b7..57eb0c7596 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLScriptElement.cpp @@ -54,10 +54,7 @@ void HTMLScriptElement::attribute_changed(FlyString const& name, Optional m_referrer_policy; + ReferrerPolicy::ReferrerPolicy m_referrer_policy { ReferrerPolicy::ReferrerPolicy::EmptyString }; bool m_failed_to_load { false }; diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.h b/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.h index 2909e2f893..3278efd3d7 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.h +++ b/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.h @@ -42,7 +42,7 @@ struct ScriptFetchOptions { Fetch::Infrastructure::Request::CredentialsMode credentials_mode { Fetch::Infrastructure::Request::CredentialsMode::SameOrigin }; // https://html.spec.whatwg.org/multipage/webappapis.html#concept-script-fetch-options-referrer-policy - Optional referrer_policy; + ReferrerPolicy::ReferrerPolicy referrer_policy { ReferrerPolicy::ReferrerPolicy::EmptyString }; // https://html.spec.whatwg.org/multipage/webappapis.html#concept-script-fetch-options-render-blocking bool render_blocking { false }; diff --git a/Userland/Libraries/LibWeb/ReferrerPolicy/AbstractOperations.cpp b/Userland/Libraries/LibWeb/ReferrerPolicy/AbstractOperations.cpp index 1dcbbc0484..05607a1194 100644 --- a/Userland/Libraries/LibWeb/ReferrerPolicy/AbstractOperations.cpp +++ b/Userland/Libraries/LibWeb/ReferrerPolicy/AbstractOperations.cpp @@ -82,8 +82,8 @@ Optional determine_requests_referrer(Fetch::Infrastructure::Request const& // 8. Execute the statements corresponding to the value of policy: // Note: If request’s referrer policy is the empty string, Fetch will not call into this algorithm. - VERIFY(policy.has_value()); - switch (*policy) { + VERIFY(policy != ReferrerPolicy::EmptyString); + switch (policy) { // "no-referrer" case ReferrerPolicy::NoReferrer: // Return no referrer diff --git a/Userland/Libraries/LibWeb/ReferrerPolicy/ReferrerPolicy.cpp b/Userland/Libraries/LibWeb/ReferrerPolicy/ReferrerPolicy.cpp index c87dc0b929..58ee862a1a 100644 --- a/Userland/Libraries/LibWeb/ReferrerPolicy/ReferrerPolicy.cpp +++ b/Userland/Libraries/LibWeb/ReferrerPolicy/ReferrerPolicy.cpp @@ -35,6 +35,8 @@ StringView to_string(ReferrerPolicy referrer_policy) Optional from_string(StringView string) { + if (string.is_empty()) + return ReferrerPolicy::EmptyString; if (string.equals_ignoring_ascii_case("no-referrer"sv)) return ReferrerPolicy::NoReferrer; if (string.equals_ignoring_ascii_case("no-referrer-when-downgrade"sv))