Kaynağa Gözat

LibWebView+LibPublicSuffix: Merge LibPublicSuffix into LibWebView

After d2c7e1ea7db060c1f01a740fab65f3e35a45545b, 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.
Timothy Flynn 1 yıl önce
ebeveyn
işleme
a8f0fa5dd4

+ 0 - 1
Meta/Lagom/CMakeLists.txt

@@ -427,7 +427,6 @@ if (BUILD_LAGOM)
         Markdown
         Markdown
         PDF
         PDF
         Protocol
         Protocol
-        PublicSuffix
         Regex
         Regex
         SoftGPU
         SoftGPU
         SQL
         SQL

+ 1 - 1
Meta/Lagom/Tools/CodeGenerators/CMakeLists.txt

@@ -6,8 +6,8 @@ endif()
 add_subdirectory(LibEDID)
 add_subdirectory(LibEDID)
 add_subdirectory(LibGL)
 add_subdirectory(LibGL)
 add_subdirectory(LibLocale)
 add_subdirectory(LibLocale)
-add_subdirectory(LibPublicSuffix)
 add_subdirectory(LibTimeZone)
 add_subdirectory(LibTimeZone)
 add_subdirectory(LibUnicode)
 add_subdirectory(LibUnicode)
 add_subdirectory(LibWeb)
 add_subdirectory(LibWeb)
+add_subdirectory(LibWebView)
 add_subdirectory(StateMachineGenerator)
 add_subdirectory(StateMachineGenerator)

+ 0 - 1
Meta/Lagom/Tools/CodeGenerators/LibPublicSuffix/CMakeLists.txt

@@ -1 +0,0 @@
-lagom_tool(GeneratePublicSuffixData        SOURCES GeneratePublicSuffixData.cpp LIBS LibMain)

+ 1 - 0
Meta/Lagom/Tools/CodeGenerators/LibWebView/CMakeLists.txt

@@ -0,0 +1 @@
+lagom_tool(GeneratePublicSuffixData SOURCES GeneratePublicSuffixData.cpp LIBS LibMain)

+ 7 - 7
Meta/Lagom/Tools/CodeGenerators/LibPublicSuffix/GeneratePublicSuffixData.cpp → Meta/Lagom/Tools/CodeGenerators/LibWebView/GeneratePublicSuffixData.cpp

@@ -48,7 +48,7 @@ ErrorOr<void> generate_header_file(Core::InputBufferedFile&, Core::File& file)
 #include <AK/Forward.h>
 #include <AK/Forward.h>
 #include <AK/Trie.h>
 #include <AK/Trie.h>
 
 
-namespace PublicSuffix {
+namespace WebView {
 
 
 class PublicSuffixData {
 class PublicSuffixData {
 protected:
 protected:
@@ -72,7 +72,7 @@ private:
     Trie<char, DeprecatedString> m_dictionary;
     Trie<char, DeprecatedString> m_dictionary;
 };
 };
 
 
-} // namespace PublicSuffix
+}
 
 
 )~~~");
 )~~~");
 
 
@@ -85,11 +85,11 @@ ErrorOr<void> generate_implementation_file(Core::InputBufferedFile& input, Core:
     StringBuilder builder;
     StringBuilder builder;
     SourceGenerator generator { builder };
     SourceGenerator generator { builder };
     generator.append(R"~~~(
     generator.append(R"~~~(
-#include <LibPublicSuffix/PublicSuffixData.h>
-#include <AK/Vector.h>
 #include <AK/String.h>
 #include <AK/String.h>
+#include <AK/Vector.h>
+#include <LibWebView/PublicSuffixData.h>
 
 
-namespace PublicSuffix {
+namespace WebView {
 
 
 static Vector<StringView> s_public_suffixes {)~~~");
 static Vector<StringView> s_public_suffixes {)~~~");
 
 
@@ -121,7 +121,7 @@ PublicSuffixData::PublicSuffixData()
 {
 {
     // FIXME: Reduce the depth of this trie
     // FIXME: Reduce the depth of this trie
     for (auto str : s_public_suffixes) {
     for (auto str : s_public_suffixes) {
-        MUST(m_dictionary.insert(str.begin(), str.end(), str, [](auto& parent, auto& it) -> Optional<DeprecatedString> { 
+        MUST(m_dictionary.insert(str.begin(), str.end(), str, [](auto& parent, auto& it) -> Optional<DeprecatedString> {
             return DeprecatedString::formatted("{}{}", parent.metadata_value(), *it);
             return DeprecatedString::formatted("{}{}", parent.metadata_value(), *it);
         }));
         }));
     }
     }
@@ -176,7 +176,7 @@ ErrorOr<Optional<String>> PublicSuffixData::get_public_suffix(StringView string)
     return Optional<String> {};
     return Optional<String> {};
 }
 }
 
 
-} // namespace PublicSuffix
+}
 
 
 )~~~");
 )~~~");
 
 

+ 0 - 1
Userland/Libraries/CMakeLists.txt

@@ -44,7 +44,6 @@ add_subdirectory(LibPartition)
 add_subdirectory(LibPCIDB)
 add_subdirectory(LibPCIDB)
 add_subdirectory(LibPDF)
 add_subdirectory(LibPDF)
 add_subdirectory(LibProtocol)
 add_subdirectory(LibProtocol)
-add_subdirectory(LibPublicSuffix)
 add_subdirectory(LibRegex)
 add_subdirectory(LibRegex)
 add_subdirectory(LibSanitizer)
 add_subdirectory(LibSanitizer)
 add_subdirectory(LibSoftGPU)
 add_subdirectory(LibSoftGPU)

+ 0 - 10
Userland/Libraries/LibPublicSuffix/CMakeLists.txt

@@ -1,10 +0,0 @@
-include(${SerenityOS_SOURCE_DIR}/Meta/CMake/public_suffix.cmake)
-
-set(SOURCES
-    URL.cpp
-    ${PUBLIC_SUFFIX_SOURCES}
-)
-set(GENERATED_SOURCES ${CURRENT_LIB_GENERATED})
-
-serenity_lib(LibPublicSuffix publicsuffix)
-target_compile_definitions(LibPublicSuffix PRIVATE ENABLE_PUBLIC_SUFFIX_DOWNLOAD=$<BOOL:${ENABLE_PUBLIC_SUFFIX_DOWNLOAD}>)

+ 0 - 47
Userland/Libraries/LibPublicSuffix/URL.cpp

@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2023, Cameron Youell <cameronyouell@gmail.com>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#include <AK/String.h>
-#include <AK/URL.h>
-#include <LibPublicSuffix/URL.h>
-#if defined(ENABLE_PUBLIC_SUFFIX_DOWNLOAD)
-#    include <LibPublicSuffix/PublicSuffixData.h>
-#endif
-
-namespace PublicSuffix {
-ErrorOr<String> absolute_url(StringView url)
-{
-    String out = TRY(String::from_utf8(url));
-#if !defined(ENABLE_PUBLIC_SUFFIX_DOWNLOAD)
-    return out;
-#else
-    if (!out.contains("://"sv))
-        out = TRY(String::formatted("https://{}"sv, out));
-
-    auto final_url = URL::create_with_url_or_path(out.to_deprecated_string());
-    if (!final_url.is_valid())
-        return Error::from_string_view("Invalid URL"sv);
-
-    if (final_url.host().has<URL::IPv4Address>() || final_url.host().has<URL::IPv6Address>())
-        return out;
-
-    if (final_url.scheme() != "http"sv && final_url.scheme() != "https"sv)
-        return out;
-
-    if (final_url.host().has<String>()) {
-        auto string_host = final_url.host().get<String>();
-        auto maybe_public_suffix = TRY(PublicSuffixData::the()->get_public_suffix(string_host));
-        if (maybe_public_suffix.has_value())
-            return out;
-
-        if (string_host.ends_with_bytes(".local"sv) || string_host.ends_with_bytes("localhost"sv))
-            return out;
-    }
-
-    return Error::from_string_view("Invalid URL"sv);
-#endif
-}
-}

+ 0 - 15
Userland/Libraries/LibPublicSuffix/URL.h

@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2023, Cameron Youell <cameronyouell@gmail.com>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
-
-#pragma once
-
-#include <AK/Forward.h>
-
-namespace PublicSuffix {
-
-ErrorOr<String> absolute_url(StringView url);
-
-}

+ 7 - 1
Userland/Libraries/LibWebView/CMakeLists.txt

@@ -1,3 +1,5 @@
+include(${SerenityOS_SOURCE_DIR}/Meta/CMake/public_suffix.cmake)
+
 set(SOURCES
 set(SOURCES
     AccessibilityTreeModel.cpp
     AccessibilityTreeModel.cpp
     AriaPropertiesStateModel.cpp
     AriaPropertiesStateModel.cpp
@@ -14,8 +16,11 @@ set(SOURCES
     ViewImplementation.cpp
     ViewImplementation.cpp
     WebContentClient.cpp
     WebContentClient.cpp
     WebSocketClientAdapter.cpp
     WebSocketClientAdapter.cpp
+    ${PUBLIC_SUFFIX_SOURCES}
 )
 )
 
 
+set(GENERATED_SOURCES ${CURRENT_LIB_GENERATED})
+
 if (SERENITYOS)
 if (SERENITYOS)
     list(APPEND SOURCES OutOfProcessWebView.cpp)
     list(APPEND SOURCES OutOfProcessWebView.cpp)
 endif()
 endif()
@@ -41,7 +46,8 @@ set(GENERATED_SOURCES
 )
 )
 
 
 serenity_lib(LibWebView webview)
 serenity_lib(LibWebView webview)
-target_link_libraries(LibWebView PRIVATE LibCore LibFileSystem LibGfx LibGUI LibIPC LibProtocol LibPublicSuffix LibJS LibWeb LibSQL)
+target_link_libraries(LibWebView PRIVATE LibCore LibFileSystem LibGfx LibGUI LibIPC LibProtocol LibJS LibWeb LibSQL)
+target_compile_definitions(LibWebView PRIVATE ENABLE_PUBLIC_SUFFIX=$<BOOL:${ENABLE_PUBLIC_SUFFIX_DOWNLOAD}>)
 
 
 if (SERENITYOS)
 if (SERENITYOS)
     target_link_libraries(LibWebView PRIVATE LibFileSystemAccessClient)
     target_link_libraries(LibWebView PRIVATE LibFileSystemAccessClient)

+ 41 - 3
Userland/Libraries/LibWebView/URL.cpp

@@ -1,16 +1,54 @@
 /*
 /*
  * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
+ * Copyright (c) 2023, Cameron Youell <cameronyouell@gmail.com>
  *
  *
  * SPDX-License-Identifier: BSD-2-Clause
  * SPDX-License-Identifier: BSD-2-Clause
  */
  */
 
 
+#include <AK/String.h>
 #include <LibCore/System.h>
 #include <LibCore/System.h>
 #include <LibFileSystem/FileSystem.h>
 #include <LibFileSystem/FileSystem.h>
-#include <LibPublicSuffix/URL.h>
 #include <LibWebView/URL.h>
 #include <LibWebView/URL.h>
 
 
+#if defined(ENABLE_PUBLIC_SUFFIX)
+#    include <LibWebView/PublicSuffixData.h>
+#endif
+
 namespace WebView {
 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)
 Optional<URL> sanitize_url(StringView url, Optional<StringView> search_engine, AppendTLD append_tld)
 {
 {
     if (FileSystem::exists(url)) {
     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 format_search_engine();
 
 
     return result.release_value();
     return result.release_value();