LibWebView+WebContent: Port JS console handling to String

This commit is contained in:
Timothy Flynn
2025-02-23 08:57:40 -05:00
committed by Andreas Kling
parent bbcd8bd97c
commit a8d3252f93
14 changed files with 58 additions and 56 deletions

View File

@@ -1150,7 +1150,7 @@ void ConnectionFromClient::set_system_visibility_state(u64 page_id, Web::HTML::V
page->page().top_level_traversable()->set_system_visibility_state(visibility_state);
}
void ConnectionFromClient::js_console_input(u64 page_id, ByteString const& js_source)
void ConnectionFromClient::js_console_input(u64 page_id, String const& js_source)
{
auto page = this->page(page_id);
if (!page.has_value())
@@ -1159,7 +1159,7 @@ void ConnectionFromClient::js_console_input(u64 page_id, ByteString const& js_so
page->js_console_input(js_source);
}
void ConnectionFromClient::run_javascript(u64 page_id, ByteString const& js_source)
void ConnectionFromClient::run_javascript(u64 page_id, String const& js_source)
{
if (auto page = this->page(page_id); page.has_value())
page->run_javascript(js_source);

View File

@@ -111,8 +111,8 @@ private:
virtual void handle_file_return(u64 page_id, i32 error, Optional<IPC::File> const& file, i32 request_id) override;
virtual void set_system_visibility_state(u64 page_id, Web::HTML::VisibilityState) override;
virtual void js_console_input(u64 page_id, ByteString const&) override;
virtual void run_javascript(u64 page_id, ByteString const&) override;
virtual void js_console_input(u64 page_id, String const&) override;
virtual void run_javascript(u64 page_id, String const&) override;
virtual void js_console_request_messages(u64 page_id, i32) override;
virtual void alert_closed(u64 page_id) override;

View File

@@ -738,13 +738,13 @@ void PageClient::initialize_js_console(Web::DOM::Document& document)
document.set_console_client(console_client);
}
void PageClient::js_console_input(ByteString const& js_source)
void PageClient::js_console_input(StringView js_source)
{
if (m_top_level_document_console_client)
m_top_level_document_console_client->handle_input(js_source);
}
void PageClient::run_javascript(ByteString const& js_source)
void PageClient::run_javascript(StringView js_source)
{
auto* active_document = page().top_level_browsing_context().active_document();
@@ -787,7 +787,7 @@ void PageClient::console_peer_did_misbehave(char const* reason)
client().did_misbehave(reason);
}
void PageClient::did_get_js_console_messages(i32 start_index, Vector<ByteString> message_types, Vector<ByteString> messages)
void PageClient::did_get_js_console_messages(i32 start_index, Vector<String> message_types, Vector<String> messages)
{
client().async_did_get_js_console_messages(m_id, start_index, move(message_types), move(messages));
}

View File

@@ -82,12 +82,12 @@ public:
void ready_to_paint();
void initialize_js_console(Web::DOM::Document& document);
void js_console_input(ByteString const& js_source);
void run_javascript(ByteString const& js_source);
void js_console_input(StringView js_source);
void run_javascript(StringView js_source);
void js_console_request_messages(i32 start_index);
void did_output_js_console_message(i32 message_index);
void console_peer_did_misbehave(char const* reason);
void did_get_js_console_messages(i32 start_index, Vector<ByteString> message_types, Vector<ByteString> messages);
void did_get_js_console_messages(i32 start_index, Vector<String> message_types, Vector<String> messages);
Vector<Web::CSS::StyleSheetIdentifier> list_style_sheets() const;

View File

@@ -92,7 +92,7 @@ endpoint WebContentClient
did_change_audio_play_state(u64 page_id, Web::HTML::AudioPlayState play_state) =|
did_output_js_console_message(u64 page_id, i32 message_index) =|
did_get_js_console_messages(u64 page_id, i32 start_index, Vector<ByteString> message_types, Vector<ByteString> messages) =|
did_get_js_console_messages(u64 page_id, i32 start_index, Vector<String> message_types, Vector<String> messages) =|
did_finish_text_test(u64 page_id, String text) =|
did_set_test_timeout(u64 page_id, double milliseconds) =|

View File

@@ -43,7 +43,7 @@ void WebContentConsoleClient::visit_edges(JS::Cell::Visitor& visitor)
visitor.visit(m_console_global_environment_extensions);
}
void WebContentConsoleClient::handle_input(ByteString const& js_source)
void WebContentConsoleClient::handle_input(StringView js_source)
{
if (!m_console_global_environment_extensions)
return;
@@ -58,16 +58,16 @@ void WebContentConsoleClient::handle_input(ByteString const& js_source)
if (result.value().has_value()) {
m_console_global_environment_extensions->set_most_recent_result(result.value().value());
print_html(JS::MarkupGenerator::html_from_value(*result.value()).release_value_but_fixme_should_propagate_errors().to_byte_string());
print_html(JS::MarkupGenerator::html_from_value(*result.value()).release_value_but_fixme_should_propagate_errors());
}
}
void WebContentConsoleClient::report_exception(JS::Error const& exception, bool in_promise)
{
print_html(JS::MarkupGenerator::html_from_error(exception, in_promise).release_value_but_fixme_should_propagate_errors().to_byte_string());
print_html(JS::MarkupGenerator::html_from_error(exception, in_promise).release_value_but_fixme_should_propagate_errors());
}
void WebContentConsoleClient::print_html(ByteString const& line)
void WebContentConsoleClient::print_html(String const& line)
{
m_message_log.append({ .type = ConsoleOutput::Type::HTML, .data = line });
m_client->did_output_js_console_message(m_message_log.size() - 1);
@@ -75,11 +75,11 @@ void WebContentConsoleClient::print_html(ByteString const& line)
void WebContentConsoleClient::clear_output()
{
m_message_log.append({ .type = ConsoleOutput::Type::Clear, .data = "" });
m_message_log.append({ .type = ConsoleOutput::Type::Clear, .data = String {} });
m_client->did_output_js_console_message(m_message_log.size() - 1);
}
void WebContentConsoleClient::begin_group(ByteString const& label, bool start_expanded)
void WebContentConsoleClient::begin_group(String const& label, bool start_expanded)
{
m_message_log.append({ .type = start_expanded ? ConsoleOutput::Type::BeginGroup : ConsoleOutput::Type::BeginGroupCollapsed, .data = label });
m_client->did_output_js_console_message(m_message_log.size() - 1);
@@ -87,7 +87,7 @@ void WebContentConsoleClient::begin_group(ByteString const& label, bool start_ex
void WebContentConsoleClient::end_group()
{
m_message_log.append({ .type = ConsoleOutput::Type::EndGroup, .data = "" });
m_message_log.append({ .type = ConsoleOutput::Type::EndGroup, .data = String {} });
m_client->did_output_js_console_message(m_message_log.size() - 1);
}
@@ -105,8 +105,8 @@ void WebContentConsoleClient::send_messages(i32 start_index)
}
// FIXME: Replace with a single Vector of message structs
Vector<ByteString> message_types;
Vector<ByteString> messages;
Vector<String> message_types;
Vector<String> messages;
message_types.ensure_capacity(messages_to_send);
messages.ensure_capacity(messages_to_send);
@@ -114,26 +114,26 @@ void WebContentConsoleClient::send_messages(i32 start_index)
auto& message = m_message_log[i];
switch (message.type) {
case ConsoleOutput::Type::HTML:
message_types.append("html"sv);
message_types.append("html"_string);
break;
case ConsoleOutput::Type::Clear:
message_types.append("clear"sv);
message_types.append("clear"_string);
break;
case ConsoleOutput::Type::BeginGroup:
message_types.append("group"sv);
message_types.append("group"_string);
break;
case ConsoleOutput::Type::BeginGroupCollapsed:
message_types.append("groupCollapsed"sv);
message_types.append("groupCollapsed"_string);
break;
case ConsoleOutput::Type::EndGroup:
message_types.append("groupEnd"sv);
message_types.append("groupEnd"_string);
break;
}
messages.append(message.data);
}
m_client->did_get_js_console_messages(start_index, message_types, messages);
m_client->did_get_js_console_messages(start_index, move(message_types), move(messages));
}
void WebContentConsoleClient::clear()
@@ -215,7 +215,7 @@ JS::ThrowCompletionOr<JS::Value> WebContentConsoleClient::printer(JS::Console::L
html.appendff("</tbody>");
html.appendff("</table>");
html.appendff("</div>");
print_html(html.string_view());
print_html(MUST(html.to_string()));
auto output = TRY(generically_format_values(table_args));
m_console->output_debug_message(log_level, output);
@@ -234,13 +234,13 @@ JS::ThrowCompletionOr<JS::Value> WebContentConsoleClient::printer(JS::Console::L
html.appendff("-> {}<br>", escape_html_entities(function_name));
html.append("</span>"sv);
print_html(html.string_view());
print_html(MUST(html.to_string()));
return JS::js_undefined();
}
if (log_level == JS::Console::LogLevel::Group || log_level == JS::Console::LogLevel::GroupCollapsed) {
auto group = arguments.get<JS::Console::Group>();
begin_group(ByteString::formatted("<span style='{}'>{}</span>", styling, escape_html_entities(group.label)), log_level == JS::Console::LogLevel::Group);
begin_group(MUST(String::formatted("<span style='{}'>{}</span>", styling, escape_html_entities(group.label))), log_level == JS::Console::LogLevel::Group);
return JS::js_undefined();
}
@@ -272,7 +272,7 @@ JS::ThrowCompletionOr<JS::Value> WebContentConsoleClient::printer(JS::Console::L
html.append(escape_html_entities(output));
html.append("</span>"sv);
print_html(html.string_view());
print_html(MUST(html.to_string()));
return JS::js_undefined();
}

View File

@@ -8,6 +8,7 @@
#pragma once
#include <AK/String.h>
#include <AK/Vector.h>
#include <AK/Weakable.h>
#include <LibJS/Console.h>
@@ -25,7 +26,7 @@ class WebContentConsoleClient final : public JS::ConsoleClient {
public:
virtual ~WebContentConsoleClient() override;
void handle_input(ByteString const& js_source);
void handle_input(StringView js_source);
void send_messages(i32 start_index);
void report_exception(JS::Error const&, bool) override;
@@ -46,8 +47,8 @@ private:
GC::Ptr<ConsoleGlobalEnvironmentExtensions> m_console_global_environment_extensions;
void clear_output();
void print_html(ByteString const& line);
void begin_group(ByteString const& label, bool start_expanded);
void print_html(String const& line);
void begin_group(String const& label, bool start_expanded);
virtual void end_group() override;
struct ConsoleOutput {
@@ -59,7 +60,7 @@ private:
EndGroup,
};
Type type;
ByteString data;
String data;
};
Vector<ConsoleOutput> m_message_log;

View File

@@ -48,8 +48,11 @@ endpoint WebContentServer
highlight_dom_node(u64 page_id, Web::UniqueNodeID node_id, Optional<Web::CSS::Selector::PseudoElement::Type> pseudo_element) =|
inspect_accessibility_tree(u64 page_id) =|
get_hovered_node_id(u64 page_id) =|
js_console_input(u64 page_id, ByteString js_source) =|
js_console_input(u64 page_id, String js_source) =|
js_console_request_messages(u64 page_id, i32 start_index) =|
run_javascript(u64 page_id, String js_source) =|
list_style_sheets(u64 page_id) =|
request_style_sheet_source(u64 page_id, Web::CSS::StyleSheetIdentifier identifier) =|
@@ -68,8 +71,6 @@ endpoint WebContentServer
request_internal_page_info(u64 page_id, WebView::PageInfoType type) =|
run_javascript(u64 page_id, ByteString js_source) =|
get_selected_text(u64 page_id) => (ByteString selection)
select_all(u64 page_id) =|
paste(u64 page_id, String text) =|