mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 08:41:15 +00:00
LibWeb: Add HTMLAnchorElement.referrerPolicy property
This commit is contained in:
parent
0c19d3aa58
commit
88d64fcb55
Notes:
sideshowbarker
2024-07-17 02:38:39 +09:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/SerenityOS/serenity/commit/88d64fcb55 Pull-request: https://github.com/SerenityOS/serenity/pull/18086 Reviewed-by: https://github.com/linusg
|
@ -450,6 +450,7 @@ set(SOURCES
|
|||
Platform/Timer.cpp
|
||||
Platform/TimerSerenity.cpp
|
||||
ReferrerPolicy/AbstractOperations.cpp
|
||||
ReferrerPolicy/ReferrerPolicy.cpp
|
||||
RequestIdleCallback/IdleDeadline.cpp
|
||||
ResizeObserver/ResizeObserver.cpp
|
||||
SecureContexts/AbstractOperations.cpp
|
||||
|
|
|
@ -195,6 +195,7 @@ namespace AttributeNames {
|
|||
__ENUMERATE_HTML_ATTRIBUTE(poster) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(preload) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(readonly) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(referrerpolicy) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rel) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(required) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rev) \
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <LibWeb/ARIA/Roles.h>
|
||||
#include <LibWeb/HTML/HTMLAnchorElement.h>
|
||||
#include <LibWeb/HTML/Window.h>
|
||||
#include <LibWeb/ReferrerPolicy/ReferrerPolicy.h>
|
||||
|
||||
namespace Web::HTML {
|
||||
|
||||
|
@ -114,4 +115,22 @@ void HTMLAnchorElement::set_text(DeprecatedString const& text)
|
|||
string_replace_all(text);
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/text-level-semantics.html#dom-a-referrerpolicy
|
||||
DeprecatedString HTMLAnchorElement::referrer_policy() const
|
||||
{
|
||||
// The IDL attribute referrerPolicy must reflect the referrerpolicy content attribute, limited to only known values.
|
||||
auto policy_string = attribute(HTML::AttributeNames::referrerpolicy);
|
||||
auto maybe_policy = ReferrerPolicy::from_string(policy_string);
|
||||
if (maybe_policy.has_value())
|
||||
return ReferrerPolicy::to_string(maybe_policy.value());
|
||||
return "";
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/text-level-semantics.html#dom-a-referrerpolicy
|
||||
WebIDL::ExceptionOr<void> HTMLAnchorElement::set_referrer_policy(DeprecatedString const& referrer_policy)
|
||||
{
|
||||
// The IDL attribute referrerPolicy must reflect the referrerpolicy content attribute, limited to only known values.
|
||||
return set_attribute(HTML::AttributeNames::referrerpolicy, referrer_policy);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -26,6 +26,9 @@ public:
|
|||
DeprecatedString text() const;
|
||||
void set_text(DeprecatedString const&);
|
||||
|
||||
DeprecatedString referrer_policy() const;
|
||||
WebIDL::ExceptionOr<void> set_referrer_policy(DeprecatedString const&);
|
||||
|
||||
// ^EventTarget
|
||||
// https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-a-element
|
||||
virtual bool is_focusable() const override { return has_attribute(HTML::AttributeNames::href); }
|
||||
|
|
|
@ -17,6 +17,8 @@ interface HTMLAnchorElement : HTMLElement {
|
|||
|
||||
[CEReactions] attribute DOMString text;
|
||||
|
||||
[CEReactions] attribute DOMString referrerPolicy;
|
||||
|
||||
// Obsolete
|
||||
[CEReactions, Reflect] attribute DOMString coords;
|
||||
[CEReactions, Reflect] attribute DOMString charset;
|
||||
|
|
55
Userland/Libraries/LibWeb/ReferrerPolicy/ReferrerPolicy.cpp
Normal file
55
Userland/Libraries/LibWeb/ReferrerPolicy/ReferrerPolicy.cpp
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Sam Atkins <atkinssj@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibWeb/ReferrerPolicy/ReferrerPolicy.h>
|
||||
|
||||
namespace Web::ReferrerPolicy {
|
||||
|
||||
StringView to_string(ReferrerPolicy referrer_policy)
|
||||
{
|
||||
switch (referrer_policy) {
|
||||
case ReferrerPolicy::NoReferrer:
|
||||
return "no-referrer"sv;
|
||||
case ReferrerPolicy::NoReferrerWhenDowngrade:
|
||||
return "no-referrer-when-downgrade"sv;
|
||||
case ReferrerPolicy::SameOrigin:
|
||||
return "same-origin"sv;
|
||||
case ReferrerPolicy::Origin:
|
||||
return "origin"sv;
|
||||
case ReferrerPolicy::StrictOrigin:
|
||||
return "strict-origin"sv;
|
||||
case ReferrerPolicy::OriginWhenCrossOrigin:
|
||||
return "origin-when-cross-origin"sv;
|
||||
case ReferrerPolicy::StrictOriginWhenCrossOrigin:
|
||||
return "strict-origin-when-cross-origin"sv;
|
||||
case ReferrerPolicy::UnsafeURL:
|
||||
return "unsafe-url"sv;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
Optional<ReferrerPolicy> from_string(StringView string)
|
||||
{
|
||||
if (string.equals_ignoring_ascii_case("no-referrer"sv))
|
||||
return ReferrerPolicy::NoReferrer;
|
||||
if (string.equals_ignoring_ascii_case("no-referrer-when-downgrade"sv))
|
||||
return ReferrerPolicy::NoReferrerWhenDowngrade;
|
||||
if (string.equals_ignoring_ascii_case("same-origin"sv))
|
||||
return ReferrerPolicy::SameOrigin;
|
||||
if (string.equals_ignoring_ascii_case("origin"sv))
|
||||
return ReferrerPolicy::Origin;
|
||||
if (string.equals_ignoring_ascii_case("strict-origin"sv))
|
||||
return ReferrerPolicy::StrictOrigin;
|
||||
if (string.equals_ignoring_ascii_case("origin-when-cross-origin"sv))
|
||||
return ReferrerPolicy::OriginWhenCrossOrigin;
|
||||
if (string.equals_ignoring_ascii_case("strict-origin-when-cross-origin"sv))
|
||||
return ReferrerPolicy::StrictOriginWhenCrossOrigin;
|
||||
if (string.equals_ignoring_ascii_case("unsafe-url"sv))
|
||||
return ReferrerPolicy::UnsafeURL;
|
||||
return {};
|
||||
}
|
||||
|
||||
}
|
|
@ -6,6 +6,9 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/StringView.h>
|
||||
|
||||
namespace Web::ReferrerPolicy {
|
||||
|
||||
// https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy
|
||||
|
@ -24,4 +27,7 @@ enum class ReferrerPolicy {
|
|||
// The default referrer policy is "strict-origin-when-cross-origin".
|
||||
constexpr auto DEFAULT_REFERRER_POLICY = ReferrerPolicy::StrictOriginWhenCrossOrigin;
|
||||
|
||||
StringView to_string(ReferrerPolicy);
|
||||
Optional<ReferrerPolicy> from_string(StringView);
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue