|
@@ -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;
|
|
|
|