summaryrefslogtreecommitdiff
path: root/Libraries
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-12-08 21:44:42 +0100
committerAndreas Kling <kling@serenityos.org>2020-12-08 23:36:19 +0100
commiteda9fb13cc96f9b2885f96c4b525907f5acd7582 (patch)
treeeefbe5c14d5bb23dfead715d728e0ca083522813 /Libraries
parent52dbdf42455b27b05935f9c0f024e462718237c2 (diff)
downloadserenity-eda9fb13cc96f9b2885f96c4b525907f5acd7582.zip
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.
Diffstat (limited to 'Libraries')
-rw-r--r--Libraries/LibWeb/InProcessWebView.cpp6
-rw-r--r--Libraries/LibWeb/InProcessWebView.h1
-rw-r--r--Libraries/LibWeb/Loader/FrameLoader.cpp3
-rw-r--r--Libraries/LibWeb/OutOfProcessWebView.cpp7
-rw-r--r--Libraries/LibWeb/OutOfProcessWebView.h1
-rw-r--r--Libraries/LibWeb/Page/Page.h1
-rw-r--r--Libraries/LibWeb/WebContentClient.cpp6
-rw-r--r--Libraries/LibWeb/WebContentClient.h2
-rw-r--r--Libraries/LibWeb/WebViewHooks.h1
9 files changed, 23 insertions, 5 deletions
diff --git a/Libraries/LibWeb/InProcessWebView.cpp b/Libraries/LibWeb/InProcessWebView.cpp
index 40f33b32e3..8701583145 100644
--- a/Libraries/LibWeb/InProcessWebView.cpp
+++ b/Libraries/LibWeb/InProcessWebView.cpp
@@ -150,6 +150,12 @@ void InProcessWebView::page_did_start_loading(const URL& url)
on_load_start(url);
}
+void InProcessWebView::page_did_finish_loading(const URL& url)
+{
+ if (on_load_finish)
+ on_load_finish(url);
+}
+
void InProcessWebView::page_did_change_selection()
{
update();
diff --git a/Libraries/LibWeb/InProcessWebView.h b/Libraries/LibWeb/InProcessWebView.h
index 7194836b9d..084c3a01c4 100644
--- a/Libraries/LibWeb/InProcessWebView.h
+++ b/Libraries/LibWeb/InProcessWebView.h
@@ -88,6 +88,7 @@ private:
virtual void page_did_change_title(const String&) override;
virtual void page_did_set_document_in_main_frame(DOM::Document*) override;
virtual void page_did_start_loading(const URL&) override;
+ virtual void page_did_finish_loading(const URL&) override;
virtual void page_did_change_selection() override;
virtual void page_did_request_cursor_change(Gfx::StandardCursor) override;
virtual void page_did_request_context_menu(const Gfx::IntPoint&) override;
diff --git a/Libraries/LibWeb/Loader/FrameLoader.cpp b/Libraries/LibWeb/Loader/FrameLoader.cpp
index c5c417e7cc..9df29cf52e 100644
--- a/Libraries/LibWeb/Loader/FrameLoader.cpp
+++ b/Libraries/LibWeb/Loader/FrameLoader.cpp
@@ -274,6 +274,9 @@ void FrameLoader::resource_did_load()
ASSERT(is<HTML::HTMLIFrameElement>(*host_element));
downcast<HTML::HTMLIFrameElement>(*host_element).content_frame_did_load({});
}
+
+ if (auto* page = frame().page())
+ page->client().page_did_finish_loading(url);
}
void FrameLoader::resource_did_fail()
diff --git a/Libraries/LibWeb/OutOfProcessWebView.cpp b/Libraries/LibWeb/OutOfProcessWebView.cpp
index 736f523233..64206d301b 100644
--- a/Libraries/LibWeb/OutOfProcessWebView.cpp
+++ b/Libraries/LibWeb/OutOfProcessWebView.cpp
@@ -209,6 +209,13 @@ void OutOfProcessWebView::notify_server_did_start_loading(Badge<WebContentClient
on_load_start(url);
}
+
+void OutOfProcessWebView::notify_server_did_finish_loading(Badge<WebContentClient>, const URL& url)
+{
+ if (on_load_finish)
+ on_load_finish(url);
+}
+
void OutOfProcessWebView::notify_server_did_request_context_menu(Badge<WebContentClient>, const Gfx::IntPoint& content_position)
{
if (on_context_menu_request)
diff --git a/Libraries/LibWeb/OutOfProcessWebView.h b/Libraries/LibWeb/OutOfProcessWebView.h
index f610a40bdf..5779d6f6da 100644
--- a/Libraries/LibWeb/OutOfProcessWebView.h
+++ b/Libraries/LibWeb/OutOfProcessWebView.h
@@ -60,6 +60,7 @@ public:
void notify_server_did_click_link(Badge<WebContentClient>, const URL&, const String& target, unsigned modifiers);
void notify_server_did_middle_click_link(Badge<WebContentClient>, const URL&, const String& target, unsigned modifiers);
void notify_server_did_start_loading(Badge<WebContentClient>, const URL&);
+ void notify_server_did_finish_loading(Badge<WebContentClient>, const URL&);
void notify_server_did_request_context_menu(Badge<WebContentClient>, const Gfx::IntPoint&);
void notify_server_did_request_link_context_menu(Badge<WebContentClient>, const Gfx::IntPoint&, const URL&, const String& target, unsigned modifiers);
void notify_server_did_request_alert(Badge<WebContentClient>, const String& message);
diff --git a/Libraries/LibWeb/Page/Page.h b/Libraries/LibWeb/Page/Page.h
index 8fa1719d2e..5d7325d283 100644
--- a/Libraries/LibWeb/Page/Page.h
+++ b/Libraries/LibWeb/Page/Page.h
@@ -85,6 +85,7 @@ public:
virtual void page_did_set_document_in_main_frame(DOM::Document*) { }
virtual void page_did_change_title(const String&) { }
virtual void page_did_start_loading(const URL&) { }
+ virtual void page_did_finish_loading(const URL&) { }
virtual void page_did_change_selection() { }
virtual void page_did_request_cursor_change(Gfx::StandardCursor) { }
virtual void page_did_request_context_menu(const Gfx::IntPoint&) { }
diff --git a/Libraries/LibWeb/WebContentClient.cpp b/Libraries/LibWeb/WebContentClient.cpp
index 5a679ab068..0c09cb92af 100644
--- a/Libraries/LibWeb/WebContentClient.cpp
+++ b/Libraries/LibWeb/WebContentClient.cpp
@@ -52,11 +52,9 @@ void WebContentClient::handle(const Messages::WebContentClient::DidPaint& messag
m_view.notify_server_did_paint({}, message.shbuf_id());
}
-void WebContentClient::handle([[maybe_unused]] const Messages::WebContentClient::DidFinishLoad& message)
+void WebContentClient::handle([[maybe_unused]] const Messages::WebContentClient::DidFinishLoading& message)
{
-#ifdef DEBUG_SPAM
- dbg() << "handle: WebContentClient::DidFinishLoad! url=" << message.url();
-#endif
+ m_view.notify_server_did_finish_loading({}, message.url());
}
void WebContentClient::handle(const Messages::WebContentClient::DidInvalidateContentRect& message)
diff --git a/Libraries/LibWeb/WebContentClient.h b/Libraries/LibWeb/WebContentClient.h
index c712b193b7..2078882578 100644
--- a/Libraries/LibWeb/WebContentClient.h
+++ b/Libraries/LibWeb/WebContentClient.h
@@ -47,7 +47,7 @@ private:
WebContentClient(OutOfProcessWebView&);
virtual void handle(const Messages::WebContentClient::DidPaint&) override;
- virtual void handle(const Messages::WebContentClient::DidFinishLoad&) override;
+ virtual void handle(const Messages::WebContentClient::DidFinishLoading&) override;
virtual void handle(const Messages::WebContentClient::DidInvalidateContentRect&) override;
virtual void handle(const Messages::WebContentClient::DidChangeSelection&) override;
virtual void handle(const Messages::WebContentClient::DidLayout&) override;
diff --git a/Libraries/LibWeb/WebViewHooks.h b/Libraries/LibWeb/WebViewHooks.h
index d93655bcea..198526e019 100644
--- a/Libraries/LibWeb/WebViewHooks.h
+++ b/Libraries/LibWeb/WebViewHooks.h
@@ -42,6 +42,7 @@ public:
Function<void(const URL&)> on_link_hover;
Function<void(const String&)> on_title_change;
Function<void(const URL&)> on_load_start;
+ Function<void(const URL&)> on_load_finish;
Function<void(const Gfx::Bitmap&)> on_favicon_change;
Function<void(const URL&)> on_url_drop;
Function<void(DOM::Document*)> on_set_document;