diff --git a/Ladybird/CMakeLists.txt b/Ladybird/CMakeLists.txt index 3bc35f5c0e..beaa880da8 100644 --- a/Ladybird/CMakeLists.txt +++ b/Ladybird/CMakeLists.txt @@ -174,7 +174,7 @@ target_sources(ladybird PUBLIC FILE_SET ladybird TYPE HEADERS BASE_DIRS ${SERENITY_SOURCE_DIR} FILES ${LADYBIRD_HEADERS} ) -target_link_libraries(ladybird PRIVATE LibCore LibFileSystem LibGfx LibGUI LibIPC LibJS LibMain LibPublicSuffix LibWeb LibWebView LibProtocol) +target_link_libraries(ladybird PRIVATE LibCore LibFileSystem LibGfx LibGUI LibIPC LibJS LibMain LibWeb LibWebView LibProtocol) target_include_directories(ladybird PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) target_include_directories(ladybird PRIVATE ${SERENITY_SOURCE_DIR}/Userland/) diff --git a/Ladybird/Qt/AutoComplete.cpp b/Ladybird/Qt/AutoComplete.cpp index 93d5f645f6..a7e52d271e 100644 --- a/Ladybird/Qt/AutoComplete.cpp +++ b/Ladybird/Qt/AutoComplete.cpp @@ -121,12 +121,6 @@ ErrorOr AutoComplete::got_network_response(QNetworkReply* reply) return Error::from_string_view("Invalid engine name"sv); } -ErrorOr AutoComplete::search_url_from_query(StringView query) -{ - auto search_engine = TRY(ak_string_from_qstring(Settings::the()->search_engine().url)); - return search_engine.replace("{}"sv, AK::URL::percent_encode(query), ReplaceMode::FirstOnly); -} - ErrorOr AutoComplete::auto_complete_url_from_query(StringView query) { auto autocomplete_engine = TRY(ak_string_from_qstring(Settings::the()->autocomplete_engine().url)); diff --git a/Ladybird/Qt/AutoComplete.h b/Ladybird/Qt/AutoComplete.h index 7772f1eb08..f8b779d99a 100644 --- a/Ladybird/Qt/AutoComplete.h +++ b/Ladybird/Qt/AutoComplete.h @@ -61,7 +61,6 @@ public: ErrorOr get_search_suggestions(StringView); void clear_suggestions(); - static ErrorOr search_url_from_query(StringView query); static ErrorOr auto_complete_url_from_query(StringView query); signals: diff --git a/Ladybird/Qt/BrowserWindow.cpp b/Ladybird/Qt/BrowserWindow.cpp index acbf53bd90..345b4df3cd 100644 --- a/Ladybird/Qt/BrowserWindow.cpp +++ b/Ladybird/Qt/BrowserWindow.cpp @@ -423,15 +423,9 @@ BrowserWindow::BrowserWindow(Vector const& initial_urls, WebView::CookieJar m_tabs_container->setCurrentIndex(m_tabs_container->count() - 1); }); - if (!initial_urls.is_empty()) { - bool is_first_tab = true; - for (auto const& url : initial_urls) { - auto initial_url_string = qstring_from_ak_deprecated_string(url.serialize()); - new_tab(initial_url_string, is_first_tab ? Web::HTML::ActivateTab::Yes : Web::HTML::ActivateTab::No); - is_first_tab = false; - } - } else { - new_tab(Settings::the()->new_tab_page(), Web::HTML::ActivateTab::Yes); + for (size_t i = 0; i < initial_urls.size(); ++i) { + auto url_string = qstring_from_ak_deprecated_string(initial_urls[i].serialize()); + new_tab(url_string, (i == 0) ? Web::HTML::ActivateTab::Yes : Web::HTML::ActivateTab::No); } setCentralWidget(m_tabs_container); diff --git a/Ladybird/Qt/LocationEdit.cpp b/Ladybird/Qt/LocationEdit.cpp index 788f290a90..f18fd9845c 100644 --- a/Ladybird/Qt/LocationEdit.cpp +++ b/Ladybird/Qt/LocationEdit.cpp @@ -8,7 +8,7 @@ #include "Settings.h" #include "StringUtils.h" #include -#include +#include #include #include #include @@ -29,21 +29,17 @@ LocationEdit::LocationEdit(QWidget* parent) connect(this, &QLineEdit::returnPressed, [&] { clearFocus(); - if (!Settings::the()->enable_search()) - return; - auto query = ak_deprecated_string_from_qstring(text()); - if (auto result = PublicSuffix::absolute_url(query); !result.is_error()) - return; - - auto search_url_or_error = AutoComplete::search_url_from_query(query); - if (search_url_or_error.is_error()) { - dbgln("LocationEdit::returnPressed: search_url_from_query failed: {}", search_url_or_error.error()); - return; + Optional search_engine_url; + if (Settings::the()->enable_search()) { + auto search_engine = Settings::the()->search_engine(); + search_engine_url = MUST(ak_string_from_qstring(search_engine.url)); } - auto search_url = search_url_or_error.release_value(); - setText(qstring_from_ak_string(search_url)); + auto query = MUST(ak_string_from_qstring(text())); + + if (auto url = WebView::sanitize_url(query, search_engine_url.map([](auto& value) { return value.bytes_as_string_view(); })); url.has_value()) + setText(qstring_from_ak_deprecated_string(url->serialize())); }); connect(this, &QLineEdit::textEdited, [this] { diff --git a/Ladybird/Qt/Tab.cpp b/Ladybird/Qt/Tab.cpp index 48d771f23b..4ae2462741 100644 --- a/Ladybird/Qt/Tab.cpp +++ b/Ladybird/Qt/Tab.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -556,13 +557,9 @@ void Tab::focus_location_editor() m_location_edit->selectAll(); } -void Tab::navigate(QString url_qstring) +void Tab::navigate(QString const& url_qstring) { - auto url_string = ak_deprecated_string_from_qstring(url_qstring); - if (url_string.starts_with('/')) - url_string = DeprecatedString::formatted("file://{}", url_string); - else if (URL url = url_string; !url.is_valid()) - url_string = DeprecatedString::formatted("https://{}", url_string); + auto url_string = MUST(ak_string_from_qstring(url_qstring)); view().load(url_string); } @@ -625,7 +622,7 @@ void Tab::open_file() { auto filename = QFileDialog::getOpenFileName(this, "Open file", QDir::homePath(), "All Files (*.*)"); if (!filename.isNull()) - navigate("file://" + filename); + navigate(filename); } int Tab::tab_index() diff --git a/Ladybird/Qt/Tab.h b/Ladybird/Qt/Tab.h index 586e41e821..689c200812 100644 --- a/Ladybird/Qt/Tab.h +++ b/Ladybird/Qt/Tab.h @@ -33,7 +33,7 @@ public: WebContentView& view() { return *m_view; } - void navigate(QString); + void navigate(QString const&); void load_html(StringView); void back(); diff --git a/Ladybird/Qt/main.cpp b/Ladybird/Qt/main.cpp index 726764434a..2b81cbc2f8 100644 --- a/Ladybird/Qt/main.cpp +++ b/Ladybird/Qt/main.cpp @@ -15,11 +15,11 @@ #include #include #include -#include #include #include #include #include +#include #include namespace Ladybird { @@ -85,15 +85,6 @@ ErrorOr serenity_main(Main::Arguments arguments) args_parser.add_option(use_lagom_networking, "Enable Lagom servers for networking", "enable-lagom-networking", 0); args_parser.parse(arguments); - auto get_formatted_url = [&](StringView const& raw_url) -> ErrorOr { - URL url = raw_url; - if (FileSystem::exists(raw_url)) - url = URL::create_with_file_scheme(TRY(FileSystem::real_path(raw_url)).to_deprecated_string()); - else if (!url.is_valid()) - url = DeprecatedString::formatted("https://{}", raw_url); - return url; - }; - RefPtr database; if (enable_sql_database) { @@ -106,8 +97,13 @@ ErrorOr serenity_main(Main::Arguments arguments) Vector initial_urls; for (auto const& raw_url : raw_urls) { - if (auto url = TRY(get_formatted_url(raw_url)); url.is_valid()) - initial_urls.append(move(url)); + if (auto url = WebView::sanitize_url(raw_url); url.has_value()) + initial_urls.append(url.release_value()); + } + + if (initial_urls.is_empty()) { + auto new_tab_page = Ladybird::Settings::the()->new_tab_page(); + initial_urls.append(MUST(ak_string_from_qstring(new_tab_page))); } Ladybird::BrowserWindow window(initial_urls, cookie_jar, webdriver_content_ipc_path, enable_callgrind_profiling ? WebView::EnableCallgrindProfiling::Yes : WebView::EnableCallgrindProfiling::No, use_lagom_networking ? Ladybird::UseLagomNetworking::Yes : Ladybird::UseLagomNetworking::No);