AK+LibURL: Move AK::URL into a new URL library
This URL library ends up being a relatively fundamental base library of the system, as LibCore depends on LibURL. This change has two main benefits: * Moving AK back more towards being an agnostic library that can be used between the kernel and userspace. URL has never really fit that description - and is not used in the kernel. * URL _should_ depend on LibUnicode, as it needs punnycode support. However, it's not really possible to do this inside of AK as it can't depend on any external library. This change brings us a little closer to being able to do that, but unfortunately we aren't there quite yet, as the code generators depend on LibCore.
This commit is contained in:
parent
21bfa001b1
commit
e800605ad3
Notes:
sideshowbarker
2024-07-17 04:41:05 +09:00
Author: https://github.com/shannonbooth Commit: https://github.com/SerenityOS/serenity/commit/e800605ad3 Pull-request: https://github.com/SerenityOS/serenity/pull/23443 Issue: https://github.com/SerenityOS/serenity/issues/22884 Reviewed-by: https://github.com/trflynn89
403 changed files with 1336 additions and 1305 deletions
|
@ -35,8 +35,6 @@ set(AK_SOURCES
|
|||
StringUtils.cpp
|
||||
StringView.cpp
|
||||
Time.cpp
|
||||
URL.cpp
|
||||
URLParser.cpp
|
||||
UUID.cpp
|
||||
Utf16View.cpp
|
||||
Utf32View.cpp
|
||||
|
|
|
@ -49,7 +49,6 @@ class String;
|
|||
class StringBuilder;
|
||||
class StringImpl;
|
||||
class StringView;
|
||||
class URL;
|
||||
class UnixDateTime;
|
||||
class Utf16View;
|
||||
class Utf32CodePointIterator;
|
||||
|
@ -204,7 +203,6 @@ using AK::StringView;
|
|||
using AK::TrailingCodePointTransformation;
|
||||
using AK::Traits;
|
||||
using AK::UnixDateTime;
|
||||
using AK::URL;
|
||||
using AK::Utf16View;
|
||||
using AK::Utf32CodePointIterator;
|
||||
using AK::Utf32View;
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/URL.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <Ladybird/Types.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/HTML/ActivateTab.h>
|
||||
#include <LibWebView/CookieJar.h>
|
||||
|
@ -22,18 +22,18 @@
|
|||
|
||||
@interface ApplicationDelegate : NSObject <NSApplicationDelegate>
|
||||
|
||||
- (nullable instancetype)init:(Vector<URL>)initial_urls
|
||||
newTabPageURL:(URL)new_tab_page_url
|
||||
- (nullable instancetype)init:(Vector<URL::URL>)initial_urls
|
||||
newTabPageURL:(URL::URL)new_tab_page_url
|
||||
withCookieJar:(WebView::CookieJar)cookie_jar
|
||||
webContentOptions:(Ladybird::WebContentOptions const&)web_content_options
|
||||
webdriverContentIPCPath:(StringView)webdriver_content_ipc_path;
|
||||
|
||||
- (nonnull TabController*)createNewTab:(Optional<URL> const&)url
|
||||
- (nonnull TabController*)createNewTab:(Optional<URL::URL> const&)url
|
||||
fromTab:(nullable Tab*)tab
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||
|
||||
- (nonnull TabController*)createNewTab:(StringView)html
|
||||
url:(URL const&)url
|
||||
url:(URL::URL const&)url
|
||||
fromTab:(nullable Tab*)tab
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
|
||||
@interface ApplicationDelegate ()
|
||||
{
|
||||
Vector<URL> m_initial_urls;
|
||||
URL m_new_tab_page_url;
|
||||
Vector<URL::URL> m_initial_urls;
|
||||
URL::URL m_new_tab_page_url;
|
||||
|
||||
// This will always be populated, but we cannot have a non-default constructible instance variable.
|
||||
Optional<WebView::CookieJar> m_cookie_jar;
|
||||
|
@ -50,8 +50,8 @@
|
|||
|
||||
@implementation ApplicationDelegate
|
||||
|
||||
- (instancetype)init:(Vector<URL>)initial_urls
|
||||
newTabPageURL:(URL)new_tab_page_url
|
||||
- (instancetype)init:(Vector<URL::URL>)initial_urls
|
||||
newTabPageURL:(URL::URL)new_tab_page_url
|
||||
withCookieJar:(WebView::CookieJar)cookie_jar
|
||||
webContentOptions:(Ladybird::WebContentOptions const&)web_content_options
|
||||
webdriverContentIPCPath:(StringView)webdriver_content_ipc_path
|
||||
|
@ -95,7 +95,7 @@
|
|||
|
||||
#pragma mark - Public methods
|
||||
|
||||
- (TabController*)createNewTab:(Optional<URL> const&)url
|
||||
- (TabController*)createNewTab:(Optional<URL::URL> const&)url
|
||||
fromTab:(Tab*)tab
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||
{
|
||||
|
@ -106,7 +106,7 @@
|
|||
}
|
||||
|
||||
- (nonnull TabController*)createNewTab:(StringView)html
|
||||
url:(URL const&)url
|
||||
url:(URL::URL const&)url
|
||||
fromTab:(nullable Tab*)tab
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||
{
|
||||
|
@ -155,7 +155,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
[self createNewTab:URL("about:version"sv)
|
||||
[self createNewTab:URL::URL("about:version"sv)
|
||||
fromTab:(Tab*)current_tab
|
||||
activateTab:Web::HTML::ActivateTab::Yes];
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include <AK/Forward.h>
|
||||
#include <LibGfx/Forward.h>
|
||||
#include <LibURL/Forward.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/HTML/ActivateTab.h>
|
||||
#include <LibWebView/Forward.h>
|
||||
|
@ -16,16 +17,16 @@
|
|||
|
||||
@protocol LadybirdWebViewObserver <NSObject>
|
||||
|
||||
- (String const&)onCreateNewTab:(URL const&)url
|
||||
- (String const&)onCreateNewTab:(URL::URL const&)url
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||
|
||||
- (String const&)onCreateNewTab:(StringView)html
|
||||
url:(URL const&)url
|
||||
url:(URL::URL const&)url
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||
|
||||
- (void)loadURL:(URL const&)url;
|
||||
- (void)onLoadStart:(URL const&)url isRedirect:(BOOL)is_redirect;
|
||||
- (void)onLoadFinish:(URL const&)url;
|
||||
- (void)loadURL:(URL::URL const&)url;
|
||||
- (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)is_redirect;
|
||||
- (void)onLoadFinish:(URL::URL const&)url;
|
||||
|
||||
- (void)onTitleChange:(ByteString const&)title;
|
||||
- (void)onFaviconChange:(Gfx::Bitmap const&)bitmap;
|
||||
|
@ -40,7 +41,7 @@
|
|||
|
||||
- (instancetype)init:(id<LadybirdWebViewObserver>)observer;
|
||||
|
||||
- (void)loadURL:(URL const&)url;
|
||||
- (void)loadURL:(URL::URL const&)url;
|
||||
- (void)loadHTML:(StringView)html;
|
||||
|
||||
- (WebView::ViewImplementation&)view;
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/TemporaryChange.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibGfx/ImageFormats/PNGWriter.h>
|
||||
#include <LibGfx/ShareableBitmap.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/HTML/SelectedFile.h>
|
||||
#include <LibWebView/SearchEngine.h>
|
||||
#include <LibWebView/SourceHighlighter.h>
|
||||
|
@ -51,7 +51,7 @@ struct HideCursor {
|
|||
{
|
||||
OwnPtr<Ladybird::WebViewBridge> m_web_view_bridge;
|
||||
|
||||
URL m_context_menu_url;
|
||||
URL::URL m_context_menu_url;
|
||||
Gfx::ShareableBitmap m_context_menu_bitmap;
|
||||
Optional<String> m_context_menu_search_text;
|
||||
|
||||
|
@ -118,7 +118,7 @@ struct HideCursor {
|
|||
|
||||
#pragma mark - Public methods
|
||||
|
||||
- (void)loadURL:(URL const&)url
|
||||
- (void)loadURL:(URL::URL const&)url
|
||||
{
|
||||
m_web_view_bridge->load(url);
|
||||
}
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
#include <AK/ByteString.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/URL.h>
|
||||
#include <Ladybird/Utilities.h>
|
||||
#include <LibCore/Resource.h>
|
||||
#include <LibGfx/ImageFormats/PNGWriter.h>
|
||||
#include <LibGfx/ShareableBitmap.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
#import <Application/ApplicationDelegate.h>
|
||||
#import <UI/Inspector.h>
|
||||
|
@ -34,7 +34,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
|
||||
@property (nonatomic, strong) InspectorController* inspector_controller;
|
||||
|
||||
@property (nonatomic, assign) URL last_url;
|
||||
@property (nonatomic, assign) URL::URL last_url;
|
||||
|
||||
@end
|
||||
|
||||
|
@ -188,7 +188,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
|
||||
#pragma mark - LadybirdWebViewObserver
|
||||
|
||||
- (String const&)onCreateNewTab:(URL const&)url
|
||||
- (String const&)onCreateNewTab:(URL::URL const&)url
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||
{
|
||||
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
||||
|
@ -202,7 +202,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
}
|
||||
|
||||
- (String const&)onCreateNewTab:(StringView)html
|
||||
url:(URL const&)url
|
||||
url:(URL::URL const&)url
|
||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||
{
|
||||
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
||||
|
@ -216,12 +216,12 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
return [[tab web_view] handle];
|
||||
}
|
||||
|
||||
- (void)loadURL:(URL const&)url
|
||||
- (void)loadURL:(URL::URL const&)url
|
||||
{
|
||||
[[self tabController] loadURL:url];
|
||||
}
|
||||
|
||||
- (void)onLoadStart:(URL const&)url isRedirect:(BOOL)is_redirect
|
||||
- (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)is_redirect
|
||||
{
|
||||
if (url != self.last_url) {
|
||||
self.last_url = url;
|
||||
|
@ -239,7 +239,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
|||
}
|
||||
}
|
||||
|
||||
- (void)onLoadFinish:(URL const&)url
|
||||
- (void)onLoadFinish:(URL::URL const&)url
|
||||
{
|
||||
if (self.inspector_controller != nil) {
|
||||
auto* inspector = (Inspector*)[self.inspector_controller window];
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Forward.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
#import <System/Cocoa.h>
|
||||
|
||||
|
@ -23,10 +23,10 @@ struct TabSettings {
|
|||
|
||||
- (instancetype)init;
|
||||
|
||||
- (void)loadURL:(URL const&)url;
|
||||
- (void)loadHTML:(StringView)html url:(URL const&)url;
|
||||
- (void)loadURL:(URL::URL const&)url;
|
||||
- (void)loadHTML:(StringView)html url:(URL::URL const&)url;
|
||||
|
||||
- (void)onLoadStart:(URL const&)url isRedirect:(BOOL)isRedirect;
|
||||
- (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)isRedirect;
|
||||
- (void)onTitleChange:(ByteString const&)title;
|
||||
|
||||
- (void)navigateBack:(id)sender;
|
||||
|
|
|
@ -106,17 +106,17 @@ enum class IsHistoryNavigation {
|
|||
|
||||
#pragma mark - Public methods
|
||||
|
||||
- (void)loadURL:(URL const&)url
|
||||
- (void)loadURL:(URL::URL const&)url
|
||||
{
|
||||
[[self tab].web_view loadURL:url];
|
||||
}
|
||||
|
||||
- (void)loadHTML:(StringView)html url:(URL const&)url
|
||||
- (void)loadHTML:(StringView)html url:(URL::URL const&)url
|
||||
{
|
||||
[[self tab].web_view loadHTML:html];
|
||||
}
|
||||
|
||||
- (void)onLoadStart:(URL const&)url isRedirect:(BOOL)isRedirect
|
||||
- (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)isRedirect
|
||||
{
|
||||
if (isRedirect) {
|
||||
m_history.replace_current(url, m_title);
|
||||
|
|
|
@ -59,8 +59,8 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
auto database = TRY(WebView::Database::create(move(sql_server_paths)));
|
||||
auto cookie_jar = TRY(WebView::CookieJar::create(*database));
|
||||
|
||||
URL new_tab_page_url = Browser::default_new_tab_url;
|
||||
Vector<URL> initial_urls;
|
||||
URL::URL new_tab_page_url = Browser::default_new_tab_url;
|
||||
Vector<URL::URL> initial_urls;
|
||||
|
||||
for (auto const& raw_url : raw_urls) {
|
||||
if (auto url = WebView::sanitize_url(raw_url); url.has_value())
|
||||
|
|
|
@ -175,7 +175,7 @@ target_sources(ladybird PUBLIC FILE_SET ladybird TYPE HEADERS
|
|||
BASE_DIRS ${SERENITY_SOURCE_DIR}
|
||||
FILES ${LADYBIRD_HEADERS}
|
||||
)
|
||||
target_link_libraries(ladybird PRIVATE AK LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebView LibProtocol)
|
||||
target_link_libraries(ladybird PRIVATE AK LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebView LibProtocol LibURL)
|
||||
|
||||
target_include_directories(ladybird PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||
target_include_directories(ladybird PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||
|
@ -204,7 +204,7 @@ add_executable(headless-browser
|
|||
|
||||
target_include_directories(headless-browser PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||
target_include_directories(headless-browser PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||
target_link_libraries(headless-browser PRIVATE AK LibCore LibWeb LibWebView LibWebSocket LibCrypto LibFileSystem LibGemini LibHTTP LibImageDecoderClient LibJS LibGfx LibMain LibTLS LibIPC LibDiff LibProtocol)
|
||||
target_link_libraries(headless-browser PRIVATE AK LibCore LibWeb LibWebView LibWebSocket LibCrypto LibFileSystem LibGemini LibHTTP LibImageDecoderClient LibJS LibGfx LibMain LibTLS LibIPC LibDiff LibProtocol LibURL)
|
||||
|
||||
if (ANDROID)
|
||||
include(cmake/AndroidExtras.cmake)
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
#include <AK/JsonArray.h>
|
||||
#include <AK/JsonObject.h>
|
||||
#include <AK/JsonParser.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
namespace Ladybird {
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ static QIcon const& app_icon()
|
|||
return icon;
|
||||
}
|
||||
|
||||
BrowserWindow::BrowserWindow(Vector<URL> const& initial_urls, WebView::CookieJar& cookie_jar, WebContentOptions const& web_content_options, StringView webdriver_content_ipc_path)
|
||||
BrowserWindow::BrowserWindow(Vector<URL::URL> const& initial_urls, WebView::CookieJar& cookie_jar, WebContentOptions const& web_content_options, StringView webdriver_content_ipc_path)
|
||||
: m_cookie_jar(cookie_jar)
|
||||
, m_web_content_options(web_content_options)
|
||||
, m_webdriver_content_ipc_path(webdriver_content_ipc_path)
|
||||
|
@ -471,7 +471,7 @@ void BrowserWindow::debug_request(ByteString const& request, ByteString const& a
|
|||
m_current_tab->debug_request(request, argument);
|
||||
}
|
||||
|
||||
Tab& BrowserWindow::new_tab_from_url(URL const& url, Web::HTML::ActivateTab activate_tab)
|
||||
Tab& BrowserWindow::new_tab_from_url(URL::URL const& url, Web::HTML::ActivateTab activate_tab)
|
||||
{
|
||||
auto& tab = create_new_tab(activate_tab);
|
||||
tab.navigate(url);
|
||||
|
|
|
@ -28,7 +28,7 @@ class BrowserWindow : public QMainWindow {
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
BrowserWindow(Vector<URL> const& initial_urls, WebView::CookieJar&, WebContentOptions const&, StringView webdriver_content_ipc_path);
|
||||
BrowserWindow(Vector<URL::URL> const& initial_urls, WebView::CookieJar&, WebContentOptions const&, StringView webdriver_content_ipc_path);
|
||||
|
||||
WebContentView& view() const { return m_current_tab->view(); }
|
||||
|
||||
|
@ -73,7 +73,7 @@ public slots:
|
|||
void device_pixel_ratio_changed(qreal dpi);
|
||||
void tab_title_changed(int index, QString const&);
|
||||
void tab_favicon_changed(int index, QIcon const& icon);
|
||||
Tab& new_tab_from_url(URL const&, Web::HTML::ActivateTab);
|
||||
Tab& new_tab_from_url(URL::URL const&, Web::HTML::ActivateTab);
|
||||
Tab& new_tab_from_content(StringView html, Web::HTML::ActivateTab);
|
||||
Tab& new_child_tab(Web::HTML::ActivateTab, Tab& parent, Web::HTML::WebViewHints, Optional<u64> page_index);
|
||||
void activate_tab(int index);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#include "LocationEdit.h"
|
||||
#include "Settings.h"
|
||||
#include "StringUtils.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWebView/URL.h>
|
||||
#include <QApplication>
|
||||
#include <QPalette>
|
||||
|
|
|
@ -26,7 +26,7 @@ void RequestManagerQt::reply_finished(QNetworkReply* reply)
|
|||
request->did_finish();
|
||||
}
|
||||
|
||||
RefPtr<Web::ResourceLoaderConnectorRequest> RequestManagerQt::start_request(ByteString const& method, URL const& url, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const& proxy)
|
||||
RefPtr<Web::ResourceLoaderConnectorRequest> RequestManagerQt::start_request(ByteString const& method, URL::URL const& url, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const& proxy)
|
||||
{
|
||||
if (!url.scheme().bytes_as_string_view().is_one_of_ignoring_ascii_case("http"sv, "https"sv)) {
|
||||
return nullptr;
|
||||
|
@ -40,7 +40,7 @@ RefPtr<Web::ResourceLoaderConnectorRequest> RequestManagerQt::start_request(Byte
|
|||
return request;
|
||||
}
|
||||
|
||||
ErrorOr<NonnullRefPtr<RequestManagerQt::Request>> RequestManagerQt::Request::create(QNetworkAccessManager& qnam, ByteString const& method, URL const& url, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&)
|
||||
ErrorOr<NonnullRefPtr<RequestManagerQt::Request>> RequestManagerQt::Request::create(QNetworkAccessManager& qnam, ByteString const& method, URL::URL const& url, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&)
|
||||
{
|
||||
QNetworkRequest request { QString(url.to_byte_string().characters()) };
|
||||
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);
|
||||
|
@ -78,7 +78,7 @@ ErrorOr<NonnullRefPtr<RequestManagerQt::Request>> RequestManagerQt::Request::cre
|
|||
return adopt_ref(*new Request(*reply));
|
||||
}
|
||||
|
||||
RefPtr<Web::WebSockets::WebSocketClientSocket> RequestManagerQt::websocket_connect(AK::URL const& url, AK::ByteString const& origin, Vector<AK::ByteString> const& protocols)
|
||||
RefPtr<Web::WebSockets::WebSocketClientSocket> RequestManagerQt::websocket_connect(URL::URL const& url, AK::ByteString const& origin, Vector<AK::ByteString> const& protocols)
|
||||
{
|
||||
WebSocket::ConnectionInfo connection_info(url);
|
||||
connection_info.set_origin(origin);
|
||||
|
|
|
@ -24,11 +24,11 @@ public:
|
|||
|
||||
virtual ~RequestManagerQt() override { }
|
||||
|
||||
virtual void prefetch_dns(URL const&) override { }
|
||||
virtual void preconnect(URL const&) override { }
|
||||
virtual void prefetch_dns(URL::URL const&) override { }
|
||||
virtual void preconnect(URL::URL const&) override { }
|
||||
|
||||
virtual RefPtr<Web::ResourceLoaderConnectorRequest> start_request(ByteString const& method, URL const&, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&) override;
|
||||
virtual RefPtr<Web::WebSockets::WebSocketClientSocket> websocket_connect(const URL&, ByteString const& origin, Vector<ByteString> const& protocols) override;
|
||||
virtual RefPtr<Web::ResourceLoaderConnectorRequest> start_request(ByteString const& method, URL::URL const&, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&) override;
|
||||
virtual RefPtr<Web::WebSockets::WebSocketClientSocket> websocket_connect(const URL::URL&, ByteString const& origin, Vector<ByteString> const& protocols) override;
|
||||
|
||||
private slots:
|
||||
void reply_finished(QNetworkReply*);
|
||||
|
@ -39,7 +39,7 @@ private:
|
|||
class Request
|
||||
: public Web::ResourceLoaderConnectorRequest {
|
||||
public:
|
||||
static ErrorOr<NonnullRefPtr<Request>> create(QNetworkAccessManager& qnam, ByteString const& method, URL const& url, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&);
|
||||
static ErrorOr<NonnullRefPtr<Request>> create(QNetworkAccessManager& qnam, ByteString const& method, URL::URL const& url, HashMap<ByteString, ByteString> const& request_headers, ReadonlyBytes request_body, Core::ProxyData const&);
|
||||
|
||||
virtual ~Request() override;
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include "SettingsDialog.h"
|
||||
#include "Settings.h"
|
||||
#include "StringUtils.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWebView/SearchEngine.h>
|
||||
#include <QLabel>
|
||||
#include <QMenu>
|
||||
|
@ -39,11 +39,11 @@ SettingsDialog::SettingsDialog(QMainWindow* window)
|
|||
m_new_tab_page->setText(Settings::the()->new_tab_page());
|
||||
QObject::connect(m_new_tab_page, &QLineEdit::textChanged, this, [this] {
|
||||
auto url_string = ak_string_from_qstring(m_new_tab_page->text());
|
||||
m_new_tab_page->setStyleSheet(URL(url_string).is_valid() ? "" : "border: 1px solid red;");
|
||||
m_new_tab_page->setStyleSheet(URL::URL(url_string).is_valid() ? "" : "border: 1px solid red;");
|
||||
});
|
||||
QObject::connect(m_new_tab_page, &QLineEdit::editingFinished, this, [this] {
|
||||
auto url_string = ak_string_from_qstring(m_new_tab_page->text());
|
||||
if (URL(url_string).is_valid())
|
||||
if (URL::URL(url_string).is_valid())
|
||||
Settings::the()->set_new_tab_page(m_new_tab_page->text());
|
||||
});
|
||||
QObject::connect(m_new_tab_page, &QLineEdit::returnPressed, this, [this] {
|
||||
|
|
|
@ -23,13 +23,13 @@ QString qstring_from_ak_string(StringView ak_string)
|
|||
return QString::fromUtf8(ak_string.characters_without_null_termination(), static_cast<qsizetype>(ak_string.length()));
|
||||
}
|
||||
|
||||
URL ak_url_from_qstring(QString const& qstring)
|
||||
URL::URL ak_url_from_qstring(QString const& qstring)
|
||||
{
|
||||
auto utf8_data = qstring.toUtf8();
|
||||
return URL(StringView(utf8_data.data(), utf8_data.size()));
|
||||
return URL::URL(StringView(utf8_data.data(), utf8_data.size()));
|
||||
}
|
||||
|
||||
URL ak_url_from_qurl(QUrl const& qurl)
|
||||
URL::URL ak_url_from_qurl(QUrl const& qurl)
|
||||
{
|
||||
return ak_url_from_qstring(qurl.toString());
|
||||
}
|
||||
|
|
|
@ -10,12 +10,12 @@
|
|||
#include <AK/Error.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
|
||||
AK::ByteString ak_byte_string_from_qstring(QString const&);
|
||||
String ak_string_from_qstring(QString const&);
|
||||
QString qstring_from_ak_string(StringView);
|
||||
URL ak_url_from_qstring(QString const&);
|
||||
URL ak_url_from_qurl(QUrl const&);
|
||||
URL::URL ak_url_from_qstring(QString const&);
|
||||
URL::URL ak_url_from_qurl(QUrl const&);
|
||||
|
|
|
@ -121,7 +121,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St
|
|||
m_hover_label->hide();
|
||||
};
|
||||
|
||||
view().on_load_start = [this](const URL& url, bool is_redirect) {
|
||||
view().on_load_start = [this](const URL::URL& url, bool is_redirect) {
|
||||
// If we are loading due to a redirect, we replace the current history entry
|
||||
// with the loaded URL
|
||||
if (is_redirect) {
|
||||
|
@ -384,7 +384,7 @@ Tab::Tab(BrowserWindow* window, WebContentOptions const& web_content_options, St
|
|||
search_selected_text_action->setIcon(load_icon_from_uri("resource://icons/16x16/find.png"sv));
|
||||
QObject::connect(search_selected_text_action, &QAction::triggered, this, [this]() {
|
||||
auto url = MUST(String::formatted(Settings::the()->search_engine().query_url, URL::percent_encode(*m_page_context_menu_search_text)));
|
||||
m_window->new_tab_from_url(URL(url), Web::HTML::ActivateTab::Yes);
|
||||
m_window->new_tab_from_url(URL::URL(url), Web::HTML::ActivateTab::Yes);
|
||||
});
|
||||
|
||||
auto take_screenshot = [this](auto type) {
|
||||
|
@ -733,7 +733,7 @@ void Tab::focus_location_editor()
|
|||
m_location_edit->selectAll();
|
||||
}
|
||||
|
||||
void Tab::navigate(URL const& url)
|
||||
void Tab::navigate(URL::URL const& url)
|
||||
{
|
||||
view().load(url);
|
||||
}
|
||||
|
@ -772,17 +772,17 @@ void Tab::reload()
|
|||
view().load(m_history.current().url.to_byte_string());
|
||||
}
|
||||
|
||||
void Tab::open_link(URL const& url)
|
||||
void Tab::open_link(URL::URL const& url)
|
||||
{
|
||||
view().on_link_click(url, "", 0);
|
||||
}
|
||||
|
||||
void Tab::open_link_in_new_tab(URL const& url)
|
||||
void Tab::open_link_in_new_tab(URL::URL const& url)
|
||||
{
|
||||
view().on_link_click(url, "_blank", 0);
|
||||
}
|
||||
|
||||
void Tab::copy_link_url(URL const& url)
|
||||
void Tab::copy_link_url(URL::URL const& url)
|
||||
{
|
||||
auto* clipboard = QGuiApplication::clipboard();
|
||||
clipboard->setText(qstring_from_ak_string(WebView::url_text_to_copy(url)));
|
||||
|
|
|
@ -33,7 +33,7 @@ public:
|
|||
|
||||
WebContentView& view() { return *m_view; }
|
||||
|
||||
void navigate(URL const&);
|
||||
void navigate(URL::URL const&);
|
||||
void load_html(StringView);
|
||||
|
||||
void back();
|
||||
|
@ -69,9 +69,9 @@ private:
|
|||
void recreate_toolbar_icons();
|
||||
void update_hover_label();
|
||||
|
||||
void open_link(URL const&);
|
||||
void open_link_in_new_tab(URL const&);
|
||||
void copy_link_url(URL const&);
|
||||
void open_link(URL::URL const&);
|
||||
void open_link_in_new_tab(URL::URL const&);
|
||||
void copy_link_url(URL::URL const&);
|
||||
|
||||
void close_sub_widgets();
|
||||
|
||||
|
@ -91,11 +91,11 @@ private:
|
|||
|
||||
QMenu* m_link_context_menu { nullptr };
|
||||
QAction* m_link_context_menu_copy_url_action { nullptr };
|
||||
URL m_link_context_menu_url;
|
||||
URL::URL m_link_context_menu_url;
|
||||
|
||||
QMenu* m_image_context_menu { nullptr };
|
||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
||||
URL m_image_context_menu_url;
|
||||
URL::URL m_image_context_menu_url;
|
||||
|
||||
QMenu* m_audio_context_menu { nullptr };
|
||||
QMenu* m_video_context_menu { nullptr };
|
||||
|
@ -107,7 +107,7 @@ private:
|
|||
QAction* m_media_context_menu_mute_unmute_action { nullptr };
|
||||
QAction* m_media_context_menu_controls_action { nullptr };
|
||||
QAction* m_media_context_menu_loop_action { nullptr };
|
||||
URL m_media_context_menu_url;
|
||||
URL::URL m_media_context_menu_url;
|
||||
|
||||
QMenu* m_select_dropdown { nullptr };
|
||||
|
||||
|
|
|
@ -11,11 +11,11 @@
|
|||
#include <AK/Function.h>
|
||||
#include <AK/HashMap.h>
|
||||
#include <AK/OwnPtr.h>
|
||||
#include <AK/URL.h>
|
||||
#include <Ladybird/Types.h>
|
||||
#include <LibGfx/Forward.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibGfx/StandardCursor.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/Selector.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
|
@ -47,7 +47,7 @@ public:
|
|||
WebContentView(QWidget* window, WebContentOptions const&, StringView webdriver_content_ipc_path, RefPtr<WebView::WebContentClient> parent_client = nullptr, size_t page_index = 0);
|
||||
virtual ~WebContentView() override;
|
||||
|
||||
Function<String(const URL&, Web::HTML::ActivateTab)> on_tab_open_request;
|
||||
Function<String(const URL::URL&, Web::HTML::ActivateTab)> on_tab_open_request;
|
||||
|
||||
virtual void paintEvent(QPaintEvent*) override;
|
||||
virtual void resizeEvent(QResizeEvent*) override;
|
||||
|
|
|
@ -61,7 +61,7 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
Function<void(URL)> on_open_file;
|
||||
Function<void(URL::URL)> on_open_file;
|
||||
|
||||
bool event(QEvent* event) override
|
||||
{
|
||||
|
@ -133,7 +133,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
|
||||
auto cookie_jar = database ? TRY(WebView::CookieJar::create(*database)) : WebView::CookieJar::create();
|
||||
|
||||
Vector<URL> initial_urls;
|
||||
Vector<URL::URL> initial_urls;
|
||||
|
||||
for (auto const& raw_url : raw_urls) {
|
||||
if (auto url = WebView::sanitize_url(raw_url); url.has_value())
|
||||
|
|
|
@ -33,7 +33,7 @@ target_link_libraries(RequestServer PRIVATE requestserver)
|
|||
|
||||
target_include_directories(requestserver PRIVATE ${SERENITY_SOURCE_DIR}/Userland/Services/)
|
||||
target_include_directories(requestserver PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
||||
target_link_libraries(requestserver PUBLIC LibCore LibMain LibCrypto LibFileSystem LibGemini LibHTTP LibIPC LibMain LibTLS LibWebView LibWebSocket)
|
||||
target_link_libraries(requestserver PUBLIC LibCore LibMain LibCrypto LibFileSystem LibGemini LibHTTP LibIPC LibMain LibTLS LibWebView LibWebSocket LibURL)
|
||||
if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
|
||||
# Solaris has socket and networking related functions in two extra libraries
|
||||
target_link_libraries(requestserver PUBLIC nsl socket)
|
||||
|
|
|
@ -81,7 +81,7 @@ endif()
|
|||
target_include_directories(WebContent PRIVATE ${SERENITY_SOURCE_DIR}/Userland/Services/)
|
||||
target_include_directories(WebContent PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||
target_include_directories(WebContent PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
||||
target_link_libraries(WebContent PRIVATE LibAudio LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebSocket LibProtocol LibWebView)
|
||||
target_link_libraries(WebContent PRIVATE LibAudio LibCore LibFileSystem LibGfx LibImageDecoderClient LibIPC LibJS LibMain LibWeb LibWebSocket LibProtocol LibWebView LibURL)
|
||||
|
||||
if (HAVE_PULSEAUDIO)
|
||||
target_compile_definitions(WebContent PRIVATE HAVE_PULSEAUDIO=1)
|
||||
|
|
|
@ -19,7 +19,7 @@ add_library(webworker STATIC ${WEBWORKER_SOURCES})
|
|||
target_include_directories(webworker PRIVATE ${SERENITY_SOURCE_DIR}/Userland/Services/)
|
||||
target_include_directories(webworker PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||
target_include_directories(webworker PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
||||
target_link_libraries(webworker PUBLIC LibCore LibFileSystem LibGfx LibIPC LibJS LibProtocol LibWeb LibWebView LibLocale LibImageDecoderClient LibMain)
|
||||
target_link_libraries(webworker PUBLIC LibCore LibFileSystem LibGfx LibIPC LibJS LibProtocol LibWeb LibWebView LibLocale LibImageDecoderClient LibMain LibURL)
|
||||
|
||||
add_executable(WebWorker main.cpp)
|
||||
target_include_directories(WebWorker PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||
|
|
|
@ -355,6 +355,8 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "BSD$" OR HAIKU)
|
|||
target_link_libraries(AK PRIVATE execinfo)
|
||||
endif()
|
||||
|
||||
add_serenity_subdirectory(Userland/Libraries/LibURL)
|
||||
|
||||
# LibCore
|
||||
add_serenity_subdirectory(Userland/Libraries/LibCore)
|
||||
target_link_libraries(LibCore PRIVATE Threads::Threads)
|
||||
|
@ -370,6 +372,7 @@ if (HAIKU)
|
|||
# Haiku has networking related functions in the network library
|
||||
target_link_libraries(LibCore PRIVATE network)
|
||||
endif()
|
||||
target_link_libraries(LibCore PRIVATE LibURL)
|
||||
|
||||
# LibMain
|
||||
add_serenity_subdirectory(Userland/Libraries/LibMain)
|
||||
|
@ -580,7 +583,7 @@ if (BUILD_LAGOM)
|
|||
add_serenity_subdirectory(Meta/Lagom/Contrib/VideoPlayerSDL)
|
||||
endif()
|
||||
|
||||
lagom_utility(icc SOURCES ../../Userland/Utilities/icc.cpp LIBS LibGfx LibMain)
|
||||
lagom_utility(icc SOURCES ../../Userland/Utilities/icc.cpp LIBS LibGfx LibMain LibURL)
|
||||
lagom_utility(image SOURCES ../../Userland/Utilities/image.cpp LIBS LibGfx LibMain)
|
||||
lagom_utility(isobmff SOURCES ../../Userland/Utilities/isobmff.cpp LIBS LibGfx LibMain)
|
||||
lagom_utility(ttfdisasm SOURCES ../../Userland/Utilities/ttfdisasm.cpp LIBS LibGfx LibMain)
|
||||
|
@ -596,7 +599,7 @@ if (BUILD_LAGOM)
|
|||
endif()
|
||||
|
||||
lagom_utility(lzcat SOURCES ../../Userland/Utilities/lzcat.cpp LIBS LibCompress LibMain)
|
||||
lagom_utility(markdown-check SOURCES ../../Userland/Utilities/markdown-check.cpp LIBS LibFileSystem LibMarkdown LibMain LibManual)
|
||||
lagom_utility(markdown-check SOURCES ../../Userland/Utilities/markdown-check.cpp LIBS LibFileSystem LibMarkdown LibMain LibManual LibURL)
|
||||
lagom_utility(mkfs.fat SOURCES ../../Userland/Utilities/mkfs.fat.cpp LIBS LibFileSystem LibMain)
|
||||
|
||||
if (NOT EMSCRIPTEN)
|
||||
|
@ -626,7 +629,7 @@ if (BUILD_LAGOM)
|
|||
endif()
|
||||
|
||||
lagom_utility(wasm SOURCES ../../Userland/Utilities/wasm.cpp LIBS LibFileSystem LibWasm LibLine LibMain LibJS)
|
||||
lagom_utility(xml SOURCES ../../Userland/Utilities/xml.cpp LIBS LibFileSystem LibMain LibXML)
|
||||
lagom_utility(xml SOURCES ../../Userland/Utilities/xml.cpp LIBS LibFileSystem LibMain LibXML LibURL)
|
||||
lagom_utility(xzcat SOURCES ../../Userland/Utilities/xzcat.cpp LIBS LibCompress LibMain)
|
||||
lagom_utility(fdtdump SOURCES ../../Userland/Utilities/fdtdump.cpp LIBS LibDeviceTree LibMain)
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibGemini/Document.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size)
|
||||
{
|
||||
AK::set_debug_enabled(false);
|
||||
auto string_view = StringView(data, size);
|
||||
auto url = URL(string_view);
|
||||
auto url = URL::URL(string_view);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -130,6 +130,7 @@ set(FUZZER_DEPENDENCIES_TGALoader LibGfx)
|
|||
set(FUZZER_DEPENDENCIES_TIFFLoader LibGfx)
|
||||
set(FUZZER_DEPENDENCIES_TTF LibGfx)
|
||||
set(FUZZER_DEPENDENCIES_TinyVGLoader LibGfx)
|
||||
set(FUZZER_DEPENDENCIES_URL LibURL)
|
||||
set(FUZZER_DEPENDENCIES_VP9Decoder LibVideo)
|
||||
set(FUZZER_DEPENDENCIES_WasmParser LibWasm)
|
||||
set(FUZZER_DEPENDENCIES_WAVLoader LibAudio)
|
||||
|
|
|
@ -84,7 +84,6 @@ set(AK_TEST_SOURCES
|
|||
TestTypeTraits.cpp
|
||||
TestTypedTransfer.cpp
|
||||
TestUFixedBigInt.cpp
|
||||
TestURL.cpp
|
||||
TestUtf16.cpp
|
||||
TestUtf8.cpp
|
||||
TestVariant.cpp
|
||||
|
|
|
@ -25,6 +25,7 @@ add_subdirectory(LibTextCodec)
|
|||
add_subdirectory(LibThreading)
|
||||
add_subdirectory(LibTimeZone)
|
||||
add_subdirectory(LibUnicode)
|
||||
add_subdirectory(LibURL)
|
||||
add_subdirectory(LibVideo)
|
||||
add_subdirectory(LibWasm)
|
||||
add_subdirectory(LibWeb)
|
||||
|
|
7
Tests/LibURL/CMakeLists.txt
Normal file
7
Tests/LibURL/CMakeLists.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
set(URL_TEST_SOURCES
|
||||
TestURL.cpp
|
||||
)
|
||||
|
||||
foreach(source IN LISTS URL_TEST_SOURCES)
|
||||
serenity_test("${source}" LibURL LIBS LibURL)
|
||||
endforeach()
|
|
@ -7,18 +7,18 @@
|
|||
|
||||
#include <LibTest/TestCase.h>
|
||||
|
||||
#include <AK/URL.h>
|
||||
#include <AK/URLParser.h>
|
||||
#include <LibURL/Parser.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
TEST_CASE(construct)
|
||||
{
|
||||
EXPECT_EQ(URL().is_valid(), false);
|
||||
EXPECT_EQ(URL::URL().is_valid(), false);
|
||||
}
|
||||
|
||||
TEST_CASE(basic)
|
||||
{
|
||||
{
|
||||
URL url("http://www.serenityos.org"sv);
|
||||
URL::URL url("http://www.serenityos.org"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "http");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||
|
@ -28,7 +28,7 @@ TEST_CASE(basic)
|
|||
EXPECT(!url.fragment().has_value());
|
||||
}
|
||||
{
|
||||
URL url("https://www.serenityos.org/index.html"sv);
|
||||
URL::URL url("https://www.serenityos.org/index.html"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "https");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||
|
@ -38,7 +38,7 @@ TEST_CASE(basic)
|
|||
EXPECT(!url.fragment().has_value());
|
||||
}
|
||||
{
|
||||
URL url("https://www.serenityos.org1/index.html"sv);
|
||||
URL::URL url("https://www.serenityos.org1/index.html"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "https");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org1");
|
||||
|
@ -48,7 +48,7 @@ TEST_CASE(basic)
|
|||
EXPECT(!url.fragment().has_value());
|
||||
}
|
||||
{
|
||||
URL url("https://localhost:1234/~anon/test/page.html"sv);
|
||||
URL::URL url("https://localhost:1234/~anon/test/page.html"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "https");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "localhost");
|
||||
|
@ -58,7 +58,7 @@ TEST_CASE(basic)
|
|||
EXPECT(!url.fragment().has_value());
|
||||
}
|
||||
{
|
||||
URL url("http://www.serenityos.org/index.html?#"sv);
|
||||
URL::URL url("http://www.serenityos.org/index.html?#"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "http");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||
|
@ -68,7 +68,7 @@ TEST_CASE(basic)
|
|||
EXPECT_EQ(url.fragment(), "");
|
||||
}
|
||||
{
|
||||
URL url("http://www.serenityos.org/index.html?foo=1&bar=2"sv);
|
||||
URL::URL url("http://www.serenityos.org/index.html?foo=1&bar=2"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "http");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||
|
@ -78,7 +78,7 @@ TEST_CASE(basic)
|
|||
EXPECT(!url.fragment().has_value());
|
||||
}
|
||||
{
|
||||
URL url("http://www.serenityos.org/index.html#fragment"sv);
|
||||
URL::URL url("http://www.serenityos.org/index.html#fragment"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "http");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||
|
@ -88,7 +88,7 @@ TEST_CASE(basic)
|
|||
EXPECT_EQ(url.fragment(), "fragment");
|
||||
}
|
||||
{
|
||||
URL url("http://www.serenityos.org/index.html?foo=1&bar=2&baz=/?#frag/ment?test#"sv);
|
||||
URL::URL url("http://www.serenityos.org/index.html?foo=1&bar=2&baz=/?#frag/ment?test#"sv);
|
||||
EXPECT_EQ(url.is_valid(), true);
|
||||
EXPECT_EQ(url.scheme(), "http");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||
|
@ -101,29 +101,29 @@ TEST_CASE(basic)
|
|||
|
||||
TEST_CASE(some_bad_urls)
|
||||
{
|
||||
EXPECT_EQ(URL("http//serenityos.org"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("serenityos.org"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("://serenityos.org"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("://:80"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("http://serenityos.org:80:80/"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("http://serenityos.org:80:80"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("http://serenityos.org:abc"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("http://serenityos.org:abc:80"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL("http://serenityos.org:abc:80/"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http//serenityos.org"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("serenityos.org"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("://serenityos.org"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("://:80"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http://serenityos.org:80:80/"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http://serenityos.org:80:80"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http://serenityos.org:abc"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http://serenityos.org:abc:80"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http://serenityos.org:abc:80/"sv).is_valid(), false);
|
||||
}
|
||||
|
||||
TEST_CASE(serialization)
|
||||
{
|
||||
EXPECT_EQ(URL("http://www.serenityos.org/"sv).serialize(), "http://www.serenityos.org/");
|
||||
EXPECT_EQ(URL("http://www.serenityos.org:0/"sv).serialize(), "http://www.serenityos.org:0/");
|
||||
EXPECT_EQ(URL("http://www.serenityos.org:80/"sv).serialize(), "http://www.serenityos.org/");
|
||||
EXPECT_EQ(URL("http://www.serenityos.org:81/"sv).serialize(), "http://www.serenityos.org:81/");
|
||||
EXPECT_EQ(URL("https://www.serenityos.org:443/foo/bar.html?query#fragment"sv).serialize(), "https://www.serenityos.org/foo/bar.html?query#fragment");
|
||||
EXPECT_EQ(URL::URL("http://www.serenityos.org/"sv).serialize(), "http://www.serenityos.org/");
|
||||
EXPECT_EQ(URL::URL("http://www.serenityos.org:0/"sv).serialize(), "http://www.serenityos.org:0/");
|
||||
EXPECT_EQ(URL::URL("http://www.serenityos.org:80/"sv).serialize(), "http://www.serenityos.org/");
|
||||
EXPECT_EQ(URL::URL("http://www.serenityos.org:81/"sv).serialize(), "http://www.serenityos.org:81/");
|
||||
EXPECT_EQ(URL::URL("https://www.serenityos.org:443/foo/bar.html?query#fragment"sv).serialize(), "https://www.serenityos.org/foo/bar.html?query#fragment");
|
||||
}
|
||||
|
||||
TEST_CASE(file_url_with_hostname)
|
||||
{
|
||||
URL url("file://courage/my/file"sv);
|
||||
URL::URL url("file://courage/my/file"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "file");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "courage");
|
||||
|
@ -136,7 +136,7 @@ TEST_CASE(file_url_with_hostname)
|
|||
|
||||
TEST_CASE(file_url_with_localhost)
|
||||
{
|
||||
URL url("file://localhost/my/file"sv);
|
||||
URL::URL url("file://localhost/my/file"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "file");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "");
|
||||
|
@ -146,7 +146,7 @@ TEST_CASE(file_url_with_localhost)
|
|||
|
||||
TEST_CASE(file_url_without_hostname)
|
||||
{
|
||||
URL url("file:///my/file"sv);
|
||||
URL::URL url("file:///my/file"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "file");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "");
|
||||
|
@ -156,7 +156,7 @@ TEST_CASE(file_url_without_hostname)
|
|||
|
||||
TEST_CASE(file_url_with_encoded_characters)
|
||||
{
|
||||
URL url("file:///my/file/test%23file.txt"sv);
|
||||
URL::URL url("file:///my/file/test%23file.txt"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "file");
|
||||
EXPECT_EQ(url.serialize_path(), "/my/file/test#file.txt");
|
||||
|
@ -166,7 +166,7 @@ TEST_CASE(file_url_with_encoded_characters)
|
|||
|
||||
TEST_CASE(file_url_with_fragment)
|
||||
{
|
||||
URL url("file:///my/file#fragment"sv);
|
||||
URL::URL url("file:///my/file#fragment"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "file");
|
||||
EXPECT_EQ(url.serialize_path(), "/my/file");
|
||||
|
@ -176,7 +176,7 @@ TEST_CASE(file_url_with_fragment)
|
|||
|
||||
TEST_CASE(file_url_with_root_path)
|
||||
{
|
||||
URL url("file:///"sv);
|
||||
URL::URL url("file:///"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "file");
|
||||
EXPECT_EQ(url.serialize_path(), "/");
|
||||
|
@ -184,23 +184,23 @@ TEST_CASE(file_url_with_root_path)
|
|||
|
||||
TEST_CASE(file_url_serialization)
|
||||
{
|
||||
EXPECT_EQ(URL("file://courage/my/file"sv).serialize(), "file://courage/my/file");
|
||||
EXPECT_EQ(URL("file://localhost/my/file"sv).serialize(), "file:///my/file");
|
||||
EXPECT_EQ(URL("file:///my/file"sv).serialize(), "file:///my/file");
|
||||
EXPECT_EQ(URL("file:///my/directory/"sv).serialize(), "file:///my/directory/");
|
||||
EXPECT_EQ(URL("file:///my/file%23test"sv).serialize(), "file:///my/file%23test");
|
||||
EXPECT_EQ(URL("file:///my/file#fragment"sv).serialize(), "file:///my/file#fragment");
|
||||
EXPECT_EQ(URL::URL("file://courage/my/file"sv).serialize(), "file://courage/my/file");
|
||||
EXPECT_EQ(URL::URL("file://localhost/my/file"sv).serialize(), "file:///my/file");
|
||||
EXPECT_EQ(URL::URL("file:///my/file"sv).serialize(), "file:///my/file");
|
||||
EXPECT_EQ(URL::URL("file:///my/directory/"sv).serialize(), "file:///my/directory/");
|
||||
EXPECT_EQ(URL::URL("file:///my/file%23test"sv).serialize(), "file:///my/file%23test");
|
||||
EXPECT_EQ(URL::URL("file:///my/file#fragment"sv).serialize(), "file:///my/file#fragment");
|
||||
}
|
||||
|
||||
TEST_CASE(file_url_relative)
|
||||
{
|
||||
EXPECT_EQ(URL("https://vkoskiv.com/index.html"sv).complete_url("/static/foo.js"sv).serialize(), "https://vkoskiv.com/static/foo.js");
|
||||
EXPECT_EQ(URL("file:///home/vkoskiv/test/index.html"sv).complete_url("/static/foo.js"sv).serialize(), "file:///home/vkoskiv/test/static/foo.js");
|
||||
EXPECT_EQ(URL::URL("https://vkoskiv.com/index.html"sv).complete_url("/static/foo.js"sv).serialize(), "https://vkoskiv.com/static/foo.js");
|
||||
EXPECT_EQ(URL::URL("file:///home/vkoskiv/test/index.html"sv).complete_url("/static/foo.js"sv).serialize(), "file:///home/vkoskiv/test/static/foo.js");
|
||||
}
|
||||
|
||||
TEST_CASE(about_url)
|
||||
{
|
||||
URL url("about:blank"sv);
|
||||
URL::URL url("about:blank"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "about");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -212,7 +212,7 @@ TEST_CASE(about_url)
|
|||
|
||||
TEST_CASE(mailto_url)
|
||||
{
|
||||
URL url("mailto:mail@example.com"sv);
|
||||
URL::URL url("mailto:mail@example.com"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "mailto");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -226,7 +226,7 @@ TEST_CASE(mailto_url)
|
|||
|
||||
TEST_CASE(mailto_url_with_subject)
|
||||
{
|
||||
URL url("mailto:mail@example.com?subject=test"sv);
|
||||
URL::URL url("mailto:mail@example.com?subject=test"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "mailto");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -240,7 +240,7 @@ TEST_CASE(mailto_url_with_subject)
|
|||
|
||||
TEST_CASE(data_url)
|
||||
{
|
||||
URL url("data:text/html,test"sv);
|
||||
URL::URL url("data:text/html,test"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -253,7 +253,7 @@ TEST_CASE(data_url)
|
|||
|
||||
TEST_CASE(data_url_default_mime_type)
|
||||
{
|
||||
URL url("data:,test"sv);
|
||||
URL::URL url("data:,test"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -266,7 +266,7 @@ TEST_CASE(data_url_default_mime_type)
|
|||
|
||||
TEST_CASE(data_url_encoded)
|
||||
{
|
||||
URL url("data:text/html,Hello%20friends%2C%0X%X0"sv);
|
||||
URL::URL url("data:text/html,Hello%20friends%2C%0X%X0"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -279,7 +279,7 @@ TEST_CASE(data_url_encoded)
|
|||
|
||||
TEST_CASE(data_url_base64_encoded)
|
||||
{
|
||||
URL url("data:text/html;base64,dGVzdA=="sv);
|
||||
URL::URL url("data:text/html;base64,dGVzdA=="sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -292,7 +292,7 @@ TEST_CASE(data_url_base64_encoded)
|
|||
|
||||
TEST_CASE(data_url_base64_encoded_default_mime_type)
|
||||
{
|
||||
URL url("data:;base64,dGVzdA=="sv);
|
||||
URL::URL url("data:;base64,dGVzdA=="sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -305,7 +305,7 @@ TEST_CASE(data_url_base64_encoded_default_mime_type)
|
|||
|
||||
TEST_CASE(data_url_base64_encoded_with_whitespace)
|
||||
{
|
||||
URL url("data: text/html ; bAsE64 , dGVz dA== "sv);
|
||||
URL::URL url("data: text/html ; bAsE64 , dGVz dA== "sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -318,7 +318,7 @@ TEST_CASE(data_url_base64_encoded_with_whitespace)
|
|||
|
||||
TEST_CASE(data_url_base64_encoded_with_inline_whitespace)
|
||||
{
|
||||
URL url("data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20"sv);
|
||||
URL::URL url("data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(url.host().has<Empty>());
|
||||
|
@ -330,7 +330,7 @@ TEST_CASE(data_url_base64_encoded_with_inline_whitespace)
|
|||
|
||||
TEST_CASE(data_url_completed_with_fragment)
|
||||
{
|
||||
auto url = URL("data:text/plain,test"sv).complete_url("#a"sv);
|
||||
auto url = URL::URL("data:text/plain,test"sv).complete_url("#a"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT_EQ(url.fragment(), "a");
|
||||
|
@ -343,29 +343,29 @@ TEST_CASE(data_url_completed_with_fragment)
|
|||
|
||||
TEST_CASE(trailing_slash_with_complete_url)
|
||||
{
|
||||
EXPECT_EQ(URL("http://a/b/"sv).complete_url("c/"sv).serialize(), "http://a/b/c/");
|
||||
EXPECT_EQ(URL("http://a/b/"sv).complete_url("c"sv).serialize(), "http://a/b/c");
|
||||
EXPECT_EQ(URL("http://a/b"sv).complete_url("c/"sv).serialize(), "http://a/c/");
|
||||
EXPECT_EQ(URL("http://a/b"sv).complete_url("c"sv).serialize(), "http://a/c");
|
||||
EXPECT_EQ(URL::URL("http://a/b/"sv).complete_url("c/"sv).serialize(), "http://a/b/c/");
|
||||
EXPECT_EQ(URL::URL("http://a/b/"sv).complete_url("c"sv).serialize(), "http://a/b/c");
|
||||
EXPECT_EQ(URL::URL("http://a/b"sv).complete_url("c/"sv).serialize(), "http://a/c/");
|
||||
EXPECT_EQ(URL::URL("http://a/b"sv).complete_url("c"sv).serialize(), "http://a/c");
|
||||
}
|
||||
|
||||
TEST_CASE(trailing_port)
|
||||
{
|
||||
URL url("http://example.com:8086"sv);
|
||||
URL::URL url("http://example.com:8086"sv);
|
||||
EXPECT_EQ(url.port_or_default(), 8086);
|
||||
}
|
||||
|
||||
TEST_CASE(port_overflow)
|
||||
{
|
||||
EXPECT_EQ(URL("http://example.com:123456789/"sv).is_valid(), false);
|
||||
EXPECT_EQ(URL::URL("http://example.com:123456789/"sv).is_valid(), false);
|
||||
}
|
||||
|
||||
TEST_CASE(equality)
|
||||
{
|
||||
EXPECT(URL("http://serenityos.org"sv).equals("http://serenityos.org#test"sv, URL::ExcludeFragment::Yes));
|
||||
EXPECT_EQ(URL("http://example.com/index.html"sv), URL("http://ex%61mple.com/index.html"sv));
|
||||
EXPECT_EQ(URL("file:///my/file"sv), URL("file://localhost/my/file"sv));
|
||||
EXPECT_NE(URL("http://serenityos.org/index.html"sv), URL("http://serenityos.org/test.html"sv));
|
||||
EXPECT(URL::URL("http://serenityos.org"sv).equals("http://serenityos.org#test"sv, URL::ExcludeFragment::Yes));
|
||||
EXPECT_EQ(URL::URL("http://example.com/index.html"sv), URL::URL("http://ex%61mple.com/index.html"sv));
|
||||
EXPECT_EQ(URL::URL("file:///my/file"sv), URL::URL("file://localhost/my/file"sv));
|
||||
EXPECT_NE(URL::URL("http://serenityos.org/index.html"sv), URL::URL("http://serenityos.org/test.html"sv));
|
||||
}
|
||||
|
||||
TEST_CASE(create_with_file_scheme)
|
||||
|
@ -390,14 +390,14 @@ TEST_CASE(create_with_file_scheme)
|
|||
EXPECT_EQ(url.path_segment_at_index(2), "");
|
||||
EXPECT_EQ(url.serialize_path(), "/home/anon/");
|
||||
|
||||
url = URL("file:///home/anon/"sv);
|
||||
url = URL::URL("file:///home/anon/"sv);
|
||||
EXPECT_EQ(url.serialize_path(), "/home/anon/");
|
||||
}
|
||||
|
||||
TEST_CASE(complete_url)
|
||||
{
|
||||
URL base_url("http://serenityos.org/index.html#fragment"sv);
|
||||
URL url = base_url.complete_url("test.html"sv);
|
||||
URL::URL base_url("http://serenityos.org/index.html#fragment"sv);
|
||||
URL::URL url = base_url.complete_url("test.html"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "http");
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "serenityos.org");
|
||||
|
@ -410,28 +410,28 @@ TEST_CASE(complete_url)
|
|||
|
||||
TEST_CASE(leading_whitespace)
|
||||
{
|
||||
URL url { " https://foo.com/"sv };
|
||||
URL::URL url { " https://foo.com/"sv };
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
||||
}
|
||||
|
||||
TEST_CASE(trailing_whitespace)
|
||||
{
|
||||
URL url { "https://foo.com/ "sv };
|
||||
URL::URL url { "https://foo.com/ "sv };
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
||||
}
|
||||
|
||||
TEST_CASE(leading_and_trailing_whitespace)
|
||||
{
|
||||
URL url { " https://foo.com/ "sv };
|
||||
URL::URL url { " https://foo.com/ "sv };
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
||||
}
|
||||
|
||||
TEST_CASE(unicode)
|
||||
{
|
||||
URL url { "http://example.com/_ünicöde_téxt_©"sv };
|
||||
URL::URL url { "http://example.com/_ünicöde_téxt_©"sv };
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.serialize_path(), "/_ünicöde_téxt_©");
|
||||
EXPECT(!url.query().has_value());
|
||||
|
@ -440,7 +440,7 @@ TEST_CASE(unicode)
|
|||
|
||||
TEST_CASE(query_with_non_ascii)
|
||||
{
|
||||
URL url { "http://example.com/?utf8=✓"sv };
|
||||
URL::URL url { "http://example.com/?utf8=✓"sv };
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.serialize_path(), "/"sv);
|
||||
EXPECT_EQ(url.query(), "utf8=%E2%9C%93");
|
||||
|
@ -449,7 +449,7 @@ TEST_CASE(query_with_non_ascii)
|
|||
|
||||
TEST_CASE(complete_file_url_with_base)
|
||||
{
|
||||
URL url { "file:///home/index.html" };
|
||||
URL::URL url { "file:///home/index.html" };
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.serialize_path(), "/home/index.html");
|
||||
EXPECT_EQ(url.path_segment_count(), 2u);
|
||||
|
@ -463,8 +463,8 @@ TEST_CASE(complete_file_url_with_base)
|
|||
|
||||
TEST_CASE(empty_url_with_base_url)
|
||||
{
|
||||
URL base_url { "https://foo.com/"sv };
|
||||
URL parsed_url = URLParser::basic_parse(""sv, base_url);
|
||||
URL::URL base_url { "https://foo.com/"sv };
|
||||
URL::URL parsed_url = URL::Parser::basic_parse(""sv, base_url);
|
||||
EXPECT_EQ(parsed_url.is_valid(), true);
|
||||
EXPECT(base_url.equals(parsed_url));
|
||||
}
|
||||
|
@ -472,7 +472,7 @@ TEST_CASE(empty_url_with_base_url)
|
|||
TEST_CASE(google_street_view)
|
||||
{
|
||||
constexpr auto streetview_url = "https://www.google.co.uk/maps/@53.3354159,-1.9573545,3a,75y,121.1h,75.67t/data=!3m7!1e1!3m5!1sSY8xCv17jAX4S7SRdV38hg!2e0!6shttps:%2F%2Fstreetviewpixels-pa.googleapis.com%2Fv1%2Fthumbnail%3Fpanoid%3DSY8xCv17jAX4S7SRdV38hg%26cb_client%3Dmaps_sv.tactile.gps%26w%3D203%26h%3D100%26yaw%3D188.13148%26pitch%3D0%26thumbfov%3D100!7i13312!8i6656";
|
||||
URL url(streetview_url);
|
||||
URL::URL url(streetview_url);
|
||||
EXPECT_EQ(url.serialize(), streetview_url);
|
||||
}
|
||||
|
||||
|
@ -480,7 +480,7 @@ TEST_CASE(ipv6_address)
|
|||
{
|
||||
{
|
||||
constexpr auto ipv6_url = "http://[::1]/index.html"sv;
|
||||
URL url(ipv6_url);
|
||||
URL::URL url(ipv6_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "[::1]"sv);
|
||||
EXPECT_EQ(url, ipv6_url);
|
||||
|
@ -488,7 +488,7 @@ TEST_CASE(ipv6_address)
|
|||
|
||||
{
|
||||
constexpr auto ipv6_url = "http://[0:f:0:0:f:f:0:0]/index.html"sv;
|
||||
URL url(ipv6_url);
|
||||
URL::URL url(ipv6_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "[0:f::f:f:0:0]"sv);
|
||||
EXPECT_EQ(url, ipv6_url);
|
||||
|
@ -496,7 +496,7 @@ TEST_CASE(ipv6_address)
|
|||
|
||||
{
|
||||
constexpr auto ipv6_url = "https://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]/index.html"sv;
|
||||
URL url(ipv6_url);
|
||||
URL::URL url(ipv6_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "[2001:db8:85a3::8a2e:370:7334]"sv);
|
||||
EXPECT_EQ(url, ipv6_url);
|
||||
|
@ -504,7 +504,7 @@ TEST_CASE(ipv6_address)
|
|||
|
||||
{
|
||||
constexpr auto bad_ipv6_url = "https://[oops]/index.html"sv;
|
||||
URL url(bad_ipv6_url);
|
||||
URL::URL url(bad_ipv6_url);
|
||||
EXPECT_EQ(url.is_valid(), false);
|
||||
}
|
||||
}
|
||||
|
@ -513,41 +513,41 @@ TEST_CASE(ipv4_address)
|
|||
{
|
||||
{
|
||||
constexpr auto ipv4_url = "http://127.0.0.1/index.html"sv;
|
||||
URL url(ipv4_url);
|
||||
URL::URL url(ipv4_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "127.0.0.1"sv);
|
||||
}
|
||||
|
||||
{
|
||||
constexpr auto ipv4_url = "http://0x.0x.0"sv;
|
||||
URL url(ipv4_url);
|
||||
URL::URL url(ipv4_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "0.0.0.0"sv);
|
||||
}
|
||||
|
||||
{
|
||||
constexpr auto bad_ipv4_url = "https://127..0.0.1"sv;
|
||||
URL url(bad_ipv4_url);
|
||||
URL::URL url(bad_ipv4_url);
|
||||
EXPECT(!url.is_valid());
|
||||
}
|
||||
|
||||
{
|
||||
constexpr auto ipv4_url = "http://256"sv;
|
||||
URL url(ipv4_url);
|
||||
URL::URL url(ipv4_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "0.0.1.0"sv);
|
||||
}
|
||||
|
||||
{
|
||||
constexpr auto ipv4_url = "http://888888888"sv;
|
||||
URL url(ipv4_url);
|
||||
URL::URL url(ipv4_url);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "52.251.94.56"sv);
|
||||
}
|
||||
|
||||
{
|
||||
constexpr auto ipv4_url = "http://9111111111"sv;
|
||||
URL url(ipv4_url);
|
||||
URL::URL url(ipv4_url);
|
||||
EXPECT(!url.is_valid());
|
||||
}
|
||||
}
|
||||
|
@ -556,7 +556,7 @@ TEST_CASE(username_and_password)
|
|||
{
|
||||
{
|
||||
constexpr auto url_with_username_and_password = "http://username:password@test.com/index.html"sv;
|
||||
URL url(url_with_username_and_password);
|
||||
URL::URL url(url_with_username_and_password);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||
EXPECT_EQ(MUST(url.username()), "username"sv);
|
||||
|
@ -565,7 +565,7 @@ TEST_CASE(username_and_password)
|
|||
|
||||
{
|
||||
constexpr auto url_with_percent_encoded_credentials = "http://username%21%24%25:password%21%24%25@test.com/index.html"sv;
|
||||
URL url(url_with_percent_encoded_credentials);
|
||||
URL::URL url(url_with_percent_encoded_credentials);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||
EXPECT_EQ(MUST(url.username()), "username!$%"sv);
|
||||
|
@ -575,7 +575,7 @@ TEST_CASE(username_and_password)
|
|||
{
|
||||
auto const& username = MUST(String::repeated('a', 50000));
|
||||
auto const& url_with_long_username = MUST(String::formatted("http://{}:@test.com/index.html", username));
|
||||
URL url(url_with_long_username);
|
||||
URL::URL url(url_with_long_username);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||
EXPECT_EQ(MUST(url.username()), username);
|
||||
|
@ -585,7 +585,7 @@ TEST_CASE(username_and_password)
|
|||
{
|
||||
auto const& password = MUST(String::repeated('a', 50000));
|
||||
auto const& url_with_long_password = MUST(String::formatted("http://:{}@test.com/index.html", password));
|
||||
URL url(url_with_long_password);
|
||||
URL::URL url(url_with_long_password);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||
EXPECT(MUST(url.username()).is_empty());
|
|
@ -3,5 +3,5 @@ set(TEST_SOURCES
|
|||
)
|
||||
|
||||
foreach(source IN LISTS TEST_SOURCES)
|
||||
serenity_test("${source}" LibWebView LIBS LibWebView)
|
||||
serenity_test("${source}" LibWebView LIBS LibWebView LibURL)
|
||||
endforeach()
|
||||
|
|
|
@ -12,4 +12,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(3DFileViewer ICON app-3d-file-viewer)
|
||||
target_link_libraries(3DFileViewer PRIVATE LibCore LibDesktop LibGfx LibGUI LibGL LibFileSystemAccessClient LibMain)
|
||||
target_link_libraries(3DFileViewer PRIVATE LibCore LibDesktop LibGfx LibGUI LibGL LibFileSystemAccessClient LibMain LibURL)
|
||||
|
|
|
@ -10,4 +10,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Assistant ICON app-assistant)
|
||||
target_link_libraries(Assistant PRIVATE LibCore LibDesktop LibGfx LibGUI LibJS LibMain LibThreading)
|
||||
target_link_libraries(Assistant PRIVATE LibCore LibDesktop LibGfx LibGUI LibJS LibMain LibThreading LibURL)
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include <AK/BinaryHeap.h>
|
||||
#include <AK/FuzzyMatch.h>
|
||||
#include <AK/LexicalPath.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/Directory.h>
|
||||
#include <LibCore/ElapsedTimer.h>
|
||||
#include <LibCore/StandardPaths.h>
|
||||
|
@ -20,6 +19,7 @@
|
|||
#include <LibJS/Runtime/GlobalObject.h>
|
||||
#include <LibJS/Runtime/ValueInlines.h>
|
||||
#include <LibJS/Script.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <serenity.h>
|
||||
|
@ -261,7 +261,7 @@ void URLProvider::query(ByteString const& query, Function<void(Vector<NonnullRef
|
|||
if (query.is_empty() || query.starts_with('=') || query.starts_with('$'))
|
||||
return;
|
||||
|
||||
URL url = URL(query);
|
||||
URL::URL url = URL::URL(query);
|
||||
|
||||
if (url.scheme().is_empty())
|
||||
url.set_scheme("http"_string);
|
||||
|
|
|
@ -8,12 +8,12 @@
|
|||
|
||||
#include <AK/ByteString.h>
|
||||
#include <AK/Queue.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibDesktop/AppFile.h>
|
||||
#include <LibGUI/Desktop.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibJS/Runtime/VM.h>
|
||||
#include <LibThreading/BackgroundAction.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <typeinfo>
|
||||
|
||||
namespace Assistant {
|
||||
|
@ -118,7 +118,7 @@ private:
|
|||
|
||||
class URLResult final : public Result {
|
||||
public:
|
||||
explicit URLResult(const URL& url)
|
||||
explicit URLResult(const URL::URL& url)
|
||||
: Result(url.to_byte_string(), "Open URL in Browser"_string, 50)
|
||||
, m_bitmap(GUI::Icon::default_icon("app-browser"sv).bitmap_for_size(16))
|
||||
{
|
||||
|
|
|
@ -50,7 +50,7 @@ static ByteString bookmarks_file_path()
|
|||
return builder.to_byte_string();
|
||||
}
|
||||
|
||||
BrowserWindow::BrowserWindow(WebView::CookieJar& cookie_jar, Vector<URL> const& initial_urls, StringView const man_file)
|
||||
BrowserWindow::BrowserWindow(WebView::CookieJar& cookie_jar, Vector<URL::URL> const& initial_urls, StringView const man_file)
|
||||
: m_cookie_jar(cookie_jar)
|
||||
, m_window_actions(*this)
|
||||
{
|
||||
|
@ -278,7 +278,7 @@ void BrowserWindow::build_menus(StringView const man_file)
|
|||
"Set Homepage URL...", g_icon_bag.go_home, [this](auto&) {
|
||||
String homepage_url = String::from_byte_string(Config::read_string("Browser"sv, "Preferences"sv, "Home"sv, Browser::default_homepage_url)).release_value_but_fixme_should_propagate_errors();
|
||||
if (GUI::InputBox::show(this, homepage_url, "Enter a URL:"sv, "Change Homepage"sv) == GUI::InputBox::ExecResult::OK) {
|
||||
if (URL(homepage_url).is_valid()) {
|
||||
if (URL::URL(homepage_url).is_valid()) {
|
||||
Config::write_string("Browser"sv, "Preferences"sv, "Home"sv, homepage_url);
|
||||
Browser::g_home_url = homepage_url.to_byte_string();
|
||||
} else {
|
||||
|
@ -531,7 +531,7 @@ void BrowserWindow::set_window_title_for_tab(Tab const& tab)
|
|||
set_title(ByteString::formatted("{} - Ladybird", title.is_empty() ? url.to_byte_string() : title));
|
||||
}
|
||||
|
||||
Tab& BrowserWindow::create_new_tab(URL const& url, Web::HTML::ActivateTab activate)
|
||||
Tab& BrowserWindow::create_new_tab(URL::URL const& url, Web::HTML::ActivateTab activate)
|
||||
{
|
||||
auto& new_tab = m_tab_widget->add_tab<Browser::Tab>("New tab"_string, *this);
|
||||
|
||||
|
@ -618,7 +618,7 @@ Tab& BrowserWindow::create_new_tab(URL const& url, Web::HTML::ActivateTab activa
|
|||
return new_tab;
|
||||
}
|
||||
|
||||
void BrowserWindow::create_new_window(URL const& url)
|
||||
void BrowserWindow::create_new_window(URL::URL const& url)
|
||||
{
|
||||
GUI::Process::spawn_or_show_error(this, "/bin/Browser"sv, Array { url.to_byte_string() });
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@ public:
|
|||
|
||||
GUI::TabWidget& tab_widget();
|
||||
Tab& active_tab();
|
||||
Tab& create_new_tab(URL const&, Web::HTML::ActivateTab activate);
|
||||
void create_new_window(URL const&);
|
||||
Tab& create_new_tab(URL::URL const&, Web::HTML::ActivateTab activate);
|
||||
void create_new_window(URL::URL const&);
|
||||
|
||||
GUI::Action& go_back_action() { return *m_go_back_action; }
|
||||
GUI::Action& go_forward_action() { return *m_go_forward_action; }
|
||||
|
@ -51,7 +51,7 @@ public:
|
|||
void broadcast_window_size(Gfx::IntSize);
|
||||
|
||||
private:
|
||||
BrowserWindow(WebView::CookieJar&, Vector<URL> const&, StringView const);
|
||||
BrowserWindow(WebView::CookieJar&, Vector<URL::URL> const&, StringView const);
|
||||
|
||||
void build_menus(StringView const);
|
||||
ErrorOr<void> load_search_engines(GUI::Menu& settings_menu);
|
||||
|
|
|
@ -37,5 +37,5 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Browser ICON app-browser)
|
||||
target_link_libraries(Browser PRIVATE LibCore LibWebView LibWeb LibProtocol LibGUI LibDesktop LibConfig LibGfx LibIPC LibJS LibLocale LibMain LibSyntax)
|
||||
target_link_libraries(Browser PRIVATE LibCore LibWebView LibWeb LibProtocol LibGUI LibDesktop LibConfig LibGfx LibIPC LibJS LibLocale LibMain LibSyntax LibURL)
|
||||
link_with_locale_data(Browser)
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
namespace Browser {
|
||||
|
||||
DownloadWidget::DownloadWidget(const URL& url)
|
||||
DownloadWidget::DownloadWidget(const URL::URL& url)
|
||||
: m_url(url)
|
||||
{
|
||||
{
|
||||
|
|
|
@ -7,11 +7,11 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/ElapsedTimer.h>
|
||||
#include <LibGUI/ImageWidget.h>
|
||||
#include <LibGUI/Progressbar.h>
|
||||
#include <LibGUI/Widget.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/Loader/ResourceLoader.h>
|
||||
|
||||
namespace Browser {
|
||||
|
@ -23,12 +23,12 @@ public:
|
|||
virtual ~DownloadWidget() override = default;
|
||||
|
||||
private:
|
||||
explicit DownloadWidget(const URL&);
|
||||
explicit DownloadWidget(const URL::URL&);
|
||||
|
||||
void did_progress(Optional<u64> total_size, u64 downloaded_size);
|
||||
void did_finish(bool success);
|
||||
|
||||
URL m_url;
|
||||
URL::URL m_url;
|
||||
ByteString m_destination_path;
|
||||
RefPtr<Web::ResourceLoaderConnectorRequest> m_download;
|
||||
RefPtr<GUI::Progressbar> m_progressbar;
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
#include "InspectorWidget.h"
|
||||
#include "StorageWidget.h"
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/URL.h>
|
||||
#include <Applications/Browser/TabGML.h>
|
||||
#include <Applications/Browser/URLBox.h>
|
||||
#include <Applications/BrowserSettings/Defaults.h>
|
||||
|
@ -42,6 +41,7 @@
|
|||
#include <LibGUI/Toolbar.h>
|
||||
#include <LibGUI/ToolbarContainer.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/HTML/BrowsingContext.h>
|
||||
#include <LibWeb/HTML/SelectedFile.h>
|
||||
#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
|
||||
|
@ -59,7 +59,7 @@ Tab::~Tab()
|
|||
close_sub_widgets();
|
||||
}
|
||||
|
||||
void Tab::start_download(const URL& url)
|
||||
void Tab::start_download(const URL::URL& url)
|
||||
{
|
||||
auto window = GUI::Window::construct(&this->window());
|
||||
window->resize(300, 170);
|
||||
|
@ -69,7 +69,7 @@ void Tab::start_download(const URL& url)
|
|||
window->show();
|
||||
}
|
||||
|
||||
void Tab::view_source(const URL& url, ByteString const& source)
|
||||
void Tab::view_source(const URL::URL& url, ByteString const& source)
|
||||
{
|
||||
auto window = GUI::Window::construct(&this->window());
|
||||
auto editor = window->set_main_widget<GUI::TextEditor>();
|
||||
|
@ -654,7 +654,7 @@ Tab::Tab(BrowserWindow& window)
|
|||
|
||||
view().on_new_web_view = [this](auto activate_tab, auto, auto) {
|
||||
// FIXME: Create a child tab that re-uses the ConnectionFromClient of the parent tab
|
||||
auto& tab = this->window().create_new_tab(URL("about:blank"), activate_tab);
|
||||
auto& tab = this->window().create_new_tab(URL::URL("about:blank"), activate_tab);
|
||||
return tab.view().handle();
|
||||
};
|
||||
|
||||
|
@ -799,14 +799,14 @@ void Tab::update_reset_zoom_button()
|
|||
}
|
||||
}
|
||||
|
||||
void Tab::load(URL const& url, LoadType load_type)
|
||||
void Tab::load(URL::URL const& url, LoadType load_type)
|
||||
{
|
||||
m_is_history_navigation = (load_type == LoadType::HistoryNavigation);
|
||||
m_web_content_view->load(url);
|
||||
m_location_box->set_focus(false);
|
||||
}
|
||||
|
||||
URL Tab::url() const
|
||||
URL::URL Tab::url() const
|
||||
{
|
||||
return m_web_content_view->url();
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibGUI/ActionGroup.h>
|
||||
#include <LibGUI/Widget.h>
|
||||
#include <LibGfx/ShareableBitmap.h>
|
||||
#include <LibHTTP/Job.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWebView/History.h>
|
||||
#include <LibWebView/ViewImplementation.h>
|
||||
|
@ -38,14 +38,14 @@ class Tab final : public GUI::Widget {
|
|||
public:
|
||||
virtual ~Tab() override;
|
||||
|
||||
URL url() const;
|
||||
URL::URL url() const;
|
||||
|
||||
enum class LoadType {
|
||||
Normal,
|
||||
HistoryNavigation,
|
||||
};
|
||||
|
||||
void load(URL const&, LoadType = LoadType::Normal);
|
||||
void load(URL::URL const&, LoadType = LoadType::Normal);
|
||||
|
||||
void reload();
|
||||
void go_back(int steps = 1);
|
||||
|
@ -64,11 +64,11 @@ public:
|
|||
void window_size_changed(Gfx::IntSize);
|
||||
|
||||
Function<void(ByteString const&)> on_title_change;
|
||||
Function<void(const URL&)> on_tab_open_request;
|
||||
Function<void(const URL::URL&)> on_tab_open_request;
|
||||
Function<void(Tab&)> on_activate_tab_request;
|
||||
Function<void(Tab&)> on_tab_close_request;
|
||||
Function<void(Tab&)> on_tab_close_other_request;
|
||||
Function<void(const URL&)> on_window_open_request;
|
||||
Function<void(const URL::URL&)> on_window_open_request;
|
||||
Function<void(Gfx::Bitmap const&)> on_favicon_change;
|
||||
Function<Vector<Web::Cookie::Cookie>()> on_get_cookies_entries;
|
||||
Function<OrderedHashMap<String, String>()> on_get_local_storage_entries;
|
||||
|
@ -104,8 +104,8 @@ private:
|
|||
void update_actions();
|
||||
ErrorOr<void> bookmark_current_url();
|
||||
void update_bookmark_button(StringView url);
|
||||
void start_download(const URL& url);
|
||||
void view_source(const URL& url, ByteString const& source);
|
||||
void start_download(const URL::URL& url);
|
||||
void view_source(const URL::URL& url, ByteString const& source);
|
||||
void update_status(Optional<String> text_override = {}, i32 count_waiting = 0);
|
||||
void close_sub_widgets();
|
||||
|
||||
|
@ -129,11 +129,11 @@ private:
|
|||
RefPtr<GUI::Menu> m_link_context_menu;
|
||||
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
||||
RefPtr<GUI::Action> m_link_copy_action;
|
||||
URL m_link_context_menu_url;
|
||||
URL::URL m_link_context_menu_url;
|
||||
|
||||
RefPtr<GUI::Menu> m_image_context_menu;
|
||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
||||
URL m_image_context_menu_url;
|
||||
URL::URL m_image_context_menu_url;
|
||||
|
||||
RefPtr<GUI::Menu> m_audio_context_menu;
|
||||
RefPtr<GUI::Menu> m_video_context_menu;
|
||||
|
@ -141,7 +141,7 @@ private:
|
|||
RefPtr<GUI::Action> m_media_context_menu_mute_unmute_action;
|
||||
RefPtr<GUI::Action> m_media_context_menu_controls_action;
|
||||
RefPtr<GUI::Action> m_media_context_menu_loop_action;
|
||||
URL m_media_context_menu_url;
|
||||
URL::URL m_media_context_menu_url;
|
||||
|
||||
RefPtr<GUI::Menu> m_tab_context_menu;
|
||||
|
||||
|
@ -157,7 +157,7 @@ private:
|
|||
ByteString m_title;
|
||||
RefPtr<Gfx::Bitmap const> m_icon;
|
||||
|
||||
Optional<URL> m_navigating_url;
|
||||
Optional<URL::URL> m_navigating_url;
|
||||
|
||||
bool m_loaded { false };
|
||||
bool m_is_history_navigation { false };
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <AK/URL.h>
|
||||
#include <Applications/Browser/URLBox.h>
|
||||
#include <LibGfx/Palette.h>
|
||||
#include <LibGfx/TextAttributes.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWebView/URL.h>
|
||||
|
||||
namespace Browser {
|
||||
|
|
|
@ -164,7 +164,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
}
|
||||
}
|
||||
|
||||
Vector<URL> initial_urls;
|
||||
Vector<URL::URL> initial_urls;
|
||||
|
||||
for (auto specified_url : specified_urls) {
|
||||
if (auto url = WebView::sanitize_url(specified_url); url.has_value())
|
||||
|
|
|
@ -197,7 +197,7 @@ void BrowserSettingsWidget::set_search_engine_url(StringView url)
|
|||
void BrowserSettingsWidget::apply_settings()
|
||||
{
|
||||
auto homepage_url = m_homepage_url_textbox->text();
|
||||
if (!URL(homepage_url).is_valid()) {
|
||||
if (!URL::URL(homepage_url).is_valid()) {
|
||||
GUI::MessageBox::show_error(this->window(), "The homepage URL you have entered is not valid"sv);
|
||||
m_homepage_url_textbox->select_all();
|
||||
m_homepage_url_textbox->set_focus(true);
|
||||
|
@ -206,7 +206,7 @@ void BrowserSettingsWidget::apply_settings()
|
|||
Config::write_string("Browser"sv, "Preferences"sv, "Home"sv, homepage_url);
|
||||
|
||||
auto new_tab_url = m_new_tab_url_textbox->text();
|
||||
if (!URL(new_tab_url).is_valid()) {
|
||||
if (!URL::URL(new_tab_url).is_valid()) {
|
||||
GUI::MessageBox::show_error(this->window(), "The new tab URL you have entered is not valid"sv);
|
||||
m_new_tab_url_textbox->select_all();
|
||||
m_new_tab_url_textbox->set_focus(true);
|
||||
|
|
|
@ -19,4 +19,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(BrowserSettings ICON app-browser)
|
||||
target_link_libraries(BrowserSettings PRIVATE LibCore LibGfx LibGUI LibConfig LibMain LibWebView)
|
||||
target_link_libraries(BrowserSettings PRIVATE LibCore LibGfx LibGUI LibConfig LibMain LibWebView LibURL)
|
||||
|
|
|
@ -15,4 +15,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Calculator ICON app-calculator)
|
||||
target_link_libraries(Calculator PRIVATE LibCore LibCrypto LibDesktop LibGfx LibGUI LibMain)
|
||||
target_link_libraries(Calculator PRIVATE LibCore LibCrypto LibDesktop LibGfx LibGUI LibMain LibURL)
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
#include "CalculatorWidget.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibCrypto/NumberTheory/ModularFunctions.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
|
@ -20,6 +19,7 @@
|
|||
#include <LibGUI/Window.h>
|
||||
#include <LibGfx/Bitmap.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||
{
|
||||
|
|
|
@ -22,4 +22,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Calendar ICON app-calendar)
|
||||
target_link_libraries(Calendar PRIVATE LibConfig LibCore LibFileSystem LibFileSystemAccessClient LibGfx LibGUI LibMain LibDesktop)
|
||||
target_link_libraries(Calendar PRIVATE LibConfig LibCore LibFileSystem LibFileSystemAccessClient LibGfx LibGUI LibMain LibDesktop LibURL)
|
||||
|
|
|
@ -20,4 +20,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(CharacterMap ICON app-character-map)
|
||||
target_link_libraries(CharacterMap PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibMain LibUnicode)
|
||||
target_link_libraries(CharacterMap PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibMain LibUnicode LibURL)
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#include "CharacterMapWidget.h"
|
||||
#include "SearchCharacters.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/System.h>
|
||||
|
@ -16,6 +15,7 @@
|
|||
#include <LibGUI/Window.h>
|
||||
#include <LibGfx/Font/FontDatabase.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
static void search_and_print_results(ByteString const& query)
|
||||
{
|
||||
|
|
|
@ -13,4 +13,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(CrashReporter ICON app-crash-reporter)
|
||||
target_link_libraries(CrashReporter PRIVATE LibCore LibCoredump LibDebug LibDesktop LibFileSystem LibFileSystemAccessClient LibGfx LibGUI LibMain LibThreading)
|
||||
target_link_libraries(CrashReporter PRIVATE LibCore LibCoredump LibDebug LibDesktop LibFileSystem LibFileSystemAccessClient LibGfx LibGUI LibMain LibThreading LibURL)
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include <AK/LexicalPath.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/Types.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibCoredump/Backtrace.h>
|
||||
|
@ -37,6 +36,7 @@
|
|||
#include <LibGUI/Window.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibThreading/BackgroundAction.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <mallocdefs.h>
|
||||
#include <serenity.h>
|
||||
#include <spawn.h>
|
||||
|
|
|
@ -33,4 +33,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(DisplaySettings ICON app-display-settings)
|
||||
target_link_libraries(DisplaySettings PRIVATE LibCore LibDesktop LibGfx LibGUI LibConfig LibIPC LibMain LibEDID LibThreading LibFileSystemAccessClient)
|
||||
target_link_libraries(DisplaySettings PRIVATE LibCore LibDesktop LibGfx LibGUI LibConfig LibIPC LibMain LibEDID LibThreading LibFileSystemAccessClient LibURL)
|
||||
|
|
|
@ -35,4 +35,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(FileManager ICON app-file-manager)
|
||||
target_link_libraries(FileManager PRIVATE LibArchive LibAudio LibConfig LibCore LibDesktop LibFileSystem LibGfx LibGUI LibMain LibPDF LibThreading)
|
||||
target_link_libraries(FileManager PRIVATE LibArchive LibAudio LibConfig LibCore LibDesktop LibFileSystem LibGfx LibGUI LibMain LibPDF LibThreading LibURL)
|
||||
|
|
|
@ -67,7 +67,7 @@ RefPtr<LauncherHandler> DirectoryView::get_default_launch_handler(Vector<Nonnull
|
|||
return {};
|
||||
}
|
||||
|
||||
Vector<NonnullRefPtr<LauncherHandler>> DirectoryView::get_launch_handlers(URL const& url)
|
||||
Vector<NonnullRefPtr<LauncherHandler>> DirectoryView::get_launch_handlers(URL::URL const& url)
|
||||
{
|
||||
Vector<NonnullRefPtr<LauncherHandler>> handlers;
|
||||
for (auto& h : Desktop::Launcher::get_handlers_with_details_for_url(url)) {
|
||||
|
@ -491,7 +491,7 @@ void DirectoryView::set_should_show_dotfiles(bool show_dotfiles)
|
|||
m_model->set_should_show_dotfiles(show_dotfiles);
|
||||
}
|
||||
|
||||
void DirectoryView::launch(URL const&, LauncherHandler const& launcher_handler) const
|
||||
void DirectoryView::launch(URL::URL const&, LauncherHandler const& launcher_handler) const
|
||||
{
|
||||
pid_t child;
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <AK/URL.h>
|
||||
#include <AK/Vector.h>
|
||||
#include <LibConfig/Listener.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
|
@ -16,6 +15,7 @@
|
|||
#include <LibGUI/IconView.h>
|
||||
#include <LibGUI/StackWidget.h>
|
||||
#include <LibGUI/TableView.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
|
@ -59,12 +59,12 @@ public:
|
|||
int path_history_size() const { return m_path_history.size(); }
|
||||
int path_history_position() const { return m_path_history_position; }
|
||||
static RefPtr<LauncherHandler> get_default_launch_handler(Vector<NonnullRefPtr<LauncherHandler>> const& handlers);
|
||||
static Vector<NonnullRefPtr<LauncherHandler>> get_launch_handlers(URL const& url);
|
||||
static Vector<NonnullRefPtr<LauncherHandler>> get_launch_handlers(URL::URL const& url);
|
||||
static Vector<NonnullRefPtr<LauncherHandler>> get_launch_handlers(ByteString const& path);
|
||||
|
||||
void refresh();
|
||||
|
||||
void launch(URL const&, LauncherHandler const&) const;
|
||||
void launch(URL::URL const&, LauncherHandler const&) const;
|
||||
|
||||
Function<void(StringView path, bool can_read_in_path, bool can_write_in_path)> on_path_change;
|
||||
Function<void(GUI::AbstractView&)> on_selection_change;
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include <AK/LexicalPath.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/Try.h>
|
||||
#include <AK/URL.h>
|
||||
#include <Applications/FileManager/FileManagerWindowGML.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibConfig/Listener.h>
|
||||
|
@ -49,6 +48,7 @@
|
|||
#include <LibGUI/Window.h>
|
||||
#include <LibGfx/Palette.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <pthread.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
|
@ -197,7 +197,7 @@ void do_paste(ByteString const& target_directory, GUI::Window* window)
|
|||
for (auto& uri_as_string : copied_lines) {
|
||||
if (uri_as_string.is_empty())
|
||||
continue;
|
||||
URL url = uri_as_string;
|
||||
URL::URL url = uri_as_string;
|
||||
if (!url.is_valid() || url.scheme() != "file") {
|
||||
dbgln("Cannot paste URI {}", uri_as_string);
|
||||
continue;
|
||||
|
|
|
@ -25,4 +25,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(FontEditor ICON app-font-editor)
|
||||
target_link_libraries(FontEditor PRIVATE LibConfig LibCore LibFileSystemAccessClient LibGUI LibDesktop LibGfx LibMain LibUnicode)
|
||||
target_link_libraries(FontEditor PRIVATE LibConfig LibCore LibFileSystemAccessClient LibGUI LibDesktop LibGfx LibMain LibUnicode LibURL)
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
*/
|
||||
|
||||
#include "MainWidget.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/System.h>
|
||||
|
@ -15,6 +14,7 @@
|
|||
#include <LibGUI/Icon.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||
{
|
||||
|
|
|
@ -16,5 +16,5 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Help ICON app-help)
|
||||
target_link_libraries(Help PRIVATE LibCore LibWebView LibWeb LibMarkdown LibGfx LibGUI LibDesktop LibMain LibManual LibLocale)
|
||||
target_link_libraries(Help PRIVATE LibCore LibWebView LibWeb LibMarkdown LibGfx LibGUI LibDesktop LibMain LibManual LibLocale LibURL)
|
||||
link_with_locale_data(Help)
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <AK/LexicalPath.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
|
@ -35,6 +34,7 @@
|
|||
#include <LibManual/Path.h>
|
||||
#include <LibManual/SectionNode.h>
|
||||
#include <LibMarkdown/Document.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
namespace Help {
|
||||
|
||||
|
@ -154,7 +154,7 @@ ErrorOr<void> MainWidget::initialize(GUI::Window& window)
|
|||
m_copy_action->set_enabled(!m_web_view->selected_text().is_empty());
|
||||
m_context_menu->popup(screen_position);
|
||||
};
|
||||
m_web_view->on_link_hover = [this](URL const& url) {
|
||||
m_web_view->on_link_hover = [this](URL::URL const& url) {
|
||||
if (url.is_valid())
|
||||
m_statusbar->set_text(String::from_byte_string(url.to_byte_string()).release_value_but_fixme_should_propagate_errors());
|
||||
else
|
||||
|
@ -245,7 +245,7 @@ ErrorOr<void> MainWidget::initialize(GUI::Window& window)
|
|||
return {};
|
||||
}
|
||||
|
||||
void MainWidget::open_url(URL const& url)
|
||||
void MainWidget::open_url(URL::URL const& url)
|
||||
{
|
||||
m_go_back_action->set_enabled(m_history.can_go_back());
|
||||
m_go_forward_action->set_enabled(m_history.can_go_forward());
|
||||
|
@ -273,7 +273,7 @@ void MainWidget::open_url(URL const& url)
|
|||
}
|
||||
}
|
||||
|
||||
void MainWidget::open_external(URL const& url)
|
||||
void MainWidget::open_external(URL::URL const& url)
|
||||
{
|
||||
if (!Desktop::Launcher::open(url))
|
||||
GUI::MessageBox::show(window(), ByteString::formatted("The link to '{}' could not be opened.", url), "Failed to open link"sv, GUI::MessageBox::Type::Error);
|
||||
|
|
|
@ -27,9 +27,9 @@ public:
|
|||
private:
|
||||
MainWidget();
|
||||
|
||||
void open_url(URL const&);
|
||||
void open_url(URL::URL const&);
|
||||
void open_page(Optional<String> const& path);
|
||||
void open_external(URL const&);
|
||||
void open_external(URL::URL const&);
|
||||
|
||||
History m_history;
|
||||
RefPtr<GUI::Menu> m_context_menu;
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
*/
|
||||
|
||||
#include "MainWidget.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/System.h>
|
||||
#include <LibGUI/Application.h>
|
||||
#include <LibGUI/Icon.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
using namespace Help;
|
||||
|
||||
|
|
|
@ -25,4 +25,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(HexEditor ICON app-hex-editor)
|
||||
target_link_libraries(HexEditor PRIVATE LibCore LibGfx LibGUI LibConfig LibDesktop LibFileSystemAccessClient LibMain LibTextCodec)
|
||||
target_link_libraries(HexEditor PRIVATE LibCore LibGfx LibGUI LibConfig LibDesktop LibFileSystemAccessClient LibMain LibTextCodec LibURL)
|
||||
|
|
|
@ -11,5 +11,5 @@ set(SOURCES
|
|||
ViewWidget.cpp
|
||||
)
|
||||
|
||||
serenity_app(ImageViewer ICON app-image-viewer)
|
||||
target_link_libraries(ImageViewer PRIVATE LibCore LibDesktop LibFileSystemAccessClient LibGUI LibGfx LibConfig LibImageDecoderClient LibMain)
|
||||
serenity_app(ImageViewer ICON filetype-image)
|
||||
target_link_libraries(ImageViewer PRIVATE LibCore LibDesktop LibFileSystemAccessClient LibGUI LibGfx LibConfig LibImageDecoderClient LibMain LibURL)
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
|
||||
#include "MainWidget.h"
|
||||
#include "ViewWidget.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibCore/ArgsParser.h>
|
||||
#include <LibCore/System.h>
|
||||
|
@ -32,6 +31,7 @@
|
|||
#include <LibGfx/Palette.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <serenity.h>
|
||||
#include <string.h>
|
||||
|
||||
|
|
|
@ -10,4 +10,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Magnifier ICON app-magnifier)
|
||||
target_link_libraries(Magnifier PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibIPC LibMain LibFileSystemAccessClient)
|
||||
target_link_libraries(Magnifier PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibIPC LibMain LibFileSystemAccessClient LibURL)
|
||||
|
|
|
@ -20,4 +20,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Mail ICON app-mail)
|
||||
target_link_libraries(Mail PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibIMAP LibWebView LibWeb LibMain)
|
||||
target_link_libraries(Mail PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibIMAP LibWebView LibWeb LibMain LibURL)
|
||||
|
|
|
@ -49,11 +49,11 @@ private:
|
|||
|
||||
RefPtr<GUI::Menu> m_link_context_menu;
|
||||
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
||||
URL m_link_context_menu_url;
|
||||
URL::URL m_link_context_menu_url;
|
||||
|
||||
RefPtr<GUI::Menu> m_image_context_menu;
|
||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
||||
URL m_image_context_menu_url;
|
||||
URL::URL m_image_context_menu_url;
|
||||
|
||||
OwnPtr<AccountHolder> m_account_holder;
|
||||
};
|
||||
|
|
|
@ -21,4 +21,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Maps ICON app-maps)
|
||||
target_link_libraries(Maps PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibMain LibProtocol)
|
||||
target_link_libraries(Maps PRIVATE LibConfig LibCore LibDesktop LibGfx LibGUI LibMain LibProtocol LibURL)
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
*/
|
||||
|
||||
#include "MapWidget.h"
|
||||
#include <AK/URL.h>
|
||||
#include <Applications/MapsSettings/Defaults.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
|
@ -15,6 +14,7 @@
|
|||
#include <LibGUI/Clipboard.h>
|
||||
#include <LibGfx/ImageFormats/ImageDecoder.h>
|
||||
#include <LibProtocol/Request.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
namespace Maps {
|
||||
|
||||
|
@ -74,7 +74,7 @@ MapWidget::MapWidget(Options const& options)
|
|||
m_request_client = Protocol::RequestClient::try_create().release_value_but_fixme_should_propagate_errors();
|
||||
if (options.attribution_enabled) {
|
||||
auto attribution_text = options.attribution_text.value_or(MUST(String::from_byte_string(Config::read_string("Maps"sv, "MapWidget"sv, "TileProviderAttributionText"sv, Maps::default_tile_provider_attribution_text))));
|
||||
URL attribution_url = options.attribution_url.value_or(URL(Config::read_string("Maps"sv, "MapWidget"sv, "TileProviderAttributionUrl"sv, Maps::default_tile_provider_attribution_url)));
|
||||
URL::URL attribution_url = options.attribution_url.value_or(URL::URL(Config::read_string("Maps"sv, "MapWidget"sv, "TileProviderAttributionUrl"sv, Maps::default_tile_provider_attribution_url)));
|
||||
add_panel({ attribution_text, Panel::Position::BottomRight, attribution_url, "attribution"_string });
|
||||
}
|
||||
m_marker_image = Gfx::Bitmap::load_from_file("/res/graphics/maps/marker-blue.png"sv).release_value_but_fixme_should_propagate_errors();
|
||||
|
@ -117,7 +117,7 @@ void MapWidget::config_string_did_change(StringView domain, StringView group, St
|
|||
// Update attribution panel url when it exists
|
||||
for (auto& panel : m_panels) {
|
||||
if (panel.name == "attribution") {
|
||||
panel.url = URL(value);
|
||||
panel.url = URL::URL(value);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -248,19 +248,19 @@ void MapWidget::context_menu_event(GUI::ContextMenuEvent& event)
|
|||
auto link_icon = MUST(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-symlink.png"sv));
|
||||
m_context_menu->add_action(GUI::Action::create(
|
||||
"Open in &OpenStreetMap", link_icon, [this](auto&) {
|
||||
Desktop::Launcher::open(URL(MUST(String::formatted("https://www.openstreetmap.org/#map={}/{}/{}", m_zoom, m_context_menu_latlng.latitude, m_context_menu_latlng.longitude))));
|
||||
Desktop::Launcher::open(URL::URL(MUST(String::formatted("https://www.openstreetmap.org/#map={}/{}/{}", m_zoom, m_context_menu_latlng.latitude, m_context_menu_latlng.longitude))));
|
||||
}));
|
||||
m_context_menu->add_action(GUI::Action::create(
|
||||
"Open in &Google Maps", link_icon, [this](auto&) {
|
||||
Desktop::Launcher::open(URL(MUST(String::formatted("https://www.google.com/maps/@{},{},{}z", m_context_menu_latlng.latitude, m_context_menu_latlng.longitude, m_zoom))));
|
||||
Desktop::Launcher::open(URL::URL(MUST(String::formatted("https://www.google.com/maps/@{},{},{}z", m_context_menu_latlng.latitude, m_context_menu_latlng.longitude, m_zoom))));
|
||||
}));
|
||||
m_context_menu->add_action(GUI::Action::create(
|
||||
"Open in &Bing Maps", link_icon, [this](auto&) {
|
||||
Desktop::Launcher::open(URL(MUST(String::formatted("https://www.bing.com/maps/?cp={}~{}&lvl={}", m_context_menu_latlng.latitude, m_context_menu_latlng.longitude, m_zoom))));
|
||||
Desktop::Launcher::open(URL::URL(MUST(String::formatted("https://www.bing.com/maps/?cp={}~{}&lvl={}", m_context_menu_latlng.latitude, m_context_menu_latlng.longitude, m_zoom))));
|
||||
}));
|
||||
m_context_menu->add_action(GUI::Action::create(
|
||||
"Open in &DuckDuckGo Maps", link_icon, [this](auto&) {
|
||||
Desktop::Launcher::open(URL(MUST(String::formatted("https://duckduckgo.com/?q={},+{}&ia=web&iaxm=maps", m_context_menu_latlng.latitude, m_context_menu_latlng.longitude))));
|
||||
Desktop::Launcher::open(URL::URL(MUST(String::formatted("https://duckduckgo.com/?q={},+{}&ia=web&iaxm=maps", m_context_menu_latlng.latitude, m_context_menu_latlng.longitude))));
|
||||
}));
|
||||
m_context_menu->add_separator();
|
||||
m_context_menu->add_action(GUI::Action::create(
|
||||
|
@ -318,7 +318,7 @@ void MapWidget::process_tile_queue()
|
|||
HashMap<ByteString, ByteString> headers;
|
||||
headers.set("User-Agent", "SerenityOS Maps");
|
||||
headers.set("Accept", "image/png");
|
||||
URL url(MUST(String::formatted(m_tile_provider.value_or(m_default_tile_provider), tile_key.zoom, tile_key.x, tile_key.y)));
|
||||
URL::URL url(MUST(String::formatted(m_tile_provider.value_or(m_default_tile_provider), tile_key.zoom, tile_key.x, tile_key.y)));
|
||||
auto request = m_request_client->start_request("GET", url, headers, {});
|
||||
VERIFY(!request.is_null());
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
int scale_max_width { 100 };
|
||||
bool attribution_enabled { true };
|
||||
Optional<String> attribution_text {};
|
||||
Optional<URL> attribution_url {};
|
||||
Optional<URL::URL> attribution_url {};
|
||||
};
|
||||
|
||||
LatLng center() const { return m_center; }
|
||||
|
@ -90,7 +90,7 @@ public:
|
|||
};
|
||||
String text;
|
||||
Position position;
|
||||
Optional<URL> url {};
|
||||
Optional<URL::URL> url {};
|
||||
Optional<String> name {};
|
||||
Gfx::IntRect rect { 0, 0, 0, 0 };
|
||||
};
|
||||
|
@ -188,7 +188,7 @@ private:
|
|||
bool m_scale_enabled {};
|
||||
int m_scale_max_width {};
|
||||
bool m_attribution_enabled {};
|
||||
URL m_attribution_url;
|
||||
URL::URL m_attribution_url;
|
||||
bool m_dragging { false };
|
||||
int m_last_mouse_x { 0 };
|
||||
int m_last_mouse_y { 0 };
|
||||
|
|
|
@ -55,7 +55,7 @@ void SearchPanel::search(StringView query)
|
|||
HashMap<ByteString, ByteString> headers;
|
||||
headers.set("User-Agent", "SerenityOS Maps");
|
||||
headers.set("Accept", "application/json");
|
||||
URL url(MUST(String::formatted("https://nominatim.openstreetmap.org/search?q={}&format=json", URL::percent_encode(query, URL::PercentEncodeSet::Query))));
|
||||
URL::URL url(MUST(String::formatted("https://nominatim.openstreetmap.org/search?q={}&format=json", URL::percent_encode(query, URL::PercentEncodeSet::Query))));
|
||||
auto request = m_request_client->start_request("GET", url, headers, {});
|
||||
VERIFY(!request.is_null());
|
||||
m_request = request;
|
||||
|
|
|
@ -22,7 +22,7 @@ void UsersMapWidget::get_users()
|
|||
HashMap<ByteString, ByteString> headers;
|
||||
headers.set("User-Agent", "SerenityOS Maps");
|
||||
headers.set("Accept", "application/json");
|
||||
URL url("https://usermap.serenityos.org/people.json");
|
||||
URL::URL url("https://usermap.serenityos.org/people.json");
|
||||
auto request = request_client()->start_request("GET", url, headers, {});
|
||||
VERIFY(!request.is_null());
|
||||
m_request = request;
|
||||
|
|
|
@ -13,4 +13,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(MapsSettings ICON app-maps)
|
||||
target_link_libraries(MapsSettings PRIVATE LibConfig LibCore LibGfx LibGUI LibMain)
|
||||
target_link_libraries(MapsSettings PRIVATE LibConfig LibCore LibGfx LibGUI LibMain LibURL)
|
||||
|
|
|
@ -12,4 +12,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(PDFViewer ICON app-pdf-viewer)
|
||||
target_link_libraries(PDFViewer PRIVATE LibCore LibGfx LibGUI LibPDF LibFileSystemAccessClient LibConfig LibMain)
|
||||
target_link_libraries(PDFViewer PRIVATE LibCore LibGfx LibGUI LibPDF LibFileSystemAccessClient LibConfig LibMain LibURL)
|
||||
|
|
|
@ -91,4 +91,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(PixelPaint ICON app-pixel-paint)
|
||||
target_link_libraries(PixelPaint PRIVATE LibCore LibImageDecoderClient LibGUI LibGfx LibFileSystemAccessClient LibConfig LibDesktop LibMain LibThreading)
|
||||
target_link_libraries(PixelPaint PRIVATE LibCore LibImageDecoderClient LibGUI LibGfx LibFileSystemAccessClient LibConfig LibDesktop LibMain LibThreading LibURL)
|
||||
|
|
|
@ -14,4 +14,4 @@ set(SOURCES
|
|||
SlideObject.cpp
|
||||
)
|
||||
serenity_app(Presenter ICON app-presenter)
|
||||
target_link_libraries(Presenter PRIVATE LibWebView LibGUI LibGfx LibFileSystemAccessClient LibCore LibDesktop LibMain)
|
||||
target_link_libraries(Presenter PRIVATE LibWebView LibGUI LibGfx LibFileSystemAccessClient LibCore LibDesktop LibMain LibURL)
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
#include "SlideObject.h"
|
||||
#include "Presentation.h"
|
||||
#include <AK/JsonObject.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibGUI/PropertyDeserializer.h>
|
||||
#include <LibGfx/Font/FontStyleMapping.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
static ByteString to_css_length(float design_value, Presentation const& presentation)
|
||||
{
|
||||
|
|
|
@ -13,4 +13,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Run ICON app-run)
|
||||
target_link_libraries(Run PRIVATE LibCore LibFileSystem LibDesktop LibGfx LibGUI LibMain)
|
||||
target_link_libraries(Run PRIVATE LibCore LibFileSystem LibDesktop LibGfx LibGUI LibMain LibURL)
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "RunWindow.h"
|
||||
#include "MainWidget.h"
|
||||
#include <AK/LexicalPath.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/Process.h>
|
||||
#include <LibCore/StandardPaths.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
|
@ -20,6 +19,7 @@
|
|||
#include <LibGUI/ImageWidget.h>
|
||||
#include <LibGUI/MessageBox.h>
|
||||
#include <LibGUI/Widget.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <spawn.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
|
|
@ -19,4 +19,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(SoundPlayer ICON app-sound-player)
|
||||
target_link_libraries(SoundPlayer PRIVATE LibAudio LibConfig LibCore LibFileSystem LibDSP LibGfx LibGUI LibIPC LibMain LibThreading LibImageDecoderClient)
|
||||
target_link_libraries(SoundPlayer PRIVATE LibAudio LibConfig LibCore LibFileSystem LibDSP LibGfx LibGUI LibIPC LibMain LibThreading LibImageDecoderClient LibURL)
|
||||
|
|
|
@ -14,4 +14,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(SpaceAnalyzer ICON app-space-analyzer)
|
||||
target_link_libraries(SpaceAnalyzer PRIVATE LibCore LibDesktop LibFileSystem LibGfx LibGUI LibIPC LibMain)
|
||||
target_link_libraries(SpaceAnalyzer PRIVATE LibCore LibDesktop LibFileSystem LibGfx LibGUI LibIPC LibMain LibURL)
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
#include "TreeMapWidget.h"
|
||||
#include <AK/LexicalPath.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibDesktop/Launcher.h>
|
||||
#include <LibFileSystem/FileSystem.h>
|
||||
#include <LibGUI/Application.h>
|
||||
|
@ -25,6 +24,7 @@
|
|||
#include <LibGUI/Statusbar.h>
|
||||
#include <LibGfx/Bitmap.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
static auto const APP_NAME = "Space Analyzer"_string;
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Spreadsheet ICON app-spreadsheet)
|
||||
target_link_libraries(Spreadsheet PRIVATE LibConfig LibCore LibFileSystem LibFileSystemAccessClient LibGfx LibGUI LibJS LibMain LibMarkdown LibSyntax LibWebView LibWeb)
|
||||
target_link_libraries(Spreadsheet PRIVATE LibConfig LibCore LibFileSystem LibFileSystemAccessClient LibGfx LibGUI LibJS LibMain LibMarkdown LibSyntax LibWebView LibWeb LibURL)
|
||||
|
||||
serenity_test(Writers/Test/TestXSVWriter.cpp Spreadsheet)
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
#include <AK/ByteString.h>
|
||||
#include <AK/Types.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
namespace Spreadsheet {
|
||||
|
||||
|
@ -38,7 +38,7 @@ struct Position {
|
|||
}
|
||||
|
||||
ByteString to_cell_identifier(Sheet const& sheet) const;
|
||||
URL to_url(Sheet const& sheet) const;
|
||||
URL::URL to_url(Sheet const& sheet) const;
|
||||
|
||||
size_t column { 0 };
|
||||
size_t row { 0 };
|
||||
|
|
|
@ -15,13 +15,13 @@
|
|||
#include <AK/JsonParser.h>
|
||||
#include <AK/ScopeGuard.h>
|
||||
#include <AK/TemporaryChange.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/File.h>
|
||||
#include <LibJS/Bytecode/Interpreter.h>
|
||||
#include <LibJS/Heap/DeferGC.h>
|
||||
#include <LibJS/Parser.h>
|
||||
#include <LibJS/Runtime/AbstractOperations.h>
|
||||
#include <LibJS/Runtime/FunctionObject.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -243,7 +243,7 @@ Optional<ByteString> Sheet::column_arithmetic(StringView column_name, int offset
|
|||
return m_columns.last();
|
||||
}
|
||||
|
||||
Cell* Sheet::from_url(const URL& url)
|
||||
Cell* Sheet::from_url(const URL::URL& url)
|
||||
{
|
||||
auto maybe_position = position_from_url(url);
|
||||
if (!maybe_position.has_value())
|
||||
|
@ -252,7 +252,7 @@ Cell* Sheet::from_url(const URL& url)
|
|||
return at(maybe_position.value());
|
||||
}
|
||||
|
||||
Optional<Position> Sheet::position_from_url(const URL& url) const
|
||||
Optional<Position> Sheet::position_from_url(const URL::URL& url) const
|
||||
{
|
||||
if (!url.is_valid()) {
|
||||
dbgln("Invalid url: {}", url.to_byte_string());
|
||||
|
@ -747,9 +747,9 @@ ByteString Position::to_cell_identifier(Sheet const& sheet) const
|
|||
return ByteString::formatted("{}{}", sheet.column(column), row);
|
||||
}
|
||||
|
||||
URL Position::to_url(Sheet const& sheet) const
|
||||
URL::URL Position::to_url(Sheet const& sheet) const
|
||||
{
|
||||
URL url;
|
||||
URL::URL url;
|
||||
url.set_scheme("spreadsheet"_string);
|
||||
url.set_host("cell"_string);
|
||||
url.set_paths({ ByteString::number(getpid()) });
|
||||
|
|
|
@ -53,9 +53,9 @@ public:
|
|||
Optional<size_t> column_index(StringView column_name) const;
|
||||
Optional<ByteString> column_arithmetic(StringView column_name, int offset);
|
||||
|
||||
Cell* from_url(const URL&);
|
||||
Cell const* from_url(const URL& url) const { return const_cast<Sheet*>(this)->from_url(url); }
|
||||
Optional<Position> position_from_url(const URL& url) const;
|
||||
Cell* from_url(const URL::URL&);
|
||||
Cell const* from_url(const URL::URL& url) const { return const_cast<Sheet*>(this)->from_url(url); }
|
||||
Optional<Position> position_from_url(const URL::URL& url) const;
|
||||
|
||||
/// Resolve 'offset' to an absolute position assuming 'base' is at 'offset_base'.
|
||||
/// Effectively, "Walk the distance between 'offset' and 'offset_base' away from 'base'".
|
||||
|
|
|
@ -6,10 +6,10 @@
|
|||
|
||||
#include "SpreadsheetModel.h"
|
||||
#include "ConditionalFormatting.h"
|
||||
#include <AK/URL.h>
|
||||
#include <LibGUI/AbstractView.h>
|
||||
#include <LibJS/Runtime/Error.h>
|
||||
#include <LibJS/Runtime/Object.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
namespace Spreadsheet {
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include "SpreadsheetView.h"
|
||||
#include "CellTypeDialog.h"
|
||||
#include <AK/ScopeGuard.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibCore/MimeData.h>
|
||||
#include <LibGUI/BoxLayout.h>
|
||||
#include <LibGUI/HeaderView.h>
|
||||
|
@ -17,6 +16,7 @@
|
|||
#include <LibGUI/Scrollbar.h>
|
||||
#include <LibGUI/TableView.h>
|
||||
#include <LibGfx/Palette.h>
|
||||
#include <LibURL/URL.h>
|
||||
|
||||
namespace Spreadsheet {
|
||||
|
||||
|
|
|
@ -9,4 +9,4 @@ set(SOURCES
|
|||
)
|
||||
|
||||
serenity_app(Terminal ICON app-terminal)
|
||||
target_link_libraries(Terminal PRIVATE LibConfig LibCore LibFileSystem LibDesktop LibGfx LibGUI LibVT LibMain)
|
||||
target_link_libraries(Terminal PRIVATE LibConfig LibCore LibFileSystem LibDesktop LibGfx LibGUI LibVT LibMain LibURL)
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#include <AK/FixedArray.h>
|
||||
#include <AK/QuickSort.h>
|
||||
#include <AK/TypedTransfer.h>
|
||||
#include <AK/URL.h>
|
||||
#include <LibConfig/Client.h>
|
||||
#include <LibConfig/Listener.h>
|
||||
#include <LibCore/Account.h>
|
||||
|
@ -36,6 +35,7 @@
|
|||
#include <LibGfx/Font/FontDatabase.h>
|
||||
#include <LibGfx/Palette.h>
|
||||
#include <LibMain/Main.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibVT/TerminalWidget.h>
|
||||
#include <pty.h>
|
||||
|
||||
|
|
|
@ -18,4 +18,4 @@ set(GENERATED_SOURCES
|
|||
)
|
||||
|
||||
serenity_app(TextEditor ICON app-text-editor)
|
||||
target_link_libraries(TextEditor PRIVATE LibCore LibWebView LibWeb LibMarkdown LibGfx LibGUI LibShell LibRegex LibDesktop LibCpp LibCMake LibJS LibSQL LibSyntax LibFileSystemAccessClient LibConfig LibMain)
|
||||
target_link_libraries(TextEditor PRIVATE LibCore LibWebView LibWeb LibMarkdown LibGfx LibGUI LibShell LibRegex LibDesktop LibCpp LibCMake LibJS LibSQL LibSyntax LibFileSystemAccessClient LibConfig LibMain LibURL)
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "MainWidget.h"
|
||||
#include <AK/Optional.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <AK/URL.h>
|
||||
#include <Applications/TextEditor/TextEditorWindowGML.h>
|
||||
#include <LibCMake/CMakeCache/SyntaxHighlighter.h>
|
||||
#include <LibCMake/SyntaxHighlighter.h>
|
||||
|
@ -41,6 +40,7 @@
|
|||
#include <LibMarkdown/Document.h>
|
||||
#include <LibMarkdown/SyntaxHighlighter.h>
|
||||
#include <LibSQL/AST/SyntaxHighlighter.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/CSS/SyntaxHighlighter/SyntaxHighlighter.h>
|
||||
#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
|
||||
#include <LibWebView/OutOfProcessWebView.h>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue