LibURL+LibWebView: Move public suffix data to LibURL

This commit is contained in:
Sam Atkins 2024-11-26 16:27:08 +00:00 committed by Andreas Kling
parent edcdcea92d
commit 3124dca528
Notes: github-actions[bot] 2024-11-30 11:24:22 +00:00
10 changed files with 36 additions and 36 deletions

View file

@ -1,8 +1,12 @@
include(public_suffix)
set(SOURCES
Origin.cpp
Parser.cpp
URL.cpp
${PUBLIC_SUFFIX_SOURCES}
)
serenity_lib(LibURL url)
target_link_libraries(LibURL PRIVATE LibUnicode LibTextCodec)
target_compile_definitions(LibURL PRIVATE ENABLE_PUBLIC_SUFFIX=$<BOOL:${ENABLE_PUBLIC_SUFFIX_DOWNLOAD}>)

View file

@ -1,6 +1,7 @@
/*
* Copyright (c) 2018-2020, Andreas Kling <andreas@ladybird.org>
* Copyright (c) 2021, Max Wipfli <mail@maxwipfli.ch>
* Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -14,6 +15,10 @@
#include <LibURL/Parser.h>
#include <LibURL/URL.h>
#if defined(ENABLE_PUBLIC_SUFFIX)
# include <LibURL/PublicSuffixData.h>
#endif
namespace URL {
// FIXME: It could make sense to force users of URL to use URL::Parser::basic_parse() explicitly instead of using a constructor.
@ -498,4 +503,22 @@ ByteString percent_decode(StringView input)
return builder.to_byte_string();
}
bool is_public_suffix([[maybe_unused]] StringView host)
{
#if defined(ENABLE_PUBLIC_SUFFIX)
return PublicSuffixData::the()->is_public_suffix(host);
#else
return false;
#endif
}
Optional<String> get_public_suffix([[maybe_unused]] StringView host)
{
#if defined(ENABLE_PUBLIC_SUFFIX)
return MUST(PublicSuffixData::the()->get_public_suffix(host));
#else
return {};
#endif
}
}

View file

@ -199,6 +199,9 @@ URL create_with_url_or_path(ByteString const&);
URL create_with_file_scheme(ByteString const& path, ByteString const& fragment = {}, ByteString const& hostname = {});
URL create_with_data(StringView mime_type, StringView payload, bool is_base64 = false);
bool is_public_suffix(StringView host);
Optional<String> get_public_suffix(StringView host);
}
template<>

View file

@ -1,5 +1,4 @@
include(fontconfig)
include(public_suffix)
set(SOURCES
Application.cpp
@ -21,7 +20,6 @@ set(SOURCES
Utilities.cpp
ViewImplementation.cpp
WebContentClient.cpp
${PUBLIC_SUFFIX_SOURCES}
)
if (APPLE)
@ -74,7 +72,6 @@ set(GENERATED_SOURCES
serenity_lib(LibWebView webview)
target_link_libraries(LibWebView PRIVATE LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibRequests LibJS LibWeb LibUnicode LibURL LibSyntax)
target_compile_definitions(LibWebView PRIVATE ENABLE_PUBLIC_SUFFIX=$<BOOL:${ENABLE_PUBLIC_SUFFIX_DOWNLOAD}>)
if (APPLE)
target_link_libraries(LibWebView PRIVATE LibThreading)

View file

@ -14,7 +14,6 @@
#include <LibURL/URL.h>
#include <LibWeb/Cookie/ParsedCookie.h>
#include <LibWebView/CookieJar.h>
#include <LibWebView/URL.h>
namespace WebView {
@ -335,7 +334,7 @@ void CookieJar::store_cookie(Web::Cookie::ParsedCookie const& parsed_cookie, con
}
// 9. If the user agent is configured to reject "public suffixes" and the domain-attribute is a public suffix:
if (is_public_suffix(domain_attribute)) {
if (URL::is_public_suffix(domain_attribute)) {
// 1. If the domain-attribute is identical to the canonicalized request-host:
if (domain_attribute == canonicalized_domain) {
// 1. Let the domain-attribute be the empty string.

View file

@ -6,34 +6,11 @@
*/
#include <AK/String.h>
#include <LibCore/System.h>
#include <LibFileSystem/FileSystem.h>
#include <LibWebView/URL.h>
#if defined(ENABLE_PUBLIC_SUFFIX)
# include <LibWebView/PublicSuffixData.h>
#endif
namespace WebView {
bool is_public_suffix([[maybe_unused]] StringView host)
{
#if defined(ENABLE_PUBLIC_SUFFIX)
return PublicSuffixData::the()->is_public_suffix(host);
#else
return false;
#endif
}
Optional<String> get_public_suffix([[maybe_unused]] StringView host)
{
#if defined(ENABLE_PUBLIC_SUFFIX)
return MUST(PublicSuffixData::the()->get_public_suffix(host));
#else
return {};
#endif
}
Optional<URL::URL> sanitize_url(StringView url, Optional<StringView> search_engine, AppendTLD append_tld)
{
if (FileSystem::exists(url.trim_whitespace())) {
@ -111,7 +88,7 @@ static URLParts break_web_url_into_parts(URL::URL const& url, StringView url_str
domain = url_without_scheme;
}
auto public_suffix = get_public_suffix(domain);
auto public_suffix = URL::get_public_suffix(domain);
if (!public_suffix.has_value() || !domain.ends_with(*public_suffix))
return { scheme, domain, remainder };

View file

@ -12,9 +12,6 @@
namespace WebView {
bool is_public_suffix(StringView host);
Optional<String> get_public_suffix(StringView host);
enum class AppendTLD {
No,
Yes,

View file

@ -1,4 +1,4 @@
add_subdirectory(IPCCompiler)
add_subdirectory(LibTextCodec)
add_subdirectory(LibURL)
add_subdirectory(LibWeb)
add_subdirectory(LibWebView)

View file

@ -56,7 +56,7 @@ ErrorOr<void> generate_header_file(Core::InputBufferedFile&, Core::File& file)
#include <AK/Trie.h>
#include <AK/Variant.h>
namespace WebView {
namespace URL {
class PublicSuffixData {
protected:
@ -96,9 +96,9 @@ ErrorOr<void> generate_implementation_file(Core::InputBufferedFile& input, Core:
generator.append(R"~~~(
#include <AK/String.h>
#include <AK/Vector.h>
#include <LibWebView/PublicSuffixData.h>
#include <LibURL/PublicSuffixData.h>
namespace WebView {
namespace URL {
static constexpr auto s_public_suffixes = Array {)~~~");