Browse Source

LibWebView: Use Unicode::parse_unicode_url for parsing URLs

Simon Wanner 1 năm trước cách đây
mục cha
commit
0fe192dfd9

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

@@ -44,7 +44,7 @@ set(GENERATED_SOURCES
 )
 
 serenity_lib(LibWebView webview)
-target_link_libraries(LibWebView PRIVATE LibCore LibFileSystem LibGfx LibIPC LibProtocol LibJS LibWeb LibSQL)
+target_link_libraries(LibWebView PRIVATE LibCore LibFileSystem LibGfx LibIPC LibProtocol LibJS LibWeb LibSQL LibUnicode)
 target_compile_definitions(LibWebView PRIVATE ENABLE_PUBLIC_SUFFIX=$<BOOL:${ENABLE_PUBLIC_SUFFIX_DOWNLOAD}>)
 
 if (SERENITYOS)

+ 20 - 2
Userland/Libraries/LibWebView/URL.cpp

@@ -5,9 +5,11 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <AK/LexicalPath.h>
 #include <AK/String.h>
 #include <LibCore/System.h>
 #include <LibFileSystem/FileSystem.h>
+#include <LibUnicode/URL.h>
 #include <LibWebView/URL.h>
 
 #if defined(ENABLE_PUBLIC_SUFFIX)
@@ -16,16 +18,32 @@
 
 namespace WebView {
 
+static Optional<URL> create_url_with_url_or_path(String const& url_or_path)
+{
+    auto url = Unicode::create_unicode_url(url_or_path);
+    if (!url.is_error() && url.value().is_valid())
+        return url.release_value();
+
+    auto path = LexicalPath::canonicalized_path(url_or_path.to_deprecated_string());
+    auto url_from_path = URL::create_with_file_scheme(path);
+    if (url_from_path.is_valid())
+        return url_from_path;
+
+    return {};
+}
+
 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())
+    auto maybe_url = create_url_with_url_or_path(out);
+    if (!maybe_url.has_value())
         return {};
 
+    auto url = maybe_url.release_value();
+
     if (url.host().has<URL::IPv4Address>() || url.host().has<URL::IPv6Address>())
         return url;