Browse Source

LibWebView: Add an API to query if a host is on the Public Suffix List

Timothy Flynn 1 year ago
parent
commit
9f9e5c0f55

+ 10 - 8
Meta/Lagom/Tools/CodeGenerators/LibWebView/GeneratePublicSuffixData.cpp

@@ -66,6 +66,7 @@ public:
         return s_the;
         return s_the;
     }
     }
 
 
+    bool is_public_suffix(StringView host);
     ErrorOr<Optional<String>> get_public_suffix(StringView string);
     ErrorOr<Optional<String>> get_public_suffix(StringView string);
 
 
 private:
 private:
@@ -127,17 +128,18 @@ PublicSuffixData::PublicSuffixData()
     }
     }
 }
 }
 
 
+bool PublicSuffixData::is_public_suffix(StringView host)
+{
+    auto it = host.begin();
+    auto& node = m_dictionary.traverse_until_last_accessible_node(it, host.end());
+    return it.is_end() && node.metadata().has_value();
+}
+
 ErrorOr<Optional<String>> PublicSuffixData::get_public_suffix(StringView string)
 ErrorOr<Optional<String>> PublicSuffixData::get_public_suffix(StringView string)
 {
 {
     auto input = string.split_view("."sv);
     auto input = string.split_view("."sv);
     input.reverse();
     input.reverse();
 
 
-    auto can_find = [&](StringView input) -> bool {
-        auto it = input.begin();
-        auto& node = m_dictionary.traverse_until_last_accessible_node(it, input.end());
-        return it.is_end() && node.metadata().has_value();
-    };
-
     StringBuilder overall_search_string;
     StringBuilder overall_search_string;
     StringBuilder search_string;
     StringBuilder search_string;
     for (auto part : input) {
     for (auto part : input) {
@@ -145,7 +147,7 @@ ErrorOr<Optional<String>> PublicSuffixData::get_public_suffix(StringView string)
         TRY(search_string.try_append(TRY(overall_search_string.to_string())));
         TRY(search_string.try_append(TRY(overall_search_string.to_string())));
         TRY(search_string.try_append(part));
         TRY(search_string.try_append(part));
 
 
-        if (can_find(search_string.string_view())) {
+        if (is_public_suffix(search_string.string_view())) {
             overall_search_string.append(TRY(String::from_utf8(part)));
             overall_search_string.append(TRY(String::from_utf8(part)));
             overall_search_string.append("."sv);
             overall_search_string.append("."sv);
             continue;
             continue;
@@ -155,7 +157,7 @@ ErrorOr<Optional<String>> PublicSuffixData::get_public_suffix(StringView string)
         TRY(search_string.try_append(TRY(overall_search_string.to_string())));
         TRY(search_string.try_append(TRY(overall_search_string.to_string())));
         TRY(search_string.try_append("*"sv));
         TRY(search_string.try_append("*"sv));
 
 
-        if (can_find(search_string.string_view())) {
+        if (is_public_suffix(search_string.string_view())) {
             overall_search_string.append(TRY(String::from_utf8(part)));
             overall_search_string.append(TRY(String::from_utf8(part)));
             overall_search_string.append("."sv);
             overall_search_string.append("."sv);
             continue;
             continue;

+ 9 - 0
Userland/Libraries/LibWebView/URL.cpp

@@ -45,6 +45,15 @@ static Optional<URL> query_public_suffix_list(StringView url_string)
     return {};
     return {};
 }
 }
 
 
+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)
 Optional<String> get_public_suffix([[maybe_unused]] StringView host)
 {
 {
 #if defined(ENABLE_PUBLIC_SUFFIX)
 #if defined(ENABLE_PUBLIC_SUFFIX)

+ 1 - 0
Userland/Libraries/LibWebView/URL.h

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