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
|
StringUtils.cpp
|
||||||
StringView.cpp
|
StringView.cpp
|
||||||
Time.cpp
|
Time.cpp
|
||||||
URL.cpp
|
|
||||||
URLParser.cpp
|
|
||||||
UUID.cpp
|
UUID.cpp
|
||||||
Utf16View.cpp
|
Utf16View.cpp
|
||||||
Utf32View.cpp
|
Utf32View.cpp
|
||||||
|
|
|
@ -49,7 +49,6 @@ class String;
|
||||||
class StringBuilder;
|
class StringBuilder;
|
||||||
class StringImpl;
|
class StringImpl;
|
||||||
class StringView;
|
class StringView;
|
||||||
class URL;
|
|
||||||
class UnixDateTime;
|
class UnixDateTime;
|
||||||
class Utf16View;
|
class Utf16View;
|
||||||
class Utf32CodePointIterator;
|
class Utf32CodePointIterator;
|
||||||
|
@ -204,7 +203,6 @@ using AK::StringView;
|
||||||
using AK::TrailingCodePointTransformation;
|
using AK::TrailingCodePointTransformation;
|
||||||
using AK::Traits;
|
using AK::Traits;
|
||||||
using AK::UnixDateTime;
|
using AK::UnixDateTime;
|
||||||
using AK::URL;
|
|
||||||
using AK::Utf16View;
|
using AK::Utf16View;
|
||||||
using AK::Utf32CodePointIterator;
|
using AK::Utf32CodePointIterator;
|
||||||
using AK::Utf32View;
|
using AK::Utf32View;
|
||||||
|
|
|
@ -8,9 +8,9 @@
|
||||||
|
|
||||||
#include <AK/Optional.h>
|
#include <AK/Optional.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include <Ladybird/Types.h>
|
#include <Ladybird/Types.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||||
#include <LibWeb/HTML/ActivateTab.h>
|
#include <LibWeb/HTML/ActivateTab.h>
|
||||||
#include <LibWebView/CookieJar.h>
|
#include <LibWebView/CookieJar.h>
|
||||||
|
@ -22,18 +22,18 @@
|
||||||
|
|
||||||
@interface ApplicationDelegate : NSObject <NSApplicationDelegate>
|
@interface ApplicationDelegate : NSObject <NSApplicationDelegate>
|
||||||
|
|
||||||
- (nullable instancetype)init:(Vector<URL>)initial_urls
|
- (nullable instancetype)init:(Vector<URL::URL>)initial_urls
|
||||||
newTabPageURL:(URL)new_tab_page_url
|
newTabPageURL:(URL::URL)new_tab_page_url
|
||||||
withCookieJar:(WebView::CookieJar)cookie_jar
|
withCookieJar:(WebView::CookieJar)cookie_jar
|
||||||
webContentOptions:(Ladybird::WebContentOptions const&)web_content_options
|
webContentOptions:(Ladybird::WebContentOptions const&)web_content_options
|
||||||
webdriverContentIPCPath:(StringView)webdriver_content_ipc_path;
|
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
|
fromTab:(nullable Tab*)tab
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||||
|
|
||||||
- (nonnull TabController*)createNewTab:(StringView)html
|
- (nonnull TabController*)createNewTab:(StringView)html
|
||||||
url:(URL const&)url
|
url:(URL::URL const&)url
|
||||||
fromTab:(nullable Tab*)tab
|
fromTab:(nullable Tab*)tab
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
@interface ApplicationDelegate ()
|
@interface ApplicationDelegate ()
|
||||||
{
|
{
|
||||||
Vector<URL> m_initial_urls;
|
Vector<URL::URL> m_initial_urls;
|
||||||
URL m_new_tab_page_url;
|
URL::URL m_new_tab_page_url;
|
||||||
|
|
||||||
// This will always be populated, but we cannot have a non-default constructible instance variable.
|
// This will always be populated, but we cannot have a non-default constructible instance variable.
|
||||||
Optional<WebView::CookieJar> m_cookie_jar;
|
Optional<WebView::CookieJar> m_cookie_jar;
|
||||||
|
@ -50,8 +50,8 @@
|
||||||
|
|
||||||
@implementation ApplicationDelegate
|
@implementation ApplicationDelegate
|
||||||
|
|
||||||
- (instancetype)init:(Vector<URL>)initial_urls
|
- (instancetype)init:(Vector<URL::URL>)initial_urls
|
||||||
newTabPageURL:(URL)new_tab_page_url
|
newTabPageURL:(URL::URL)new_tab_page_url
|
||||||
withCookieJar:(WebView::CookieJar)cookie_jar
|
withCookieJar:(WebView::CookieJar)cookie_jar
|
||||||
webContentOptions:(Ladybird::WebContentOptions const&)web_content_options
|
webContentOptions:(Ladybird::WebContentOptions const&)web_content_options
|
||||||
webdriverContentIPCPath:(StringView)webdriver_content_ipc_path
|
webdriverContentIPCPath:(StringView)webdriver_content_ipc_path
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
|
|
||||||
#pragma mark - Public methods
|
#pragma mark - Public methods
|
||||||
|
|
||||||
- (TabController*)createNewTab:(Optional<URL> const&)url
|
- (TabController*)createNewTab:(Optional<URL::URL> const&)url
|
||||||
fromTab:(Tab*)tab
|
fromTab:(Tab*)tab
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||||
{
|
{
|
||||||
|
@ -106,7 +106,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (nonnull TabController*)createNewTab:(StringView)html
|
- (nonnull TabController*)createNewTab:(StringView)html
|
||||||
url:(URL const&)url
|
url:(URL::URL const&)url
|
||||||
fromTab:(nullable Tab*)tab
|
fromTab:(nullable Tab*)tab
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||||
{
|
{
|
||||||
|
@ -155,7 +155,7 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self createNewTab:URL("about:version"sv)
|
[self createNewTab:URL::URL("about:version"sv)
|
||||||
fromTab:(Tab*)current_tab
|
fromTab:(Tab*)current_tab
|
||||||
activateTab:Web::HTML::ActivateTab::Yes];
|
activateTab:Web::HTML::ActivateTab::Yes];
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <AK/Forward.h>
|
#include <AK/Forward.h>
|
||||||
#include <LibGfx/Forward.h>
|
#include <LibGfx/Forward.h>
|
||||||
|
#include <LibURL/Forward.h>
|
||||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||||
#include <LibWeb/HTML/ActivateTab.h>
|
#include <LibWeb/HTML/ActivateTab.h>
|
||||||
#include <LibWebView/Forward.h>
|
#include <LibWebView/Forward.h>
|
||||||
|
@ -16,16 +17,16 @@
|
||||||
|
|
||||||
@protocol LadybirdWebViewObserver <NSObject>
|
@protocol LadybirdWebViewObserver <NSObject>
|
||||||
|
|
||||||
- (String const&)onCreateNewTab:(URL const&)url
|
- (String const&)onCreateNewTab:(URL::URL const&)url
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||||
|
|
||||||
- (String const&)onCreateNewTab:(StringView)html
|
- (String const&)onCreateNewTab:(StringView)html
|
||||||
url:(URL const&)url
|
url:(URL::URL const&)url
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
activateTab:(Web::HTML::ActivateTab)activate_tab;
|
||||||
|
|
||||||
- (void)loadURL:(URL const&)url;
|
- (void)loadURL:(URL::URL const&)url;
|
||||||
- (void)onLoadStart:(URL const&)url isRedirect:(BOOL)is_redirect;
|
- (void)onLoadStart:(URL::URL const&)url isRedirect:(BOOL)is_redirect;
|
||||||
- (void)onLoadFinish:(URL const&)url;
|
- (void)onLoadFinish:(URL::URL const&)url;
|
||||||
|
|
||||||
- (void)onTitleChange:(ByteString const&)title;
|
- (void)onTitleChange:(ByteString const&)title;
|
||||||
- (void)onFaviconChange:(Gfx::Bitmap const&)bitmap;
|
- (void)onFaviconChange:(Gfx::Bitmap const&)bitmap;
|
||||||
|
@ -40,7 +41,7 @@
|
||||||
|
|
||||||
- (instancetype)init:(id<LadybirdWebViewObserver>)observer;
|
- (instancetype)init:(id<LadybirdWebViewObserver>)observer;
|
||||||
|
|
||||||
- (void)loadURL:(URL const&)url;
|
- (void)loadURL:(URL::URL const&)url;
|
||||||
- (void)loadHTML:(StringView)html;
|
- (void)loadHTML:(StringView)html;
|
||||||
|
|
||||||
- (WebView::ViewImplementation&)view;
|
- (WebView::ViewImplementation&)view;
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
#include <AK/Optional.h>
|
#include <AK/Optional.h>
|
||||||
#include <AK/TemporaryChange.h>
|
#include <AK/TemporaryChange.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibGfx/ImageFormats/PNGWriter.h>
|
#include <LibGfx/ImageFormats/PNGWriter.h>
|
||||||
#include <LibGfx/ShareableBitmap.h>
|
#include <LibGfx/ShareableBitmap.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/HTML/SelectedFile.h>
|
#include <LibWeb/HTML/SelectedFile.h>
|
||||||
#include <LibWebView/SearchEngine.h>
|
#include <LibWebView/SearchEngine.h>
|
||||||
#include <LibWebView/SourceHighlighter.h>
|
#include <LibWebView/SourceHighlighter.h>
|
||||||
|
@ -51,7 +51,7 @@ struct HideCursor {
|
||||||
{
|
{
|
||||||
OwnPtr<Ladybird::WebViewBridge> m_web_view_bridge;
|
OwnPtr<Ladybird::WebViewBridge> m_web_view_bridge;
|
||||||
|
|
||||||
URL m_context_menu_url;
|
URL::URL m_context_menu_url;
|
||||||
Gfx::ShareableBitmap m_context_menu_bitmap;
|
Gfx::ShareableBitmap m_context_menu_bitmap;
|
||||||
Optional<String> m_context_menu_search_text;
|
Optional<String> m_context_menu_search_text;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ struct HideCursor {
|
||||||
|
|
||||||
#pragma mark - Public methods
|
#pragma mark - Public methods
|
||||||
|
|
||||||
- (void)loadURL:(URL const&)url
|
- (void)loadURL:(URL::URL const&)url
|
||||||
{
|
{
|
||||||
m_web_view_bridge->load(url);
|
m_web_view_bridge->load(url);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
|
|
||||||
#include <AK/ByteString.h>
|
#include <AK/ByteString.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Ladybird/Utilities.h>
|
#include <Ladybird/Utilities.h>
|
||||||
#include <LibCore/Resource.h>
|
#include <LibCore/Resource.h>
|
||||||
#include <LibGfx/ImageFormats/PNGWriter.h>
|
#include <LibGfx/ImageFormats/PNGWriter.h>
|
||||||
#include <LibGfx/ShareableBitmap.h>
|
#include <LibGfx/ShareableBitmap.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
#import <Application/ApplicationDelegate.h>
|
#import <Application/ApplicationDelegate.h>
|
||||||
#import <UI/Inspector.h>
|
#import <UI/Inspector.h>
|
||||||
|
@ -34,7 +34,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
||||||
|
|
||||||
@property (nonatomic, strong) InspectorController* inspector_controller;
|
@property (nonatomic, strong) InspectorController* inspector_controller;
|
||||||
|
|
||||||
@property (nonatomic, assign) URL last_url;
|
@property (nonatomic, assign) URL::URL last_url;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
||||||
|
|
||||||
#pragma mark - LadybirdWebViewObserver
|
#pragma mark - LadybirdWebViewObserver
|
||||||
|
|
||||||
- (String const&)onCreateNewTab:(URL const&)url
|
- (String const&)onCreateNewTab:(URL::URL const&)url
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||||
{
|
{
|
||||||
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
||||||
|
@ -202,7 +202,7 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (String const&)onCreateNewTab:(StringView)html
|
- (String const&)onCreateNewTab:(StringView)html
|
||||||
url:(URL const&)url
|
url:(URL::URL const&)url
|
||||||
activateTab:(Web::HTML::ActivateTab)activate_tab
|
activateTab:(Web::HTML::ActivateTab)activate_tab
|
||||||
{
|
{
|
||||||
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
||||||
|
@ -216,12 +216,12 @@ static constexpr CGFloat const WINDOW_HEIGHT = 800;
|
||||||
return [[tab web_view] handle];
|
return [[tab web_view] handle];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)loadURL:(URL const&)url
|
- (void)loadURL:(URL::URL const&)url
|
||||||
{
|
{
|
||||||
[[self tabController] loadURL: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) {
|
if (url != self.last_url) {
|
||||||
self.last_url = 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) {
|
if (self.inspector_controller != nil) {
|
||||||
auto* inspector = (Inspector*)[self.inspector_controller window];
|
auto* inspector = (Inspector*)[self.inspector_controller window];
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/Forward.h>
|
#include <AK/Forward.h>
|
||||||
#include <AK/URL.h>
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
#import <System/Cocoa.h>
|
#import <System/Cocoa.h>
|
||||||
|
|
||||||
|
@ -23,10 +23,10 @@ struct TabSettings {
|
||||||
|
|
||||||
- (instancetype)init;
|
- (instancetype)init;
|
||||||
|
|
||||||
- (void)loadURL:(URL const&)url;
|
- (void)loadURL:(URL::URL const&)url;
|
||||||
- (void)loadHTML:(StringView)html 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)onTitleChange:(ByteString const&)title;
|
||||||
|
|
||||||
- (void)navigateBack:(id)sender;
|
- (void)navigateBack:(id)sender;
|
||||||
|
|
|
@ -106,17 +106,17 @@ enum class IsHistoryNavigation {
|
||||||
|
|
||||||
#pragma mark - Public methods
|
#pragma mark - Public methods
|
||||||
|
|
||||||
- (void)loadURL:(URL const&)url
|
- (void)loadURL:(URL::URL const&)url
|
||||||
{
|
{
|
||||||
[[self tab].web_view loadURL: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];
|
[[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) {
|
if (isRedirect) {
|
||||||
m_history.replace_current(url, m_title);
|
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 database = TRY(WebView::Database::create(move(sql_server_paths)));
|
||||||
auto cookie_jar = TRY(WebView::CookieJar::create(*database));
|
auto cookie_jar = TRY(WebView::CookieJar::create(*database));
|
||||||
|
|
||||||
URL new_tab_page_url = Browser::default_new_tab_url;
|
URL::URL new_tab_page_url = Browser::default_new_tab_url;
|
||||||
Vector<URL> initial_urls;
|
Vector<URL::URL> initial_urls;
|
||||||
|
|
||||||
for (auto const& raw_url : raw_urls) {
|
for (auto const& raw_url : raw_urls) {
|
||||||
if (auto url = WebView::sanitize_url(raw_url); url.has_value())
|
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}
|
BASE_DIRS ${SERENITY_SOURCE_DIR}
|
||||||
FILES ${LADYBIRD_HEADERS}
|
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 ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
target_include_directories(ladybird PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
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 ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
target_include_directories(headless-browser PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
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)
|
if (ANDROID)
|
||||||
include(cmake/AndroidExtras.cmake)
|
include(cmake/AndroidExtras.cmake)
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include <AK/JsonArray.h>
|
#include <AK/JsonArray.h>
|
||||||
#include <AK/JsonObject.h>
|
#include <AK/JsonObject.h>
|
||||||
#include <AK/JsonParser.h>
|
#include <AK/JsonParser.h>
|
||||||
#include <AK/URL.h>
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
namespace Ladybird {
|
namespace Ladybird {
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ static QIcon const& app_icon()
|
||||||
return 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_cookie_jar(cookie_jar)
|
||||||
, m_web_content_options(web_content_options)
|
, m_web_content_options(web_content_options)
|
||||||
, m_webdriver_content_ipc_path(webdriver_content_ipc_path)
|
, 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);
|
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);
|
auto& tab = create_new_tab(activate_tab);
|
||||||
tab.navigate(url);
|
tab.navigate(url);
|
||||||
|
|
|
@ -28,7 +28,7 @@ class BrowserWindow : public QMainWindow {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
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(); }
|
WebContentView& view() const { return m_current_tab->view(); }
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ public slots:
|
||||||
void device_pixel_ratio_changed(qreal dpi);
|
void device_pixel_ratio_changed(qreal dpi);
|
||||||
void tab_title_changed(int index, QString const&);
|
void tab_title_changed(int index, QString const&);
|
||||||
void tab_favicon_changed(int index, QIcon const& icon);
|
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_tab_from_content(StringView html, Web::HTML::ActivateTab);
|
||||||
Tab& new_child_tab(Web::HTML::ActivateTab, Tab& parent, Web::HTML::WebViewHints, Optional<u64> page_index);
|
Tab& new_child_tab(Web::HTML::ActivateTab, Tab& parent, Web::HTML::WebViewHints, Optional<u64> page_index);
|
||||||
void activate_tab(int index);
|
void activate_tab(int index);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
#include "LocationEdit.h"
|
#include "LocationEdit.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include "StringUtils.h"
|
#include "StringUtils.h"
|
||||||
#include <AK/URL.h>
|
#include <LibURL/URL.h>
|
||||||
#include <LibWebView/URL.h>
|
#include <LibWebView/URL.h>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QPalette>
|
#include <QPalette>
|
||||||
|
|
|
@ -26,7 +26,7 @@ void RequestManagerQt::reply_finished(QNetworkReply* reply)
|
||||||
request->did_finish();
|
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)) {
|
if (!url.scheme().bytes_as_string_view().is_one_of_ignoring_ascii_case("http"sv, "https"sv)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -40,7 +40,7 @@ RefPtr<Web::ResourceLoaderConnectorRequest> RequestManagerQt::start_request(Byte
|
||||||
return request;
|
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()) };
|
QNetworkRequest request { QString(url.to_byte_string().characters()) };
|
||||||
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);
|
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);
|
||||||
|
@ -78,7 +78,7 @@ ErrorOr<NonnullRefPtr<RequestManagerQt::Request>> RequestManagerQt::Request::cre
|
||||||
return adopt_ref(*new Request(*reply));
|
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);
|
WebSocket::ConnectionInfo connection_info(url);
|
||||||
connection_info.set_origin(origin);
|
connection_info.set_origin(origin);
|
||||||
|
|
|
@ -24,11 +24,11 @@ public:
|
||||||
|
|
||||||
virtual ~RequestManagerQt() override { }
|
virtual ~RequestManagerQt() override { }
|
||||||
|
|
||||||
virtual void prefetch_dns(URL const&) override { }
|
virtual void prefetch_dns(URL::URL const&) override { }
|
||||||
virtual void preconnect(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::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&, ByteString const& origin, Vector<ByteString> const& protocols) override;
|
virtual RefPtr<Web::WebSockets::WebSocketClientSocket> websocket_connect(const URL::URL&, ByteString const& origin, Vector<ByteString> const& protocols) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void reply_finished(QNetworkReply*);
|
void reply_finished(QNetworkReply*);
|
||||||
|
@ -39,7 +39,7 @@ private:
|
||||||
class Request
|
class Request
|
||||||
: public Web::ResourceLoaderConnectorRequest {
|
: public Web::ResourceLoaderConnectorRequest {
|
||||||
public:
|
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;
|
virtual ~Request() override;
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
#include "SettingsDialog.h"
|
#include "SettingsDialog.h"
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include "StringUtils.h"
|
#include "StringUtils.h"
|
||||||
#include <AK/URL.h>
|
#include <LibURL/URL.h>
|
||||||
#include <LibWebView/SearchEngine.h>
|
#include <LibWebView/SearchEngine.h>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
@ -39,11 +39,11 @@ SettingsDialog::SettingsDialog(QMainWindow* window)
|
||||||
m_new_tab_page->setText(Settings::the()->new_tab_page());
|
m_new_tab_page->setText(Settings::the()->new_tab_page());
|
||||||
QObject::connect(m_new_tab_page, &QLineEdit::textChanged, this, [this] {
|
QObject::connect(m_new_tab_page, &QLineEdit::textChanged, this, [this] {
|
||||||
auto url_string = ak_string_from_qstring(m_new_tab_page->text());
|
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] {
|
QObject::connect(m_new_tab_page, &QLineEdit::editingFinished, this, [this] {
|
||||||
auto url_string = ak_string_from_qstring(m_new_tab_page->text());
|
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());
|
Settings::the()->set_new_tab_page(m_new_tab_page->text());
|
||||||
});
|
});
|
||||||
QObject::connect(m_new_tab_page, &QLineEdit::returnPressed, this, [this] {
|
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()));
|
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();
|
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());
|
return ak_url_from_qstring(qurl.toString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,12 @@
|
||||||
#include <AK/Error.h>
|
#include <AK/Error.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <AK/URL.h>
|
#include <LibURL/URL.h>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
|
|
||||||
AK::ByteString ak_byte_string_from_qstring(QString const&);
|
AK::ByteString ak_byte_string_from_qstring(QString const&);
|
||||||
String ak_string_from_qstring(QString const&);
|
String ak_string_from_qstring(QString const&);
|
||||||
QString qstring_from_ak_string(StringView);
|
QString qstring_from_ak_string(StringView);
|
||||||
URL ak_url_from_qstring(QString const&);
|
URL::URL ak_url_from_qstring(QString const&);
|
||||||
URL ak_url_from_qurl(QUrl 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();
|
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
|
// If we are loading due to a redirect, we replace the current history entry
|
||||||
// with the loaded URL
|
// with the loaded URL
|
||||||
if (is_redirect) {
|
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));
|
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]() {
|
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)));
|
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) {
|
auto take_screenshot = [this](auto type) {
|
||||||
|
@ -733,7 +733,7 @@ void Tab::focus_location_editor()
|
||||||
m_location_edit->selectAll();
|
m_location_edit->selectAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tab::navigate(URL const& url)
|
void Tab::navigate(URL::URL const& url)
|
||||||
{
|
{
|
||||||
view().load(url);
|
view().load(url);
|
||||||
}
|
}
|
||||||
|
@ -772,17 +772,17 @@ void Tab::reload()
|
||||||
view().load(m_history.current().url.to_byte_string());
|
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);
|
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);
|
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();
|
auto* clipboard = QGuiApplication::clipboard();
|
||||||
clipboard->setText(qstring_from_ak_string(WebView::url_text_to_copy(url)));
|
clipboard->setText(qstring_from_ak_string(WebView::url_text_to_copy(url)));
|
||||||
|
|
|
@ -33,7 +33,7 @@ public:
|
||||||
|
|
||||||
WebContentView& view() { return *m_view; }
|
WebContentView& view() { return *m_view; }
|
||||||
|
|
||||||
void navigate(URL const&);
|
void navigate(URL::URL const&);
|
||||||
void load_html(StringView);
|
void load_html(StringView);
|
||||||
|
|
||||||
void back();
|
void back();
|
||||||
|
@ -69,9 +69,9 @@ private:
|
||||||
void recreate_toolbar_icons();
|
void recreate_toolbar_icons();
|
||||||
void update_hover_label();
|
void update_hover_label();
|
||||||
|
|
||||||
void open_link(URL const&);
|
void open_link(URL::URL const&);
|
||||||
void open_link_in_new_tab(URL const&);
|
void open_link_in_new_tab(URL::URL const&);
|
||||||
void copy_link_url(URL const&);
|
void copy_link_url(URL::URL const&);
|
||||||
|
|
||||||
void close_sub_widgets();
|
void close_sub_widgets();
|
||||||
|
|
||||||
|
@ -91,11 +91,11 @@ private:
|
||||||
|
|
||||||
QMenu* m_link_context_menu { nullptr };
|
QMenu* m_link_context_menu { nullptr };
|
||||||
QAction* m_link_context_menu_copy_url_action { 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 };
|
QMenu* m_image_context_menu { nullptr };
|
||||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
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_audio_context_menu { nullptr };
|
||||||
QMenu* m_video_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_mute_unmute_action { nullptr };
|
||||||
QAction* m_media_context_menu_controls_action { nullptr };
|
QAction* m_media_context_menu_controls_action { nullptr };
|
||||||
QAction* m_media_context_menu_loop_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 };
|
QMenu* m_select_dropdown { nullptr };
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,11 @@
|
||||||
#include <AK/Function.h>
|
#include <AK/Function.h>
|
||||||
#include <AK/HashMap.h>
|
#include <AK/HashMap.h>
|
||||||
#include <AK/OwnPtr.h>
|
#include <AK/OwnPtr.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Ladybird/Types.h>
|
#include <Ladybird/Types.h>
|
||||||
#include <LibGfx/Forward.h>
|
#include <LibGfx/Forward.h>
|
||||||
#include <LibGfx/Rect.h>
|
#include <LibGfx/Rect.h>
|
||||||
#include <LibGfx/StandardCursor.h>
|
#include <LibGfx/StandardCursor.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||||
#include <LibWeb/CSS/Selector.h>
|
#include <LibWeb/CSS/Selector.h>
|
||||||
#include <LibWeb/Forward.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);
|
WebContentView(QWidget* window, WebContentOptions const&, StringView webdriver_content_ipc_path, RefPtr<WebView::WebContentClient> parent_client = nullptr, size_t page_index = 0);
|
||||||
virtual ~WebContentView() override;
|
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 paintEvent(QPaintEvent*) override;
|
||||||
virtual void resizeEvent(QResizeEvent*) 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
|
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();
|
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) {
|
for (auto const& raw_url : raw_urls) {
|
||||||
if (auto url = WebView::sanitize_url(raw_url); url.has_value())
|
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 ${SERENITY_SOURCE_DIR}/Userland/Services/)
|
||||||
target_include_directories(requestserver PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
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")
|
if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
|
||||||
# Solaris has socket and networking related functions in two extra libraries
|
# Solaris has socket and networking related functions in two extra libraries
|
||||||
target_link_libraries(requestserver PUBLIC nsl socket)
|
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/Services/)
|
||||||
target_include_directories(WebContent PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
target_include_directories(WebContent PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||||
target_include_directories(WebContent PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
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)
|
if (HAVE_PULSEAUDIO)
|
||||||
target_compile_definitions(WebContent PRIVATE HAVE_PULSEAUDIO=1)
|
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/Services/)
|
||||||
target_include_directories(webworker PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
target_include_directories(webworker PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
||||||
target_include_directories(webworker PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/..)
|
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)
|
add_executable(WebWorker main.cpp)
|
||||||
target_include_directories(WebWorker PRIVATE ${SERENITY_SOURCE_DIR}/Userland/)
|
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)
|
target_link_libraries(AK PRIVATE execinfo)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
add_serenity_subdirectory(Userland/Libraries/LibURL)
|
||||||
|
|
||||||
# LibCore
|
# LibCore
|
||||||
add_serenity_subdirectory(Userland/Libraries/LibCore)
|
add_serenity_subdirectory(Userland/Libraries/LibCore)
|
||||||
target_link_libraries(LibCore PRIVATE Threads::Threads)
|
target_link_libraries(LibCore PRIVATE Threads::Threads)
|
||||||
|
@ -370,6 +372,7 @@ if (HAIKU)
|
||||||
# Haiku has networking related functions in the network library
|
# Haiku has networking related functions in the network library
|
||||||
target_link_libraries(LibCore PRIVATE network)
|
target_link_libraries(LibCore PRIVATE network)
|
||||||
endif()
|
endif()
|
||||||
|
target_link_libraries(LibCore PRIVATE LibURL)
|
||||||
|
|
||||||
# LibMain
|
# LibMain
|
||||||
add_serenity_subdirectory(Userland/Libraries/LibMain)
|
add_serenity_subdirectory(Userland/Libraries/LibMain)
|
||||||
|
@ -580,7 +583,7 @@ if (BUILD_LAGOM)
|
||||||
add_serenity_subdirectory(Meta/Lagom/Contrib/VideoPlayerSDL)
|
add_serenity_subdirectory(Meta/Lagom/Contrib/VideoPlayerSDL)
|
||||||
endif()
|
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(image SOURCES ../../Userland/Utilities/image.cpp LIBS LibGfx LibMain)
|
||||||
lagom_utility(isobmff SOURCES ../../Userland/Utilities/isobmff.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)
|
lagom_utility(ttfdisasm SOURCES ../../Userland/Utilities/ttfdisasm.cpp LIBS LibGfx LibMain)
|
||||||
|
@ -596,7 +599,7 @@ if (BUILD_LAGOM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
lagom_utility(lzcat SOURCES ../../Userland/Utilities/lzcat.cpp LIBS LibCompress LibMain)
|
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)
|
lagom_utility(mkfs.fat SOURCES ../../Userland/Utilities/mkfs.fat.cpp LIBS LibFileSystem LibMain)
|
||||||
|
|
||||||
if (NOT EMSCRIPTEN)
|
if (NOT EMSCRIPTEN)
|
||||||
|
@ -626,7 +629,7 @@ if (BUILD_LAGOM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
lagom_utility(wasm SOURCES ../../Userland/Utilities/wasm.cpp LIBS LibFileSystem LibWasm LibLine LibMain LibJS)
|
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(xzcat SOURCES ../../Userland/Utilities/xzcat.cpp LIBS LibCompress LibMain)
|
||||||
lagom_utility(fdtdump SOURCES ../../Userland/Utilities/fdtdump.cpp LIBS LibDeviceTree LibMain)
|
lagom_utility(fdtdump SOURCES ../../Userland/Utilities/fdtdump.cpp LIBS LibDeviceTree LibMain)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibGemini/Document.h>
|
#include <LibGemini/Document.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -4,12 +4,12 @@
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* 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)
|
extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size)
|
||||||
{
|
{
|
||||||
AK::set_debug_enabled(false);
|
AK::set_debug_enabled(false);
|
||||||
auto string_view = StringView(data, size);
|
auto string_view = StringView(data, size);
|
||||||
auto url = URL(string_view);
|
auto url = URL::URL(string_view);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,6 +130,7 @@ set(FUZZER_DEPENDENCIES_TGALoader LibGfx)
|
||||||
set(FUZZER_DEPENDENCIES_TIFFLoader LibGfx)
|
set(FUZZER_DEPENDENCIES_TIFFLoader LibGfx)
|
||||||
set(FUZZER_DEPENDENCIES_TTF LibGfx)
|
set(FUZZER_DEPENDENCIES_TTF LibGfx)
|
||||||
set(FUZZER_DEPENDENCIES_TinyVGLoader LibGfx)
|
set(FUZZER_DEPENDENCIES_TinyVGLoader LibGfx)
|
||||||
|
set(FUZZER_DEPENDENCIES_URL LibURL)
|
||||||
set(FUZZER_DEPENDENCIES_VP9Decoder LibVideo)
|
set(FUZZER_DEPENDENCIES_VP9Decoder LibVideo)
|
||||||
set(FUZZER_DEPENDENCIES_WasmParser LibWasm)
|
set(FUZZER_DEPENDENCIES_WasmParser LibWasm)
|
||||||
set(FUZZER_DEPENDENCIES_WAVLoader LibAudio)
|
set(FUZZER_DEPENDENCIES_WAVLoader LibAudio)
|
||||||
|
|
|
@ -84,7 +84,6 @@ set(AK_TEST_SOURCES
|
||||||
TestTypeTraits.cpp
|
TestTypeTraits.cpp
|
||||||
TestTypedTransfer.cpp
|
TestTypedTransfer.cpp
|
||||||
TestUFixedBigInt.cpp
|
TestUFixedBigInt.cpp
|
||||||
TestURL.cpp
|
|
||||||
TestUtf16.cpp
|
TestUtf16.cpp
|
||||||
TestUtf8.cpp
|
TestUtf8.cpp
|
||||||
TestVariant.cpp
|
TestVariant.cpp
|
||||||
|
|
|
@ -25,6 +25,7 @@ add_subdirectory(LibTextCodec)
|
||||||
add_subdirectory(LibThreading)
|
add_subdirectory(LibThreading)
|
||||||
add_subdirectory(LibTimeZone)
|
add_subdirectory(LibTimeZone)
|
||||||
add_subdirectory(LibUnicode)
|
add_subdirectory(LibUnicode)
|
||||||
|
add_subdirectory(LibURL)
|
||||||
add_subdirectory(LibVideo)
|
add_subdirectory(LibVideo)
|
||||||
add_subdirectory(LibWasm)
|
add_subdirectory(LibWasm)
|
||||||
add_subdirectory(LibWeb)
|
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 <LibTest/TestCase.h>
|
||||||
|
|
||||||
#include <AK/URL.h>
|
#include <LibURL/Parser.h>
|
||||||
#include <AK/URLParser.h>
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
TEST_CASE(construct)
|
TEST_CASE(construct)
|
||||||
{
|
{
|
||||||
EXPECT_EQ(URL().is_valid(), false);
|
EXPECT_EQ(URL::URL().is_valid(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(basic)
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "http");
|
EXPECT_EQ(url.scheme(), "http");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||||
|
@ -28,7 +28,7 @@ TEST_CASE(basic)
|
||||||
EXPECT(!url.fragment().has_value());
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "https");
|
EXPECT_EQ(url.scheme(), "https");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||||
|
@ -38,7 +38,7 @@ TEST_CASE(basic)
|
||||||
EXPECT(!url.fragment().has_value());
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "https");
|
EXPECT_EQ(url.scheme(), "https");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org1");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org1");
|
||||||
|
@ -48,7 +48,7 @@ TEST_CASE(basic)
|
||||||
EXPECT(!url.fragment().has_value());
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "https");
|
EXPECT_EQ(url.scheme(), "https");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "localhost");
|
EXPECT_EQ(MUST(url.serialized_host()), "localhost");
|
||||||
|
@ -58,7 +58,7 @@ TEST_CASE(basic)
|
||||||
EXPECT(!url.fragment().has_value());
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "http");
|
EXPECT_EQ(url.scheme(), "http");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||||
|
@ -68,7 +68,7 @@ TEST_CASE(basic)
|
||||||
EXPECT_EQ(url.fragment(), "");
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "http");
|
EXPECT_EQ(url.scheme(), "http");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||||
|
@ -78,7 +78,7 @@ TEST_CASE(basic)
|
||||||
EXPECT(!url.fragment().has_value());
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "http");
|
EXPECT_EQ(url.scheme(), "http");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||||
|
@ -88,7 +88,7 @@ TEST_CASE(basic)
|
||||||
EXPECT_EQ(url.fragment(), "fragment");
|
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.is_valid(), true);
|
||||||
EXPECT_EQ(url.scheme(), "http");
|
EXPECT_EQ(url.scheme(), "http");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "www.serenityos.org");
|
||||||
|
@ -101,29 +101,29 @@ TEST_CASE(basic)
|
||||||
|
|
||||||
TEST_CASE(some_bad_urls)
|
TEST_CASE(some_bad_urls)
|
||||||
{
|
{
|
||||||
EXPECT_EQ(URL("http//serenityos.org"sv).is_valid(), false);
|
EXPECT_EQ(URL::URL("http//serenityos.org"sv).is_valid(), false);
|
||||||
EXPECT_EQ(URL("serenityos.org"sv).is_valid(), false);
|
EXPECT_EQ(URL::URL("serenityos.org"sv).is_valid(), false);
|
||||||
EXPECT_EQ(URL("://serenityos.org"sv).is_valid(), false);
|
EXPECT_EQ(URL::URL("://serenityos.org"sv).is_valid(), false);
|
||||||
EXPECT_EQ(URL("://:80"sv).is_valid(), false);
|
EXPECT_EQ(URL::URL("://:80"sv).is_valid(), false);
|
||||||
EXPECT_EQ(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("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("http://serenityos.org:abc"sv).is_valid(), false);
|
EXPECT_EQ(URL::URL("http://serenityos.org:abc"sv).is_valid(), false);
|
||||||
EXPECT_EQ(URL("http://serenityos.org:abc:80"sv).is_valid(), false);
|
EXPECT_EQ(URL::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:abc:80/"sv).is_valid(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(serialization)
|
TEST_CASE(serialization)
|
||||||
{
|
{
|
||||||
EXPECT_EQ(URL("http://www.serenityos.org/"sv).serialize(), "http://www.serenityos.org/");
|
EXPECT_EQ(URL::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::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::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::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("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)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "file");
|
EXPECT_EQ(url.scheme(), "file");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "courage");
|
EXPECT_EQ(MUST(url.serialized_host()), "courage");
|
||||||
|
@ -136,7 +136,7 @@ TEST_CASE(file_url_with_hostname)
|
||||||
|
|
||||||
TEST_CASE(file_url_with_localhost)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "file");
|
EXPECT_EQ(url.scheme(), "file");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "");
|
EXPECT_EQ(MUST(url.serialized_host()), "");
|
||||||
|
@ -146,7 +146,7 @@ TEST_CASE(file_url_with_localhost)
|
||||||
|
|
||||||
TEST_CASE(file_url_without_hostname)
|
TEST_CASE(file_url_without_hostname)
|
||||||
{
|
{
|
||||||
URL url("file:///my/file"sv);
|
URL::URL url("file:///my/file"sv);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "file");
|
EXPECT_EQ(url.scheme(), "file");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "");
|
EXPECT_EQ(MUST(url.serialized_host()), "");
|
||||||
|
@ -156,7 +156,7 @@ TEST_CASE(file_url_without_hostname)
|
||||||
|
|
||||||
TEST_CASE(file_url_with_encoded_characters)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "file");
|
EXPECT_EQ(url.scheme(), "file");
|
||||||
EXPECT_EQ(url.serialize_path(), "/my/file/test#file.txt");
|
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)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "file");
|
EXPECT_EQ(url.scheme(), "file");
|
||||||
EXPECT_EQ(url.serialize_path(), "/my/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)
|
TEST_CASE(file_url_with_root_path)
|
||||||
{
|
{
|
||||||
URL url("file:///"sv);
|
URL::URL url("file:///"sv);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "file");
|
EXPECT_EQ(url.scheme(), "file");
|
||||||
EXPECT_EQ(url.serialize_path(), "/");
|
EXPECT_EQ(url.serialize_path(), "/");
|
||||||
|
@ -184,23 +184,23 @@ TEST_CASE(file_url_with_root_path)
|
||||||
|
|
||||||
TEST_CASE(file_url_serialization)
|
TEST_CASE(file_url_serialization)
|
||||||
{
|
{
|
||||||
EXPECT_EQ(URL("file://courage/my/file"sv).serialize(), "file://courage/my/file");
|
EXPECT_EQ(URL::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::URL("file://localhost/my/file"sv).serialize(), "file:///my/file");
|
||||||
EXPECT_EQ(URL("file:///my/file"sv).serialize(), "file:///my/file");
|
EXPECT_EQ(URL::URL("file:///my/file"sv).serialize(), "file:///my/file");
|
||||||
EXPECT_EQ(URL("file:///my/directory/"sv).serialize(), "file:///my/directory/");
|
EXPECT_EQ(URL::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::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:///my/file#fragment"sv).serialize(), "file:///my/file#fragment");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(file_url_relative)
|
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::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("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)
|
TEST_CASE(about_url)
|
||||||
{
|
{
|
||||||
URL url("about:blank"sv);
|
URL::URL url("about:blank"sv);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "about");
|
EXPECT_EQ(url.scheme(), "about");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -212,7 +212,7 @@ TEST_CASE(about_url)
|
||||||
|
|
||||||
TEST_CASE(mailto_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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "mailto");
|
EXPECT_EQ(url.scheme(), "mailto");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -226,7 +226,7 @@ TEST_CASE(mailto_url)
|
||||||
|
|
||||||
TEST_CASE(mailto_url_with_subject)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "mailto");
|
EXPECT_EQ(url.scheme(), "mailto");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -240,7 +240,7 @@ TEST_CASE(mailto_url_with_subject)
|
||||||
|
|
||||||
TEST_CASE(data_url)
|
TEST_CASE(data_url)
|
||||||
{
|
{
|
||||||
URL url("data:text/html,test"sv);
|
URL::URL url("data:text/html,test"sv);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -253,7 +253,7 @@ TEST_CASE(data_url)
|
||||||
|
|
||||||
TEST_CASE(data_url_default_mime_type)
|
TEST_CASE(data_url_default_mime_type)
|
||||||
{
|
{
|
||||||
URL url("data:,test"sv);
|
URL::URL url("data:,test"sv);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -266,7 +266,7 @@ TEST_CASE(data_url_default_mime_type)
|
||||||
|
|
||||||
TEST_CASE(data_url_encoded)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -279,7 +279,7 @@ TEST_CASE(data_url_encoded)
|
||||||
|
|
||||||
TEST_CASE(data_url_base64_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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
EXPECT(url.host().has<Empty>());
|
||||||
|
@ -292,7 +292,7 @@ TEST_CASE(data_url_base64_encoded)
|
||||||
|
|
||||||
TEST_CASE(data_url_base64_encoded_default_mime_type)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
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)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
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)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT(url.host().has<Empty>());
|
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)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "data");
|
EXPECT_EQ(url.scheme(), "data");
|
||||||
EXPECT_EQ(url.fragment(), "a");
|
EXPECT_EQ(url.fragment(), "a");
|
||||||
|
@ -343,29 +343,29 @@ TEST_CASE(data_url_completed_with_fragment)
|
||||||
|
|
||||||
TEST_CASE(trailing_slash_with_complete_url)
|
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::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::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::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/c");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(trailing_port)
|
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);
|
EXPECT_EQ(url.port_or_default(), 8086);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(port_overflow)
|
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)
|
TEST_CASE(equality)
|
||||||
{
|
{
|
||||||
EXPECT(URL("http://serenityos.org"sv).equals("http://serenityos.org#test"sv, URL::ExcludeFragment::Yes));
|
EXPECT(URL::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::URL("http://example.com/index.html"sv), URL::URL("http://ex%61mple.com/index.html"sv));
|
||||||
EXPECT_EQ(URL("file:///my/file"sv), URL("file://localhost/my/file"sv));
|
EXPECT_EQ(URL::URL("file:///my/file"sv), URL::URL("file://localhost/my/file"sv));
|
||||||
EXPECT_NE(URL("http://serenityos.org/index.html"sv), URL("http://serenityos.org/test.html"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)
|
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.path_segment_at_index(2), "");
|
||||||
EXPECT_EQ(url.serialize_path(), "/home/anon/");
|
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/");
|
EXPECT_EQ(url.serialize_path(), "/home/anon/");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(complete_url)
|
TEST_CASE(complete_url)
|
||||||
{
|
{
|
||||||
URL base_url("http://serenityos.org/index.html#fragment"sv);
|
URL::URL base_url("http://serenityos.org/index.html#fragment"sv);
|
||||||
URL url = base_url.complete_url("test.html"sv);
|
URL::URL url = base_url.complete_url("test.html"sv);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.scheme(), "http");
|
EXPECT_EQ(url.scheme(), "http");
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "serenityos.org");
|
EXPECT_EQ(MUST(url.serialized_host()), "serenityos.org");
|
||||||
|
@ -410,28 +410,28 @@ TEST_CASE(complete_url)
|
||||||
|
|
||||||
TEST_CASE(leading_whitespace)
|
TEST_CASE(leading_whitespace)
|
||||||
{
|
{
|
||||||
URL url { " https://foo.com/"sv };
|
URL::URL url { " https://foo.com/"sv };
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(trailing_whitespace)
|
TEST_CASE(trailing_whitespace)
|
||||||
{
|
{
|
||||||
URL url { "https://foo.com/ "sv };
|
URL::URL url { "https://foo.com/ "sv };
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(leading_and_trailing_whitespace)
|
TEST_CASE(leading_and_trailing_whitespace)
|
||||||
{
|
{
|
||||||
URL url { " https://foo.com/ "sv };
|
URL::URL url { " https://foo.com/ "sv };
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
EXPECT_EQ(url.to_byte_string(), "https://foo.com/");
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE(unicode)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.serialize_path(), "/_ünicöde_téxt_©");
|
EXPECT_EQ(url.serialize_path(), "/_ünicöde_téxt_©");
|
||||||
EXPECT(!url.query().has_value());
|
EXPECT(!url.query().has_value());
|
||||||
|
@ -440,7 +440,7 @@ TEST_CASE(unicode)
|
||||||
|
|
||||||
TEST_CASE(query_with_non_ascii)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.serialize_path(), "/"sv);
|
EXPECT_EQ(url.serialize_path(), "/"sv);
|
||||||
EXPECT_EQ(url.query(), "utf8=%E2%9C%93");
|
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)
|
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(url.is_valid());
|
||||||
EXPECT_EQ(url.serialize_path(), "/home/index.html");
|
EXPECT_EQ(url.serialize_path(), "/home/index.html");
|
||||||
EXPECT_EQ(url.path_segment_count(), 2u);
|
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)
|
TEST_CASE(empty_url_with_base_url)
|
||||||
{
|
{
|
||||||
URL base_url { "https://foo.com/"sv };
|
URL::URL base_url { "https://foo.com/"sv };
|
||||||
URL parsed_url = URLParser::basic_parse(""sv, base_url);
|
URL::URL parsed_url = URL::Parser::basic_parse(""sv, base_url);
|
||||||
EXPECT_EQ(parsed_url.is_valid(), true);
|
EXPECT_EQ(parsed_url.is_valid(), true);
|
||||||
EXPECT(base_url.equals(parsed_url));
|
EXPECT(base_url.equals(parsed_url));
|
||||||
}
|
}
|
||||||
|
@ -472,7 +472,7 @@ TEST_CASE(empty_url_with_base_url)
|
||||||
TEST_CASE(google_street_view)
|
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";
|
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);
|
EXPECT_EQ(url.serialize(), streetview_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -480,7 +480,7 @@ TEST_CASE(ipv6_address)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
constexpr auto ipv6_url = "http://[::1]/index.html"sv;
|
constexpr auto ipv6_url = "http://[::1]/index.html"sv;
|
||||||
URL url(ipv6_url);
|
URL::URL url(ipv6_url);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "[::1]"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "[::1]"sv);
|
||||||
EXPECT_EQ(url, ipv6_url);
|
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;
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "[0:f::f:f:0:0]"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "[0:f::f:f:0:0]"sv);
|
||||||
EXPECT_EQ(url, ipv6_url);
|
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;
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "[2001:db8:85a3::8a2e:370:7334]"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "[2001:db8:85a3::8a2e:370:7334]"sv);
|
||||||
EXPECT_EQ(url, ipv6_url);
|
EXPECT_EQ(url, ipv6_url);
|
||||||
|
@ -504,7 +504,7 @@ TEST_CASE(ipv6_address)
|
||||||
|
|
||||||
{
|
{
|
||||||
constexpr auto bad_ipv6_url = "https://[oops]/index.html"sv;
|
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);
|
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;
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "127.0.0.1"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "127.0.0.1"sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
constexpr auto ipv4_url = "http://0x.0x.0"sv;
|
constexpr auto ipv4_url = "http://0x.0x.0"sv;
|
||||||
URL url(ipv4_url);
|
URL::URL url(ipv4_url);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "0.0.0.0"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "0.0.0.0"sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
constexpr auto bad_ipv4_url = "https://127..0.0.1"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());
|
EXPECT(!url.is_valid());
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
constexpr auto ipv4_url = "http://256"sv;
|
constexpr auto ipv4_url = "http://256"sv;
|
||||||
URL url(ipv4_url);
|
URL::URL url(ipv4_url);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "0.0.1.0"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "0.0.1.0"sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
constexpr auto ipv4_url = "http://888888888"sv;
|
constexpr auto ipv4_url = "http://888888888"sv;
|
||||||
URL url(ipv4_url);
|
URL::URL url(ipv4_url);
|
||||||
EXPECT(url.is_valid());
|
EXPECT(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "52.251.94.56"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "52.251.94.56"sv);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
constexpr auto ipv4_url = "http://9111111111"sv;
|
constexpr auto ipv4_url = "http://9111111111"sv;
|
||||||
URL url(ipv4_url);
|
URL::URL url(ipv4_url);
|
||||||
EXPECT(!url.is_valid());
|
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;
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||||
EXPECT_EQ(MUST(url.username()), "username"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;
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||||
EXPECT_EQ(MUST(url.username()), "username!$%"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& username = MUST(String::repeated('a', 50000));
|
||||||
auto const& url_with_long_username = MUST(String::formatted("http://{}:@test.com/index.html", username));
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||||
EXPECT_EQ(MUST(url.username()), username);
|
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& password = MUST(String::repeated('a', 50000));
|
||||||
auto const& url_with_long_password = MUST(String::formatted("http://:{}@test.com/index.html", password));
|
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(url.is_valid());
|
||||||
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
EXPECT_EQ(MUST(url.serialized_host()), "test.com"sv);
|
||||||
EXPECT(MUST(url.username()).is_empty());
|
EXPECT(MUST(url.username()).is_empty());
|
|
@ -3,5 +3,5 @@ set(TEST_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
foreach(source IN LISTS TEST_SOURCES)
|
foreach(source IN LISTS TEST_SOURCES)
|
||||||
serenity_test("${source}" LibWebView LIBS LibWebView)
|
serenity_test("${source}" LibWebView LIBS LibWebView LibURL)
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
|
@ -12,4 +12,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(3DFileViewer ICON app-3d-file-viewer)
|
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)
|
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/BinaryHeap.h>
|
||||||
#include <AK/FuzzyMatch.h>
|
#include <AK/FuzzyMatch.h>
|
||||||
#include <AK/LexicalPath.h>
|
#include <AK/LexicalPath.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/Directory.h>
|
#include <LibCore/Directory.h>
|
||||||
#include <LibCore/ElapsedTimer.h>
|
#include <LibCore/ElapsedTimer.h>
|
||||||
#include <LibCore/StandardPaths.h>
|
#include <LibCore/StandardPaths.h>
|
||||||
|
@ -20,6 +19,7 @@
|
||||||
#include <LibJS/Runtime/GlobalObject.h>
|
#include <LibJS/Runtime/GlobalObject.h>
|
||||||
#include <LibJS/Runtime/ValueInlines.h>
|
#include <LibJS/Runtime/ValueInlines.h>
|
||||||
#include <LibJS/Script.h>
|
#include <LibJS/Script.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <serenity.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('$'))
|
if (query.is_empty() || query.starts_with('=') || query.starts_with('$'))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
URL url = URL(query);
|
URL::URL url = URL::URL(query);
|
||||||
|
|
||||||
if (url.scheme().is_empty())
|
if (url.scheme().is_empty())
|
||||||
url.set_scheme("http"_string);
|
url.set_scheme("http"_string);
|
||||||
|
|
|
@ -8,12 +8,12 @@
|
||||||
|
|
||||||
#include <AK/ByteString.h>
|
#include <AK/ByteString.h>
|
||||||
#include <AK/Queue.h>
|
#include <AK/Queue.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibDesktop/AppFile.h>
|
#include <LibDesktop/AppFile.h>
|
||||||
#include <LibGUI/Desktop.h>
|
#include <LibGUI/Desktop.h>
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibJS/Runtime/VM.h>
|
#include <LibJS/Runtime/VM.h>
|
||||||
#include <LibThreading/BackgroundAction.h>
|
#include <LibThreading/BackgroundAction.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
|
|
||||||
namespace Assistant {
|
namespace Assistant {
|
||||||
|
@ -118,7 +118,7 @@ private:
|
||||||
|
|
||||||
class URLResult final : public Result {
|
class URLResult final : public Result {
|
||||||
public:
|
public:
|
||||||
explicit URLResult(const URL& url)
|
explicit URLResult(const URL::URL& url)
|
||||||
: Result(url.to_byte_string(), "Open URL in Browser"_string, 50)
|
: Result(url.to_byte_string(), "Open URL in Browser"_string, 50)
|
||||||
, m_bitmap(GUI::Icon::default_icon("app-browser"sv).bitmap_for_size(16))
|
, 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();
|
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_cookie_jar(cookie_jar)
|
||||||
, m_window_actions(*this)
|
, 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&) {
|
"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();
|
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 (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);
|
Config::write_string("Browser"sv, "Preferences"sv, "Home"sv, homepage_url);
|
||||||
Browser::g_home_url = homepage_url.to_byte_string();
|
Browser::g_home_url = homepage_url.to_byte_string();
|
||||||
} else {
|
} 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));
|
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);
|
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;
|
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() });
|
GUI::Process::spawn_or_show_error(this, "/bin/Browser"sv, Array { url.to_byte_string() });
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ public:
|
||||||
|
|
||||||
GUI::TabWidget& tab_widget();
|
GUI::TabWidget& tab_widget();
|
||||||
Tab& active_tab();
|
Tab& active_tab();
|
||||||
Tab& create_new_tab(URL const&, Web::HTML::ActivateTab activate);
|
Tab& create_new_tab(URL::URL const&, Web::HTML::ActivateTab activate);
|
||||||
void create_new_window(URL const&);
|
void create_new_window(URL::URL const&);
|
||||||
|
|
||||||
GUI::Action& go_back_action() { return *m_go_back_action; }
|
GUI::Action& go_back_action() { return *m_go_back_action; }
|
||||||
GUI::Action& go_forward_action() { return *m_go_forward_action; }
|
GUI::Action& go_forward_action() { return *m_go_forward_action; }
|
||||||
|
@ -51,7 +51,7 @@ public:
|
||||||
void broadcast_window_size(Gfx::IntSize);
|
void broadcast_window_size(Gfx::IntSize);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BrowserWindow(WebView::CookieJar&, Vector<URL> const&, StringView const);
|
BrowserWindow(WebView::CookieJar&, Vector<URL::URL> const&, StringView const);
|
||||||
|
|
||||||
void build_menus(StringView const);
|
void build_menus(StringView const);
|
||||||
ErrorOr<void> load_search_engines(GUI::Menu& settings_menu);
|
ErrorOr<void> load_search_engines(GUI::Menu& settings_menu);
|
||||||
|
|
|
@ -37,5 +37,5 @@ set(GENERATED_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Browser ICON app-browser)
|
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)
|
link_with_locale_data(Browser)
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
namespace Browser {
|
namespace Browser {
|
||||||
|
|
||||||
DownloadWidget::DownloadWidget(const URL& url)
|
DownloadWidget::DownloadWidget(const URL::URL& url)
|
||||||
: m_url(url)
|
: m_url(url)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/ElapsedTimer.h>
|
#include <LibCore/ElapsedTimer.h>
|
||||||
#include <LibGUI/ImageWidget.h>
|
#include <LibGUI/ImageWidget.h>
|
||||||
#include <LibGUI/Progressbar.h>
|
#include <LibGUI/Progressbar.h>
|
||||||
#include <LibGUI/Widget.h>
|
#include <LibGUI/Widget.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/Loader/ResourceLoader.h>
|
#include <LibWeb/Loader/ResourceLoader.h>
|
||||||
|
|
||||||
namespace Browser {
|
namespace Browser {
|
||||||
|
@ -23,12 +23,12 @@ public:
|
||||||
virtual ~DownloadWidget() override = default;
|
virtual ~DownloadWidget() override = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit DownloadWidget(const URL&);
|
explicit DownloadWidget(const URL::URL&);
|
||||||
|
|
||||||
void did_progress(Optional<u64> total_size, u64 downloaded_size);
|
void did_progress(Optional<u64> total_size, u64 downloaded_size);
|
||||||
void did_finish(bool success);
|
void did_finish(bool success);
|
||||||
|
|
||||||
URL m_url;
|
URL::URL m_url;
|
||||||
ByteString m_destination_path;
|
ByteString m_destination_path;
|
||||||
RefPtr<Web::ResourceLoaderConnectorRequest> m_download;
|
RefPtr<Web::ResourceLoaderConnectorRequest> m_download;
|
||||||
RefPtr<GUI::Progressbar> m_progressbar;
|
RefPtr<GUI::Progressbar> m_progressbar;
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "InspectorWidget.h"
|
#include "InspectorWidget.h"
|
||||||
#include "StorageWidget.h"
|
#include "StorageWidget.h"
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Applications/Browser/TabGML.h>
|
#include <Applications/Browser/TabGML.h>
|
||||||
#include <Applications/Browser/URLBox.h>
|
#include <Applications/Browser/URLBox.h>
|
||||||
#include <Applications/BrowserSettings/Defaults.h>
|
#include <Applications/BrowserSettings/Defaults.h>
|
||||||
|
@ -42,6 +41,7 @@
|
||||||
#include <LibGUI/Toolbar.h>
|
#include <LibGUI/Toolbar.h>
|
||||||
#include <LibGUI/ToolbarContainer.h>
|
#include <LibGUI/ToolbarContainer.h>
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/HTML/BrowsingContext.h>
|
#include <LibWeb/HTML/BrowsingContext.h>
|
||||||
#include <LibWeb/HTML/SelectedFile.h>
|
#include <LibWeb/HTML/SelectedFile.h>
|
||||||
#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
|
#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
|
||||||
|
@ -59,7 +59,7 @@ Tab::~Tab()
|
||||||
close_sub_widgets();
|
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());
|
auto window = GUI::Window::construct(&this->window());
|
||||||
window->resize(300, 170);
|
window->resize(300, 170);
|
||||||
|
@ -69,7 +69,7 @@ void Tab::start_download(const URL& url)
|
||||||
window->show();
|
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 window = GUI::Window::construct(&this->window());
|
||||||
auto editor = window->set_main_widget<GUI::TextEditor>();
|
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) {
|
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
|
// 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();
|
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_is_history_navigation = (load_type == LoadType::HistoryNavigation);
|
||||||
m_web_content_view->load(url);
|
m_web_content_view->load(url);
|
||||||
m_location_box->set_focus(false);
|
m_location_box->set_focus(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
URL Tab::url() const
|
URL::URL Tab::url() const
|
||||||
{
|
{
|
||||||
return m_web_content_view->url();
|
return m_web_content_view->url();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/Optional.h>
|
#include <AK/Optional.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibGUI/ActionGroup.h>
|
#include <LibGUI/ActionGroup.h>
|
||||||
#include <LibGUI/Widget.h>
|
#include <LibGUI/Widget.h>
|
||||||
#include <LibGfx/ShareableBitmap.h>
|
#include <LibGfx/ShareableBitmap.h>
|
||||||
#include <LibHTTP/Job.h>
|
#include <LibHTTP/Job.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/Forward.h>
|
#include <LibWeb/Forward.h>
|
||||||
#include <LibWebView/History.h>
|
#include <LibWebView/History.h>
|
||||||
#include <LibWebView/ViewImplementation.h>
|
#include <LibWebView/ViewImplementation.h>
|
||||||
|
@ -38,14 +38,14 @@ class Tab final : public GUI::Widget {
|
||||||
public:
|
public:
|
||||||
virtual ~Tab() override;
|
virtual ~Tab() override;
|
||||||
|
|
||||||
URL url() const;
|
URL::URL url() const;
|
||||||
|
|
||||||
enum class LoadType {
|
enum class LoadType {
|
||||||
Normal,
|
Normal,
|
||||||
HistoryNavigation,
|
HistoryNavigation,
|
||||||
};
|
};
|
||||||
|
|
||||||
void load(URL const&, LoadType = LoadType::Normal);
|
void load(URL::URL const&, LoadType = LoadType::Normal);
|
||||||
|
|
||||||
void reload();
|
void reload();
|
||||||
void go_back(int steps = 1);
|
void go_back(int steps = 1);
|
||||||
|
@ -64,11 +64,11 @@ public:
|
||||||
void window_size_changed(Gfx::IntSize);
|
void window_size_changed(Gfx::IntSize);
|
||||||
|
|
||||||
Function<void(ByteString const&)> on_title_change;
|
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_activate_tab_request;
|
||||||
Function<void(Tab&)> on_tab_close_request;
|
Function<void(Tab&)> on_tab_close_request;
|
||||||
Function<void(Tab&)> on_tab_close_other_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<void(Gfx::Bitmap const&)> on_favicon_change;
|
||||||
Function<Vector<Web::Cookie::Cookie>()> on_get_cookies_entries;
|
Function<Vector<Web::Cookie::Cookie>()> on_get_cookies_entries;
|
||||||
Function<OrderedHashMap<String, String>()> on_get_local_storage_entries;
|
Function<OrderedHashMap<String, String>()> on_get_local_storage_entries;
|
||||||
|
@ -104,8 +104,8 @@ private:
|
||||||
void update_actions();
|
void update_actions();
|
||||||
ErrorOr<void> bookmark_current_url();
|
ErrorOr<void> bookmark_current_url();
|
||||||
void update_bookmark_button(StringView url);
|
void update_bookmark_button(StringView url);
|
||||||
void start_download(const URL& url);
|
void start_download(const URL::URL& url);
|
||||||
void view_source(const URL& url, ByteString const& source);
|
void view_source(const URL::URL& url, ByteString const& source);
|
||||||
void update_status(Optional<String> text_override = {}, i32 count_waiting = 0);
|
void update_status(Optional<String> text_override = {}, i32 count_waiting = 0);
|
||||||
void close_sub_widgets();
|
void close_sub_widgets();
|
||||||
|
|
||||||
|
@ -129,11 +129,11 @@ private:
|
||||||
RefPtr<GUI::Menu> m_link_context_menu;
|
RefPtr<GUI::Menu> m_link_context_menu;
|
||||||
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
||||||
RefPtr<GUI::Action> m_link_copy_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;
|
RefPtr<GUI::Menu> m_image_context_menu;
|
||||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
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_audio_context_menu;
|
||||||
RefPtr<GUI::Menu> m_video_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_mute_unmute_action;
|
||||||
RefPtr<GUI::Action> m_media_context_menu_controls_action;
|
RefPtr<GUI::Action> m_media_context_menu_controls_action;
|
||||||
RefPtr<GUI::Action> m_media_context_menu_loop_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;
|
RefPtr<GUI::Menu> m_tab_context_menu;
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ private:
|
||||||
ByteString m_title;
|
ByteString m_title;
|
||||||
RefPtr<Gfx::Bitmap const> m_icon;
|
RefPtr<Gfx::Bitmap const> m_icon;
|
||||||
|
|
||||||
Optional<URL> m_navigating_url;
|
Optional<URL::URL> m_navigating_url;
|
||||||
|
|
||||||
bool m_loaded { false };
|
bool m_loaded { false };
|
||||||
bool m_is_history_navigation { false };
|
bool m_is_history_navigation { false };
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Applications/Browser/URLBox.h>
|
#include <Applications/Browser/URLBox.h>
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
#include <LibGfx/TextAttributes.h>
|
#include <LibGfx/TextAttributes.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWebView/URL.h>
|
#include <LibWebView/URL.h>
|
||||||
|
|
||||||
namespace Browser {
|
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) {
|
for (auto specified_url : specified_urls) {
|
||||||
if (auto url = WebView::sanitize_url(specified_url); url.has_value())
|
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()
|
void BrowserSettingsWidget::apply_settings()
|
||||||
{
|
{
|
||||||
auto homepage_url = m_homepage_url_textbox->text();
|
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);
|
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->select_all();
|
||||||
m_homepage_url_textbox->set_focus(true);
|
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);
|
Config::write_string("Browser"sv, "Preferences"sv, "Home"sv, homepage_url);
|
||||||
|
|
||||||
auto new_tab_url = m_new_tab_url_textbox->text();
|
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);
|
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->select_all();
|
||||||
m_new_tab_url_textbox->set_focus(true);
|
m_new_tab_url_textbox->set_focus(true);
|
||||||
|
|
|
@ -19,4 +19,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(BrowserSettings ICON app-browser)
|
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)
|
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 "CalculatorWidget.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
#include <LibCrypto/NumberTheory/ModularFunctions.h>
|
#include <LibCrypto/NumberTheory/ModularFunctions.h>
|
||||||
#include <LibDesktop/Launcher.h>
|
#include <LibDesktop/Launcher.h>
|
||||||
|
@ -20,6 +19,7 @@
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibGfx/Bitmap.h>
|
#include <LibGfx/Bitmap.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,4 +22,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Calendar ICON app-calendar)
|
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)
|
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 "CharacterMapWidget.h"
|
||||||
#include "SearchCharacters.h"
|
#include "SearchCharacters.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
|
@ -16,6 +15,7 @@
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibGfx/Font/FontDatabase.h>
|
#include <LibGfx/Font/FontDatabase.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
static void search_and_print_results(ByteString const& query)
|
static void search_and_print_results(ByteString const& query)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,4 +13,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(CrashReporter ICON app-crash-reporter)
|
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/LexicalPath.h>
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
#include <LibCoredump/Backtrace.h>
|
#include <LibCoredump/Backtrace.h>
|
||||||
|
@ -37,6 +36,7 @@
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
#include <LibThreading/BackgroundAction.h>
|
#include <LibThreading/BackgroundAction.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <mallocdefs.h>
|
#include <mallocdefs.h>
|
||||||
#include <serenity.h>
|
#include <serenity.h>
|
||||||
#include <spawn.h>
|
#include <spawn.h>
|
||||||
|
|
|
@ -33,4 +33,4 @@ set(GENERATED_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(DisplaySettings ICON app-display-settings)
|
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)
|
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 {};
|
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;
|
Vector<NonnullRefPtr<LauncherHandler>> handlers;
|
||||||
for (auto& h : Desktop::Launcher::get_handlers_with_details_for_url(url)) {
|
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);
|
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;
|
pid_t child;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include <LibConfig/Listener.h>
|
#include <LibConfig/Listener.h>
|
||||||
#include <LibDesktop/Launcher.h>
|
#include <LibDesktop/Launcher.h>
|
||||||
|
@ -16,6 +15,7 @@
|
||||||
#include <LibGUI/IconView.h>
|
#include <LibGUI/IconView.h>
|
||||||
#include <LibGUI/StackWidget.h>
|
#include <LibGUI/StackWidget.h>
|
||||||
#include <LibGUI/TableView.h>
|
#include <LibGUI/TableView.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
@ -59,12 +59,12 @@ public:
|
||||||
int path_history_size() const { return m_path_history.size(); }
|
int path_history_size() const { return m_path_history.size(); }
|
||||||
int path_history_position() const { return m_path_history_position; }
|
int path_history_position() const { return m_path_history_position; }
|
||||||
static RefPtr<LauncherHandler> get_default_launch_handler(Vector<NonnullRefPtr<LauncherHandler>> const& handlers);
|
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);
|
static Vector<NonnullRefPtr<LauncherHandler>> get_launch_handlers(ByteString const& path);
|
||||||
|
|
||||||
void refresh();
|
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(StringView path, bool can_read_in_path, bool can_write_in_path)> on_path_change;
|
||||||
Function<void(GUI::AbstractView&)> on_selection_change;
|
Function<void(GUI::AbstractView&)> on_selection_change;
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include <AK/LexicalPath.h>
|
#include <AK/LexicalPath.h>
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/Try.h>
|
#include <AK/Try.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Applications/FileManager/FileManagerWindowGML.h>
|
#include <Applications/FileManager/FileManagerWindowGML.h>
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
#include <LibConfig/Listener.h>
|
#include <LibConfig/Listener.h>
|
||||||
|
@ -49,6 +48,7 @@
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.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) {
|
for (auto& uri_as_string : copied_lines) {
|
||||||
if (uri_as_string.is_empty())
|
if (uri_as_string.is_empty())
|
||||||
continue;
|
continue;
|
||||||
URL url = uri_as_string;
|
URL::URL url = uri_as_string;
|
||||||
if (!url.is_valid() || url.scheme() != "file") {
|
if (!url.is_valid() || url.scheme() != "file") {
|
||||||
dbgln("Cannot paste URI {}", uri_as_string);
|
dbgln("Cannot paste URI {}", uri_as_string);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -25,4 +25,4 @@ set(GENERATED_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(FontEditor ICON app-font-editor)
|
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 "MainWidget.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
|
@ -15,6 +14,7 @@
|
||||||
#include <LibGUI/Icon.h>
|
#include <LibGUI/Icon.h>
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,5 +16,5 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Help ICON app-help)
|
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)
|
link_with_locale_data(Help)
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
#include <AK/LexicalPath.h>
|
#include <AK/LexicalPath.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
#include <LibDesktop/Launcher.h>
|
#include <LibDesktop/Launcher.h>
|
||||||
|
@ -35,6 +34,7 @@
|
||||||
#include <LibManual/Path.h>
|
#include <LibManual/Path.h>
|
||||||
#include <LibManual/SectionNode.h>
|
#include <LibManual/SectionNode.h>
|
||||||
#include <LibMarkdown/Document.h>
|
#include <LibMarkdown/Document.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
namespace Help {
|
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_copy_action->set_enabled(!m_web_view->selected_text().is_empty());
|
||||||
m_context_menu->popup(screen_position);
|
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())
|
if (url.is_valid())
|
||||||
m_statusbar->set_text(String::from_byte_string(url.to_byte_string()).release_value_but_fixme_should_propagate_errors());
|
m_statusbar->set_text(String::from_byte_string(url.to_byte_string()).release_value_but_fixme_should_propagate_errors());
|
||||||
else
|
else
|
||||||
|
@ -245,7 +245,7 @@ ErrorOr<void> MainWidget::initialize(GUI::Window& window)
|
||||||
return {};
|
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_back_action->set_enabled(m_history.can_go_back());
|
||||||
m_go_forward_action->set_enabled(m_history.can_go_forward());
|
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))
|
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);
|
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:
|
private:
|
||||||
MainWidget();
|
MainWidget();
|
||||||
|
|
||||||
void open_url(URL const&);
|
void open_url(URL::URL const&);
|
||||||
void open_page(Optional<String> const& path);
|
void open_page(Optional<String> const& path);
|
||||||
void open_external(URL const&);
|
void open_external(URL::URL const&);
|
||||||
|
|
||||||
History m_history;
|
History m_history;
|
||||||
RefPtr<GUI::Menu> m_context_menu;
|
RefPtr<GUI::Menu> m_context_menu;
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "MainWidget.h"
|
#include "MainWidget.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
#include <LibGUI/Application.h>
|
#include <LibGUI/Application.h>
|
||||||
#include <LibGUI/Icon.h>
|
#include <LibGUI/Icon.h>
|
||||||
#include <LibGUI/Window.h>
|
#include <LibGUI/Window.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
using namespace Help;
|
using namespace Help;
|
||||||
|
|
||||||
|
|
|
@ -25,4 +25,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(HexEditor ICON app-hex-editor)
|
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
|
ViewWidget.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(ImageViewer ICON app-image-viewer)
|
serenity_app(ImageViewer ICON filetype-image)
|
||||||
target_link_libraries(ImageViewer PRIVATE LibCore LibDesktop LibFileSystemAccessClient LibGUI LibGfx LibConfig LibImageDecoderClient LibMain)
|
target_link_libraries(ImageViewer PRIVATE LibCore LibDesktop LibFileSystemAccessClient LibGUI LibGfx LibConfig LibImageDecoderClient LibMain LibURL)
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
|
|
||||||
#include "MainWidget.h"
|
#include "MainWidget.h"
|
||||||
#include "ViewWidget.h"
|
#include "ViewWidget.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
#include <LibCore/ArgsParser.h>
|
#include <LibCore/ArgsParser.h>
|
||||||
#include <LibCore/System.h>
|
#include <LibCore/System.h>
|
||||||
|
@ -32,6 +31,7 @@
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
#include <LibGfx/Rect.h>
|
#include <LibGfx/Rect.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <serenity.h>
|
#include <serenity.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
|
@ -10,4 +10,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Magnifier ICON app-magnifier)
|
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)
|
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::Menu> m_link_context_menu;
|
||||||
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
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;
|
RefPtr<GUI::Menu> m_image_context_menu;
|
||||||
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
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;
|
OwnPtr<AccountHolder> m_account_holder;
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,4 +21,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Maps ICON app-maps)
|
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 "MapWidget.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Applications/MapsSettings/Defaults.h>
|
#include <Applications/MapsSettings/Defaults.h>
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
#include <LibDesktop/Launcher.h>
|
#include <LibDesktop/Launcher.h>
|
||||||
|
@ -15,6 +14,7 @@
|
||||||
#include <LibGUI/Clipboard.h>
|
#include <LibGUI/Clipboard.h>
|
||||||
#include <LibGfx/ImageFormats/ImageDecoder.h>
|
#include <LibGfx/ImageFormats/ImageDecoder.h>
|
||||||
#include <LibProtocol/Request.h>
|
#include <LibProtocol/Request.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
namespace Maps {
|
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();
|
m_request_client = Protocol::RequestClient::try_create().release_value_but_fixme_should_propagate_errors();
|
||||||
if (options.attribution_enabled) {
|
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))));
|
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 });
|
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();
|
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
|
// Update attribution panel url when it exists
|
||||||
for (auto& panel : m_panels) {
|
for (auto& panel : m_panels) {
|
||||||
if (panel.name == "attribution") {
|
if (panel.name == "attribution") {
|
||||||
panel.url = URL(value);
|
panel.url = URL::URL(value);
|
||||||
return;
|
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));
|
auto link_icon = MUST(Gfx::Bitmap::load_from_file("/res/icons/16x16/filetype-symlink.png"sv));
|
||||||
m_context_menu->add_action(GUI::Action::create(
|
m_context_menu->add_action(GUI::Action::create(
|
||||||
"Open in &OpenStreetMap", link_icon, [this](auto&) {
|
"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(
|
m_context_menu->add_action(GUI::Action::create(
|
||||||
"Open in &Google Maps", link_icon, [this](auto&) {
|
"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(
|
m_context_menu->add_action(GUI::Action::create(
|
||||||
"Open in &Bing Maps", link_icon, [this](auto&) {
|
"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(
|
m_context_menu->add_action(GUI::Action::create(
|
||||||
"Open in &DuckDuckGo Maps", link_icon, [this](auto&) {
|
"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_separator();
|
||||||
m_context_menu->add_action(GUI::Action::create(
|
m_context_menu->add_action(GUI::Action::create(
|
||||||
|
@ -318,7 +318,7 @@ void MapWidget::process_tile_queue()
|
||||||
HashMap<ByteString, ByteString> headers;
|
HashMap<ByteString, ByteString> headers;
|
||||||
headers.set("User-Agent", "SerenityOS Maps");
|
headers.set("User-Agent", "SerenityOS Maps");
|
||||||
headers.set("Accept", "image/png");
|
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, {});
|
auto request = m_request_client->start_request("GET", url, headers, {});
|
||||||
VERIFY(!request.is_null());
|
VERIFY(!request.is_null());
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ public:
|
||||||
int scale_max_width { 100 };
|
int scale_max_width { 100 };
|
||||||
bool attribution_enabled { true };
|
bool attribution_enabled { true };
|
||||||
Optional<String> attribution_text {};
|
Optional<String> attribution_text {};
|
||||||
Optional<URL> attribution_url {};
|
Optional<URL::URL> attribution_url {};
|
||||||
};
|
};
|
||||||
|
|
||||||
LatLng center() const { return m_center; }
|
LatLng center() const { return m_center; }
|
||||||
|
@ -90,7 +90,7 @@ public:
|
||||||
};
|
};
|
||||||
String text;
|
String text;
|
||||||
Position position;
|
Position position;
|
||||||
Optional<URL> url {};
|
Optional<URL::URL> url {};
|
||||||
Optional<String> name {};
|
Optional<String> name {};
|
||||||
Gfx::IntRect rect { 0, 0, 0, 0 };
|
Gfx::IntRect rect { 0, 0, 0, 0 };
|
||||||
};
|
};
|
||||||
|
@ -188,7 +188,7 @@ private:
|
||||||
bool m_scale_enabled {};
|
bool m_scale_enabled {};
|
||||||
int m_scale_max_width {};
|
int m_scale_max_width {};
|
||||||
bool m_attribution_enabled {};
|
bool m_attribution_enabled {};
|
||||||
URL m_attribution_url;
|
URL::URL m_attribution_url;
|
||||||
bool m_dragging { false };
|
bool m_dragging { false };
|
||||||
int m_last_mouse_x { 0 };
|
int m_last_mouse_x { 0 };
|
||||||
int m_last_mouse_y { 0 };
|
int m_last_mouse_y { 0 };
|
||||||
|
|
|
@ -55,7 +55,7 @@ void SearchPanel::search(StringView query)
|
||||||
HashMap<ByteString, ByteString> headers;
|
HashMap<ByteString, ByteString> headers;
|
||||||
headers.set("User-Agent", "SerenityOS Maps");
|
headers.set("User-Agent", "SerenityOS Maps");
|
||||||
headers.set("Accept", "application/json");
|
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, {});
|
auto request = m_request_client->start_request("GET", url, headers, {});
|
||||||
VERIFY(!request.is_null());
|
VERIFY(!request.is_null());
|
||||||
m_request = request;
|
m_request = request;
|
||||||
|
|
|
@ -22,7 +22,7 @@ void UsersMapWidget::get_users()
|
||||||
HashMap<ByteString, ByteString> headers;
|
HashMap<ByteString, ByteString> headers;
|
||||||
headers.set("User-Agent", "SerenityOS Maps");
|
headers.set("User-Agent", "SerenityOS Maps");
|
||||||
headers.set("Accept", "application/json");
|
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, {});
|
auto request = request_client()->start_request("GET", url, headers, {});
|
||||||
VERIFY(!request.is_null());
|
VERIFY(!request.is_null());
|
||||||
m_request = request;
|
m_request = request;
|
||||||
|
|
|
@ -13,4 +13,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(MapsSettings ICON app-maps)
|
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)
|
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)
|
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
|
SlideObject.cpp
|
||||||
)
|
)
|
||||||
serenity_app(Presenter ICON app-presenter)
|
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 "SlideObject.h"
|
||||||
#include "Presentation.h"
|
#include "Presentation.h"
|
||||||
#include <AK/JsonObject.h>
|
#include <AK/JsonObject.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibGUI/PropertyDeserializer.h>
|
#include <LibGUI/PropertyDeserializer.h>
|
||||||
#include <LibGfx/Font/FontStyleMapping.h>
|
#include <LibGfx/Font/FontStyleMapping.h>
|
||||||
#include <LibGfx/Rect.h>
|
#include <LibGfx/Rect.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
static ByteString to_css_length(float design_value, Presentation const& presentation)
|
static ByteString to_css_length(float design_value, Presentation const& presentation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,4 +13,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Run ICON app-run)
|
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 "RunWindow.h"
|
||||||
#include "MainWidget.h"
|
#include "MainWidget.h"
|
||||||
#include <AK/LexicalPath.h>
|
#include <AK/LexicalPath.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/Process.h>
|
#include <LibCore/Process.h>
|
||||||
#include <LibCore/StandardPaths.h>
|
#include <LibCore/StandardPaths.h>
|
||||||
#include <LibDesktop/Launcher.h>
|
#include <LibDesktop/Launcher.h>
|
||||||
|
@ -20,6 +19,7 @@
|
||||||
#include <LibGUI/ImageWidget.h>
|
#include <LibGUI/ImageWidget.h>
|
||||||
#include <LibGUI/MessageBox.h>
|
#include <LibGUI/MessageBox.h>
|
||||||
#include <LibGUI/Widget.h>
|
#include <LibGUI/Widget.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <spawn.h>
|
#include <spawn.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
|
@ -19,4 +19,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(SoundPlayer ICON app-sound-player)
|
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)
|
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 "TreeMapWidget.h"
|
||||||
#include <AK/LexicalPath.h>
|
#include <AK/LexicalPath.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibDesktop/Launcher.h>
|
#include <LibDesktop/Launcher.h>
|
||||||
#include <LibFileSystem/FileSystem.h>
|
#include <LibFileSystem/FileSystem.h>
|
||||||
#include <LibGUI/Application.h>
|
#include <LibGUI/Application.h>
|
||||||
|
@ -25,6 +24,7 @@
|
||||||
#include <LibGUI/Statusbar.h>
|
#include <LibGUI/Statusbar.h>
|
||||||
#include <LibGfx/Bitmap.h>
|
#include <LibGfx/Bitmap.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
static auto const APP_NAME = "Space Analyzer"_string;
|
static auto const APP_NAME = "Space Analyzer"_string;
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ set(GENERATED_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Spreadsheet ICON app-spreadsheet)
|
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)
|
serenity_test(Writers/Test/TestXSVWriter.cpp Spreadsheet)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#include <AK/ByteString.h>
|
#include <AK/ByteString.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <AK/URL.h>
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
namespace Spreadsheet {
|
namespace Spreadsheet {
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ struct Position {
|
||||||
}
|
}
|
||||||
|
|
||||||
ByteString to_cell_identifier(Sheet const& sheet) const;
|
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 column { 0 };
|
||||||
size_t row { 0 };
|
size_t row { 0 };
|
||||||
|
|
|
@ -15,13 +15,13 @@
|
||||||
#include <AK/JsonParser.h>
|
#include <AK/JsonParser.h>
|
||||||
#include <AK/ScopeGuard.h>
|
#include <AK/ScopeGuard.h>
|
||||||
#include <AK/TemporaryChange.h>
|
#include <AK/TemporaryChange.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/File.h>
|
#include <LibCore/File.h>
|
||||||
#include <LibJS/Bytecode/Interpreter.h>
|
#include <LibJS/Bytecode/Interpreter.h>
|
||||||
#include <LibJS/Heap/DeferGC.h>
|
#include <LibJS/Heap/DeferGC.h>
|
||||||
#include <LibJS/Parser.h>
|
#include <LibJS/Parser.h>
|
||||||
#include <LibJS/Runtime/AbstractOperations.h>
|
#include <LibJS/Runtime/AbstractOperations.h>
|
||||||
#include <LibJS/Runtime/FunctionObject.h>
|
#include <LibJS/Runtime/FunctionObject.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ Optional<ByteString> Sheet::column_arithmetic(StringView column_name, int offset
|
||||||
return m_columns.last();
|
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);
|
auto maybe_position = position_from_url(url);
|
||||||
if (!maybe_position.has_value())
|
if (!maybe_position.has_value())
|
||||||
|
@ -252,7 +252,7 @@ Cell* Sheet::from_url(const URL& url)
|
||||||
return at(maybe_position.value());
|
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()) {
|
if (!url.is_valid()) {
|
||||||
dbgln("Invalid url: {}", url.to_byte_string());
|
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);
|
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_scheme("spreadsheet"_string);
|
||||||
url.set_host("cell"_string);
|
url.set_host("cell"_string);
|
||||||
url.set_paths({ ByteString::number(getpid()) });
|
url.set_paths({ ByteString::number(getpid()) });
|
||||||
|
|
|
@ -53,9 +53,9 @@ public:
|
||||||
Optional<size_t> column_index(StringView column_name) const;
|
Optional<size_t> column_index(StringView column_name) const;
|
||||||
Optional<ByteString> column_arithmetic(StringView column_name, int offset);
|
Optional<ByteString> column_arithmetic(StringView column_name, int offset);
|
||||||
|
|
||||||
Cell* from_url(const URL&);
|
Cell* from_url(const URL::URL&);
|
||||||
Cell const* from_url(const URL& url) const { return const_cast<Sheet*>(this)->from_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) const;
|
Optional<Position> position_from_url(const URL::URL& url) const;
|
||||||
|
|
||||||
/// Resolve 'offset' to an absolute position assuming 'base' is at 'offset_base'.
|
/// Resolve 'offset' to an absolute position assuming 'base' is at 'offset_base'.
|
||||||
/// Effectively, "Walk the distance between 'offset' and 'offset_base' away from 'base'".
|
/// Effectively, "Walk the distance between 'offset' and 'offset_base' away from 'base'".
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
|
|
||||||
#include "SpreadsheetModel.h"
|
#include "SpreadsheetModel.h"
|
||||||
#include "ConditionalFormatting.h"
|
#include "ConditionalFormatting.h"
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibGUI/AbstractView.h>
|
#include <LibGUI/AbstractView.h>
|
||||||
#include <LibJS/Runtime/Error.h>
|
#include <LibJS/Runtime/Error.h>
|
||||||
#include <LibJS/Runtime/Object.h>
|
#include <LibJS/Runtime/Object.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
namespace Spreadsheet {
|
namespace Spreadsheet {
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include "SpreadsheetView.h"
|
#include "SpreadsheetView.h"
|
||||||
#include "CellTypeDialog.h"
|
#include "CellTypeDialog.h"
|
||||||
#include <AK/ScopeGuard.h>
|
#include <AK/ScopeGuard.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibCore/MimeData.h>
|
#include <LibCore/MimeData.h>
|
||||||
#include <LibGUI/BoxLayout.h>
|
#include <LibGUI/BoxLayout.h>
|
||||||
#include <LibGUI/HeaderView.h>
|
#include <LibGUI/HeaderView.h>
|
||||||
|
@ -17,6 +16,7 @@
|
||||||
#include <LibGUI/Scrollbar.h>
|
#include <LibGUI/Scrollbar.h>
|
||||||
#include <LibGUI/TableView.h>
|
#include <LibGUI/TableView.h>
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
|
|
||||||
namespace Spreadsheet {
|
namespace Spreadsheet {
|
||||||
|
|
||||||
|
|
|
@ -9,4 +9,4 @@ set(SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(Terminal ICON app-terminal)
|
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/FixedArray.h>
|
||||||
#include <AK/QuickSort.h>
|
#include <AK/QuickSort.h>
|
||||||
#include <AK/TypedTransfer.h>
|
#include <AK/TypedTransfer.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <LibConfig/Client.h>
|
#include <LibConfig/Client.h>
|
||||||
#include <LibConfig/Listener.h>
|
#include <LibConfig/Listener.h>
|
||||||
#include <LibCore/Account.h>
|
#include <LibCore/Account.h>
|
||||||
|
@ -36,6 +35,7 @@
|
||||||
#include <LibGfx/Font/FontDatabase.h>
|
#include <LibGfx/Font/FontDatabase.h>
|
||||||
#include <LibGfx/Palette.h>
|
#include <LibGfx/Palette.h>
|
||||||
#include <LibMain/Main.h>
|
#include <LibMain/Main.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibVT/TerminalWidget.h>
|
#include <LibVT/TerminalWidget.h>
|
||||||
#include <pty.h>
|
#include <pty.h>
|
||||||
|
|
||||||
|
|
|
@ -18,4 +18,4 @@ set(GENERATED_SOURCES
|
||||||
)
|
)
|
||||||
|
|
||||||
serenity_app(TextEditor ICON app-text-editor)
|
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 "MainWidget.h"
|
||||||
#include <AK/Optional.h>
|
#include <AK/Optional.h>
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/URL.h>
|
|
||||||
#include <Applications/TextEditor/TextEditorWindowGML.h>
|
#include <Applications/TextEditor/TextEditorWindowGML.h>
|
||||||
#include <LibCMake/CMakeCache/SyntaxHighlighter.h>
|
#include <LibCMake/CMakeCache/SyntaxHighlighter.h>
|
||||||
#include <LibCMake/SyntaxHighlighter.h>
|
#include <LibCMake/SyntaxHighlighter.h>
|
||||||
|
@ -41,6 +40,7 @@
|
||||||
#include <LibMarkdown/Document.h>
|
#include <LibMarkdown/Document.h>
|
||||||
#include <LibMarkdown/SyntaxHighlighter.h>
|
#include <LibMarkdown/SyntaxHighlighter.h>
|
||||||
#include <LibSQL/AST/SyntaxHighlighter.h>
|
#include <LibSQL/AST/SyntaxHighlighter.h>
|
||||||
|
#include <LibURL/URL.h>
|
||||||
#include <LibWeb/CSS/SyntaxHighlighter/SyntaxHighlighter.h>
|
#include <LibWeb/CSS/SyntaxHighlighter/SyntaxHighlighter.h>
|
||||||
#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
|
#include <LibWeb/HTML/SyntaxHighlighter/SyntaxHighlighter.h>
|
||||||
#include <LibWebView/OutOfProcessWebView.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