diff --git a/Userland/Libraries/LibWebView/CMakeLists.txt b/Userland/Libraries/LibWebView/CMakeLists.txt index 896dcc8e39..8eeac9b1d6 100644 --- a/Userland/Libraries/LibWebView/CMakeLists.txt +++ b/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=$) if (SERENITYOS) diff --git a/Userland/Libraries/LibWebView/URL.cpp b/Userland/Libraries/LibWebView/URL.cpp index 63e1e6dfb8..74df088819 100644 --- a/Userland/Libraries/LibWebView/URL.cpp +++ b/Userland/Libraries/LibWebView/URL.cpp @@ -5,9 +5,11 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include +#include #include #if defined(ENABLE_PUBLIC_SUFFIX) @@ -16,16 +18,32 @@ namespace WebView { +static Optional 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 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.host().has()) return url;