Skip to content

Commit eda9fb1

Browse files
committed
LibWeb+WebContent: Add on_load_finish hook to web views
This isn't entirely symmetrical with on_load_start as it will also fire on reloads and back/forward navigations. However, it's good enough for some basic use cases, and we can do more sophisticated notifications later on when we need them.
1 parent 52dbdf4 commit eda9fb1

File tree

12 files changed

+31
-7
lines changed

12 files changed

+31
-7
lines changed

Libraries/LibWeb/InProcessWebView.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@ void InProcessWebView::page_did_start_loading(const URL& url)
150150
on_load_start(url);
151151
}
152152

153+
void InProcessWebView::page_did_finish_loading(const URL& url)
154+
{
155+
if (on_load_finish)
156+
on_load_finish(url);
157+
}
158+
153159
void InProcessWebView::page_did_change_selection()
154160
{
155161
update();

Libraries/LibWeb/InProcessWebView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ class InProcessWebView final
8888
virtual void page_did_change_title(const String&) override;
8989
virtual void page_did_set_document_in_main_frame(DOM::Document*) override;
9090
virtual void page_did_start_loading(const URL&) override;
91+
virtual void page_did_finish_loading(const URL&) override;
9192
virtual void page_did_change_selection() override;
9293
virtual void page_did_request_cursor_change(Gfx::StandardCursor) override;
9394
virtual void page_did_request_context_menu(const Gfx::IntPoint&) override;

Libraries/LibWeb/Loader/FrameLoader.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,9 @@ void FrameLoader::resource_did_load()
274274
ASSERT(is<HTML::HTMLIFrameElement>(*host_element));
275275
downcast<HTML::HTMLIFrameElement>(*host_element).content_frame_did_load({});
276276
}
277+
278+
if (auto* page = frame().page())
279+
page->client().page_did_finish_loading(url);
277280
}
278281

279282
void FrameLoader::resource_did_fail()

Libraries/LibWeb/OutOfProcessWebView.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,13 @@ void OutOfProcessWebView::notify_server_did_start_loading(Badge<WebContentClient
209209
on_load_start(url);
210210
}
211211

212+
213+
void OutOfProcessWebView::notify_server_did_finish_loading(Badge<WebContentClient>, const URL& url)
214+
{
215+
if (on_load_finish)
216+
on_load_finish(url);
217+
}
218+
212219
void OutOfProcessWebView::notify_server_did_request_context_menu(Badge<WebContentClient>, const Gfx::IntPoint& content_position)
213220
{
214221
if (on_context_menu_request)

Libraries/LibWeb/OutOfProcessWebView.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class OutOfProcessWebView final
6060
void notify_server_did_click_link(Badge<WebContentClient>, const URL&, const String& target, unsigned modifiers);
6161
void notify_server_did_middle_click_link(Badge<WebContentClient>, const URL&, const String& target, unsigned modifiers);
6262
void notify_server_did_start_loading(Badge<WebContentClient>, const URL&);
63+
void notify_server_did_finish_loading(Badge<WebContentClient>, const URL&);
6364
void notify_server_did_request_context_menu(Badge<WebContentClient>, const Gfx::IntPoint&);
6465
void notify_server_did_request_link_context_menu(Badge<WebContentClient>, const Gfx::IntPoint&, const URL&, const String& target, unsigned modifiers);
6566
void notify_server_did_request_alert(Badge<WebContentClient>, const String& message);

Libraries/LibWeb/Page/Page.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class PageClient {
8585
virtual void page_did_set_document_in_main_frame(DOM::Document*) { }
8686
virtual void page_did_change_title(const String&) { }
8787
virtual void page_did_start_loading(const URL&) { }
88+
virtual void page_did_finish_loading(const URL&) { }
8889
virtual void page_did_change_selection() { }
8990
virtual void page_did_request_cursor_change(Gfx::StandardCursor) { }
9091
virtual void page_did_request_context_menu(const Gfx::IntPoint&) { }

Libraries/LibWeb/WebContentClient.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,9 @@ void WebContentClient::handle(const Messages::WebContentClient::DidPaint& messag
5252
m_view.notify_server_did_paint({}, message.shbuf_id());
5353
}
5454

55-
void WebContentClient::handle([[maybe_unused]] const Messages::WebContentClient::DidFinishLoad& message)
55+
void WebContentClient::handle([[maybe_unused]] const Messages::WebContentClient::DidFinishLoading& message)
5656
{
57-
#ifdef DEBUG_SPAM
58-
dbg() << "handle: WebContentClient::DidFinishLoad! url=" << message.url();
59-
#endif
57+
m_view.notify_server_did_finish_loading({}, message.url());
6058
}
6159

6260
void WebContentClient::handle(const Messages::WebContentClient::DidInvalidateContentRect& message)

Libraries/LibWeb/WebContentClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class WebContentClient
4747
WebContentClient(OutOfProcessWebView&);
4848

4949
virtual void handle(const Messages::WebContentClient::DidPaint&) override;
50-
virtual void handle(const Messages::WebContentClient::DidFinishLoad&) override;
50+
virtual void handle(const Messages::WebContentClient::DidFinishLoading&) override;
5151
virtual void handle(const Messages::WebContentClient::DidInvalidateContentRect&) override;
5252
virtual void handle(const Messages::WebContentClient::DidChangeSelection&) override;
5353
virtual void handle(const Messages::WebContentClient::DidLayout&) override;

Libraries/LibWeb/WebViewHooks.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class WebViewHooks {
4242
Function<void(const URL&)> on_link_hover;
4343
Function<void(const String&)> on_title_change;
4444
Function<void(const URL&)> on_load_start;
45+
Function<void(const URL&)> on_load_finish;
4546
Function<void(const Gfx::Bitmap&)> on_favicon_change;
4647
Function<void(const URL&)> on_url_drop;
4748
Function<void(DOM::Document*)> on_set_document;

Services/WebContent/PageHost.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ void PageHost::page_did_start_loading(const URL& url)
159159
m_client.post_message(Messages::WebContentClient::DidStartLoading(url));
160160
}
161161

162+
void PageHost::page_did_finish_loading(const URL& url)
163+
{
164+
m_client.post_message(Messages::WebContentClient::DidFinishLoading(url));
165+
}
166+
162167
void PageHost::page_did_request_context_menu(const Gfx::IntPoint& content_position)
163168
{
164169
m_client.post_message(Messages::WebContentClient::DidRequestContextMenu(content_position));

0 commit comments

Comments
 (0)