mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 10:08:10 +00:00

This allows the address bar to "select all" when initially gaining focus as Firefox and Chrome do. A future improvement on this would be for the Widget class to mange and provide focus transition as part of the events instead of the UrlBox class. Currently focus is updated before the event is provided to the UrlBox class.
119 lines
3.1 KiB
C++
119 lines
3.1 KiB
C++
/*
|
|
* Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "History.h"
|
|
#include <AK/URL.h>
|
|
#include <LibGUI/ActionGroup.h>
|
|
#include <LibGUI/Widget.h>
|
|
#include <LibGfx/ShareableBitmap.h>
|
|
#include <LibHTTP/HttpJob.h>
|
|
#include <LibWeb/Forward.h>
|
|
|
|
namespace Web {
|
|
class OutOfProcessWebView;
|
|
class WebViewHooks;
|
|
}
|
|
|
|
namespace Browser {
|
|
|
|
class BrowserWindow;
|
|
|
|
class Tab final : public GUI::Widget {
|
|
C_OBJECT(Tab);
|
|
|
|
// FIXME: This should go away eventually.
|
|
friend class BrowserWindow;
|
|
|
|
public:
|
|
enum class Type {
|
|
InProcessWebView,
|
|
OutOfProcessWebView,
|
|
};
|
|
|
|
virtual ~Tab() override;
|
|
|
|
URL url() const;
|
|
|
|
enum class LoadType {
|
|
Normal,
|
|
HistoryNavigation,
|
|
};
|
|
|
|
void load(const URL&, LoadType = LoadType::Normal);
|
|
void reload();
|
|
void go_back(int steps = 1);
|
|
void go_forward(int steps = 1);
|
|
|
|
void did_become_active();
|
|
void context_menu_requested(const Gfx::IntPoint& screen_position);
|
|
|
|
void action_entered(GUI::Action&);
|
|
void action_left(GUI::Action&);
|
|
|
|
Function<void(const String&)> on_title_change;
|
|
Function<void(const URL&)> on_tab_open_request;
|
|
Function<void(Tab&)> on_tab_close_request;
|
|
Function<void(Tab&)> on_tab_close_other_request;
|
|
Function<void(const Gfx::Bitmap&)> on_favicon_change;
|
|
Function<String(const URL&, Web::Cookie::Source source)> on_get_cookie;
|
|
Function<void(const URL&, const Web::Cookie::ParsedCookie& cookie, Web::Cookie::Source source)> on_set_cookie;
|
|
Function<void()> on_dump_cookies;
|
|
|
|
const String& title() const { return m_title; }
|
|
const Gfx::Bitmap* icon() const { return m_icon; }
|
|
|
|
GUI::AbstractScrollableWidget& view();
|
|
|
|
private:
|
|
explicit Tab(BrowserWindow&, Type);
|
|
|
|
BrowserWindow const& window() const;
|
|
BrowserWindow& window();
|
|
|
|
Web::WebViewHooks& hooks();
|
|
void update_actions();
|
|
void update_bookmark_button(const String& url);
|
|
void start_download(const URL& url);
|
|
void view_source(const URL& url, const String& source);
|
|
void view_dom_tree(const String&);
|
|
|
|
Type m_type;
|
|
|
|
History m_history;
|
|
|
|
RefPtr<Web::InProcessWebView> m_page_view;
|
|
RefPtr<Web::OutOfProcessWebView> m_web_content_view;
|
|
|
|
RefPtr<GUI::UrlBox> m_location_box;
|
|
RefPtr<GUI::Button> m_bookmark_button;
|
|
RefPtr<GUI::Window> m_dom_inspector_window;
|
|
RefPtr<GUI::Window> m_console_window;
|
|
RefPtr<GUI::Statusbar> m_statusbar;
|
|
RefPtr<GUI::ToolbarContainer> m_toolbar_container;
|
|
|
|
RefPtr<GUI::Menu> m_link_context_menu;
|
|
RefPtr<GUI::Action> m_link_context_menu_default_action;
|
|
URL m_link_context_menu_url;
|
|
|
|
RefPtr<GUI::Menu> m_image_context_menu;
|
|
Gfx::ShareableBitmap m_image_context_menu_bitmap;
|
|
URL m_image_context_menu_url;
|
|
|
|
RefPtr<GUI::Menu> m_tab_context_menu;
|
|
RefPtr<GUI::Menu> m_page_context_menu;
|
|
RefPtr<GUI::Menu> m_go_back_context_menu;
|
|
RefPtr<GUI::Menu> m_go_forward_context_menu;
|
|
String m_title;
|
|
RefPtr<const Gfx::Bitmap> m_icon;
|
|
|
|
bool m_is_history_navigation { false };
|
|
};
|
|
|
|
URL url_from_user_input(const String& input);
|
|
|
|
}
|