/* * Copyright (c) 2021, Brandon Scott * Copyright (c) 2020, Hunter Salyer * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace WebContent { class WebContentConsoleClient final : public JS::ConsoleClient { GC_CELL(WebContentConsoleClient, JS::ConsoleClient); GC_DECLARE_ALLOCATOR(WebContentConsoleClient); public: virtual ~WebContentConsoleClient() override; void handle_input(ByteString const& js_source); void send_messages(i32 start_index); void report_exception(JS::Error const&, bool) override; private: WebContentConsoleClient(JS::Console&, JS::Realm&, PageClient&); virtual void visit_edges(JS::Cell::Visitor&) override; virtual void clear() override; virtual JS::ThrowCompletionOr printer(JS::Console::LogLevel log_level, PrinterArguments) override; virtual void add_css_style_to_current_message(StringView style) override { m_current_message_style.append(style); m_current_message_style.append(';'); } GC::Ref m_client; GC::Ptr m_console_global_environment_extensions; void clear_output(); void print_html(ByteString const& line); void begin_group(ByteString const& label, bool start_expanded); virtual void end_group() override; struct ConsoleOutput { enum class Type { HTML, Clear, BeginGroup, BeginGroupCollapsed, EndGroup, }; Type type; ByteString data; }; Vector m_message_log; StringBuilder m_current_message_style; }; }