1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 22:28:12 +00:00

LibWeb+WebContent: Add new console-message IPC calls

This patch introduces three new IPC calls for WebContent:

- `Client::did_output_js_console_message(index)`:
  Notifies the client that a new console message was logged.

- `Server::js_console_request_messages(start_index)`:
  Ask the server for console messages starting at the given index.

- `Client::did_get_js_console_messages(start_index, types, messages)`:
  Send the client the messages they requested.

This mechanism will replace the current
`Client::did_js_console_output()` call in the next few commits. This
will allow us to display messages in the console that happened before
the console was opened.
This commit is contained in:
Sam Atkins 2021-09-04 11:14:25 +01:00 committed by Andreas Kling
parent 5220d6d2e5
commit c619a57cf8
9 changed files with 61 additions and 0 deletions

View file

@ -353,6 +353,18 @@ void OutOfProcessWebView::notify_server_did_js_console_output(const String& meth
on_js_console_output(method, line); on_js_console_output(method, line);
} }
void OutOfProcessWebView::notify_server_did_output_js_console_message(i32 message_index)
{
if (on_js_console_new_message)
on_js_console_new_message(message_index);
}
void OutOfProcessWebView::notify_server_did_get_js_console_messages(i32 start_index, const Vector<String>& message_types, const Vector<String>& messages)
{
if (on_get_js_console_messages)
on_get_js_console_messages(start_index, message_types, messages);
}
void OutOfProcessWebView::notify_server_did_change_favicon(const Gfx::Bitmap& favicon) void OutOfProcessWebView::notify_server_did_change_favicon(const Gfx::Bitmap& favicon)
{ {
if (on_favicon_change) if (on_favicon_change)
@ -439,6 +451,11 @@ void OutOfProcessWebView::js_console_input(const String& js_source)
client().async_js_console_input(js_source); client().async_js_console_input(js_source);
} }
void OutOfProcessWebView::js_console_request_messages(i32 start_index)
{
client().async_js_console_request_messages(start_index);
}
void OutOfProcessWebView::run_javascript(StringView js_source) void OutOfProcessWebView::run_javascript(StringView js_source)
{ {
client().async_run_javascript(js_source); client().async_run_javascript(js_source);

View file

@ -43,6 +43,7 @@ public:
void js_console_initialize(); void js_console_initialize();
void js_console_input(const String& js_source); void js_console_input(const String& js_source);
void js_console_request_messages(i32 start_index);
void run_javascript(StringView); void run_javascript(StringView);
@ -75,6 +76,8 @@ public:
void notify_server_did_get_dom_tree(const String& dom_tree); void notify_server_did_get_dom_tree(const String& dom_tree);
void notify_server_did_get_dom_node_properties(i32 node_id, String const& specified_style, String const& computed_style); void notify_server_did_get_dom_node_properties(i32 node_id, String const& specified_style, String const& computed_style);
void notify_server_did_js_console_output(const String& method, const String& line); void notify_server_did_js_console_output(const String& method, const String& line);
void notify_server_did_output_js_console_message(i32 message_index);
void notify_server_did_get_js_console_messages(i32 start_index, Vector<String> const& message_types, Vector<String> const& messages);
void notify_server_did_change_favicon(const Gfx::Bitmap& favicon); void notify_server_did_change_favicon(const Gfx::Bitmap& favicon);
String notify_server_did_request_cookie(Badge<WebContentClient>, const URL& url, Cookie::Source source); String notify_server_did_request_cookie(Badge<WebContentClient>, const URL& url, Cookie::Source source);
void notify_server_did_set_cookie(Badge<WebContentClient>, const URL& url, const Cookie::ParsedCookie& cookie, Cookie::Source source); void notify_server_did_set_cookie(Badge<WebContentClient>, const URL& url, const Cookie::ParsedCookie& cookie, Cookie::Source source);

View file

@ -151,6 +151,16 @@ void WebContentClient::did_js_console_output(String const& method, String const&
m_view.notify_server_did_js_console_output(method, line); m_view.notify_server_did_js_console_output(method, line);
} }
void WebContentClient::did_output_js_console_message(i32 message_index)
{
m_view.notify_server_did_output_js_console_message(message_index);
}
void WebContentClient::did_get_js_console_messages(i32 start_index, Vector<String> const& message_types, Vector<String> const& messages)
{
m_view.notify_server_did_get_js_console_messages(start_index, message_types, messages);
}
void WebContentClient::did_request_alert(String const& message) void WebContentClient::did_request_alert(String const& message)
{ {
m_view.notify_server_did_request_alert({}, message); m_view.notify_server_did_request_alert({}, message);

View file

@ -52,6 +52,8 @@ private:
virtual void did_get_dom_tree(String const&) override; virtual void did_get_dom_tree(String const&) override;
virtual void did_get_dom_node_properties(i32 node_id, String const& specified_style, String const& computed_style) override; virtual void did_get_dom_node_properties(i32 node_id, String const& specified_style, String const& computed_style) override;
virtual void did_js_console_output(String const&, String const&) override; virtual void did_js_console_output(String const&, String const&) override;
virtual void did_output_js_console_message(i32 message_index) override;
virtual void did_get_js_console_messages(i32 start_index, Vector<String> const& message_types, Vector<String> const& messages) override;
virtual void did_change_favicon(Gfx::ShareableBitmap const&) override; virtual void did_change_favicon(Gfx::ShareableBitmap const&) override;
virtual void did_request_alert(String const&) override; virtual void did_request_alert(String const&) override;
virtual Messages::WebContentClient::DidRequestConfirmResponse did_request_confirm(String const&) override; virtual Messages::WebContentClient::DidRequestConfirmResponse did_request_confirm(String const&) override;

View file

@ -30,6 +30,8 @@ public:
Function<void(const String&)> on_get_dom_tree; Function<void(const String&)> on_get_dom_tree;
Function<void(i32 node_id, String const& specified_style, String const& computed_style)> on_get_dom_node_properties; Function<void(i32 node_id, String const& specified_style, String const& computed_style)> on_get_dom_node_properties;
Function<void(const String& method, const String& line)> on_js_console_output; Function<void(const String& method, const String& line)> on_js_console_output;
Function<void(i32 message_id)> on_js_console_new_message;
Function<void(i32 start_index, Vector<String> const& message_types, Vector<String> const& messages)> on_get_js_console_messages;
Function<String(const URL& url, Cookie::Source source)> on_get_cookie; Function<String(const URL& url, Cookie::Source source)> on_get_cookie;
Function<void(const URL& url, const Cookie::ParsedCookie& cookie, Cookie::Source source)> on_set_cookie; Function<void(const URL& url, const Cookie::ParsedCookie& cookie, Cookie::Source source)> on_set_cookie;
}; };

View file

@ -283,6 +283,18 @@ void ClientConnection::js_console_initialize()
} }
} }
void ClientConnection::initialize_js_console(Badge<PageHost>)
{
auto* document = page().top_level_browsing_context().document();
auto interpreter = document->interpreter().make_weak_ptr();
if (m_interpreter.ptr() == interpreter.ptr())
return;
m_interpreter = interpreter;
m_console_client = make<WebContentConsoleClient>(interpreter->global_object().console(), interpreter, *this);
interpreter->global_object().console().set_client(*m_console_client.ptr());
}
void ClientConnection::js_console_input(const String& js_source) void ClientConnection::js_console_input(const String& js_source)
{ {
if (m_console_client) if (m_console_client)
@ -306,6 +318,11 @@ void ClientConnection::run_javascript(String const& js_source)
} }
} }
void ClientConnection::js_console_request_messages(i32)
{
TODO();
}
Messages::WebContentServer::GetSelectedTextResponse ClientConnection::get_selected_text() Messages::WebContentServer::GetSelectedTextResponse ClientConnection::get_selected_text()
{ {
return page().focused_context().selected_text(); return page().focused_context().selected_text();

View file

@ -29,6 +29,8 @@ public:
virtual void die() override; virtual void die() override;
void initialize_js_console(Badge<PageHost>);
private: private:
Web::Page& page(); Web::Page& page();
const Web::Page& page() const; const Web::Page& page() const;
@ -52,9 +54,12 @@ private:
virtual void inspect_dom_tree() override; virtual void inspect_dom_tree() override;
virtual Messages::WebContentServer::InspectDomNodeResponse inspect_dom_node(i32) override; virtual Messages::WebContentServer::InspectDomNodeResponse inspect_dom_node(i32) override;
virtual Messages::WebContentServer::GetHoveredNodeIdResponse get_hovered_node_id() override; virtual Messages::WebContentServer::GetHoveredNodeIdResponse get_hovered_node_id() override;
virtual void js_console_initialize() override; virtual void js_console_initialize() override;
virtual void js_console_input(String const&) override; virtual void js_console_input(String const&) override;
virtual void run_javascript(String const&) override; virtual void run_javascript(String const&) override;
virtual void js_console_request_messages(i32) override;
virtual Messages::WebContentServer::GetSelectedTextResponse get_selected_text() override; virtual Messages::WebContentServer::GetSelectedTextResponse get_selected_text() override;
virtual void select_all() override; virtual void select_all() override;

View file

@ -33,4 +33,8 @@ endpoint WebContentClient
did_change_favicon(Gfx::ShareableBitmap favicon) =| did_change_favicon(Gfx::ShareableBitmap favicon) =|
did_request_cookie(URL url, u8 source) => (String cookie) did_request_cookie(URL url, u8 source) => (String cookie)
did_set_cookie(URL url, Web::Cookie::ParsedCookie cookie, u8 source) =| did_set_cookie(URL url, Web::Cookie::ParsedCookie cookie, u8 source) =|
did_output_js_console_message(i32 message_index) =|
did_get_js_console_messages(i32 start_index, Vector<String> message_types, Vector<String> messages) =|
} }

View file

@ -31,6 +31,7 @@ endpoint WebContentServer
get_hovered_node_id() => (i32 node_id) get_hovered_node_id() => (i32 node_id)
js_console_initialize() =| js_console_initialize() =|
js_console_input(String js_source) =| js_console_input(String js_source) =|
js_console_request_messages(i32 start_index) =|
run_javascript(String js_source) =| run_javascript(String js_source) =|