Skip to content

Commit 6438845

Browse files
committed
LibWebView: Centralize WebUI page metadata
Keep internal page names, titles, and handler requirements in one registry. Handler creation now consults it, allowing other WebView features to discover the available pages.
1 parent 7340fc6 commit 6438845

2 files changed

Lines changed: 53 additions & 8 deletions

File tree

Libraries/LibWebView/WebUI.cpp

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,31 @@
1717

1818
namespace WebView {
1919

20+
static constexpr auto s_pages = to_array<WebUI::Page>({
21+
{ "about"sv, "About URLs"sv, WebUI::PageType::Static },
22+
{ "bookmarks"sv, "Bookmarks"sv, WebUI::PageType::Dynamic },
23+
{ "downloads"sv, "Downloads"sv, WebUI::PageType::Dynamic },
24+
{ "history"sv, "History"sv, WebUI::PageType::Dynamic },
25+
{ "newtab"sv, "New Tab"sv, WebUI::PageType::Static },
26+
{ "processes"sv, "Task Manager"sv, WebUI::PageType::Dynamic },
27+
{ "settings"sv, "Settings"sv, WebUI::PageType::Dynamic },
28+
{ "version"sv, "Version"sv, WebUI::PageType::Dynamic },
29+
});
30+
31+
ReadonlySpan<WebUI::Page> WebUI::pages()
32+
{
33+
return s_pages;
34+
}
35+
36+
Optional<WebUI::Page const&> WebUI::page_for_host(StringView host)
37+
{
38+
for (auto const& page : s_pages) {
39+
if (page.host == host)
40+
return page;
41+
}
42+
return {};
43+
}
44+
2045
template<typename WebUIType>
2146
static ErrorOr<NonnullRefPtr<WebUIType>> create_web_ui(WebContentClient& client, u64 page_id, String host)
2247
{
@@ -33,23 +58,27 @@ static ErrorOr<NonnullRefPtr<WebUIType>> create_web_ui(WebContentClient& client,
3358

3459
ErrorOr<RefPtr<WebUI>> WebUI::create(WebContentClient& client, u64 page_id, String host)
3560
{
61+
auto page = page_for_host(host);
62+
if (!page.has_value() || page->type == PageType::Static)
63+
return nullptr;
64+
3665
RefPtr<WebUI> web_ui;
3766

38-
if (host == "bookmarks"sv)
67+
if (page->host == "bookmarks"sv)
3968
web_ui = TRY(create_web_ui<BookmarksUI>(client, page_id, move(host)));
40-
else if (host == "downloads"sv)
69+
else if (page->host == "downloads"sv)
4170
web_ui = TRY(create_web_ui<DownloadsUI>(client, page_id, move(host)));
42-
else if (host == "history"sv)
71+
else if (page->host == "history"sv)
4372
web_ui = TRY(create_web_ui<HistoryUI>(client, page_id, move(host)));
44-
else if (host == "processes"sv)
73+
else if (page->host == "processes"sv)
4574
web_ui = TRY(create_web_ui<ProcessesUI>(client, page_id, move(host)));
46-
else if (host == "settings"sv)
75+
else if (page->host == "settings"sv)
4776
web_ui = TRY(create_web_ui<SettingsUI>(client, page_id, move(host)));
48-
else if (host == "version"sv)
77+
else if (page->host == "version"sv)
4978
web_ui = TRY(create_web_ui<VersionUI>(client, page_id, move(host)));
5079

51-
if (web_ui)
52-
web_ui->register_interfaces();
80+
VERIFY(web_ui);
81+
web_ui->register_interfaces();
5382

5483
return web_ui;
5584
}

Libraries/LibWebView/WebUI.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@
1010
#include <AK/HashMap.h>
1111
#include <AK/JsonValue.h>
1212
#include <AK/NonnullRefPtr.h>
13+
#include <AK/Optional.h>
1314
#include <AK/RefPtr.h>
15+
#include <AK/Span.h>
1416
#include <AK/String.h>
17+
#include <AK/StringView.h>
1518
#include <AK/Types.h>
1619
#include <LibIPC/ConnectionToServer.h>
1720
#include <LibIPC/Transport.h>
@@ -25,6 +28,19 @@ class WEBVIEW_API WebUI
2528
: public IPC::ConnectionToServer<WebUIClientEndpoint, WebUIServerEndpoint>
2629
, public WebUIClientEndpoint {
2730
public:
31+
enum class PageType {
32+
Static,
33+
Dynamic,
34+
};
35+
36+
struct Page {
37+
StringView host;
38+
StringView title;
39+
PageType type;
40+
};
41+
42+
static ReadonlySpan<Page> pages();
43+
static Optional<Page const&> page_for_host(StringView);
2844
static ErrorOr<RefPtr<WebUI>> create(WebContentClient&, u64 page_id, String host);
2945
virtual ~WebUI();
3046

0 commit comments

Comments
 (0)