1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 10:18:11 +00:00

LibWebView+LibPublicSuffix: Merge LibPublicSuffix into LibWebView

After d2c7e1ea7d, there is now only one
user of LibPublicSuffix - the URL sanitation utility within LibWebView.
Rather than having an entire library for the small Public Suffix data
accessor, merge it into LibWebView.
This commit is contained in:
Timothy Flynn 2023-10-14 09:07:38 -04:00 committed by Tim Flynn
parent a1cce69db0
commit a8f0fa5dd4
11 changed files with 57 additions and 87 deletions

View file

@ -1,16 +1,54 @@
/*
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
* Copyright (c) 2023, Cameron Youell <cameronyouell@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/String.h>
#include <LibCore/System.h>
#include <LibFileSystem/FileSystem.h>
#include <LibPublicSuffix/URL.h>
#include <LibWebView/URL.h>
#if defined(ENABLE_PUBLIC_SUFFIX)
# include <LibWebView/PublicSuffixData.h>
#endif
namespace WebView {
static Optional<URL> query_public_suffix_list(StringView url_string)
{
auto out = MUST(String::from_utf8(url_string));
if (!out.contains("://"sv))
out = MUST(String::formatted("https://{}"sv, out));
auto url = URL::create_with_url_or_path(out.to_deprecated_string());
if (!url.is_valid())
return {};
#if defined(ENABLE_PUBLIC_SUFFIX)
if (url.host().has<URL::IPv4Address>() || url.host().has<URL::IPv6Address>())
return url;
if (url.scheme() != "http"sv && url.scheme() != "https"sv)
return url;
if (url.host().has<String>()) {
auto const& host = url.host().get<String>();
if (auto public_suffix = MUST(PublicSuffixData::the()->get_public_suffix(host)); public_suffix.has_value())
return url;
if (host.ends_with_bytes(".local"sv) || host.ends_with_bytes("localhost"sv))
return url;
}
return {};
#else
return url;
#endif
}
Optional<URL> sanitize_url(StringView url, Optional<StringView> search_engine, AppendTLD append_tld)
{
if (FileSystem::exists(url)) {
@ -38,8 +76,8 @@ Optional<URL> sanitize_url(StringView url, Optional<StringView> search_engine, A
}
}
auto result = PublicSuffix::absolute_url(url);
if (result.is_error())
auto result = query_public_suffix_list(url);
if (!result.has_value())
return format_search_engine();
return result.release_value();