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 set(SOURCES
Origin.cpp Origin.cpp
Parser.cpp Parser.cpp
URL.cpp URL.cpp
${PUBLIC_SUFFIX_SOURCES}
) )
serenity_lib(LibURL url) serenity_lib(LibURL url)
target_link_libraries(LibURL PRIVATE LibUnicode LibTextCodec) 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) 2018-2020, Andreas Kling <andreas@ladybird.org>
* Copyright (c) 2021, Max Wipfli <mail@maxwipfli.ch> * Copyright (c) 2021, Max Wipfli <mail@maxwipfli.ch>
* Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -14,6 +15,10 @@
#include <LibURL/Parser.h> #include <LibURL/Parser.h>
#include <LibURL/URL.h> #include <LibURL/URL.h>
#if defined(ENABLE_PUBLIC_SUFFIX)
# include <LibURL/PublicSuffixData.h>
#endif
namespace URL { namespace URL {
// FIXME: It could make sense to force users of URL to use URL::Parser::basic_parse() explicitly instead of using a constructor. // 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(); 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_file_scheme(ByteString const& path, ByteString const& fragment = {}, ByteString const& hostname = {});
URL create_with_data(StringView mime_type, StringView payload, bool is_base64 = false); 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<> template<>

View file

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

View file

@ -14,7 +14,6 @@
#include <LibURL/URL.h> #include <LibURL/URL.h>
#include <LibWeb/Cookie/ParsedCookie.h> #include <LibWeb/Cookie/ParsedCookie.h>
#include <LibWebView/CookieJar.h> #include <LibWebView/CookieJar.h>
#include <LibWebView/URL.h>
namespace WebView { 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: // 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: // 1. If the domain-attribute is identical to the canonicalized request-host:
if (domain_attribute == canonicalized_domain) { if (domain_attribute == canonicalized_domain) {
// 1. Let the domain-attribute be the empty string. // 1. Let the domain-attribute be the empty string.

View file

@ -6,34 +6,11 @@
*/ */
#include <AK/String.h> #include <AK/String.h>
#include <LibCore/System.h>
#include <LibFileSystem/FileSystem.h> #include <LibFileSystem/FileSystem.h>
#include <LibWebView/URL.h> #include <LibWebView/URL.h>
#if defined(ENABLE_PUBLIC_SUFFIX)
# include <LibWebView/PublicSuffixData.h>
#endif
namespace WebView { 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) Optional<URL::URL> sanitize_url(StringView url, Optional<StringView> search_engine, AppendTLD append_tld)
{ {
if (FileSystem::exists(url.trim_whitespace())) { 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; 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)) if (!public_suffix.has_value() || !domain.ends_with(*public_suffix))
return { scheme, domain, remainder }; return { scheme, domain, remainder };

View file

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

View file

@ -1,4 +1,4 @@
add_subdirectory(IPCCompiler) add_subdirectory(IPCCompiler)
add_subdirectory(LibTextCodec) add_subdirectory(LibTextCodec)
add_subdirectory(LibURL)
add_subdirectory(LibWeb) 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/Trie.h>
#include <AK/Variant.h> #include <AK/Variant.h>
namespace WebView { namespace URL {
class PublicSuffixData { class PublicSuffixData {
protected: protected:
@ -96,9 +96,9 @@ ErrorOr<void> generate_implementation_file(Core::InputBufferedFile& input, Core:
generator.append(R"~~~( generator.append(R"~~~(
#include <AK/String.h> #include <AK/String.h>
#include <AK/Vector.h> #include <AK/Vector.h>
#include <LibWebView/PublicSuffixData.h> #include <LibURL/PublicSuffixData.h>
namespace WebView { namespace URL {
static constexpr auto s_public_suffixes = Array {)~~~"); static constexpr auto s_public_suffixes = Array {)~~~");