mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 11:37:44 +00:00
Browser: Add basic support for search engines
If you start a URL with a '?' character, the Browser will use the user-selected search engine (none by default). For now, there are several engines hardcoded and there is no support for custom search engines.
This commit is contained in:
parent
cd9e352460
commit
d164da7d19
2 changed files with 39 additions and 0 deletions
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
||||||
|
* Copyright (c) 2021, Maciej Zygmanowski <sppmacd@pm.me>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -38,8 +39,14 @@
|
||||||
|
|
||||||
namespace Browser {
|
namespace Browser {
|
||||||
|
|
||||||
|
static String s_search_engine_format = {};
|
||||||
|
|
||||||
URL url_from_user_input(const String& input)
|
URL url_from_user_input(const String& input)
|
||||||
{
|
{
|
||||||
|
if (input.starts_with("?") && !s_search_engine_format.is_null()) {
|
||||||
|
return URL(String::formatted(s_search_engine_format, urlencode(input.substring(1))));
|
||||||
|
}
|
||||||
|
|
||||||
auto url = URL(input);
|
auto url = URL(input);
|
||||||
if (url.is_valid())
|
if (url.is_valid())
|
||||||
return url;
|
return url;
|
||||||
|
@ -397,6 +404,37 @@ Tab::Tab(Type type)
|
||||||
js_console_action->set_status_tip("Open JavaScript console for this page");
|
js_console_action->set_status_tip("Open JavaScript console for this page");
|
||||||
inspect_menu.add_action(js_console_action);
|
inspect_menu.add_action(js_console_action);
|
||||||
|
|
||||||
|
auto& settings_menu = m_menubar->add_menu("&Settings");
|
||||||
|
|
||||||
|
m_search_engine_actions.set_exclusive(true);
|
||||||
|
auto& search_engine_menu = settings_menu.add_submenu("&Search Engine");
|
||||||
|
|
||||||
|
auto add_search_engine = [&](auto& name, auto& url_format) {
|
||||||
|
auto action = GUI::Action::create_checkable(
|
||||||
|
name, [&](auto&) {
|
||||||
|
dbgln("Setting search engine to {}", url_format);
|
||||||
|
s_search_engine_format = url_format;
|
||||||
|
},
|
||||||
|
this);
|
||||||
|
search_engine_menu.add_action(action);
|
||||||
|
m_search_engine_actions.add_action(action);
|
||||||
|
};
|
||||||
|
|
||||||
|
auto disable_search_engine_action = GUI::Action::create_checkable(
|
||||||
|
"Disable", [this](auto&) {
|
||||||
|
dbgln("Disabling search engine");
|
||||||
|
s_search_engine_format = {};
|
||||||
|
},
|
||||||
|
this);
|
||||||
|
search_engine_menu.add_action(disable_search_engine_action);
|
||||||
|
m_search_engine_actions.add_action(disable_search_engine_action);
|
||||||
|
disable_search_engine_action->set_checked(true);
|
||||||
|
|
||||||
|
// FIXME: Support adding custom search engines
|
||||||
|
add_search_engine("Bing", "https://www.bing.com/search?q={}");
|
||||||
|
add_search_engine("DuckDuckGo", "https://duckduckgo.com/?q={}");
|
||||||
|
add_search_engine("Google", "https://google.com/search?q={}");
|
||||||
|
|
||||||
auto& debug_menu = m_menubar->add_menu("&Debug");
|
auto& debug_menu = m_menubar->add_menu("&Debug");
|
||||||
debug_menu.add_action(GUI::Action::create(
|
debug_menu.add_action(GUI::Action::create(
|
||||||
"Dump &DOM Tree", [this](auto&) {
|
"Dump &DOM Tree", [this](auto&) {
|
||||||
|
|
|
@ -100,6 +100,7 @@ private:
|
||||||
URL m_image_context_menu_url;
|
URL m_image_context_menu_url;
|
||||||
|
|
||||||
GUI::ActionGroup m_user_agent_spoof_actions;
|
GUI::ActionGroup m_user_agent_spoof_actions;
|
||||||
|
GUI::ActionGroup m_search_engine_actions;
|
||||||
RefPtr<GUI::Action> m_disable_user_agent_spoofing;
|
RefPtr<GUI::Action> m_disable_user_agent_spoofing;
|
||||||
|
|
||||||
RefPtr<GUI::Menu> m_tab_context_menu;
|
RefPtr<GUI::Menu> m_tab_context_menu;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue