mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 17:47:44 +00:00
LibWeb: Add HTMLAnchorElement.referrerPolicy property
This commit is contained in:
parent
0c19d3aa58
commit
88d64fcb55
7 changed files with 87 additions and 0 deletions
|
@ -450,6 +450,7 @@ set(SOURCES
|
||||||
Platform/Timer.cpp
|
Platform/Timer.cpp
|
||||||
Platform/TimerSerenity.cpp
|
Platform/TimerSerenity.cpp
|
||||||
ReferrerPolicy/AbstractOperations.cpp
|
ReferrerPolicy/AbstractOperations.cpp
|
||||||
|
ReferrerPolicy/ReferrerPolicy.cpp
|
||||||
RequestIdleCallback/IdleDeadline.cpp
|
RequestIdleCallback/IdleDeadline.cpp
|
||||||
ResizeObserver/ResizeObserver.cpp
|
ResizeObserver/ResizeObserver.cpp
|
||||||
SecureContexts/AbstractOperations.cpp
|
SecureContexts/AbstractOperations.cpp
|
||||||
|
|
|
@ -195,6 +195,7 @@ namespace AttributeNames {
|
||||||
__ENUMERATE_HTML_ATTRIBUTE(poster) \
|
__ENUMERATE_HTML_ATTRIBUTE(poster) \
|
||||||
__ENUMERATE_HTML_ATTRIBUTE(preload) \
|
__ENUMERATE_HTML_ATTRIBUTE(preload) \
|
||||||
__ENUMERATE_HTML_ATTRIBUTE(readonly) \
|
__ENUMERATE_HTML_ATTRIBUTE(readonly) \
|
||||||
|
__ENUMERATE_HTML_ATTRIBUTE(referrerpolicy) \
|
||||||
__ENUMERATE_HTML_ATTRIBUTE(rel) \
|
__ENUMERATE_HTML_ATTRIBUTE(rel) \
|
||||||
__ENUMERATE_HTML_ATTRIBUTE(required) \
|
__ENUMERATE_HTML_ATTRIBUTE(required) \
|
||||||
__ENUMERATE_HTML_ATTRIBUTE(rev) \
|
__ENUMERATE_HTML_ATTRIBUTE(rev) \
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <LibWeb/ARIA/Roles.h>
|
#include <LibWeb/ARIA/Roles.h>
|
||||||
#include <LibWeb/HTML/HTMLAnchorElement.h>
|
#include <LibWeb/HTML/HTMLAnchorElement.h>
|
||||||
#include <LibWeb/HTML/Window.h>
|
#include <LibWeb/HTML/Window.h>
|
||||||
|
#include <LibWeb/ReferrerPolicy/ReferrerPolicy.h>
|
||||||
|
|
||||||
namespace Web::HTML {
|
namespace Web::HTML {
|
||||||
|
|
||||||
|
@ -114,4 +115,22 @@ void HTMLAnchorElement::set_text(DeprecatedString const& text)
|
||||||
string_replace_all(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;
|
DeprecatedString text() const;
|
||||||
void set_text(DeprecatedString const&);
|
void set_text(DeprecatedString const&);
|
||||||
|
|
||||||
|
DeprecatedString referrer_policy() const;
|
||||||
|
WebIDL::ExceptionOr<void> set_referrer_policy(DeprecatedString const&);
|
||||||
|
|
||||||
// ^EventTarget
|
// ^EventTarget
|
||||||
// https://html.spec.whatwg.org/multipage/interaction.html#the-tabindex-attribute:the-a-element
|
// 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); }
|
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 text;
|
||||||
|
|
||||||
|
[CEReactions] attribute DOMString referrerPolicy;
|
||||||
|
|
||||||
// Obsolete
|
// Obsolete
|
||||||
[CEReactions, Reflect] attribute DOMString coords;
|
[CEReactions, Reflect] attribute DOMString coords;
|
||||||
[CEReactions, Reflect] attribute DOMString charset;
|
[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
|
#pragma once
|
||||||
|
|
||||||
|
#include <AK/Optional.h>
|
||||||
|
#include <AK/StringView.h>
|
||||||
|
|
||||||
namespace Web::ReferrerPolicy {
|
namespace Web::ReferrerPolicy {
|
||||||
|
|
||||||
// https://w3c.github.io/webappsec-referrer-policy/#enumdef-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".
|
// The default referrer policy is "strict-origin-when-cross-origin".
|
||||||
constexpr auto DEFAULT_REFERRER_POLICY = ReferrerPolicy::StrictOriginWhenCrossOrigin;
|
constexpr auto DEFAULT_REFERRER_POLICY = ReferrerPolicy::StrictOriginWhenCrossOrigin;
|
||||||
|
|
||||||
|
StringView to_string(ReferrerPolicy);
|
||||||
|
Optional<ReferrerPolicy> from_string(StringView);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue