1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-10 01:51:03 +09:00

LibDevTools+LibWebView: Port DevTools to String

This commit is contained in:
Timothy Flynn 2025-02-19 09:28:02 -05:00 committed by Tim Flynn
parent 9879ac0893
commit 4791ec35bf
Notes: github-actions[bot] 2025-02-21 00:29:06 +00:00
35 changed files with 99 additions and 98 deletions

View file

@ -11,10 +11,9 @@
namespace DevTools { namespace DevTools {
// FIXME: Convert `name` to a String. Actor::Actor(DevToolsServer& devtools, String name)
Actor::Actor(DevToolsServer& devtools, ByteString name)
: m_devtools(devtools) : m_devtools(devtools)
, m_name(MUST(String::from_byte_string(name))) , m_name(move(name))
{ {
} }

View file

@ -7,7 +7,6 @@
#pragma once #pragma once
#include <AK/Badge.h> #include <AK/Badge.h>
#include <AK/ByteString.h>
#include <AK/Optional.h> #include <AK/Optional.h>
#include <AK/RefCounted.h> #include <AK/RefCounted.h>
#include <AK/String.h> #include <AK/String.h>
@ -49,7 +48,7 @@ public:
void send_unknown_actor_error(StringView actor); void send_unknown_actor_error(StringView actor);
protected: protected:
explicit Actor(DevToolsServer&, ByteString name); explicit Actor(DevToolsServer&, String name);
DevToolsServer& devtools() { return m_devtools; } DevToolsServer& devtools() { return m_devtools; }
DevToolsServer const& devtools() const { return m_devtools; } DevToolsServer const& devtools() const { return m_devtools; }

View file

@ -12,12 +12,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<CSSPropertiesActor> CSSPropertiesActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<CSSPropertiesActor> CSSPropertiesActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new CSSPropertiesActor(devtools, move(name))); return adopt_ref(*new CSSPropertiesActor(devtools, move(name)));
} }
CSSPropertiesActor::CSSPropertiesActor(DevToolsServer& devtools, ByteString name) CSSPropertiesActor::CSSPropertiesActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }
@ -36,7 +36,7 @@ void CSSPropertiesActor::handle_message(StringView type, JsonObject const&)
for (auto const& css_property : css_property_list) { for (auto const& css_property : css_property_list) {
JsonArray subproperties; JsonArray subproperties;
subproperties.must_append(MUST(String::from_byte_string(css_property.name))); subproperties.must_append(css_property.name);
JsonObject property; JsonObject property;
property.set("isInherited"sv, css_property.is_inherited); property.set("isInherited"sv, css_property.is_inherited);

View file

@ -6,14 +6,14 @@
#pragma once #pragma once
#include <AK/ByteString.h>
#include <AK/NonnullRefPtr.h> #include <AK/NonnullRefPtr.h>
#include <AK/String.h>
#include <LibDevTools/Actor.h> #include <LibDevTools/Actor.h>
namespace DevTools { namespace DevTools {
struct CSSProperty { struct CSSProperty {
ByteString name; String name;
bool is_inherited { false }; bool is_inherited { false };
}; };
@ -21,13 +21,13 @@ class CSSPropertiesActor final : public Actor {
public: public:
static constexpr auto base_name = "css-properties"sv; static constexpr auto base_name = "css-properties"sv;
static NonnullRefPtr<CSSPropertiesActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<CSSPropertiesActor> create(DevToolsServer&, String name);
virtual ~CSSPropertiesActor() override; virtual ~CSSPropertiesActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
private: private:
CSSPropertiesActor(DevToolsServer&, ByteString name); CSSPropertiesActor(DevToolsServer&, String name);
}; };
} }

View file

@ -12,12 +12,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<DeviceActor> DeviceActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<DeviceActor> DeviceActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new DeviceActor(devtools, move(name))); return adopt_ref(*new DeviceActor(devtools, move(name)));
} }
DeviceActor::DeviceActor(DevToolsServer& devtools, ByteString name) DeviceActor::DeviceActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,13 +15,13 @@ class DeviceActor final : public Actor {
public: public:
static constexpr auto base_name = "device"sv; static constexpr auto base_name = "device"sv;
static NonnullRefPtr<DeviceActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<DeviceActor> create(DevToolsServer&, String name);
virtual ~DeviceActor() override; virtual ~DeviceActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
private: private:
DeviceActor(DevToolsServer&, ByteString name); DeviceActor(DevToolsServer&, String name);
}; };
} }

View file

@ -14,12 +14,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<FrameActor> FrameActor::create(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab, WeakPtr<CSSPropertiesActor> css_properties, WeakPtr<InspectorActor> inspector, WeakPtr<ThreadActor> thread) NonnullRefPtr<FrameActor> FrameActor::create(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab, WeakPtr<CSSPropertiesActor> css_properties, WeakPtr<InspectorActor> inspector, WeakPtr<ThreadActor> thread)
{ {
return adopt_ref(*new FrameActor(devtools, move(name), move(tab), move(css_properties), move(inspector), move(thread))); return adopt_ref(*new FrameActor(devtools, move(name), move(tab), move(css_properties), move(inspector), move(thread)));
} }
FrameActor::FrameActor(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab, WeakPtr<CSSPropertiesActor> css_properties, WeakPtr<InspectorActor> inspector, WeakPtr<ThreadActor> thread) FrameActor::FrameActor(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab, WeakPtr<CSSPropertiesActor> css_properties, WeakPtr<InspectorActor> inspector, WeakPtr<ThreadActor> thread)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
, m_tab(move(tab)) , m_tab(move(tab))
, m_css_properties(move(css_properties)) , m_css_properties(move(css_properties))
@ -50,8 +50,8 @@ void FrameActor::send_frame_update_message()
if (auto tab_actor = m_tab.strong_ref()) { if (auto tab_actor = m_tab.strong_ref()) {
JsonObject frame; JsonObject frame;
frame.set("id"sv, tab_actor->description().id); frame.set("id"sv, tab_actor->description().id);
frame.set("title"sv, MUST(String::from_byte_string(tab_actor->description().title))); frame.set("title"sv, tab_actor->description().title);
frame.set("url"sv, MUST(String::from_byte_string(tab_actor->description().url))); frame.set("url"sv, tab_actor->description().url);
frames.must_append(move(frame)); frames.must_append(move(frame));
} }
@ -76,8 +76,8 @@ JsonObject FrameActor::serialize_target() const
target.set("actor"sv, name()); target.set("actor"sv, name());
if (auto tab_actor = m_tab.strong_ref()) { if (auto tab_actor = m_tab.strong_ref()) {
target.set("title"sv, MUST(String::from_byte_string(tab_actor->description().title))); target.set("title"sv, tab_actor->description().title);
target.set("url"sv, MUST(String::from_byte_string(tab_actor->description().url))); target.set("url"sv, tab_actor->description().url);
target.set("browsingContextID"sv, tab_actor->description().id); target.set("browsingContextID"sv, tab_actor->description().id);
target.set("outerWindowID"sv, tab_actor->description().id); target.set("outerWindowID"sv, tab_actor->description().id);
target.set("isTopLevelTarget"sv, true); target.set("isTopLevelTarget"sv, true);

View file

@ -15,7 +15,7 @@ class FrameActor final : public Actor {
public: public:
static constexpr auto base_name = "frame"sv; static constexpr auto base_name = "frame"sv;
static NonnullRefPtr<FrameActor> create(DevToolsServer&, ByteString name, WeakPtr<TabActor>, WeakPtr<CSSPropertiesActor>, WeakPtr<InspectorActor>, WeakPtr<ThreadActor>); static NonnullRefPtr<FrameActor> create(DevToolsServer&, String name, WeakPtr<TabActor>, WeakPtr<CSSPropertiesActor>, WeakPtr<InspectorActor>, WeakPtr<ThreadActor>);
virtual ~FrameActor() override; virtual ~FrameActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -24,7 +24,7 @@ public:
JsonObject serialize_target() const; JsonObject serialize_target() const;
private: private:
FrameActor(DevToolsServer&, ByteString name, WeakPtr<TabActor>, WeakPtr<CSSPropertiesActor>, WeakPtr<InspectorActor>, WeakPtr<ThreadActor>); FrameActor(DevToolsServer&, String name, WeakPtr<TabActor>, WeakPtr<CSSPropertiesActor>, WeakPtr<InspectorActor>, WeakPtr<ThreadActor>);
WeakPtr<TabActor> m_tab; WeakPtr<TabActor> m_tab;

View file

@ -9,12 +9,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<HighlighterActor> HighlighterActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<HighlighterActor> HighlighterActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new HighlighterActor(devtools, move(name))); return adopt_ref(*new HighlighterActor(devtools, move(name)));
} }
HighlighterActor::HighlighterActor(DevToolsServer& devtools, ByteString name) HighlighterActor::HighlighterActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,14 +15,14 @@ class HighlighterActor final : public Actor {
public: public:
static constexpr auto base_name = "highlighter"sv; static constexpr auto base_name = "highlighter"sv;
static NonnullRefPtr<HighlighterActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<HighlighterActor> create(DevToolsServer&, String name);
virtual ~HighlighterActor() override; virtual ~HighlighterActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
JsonValue serialize_highlighter() const; JsonValue serialize_highlighter() const;
private: private:
HighlighterActor(DevToolsServer&, ByteString name); HighlighterActor(DevToolsServer&, String name);
}; };
} }

View file

@ -16,12 +16,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<InspectorActor> InspectorActor::create(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab) NonnullRefPtr<InspectorActor> InspectorActor::create(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab)
{ {
return adopt_ref(*new InspectorActor(devtools, move(name), move(tab))); return adopt_ref(*new InspectorActor(devtools, move(name), move(tab)));
} }
InspectorActor::InspectorActor(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab) InspectorActor::InspectorActor(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
, m_tab(move(tab)) , m_tab(move(tab))
{ {

View file

@ -15,13 +15,13 @@ class InspectorActor final : public Actor {
public: public:
static constexpr auto base_name = "inspector"sv; static constexpr auto base_name = "inspector"sv;
static NonnullRefPtr<InspectorActor> create(DevToolsServer&, ByteString name, WeakPtr<TabActor>); static NonnullRefPtr<InspectorActor> create(DevToolsServer&, String name, WeakPtr<TabActor>);
virtual ~InspectorActor() override; virtual ~InspectorActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
private: private:
InspectorActor(DevToolsServer&, ByteString name, WeakPtr<TabActor>); InspectorActor(DevToolsServer&, String name, WeakPtr<TabActor>);
void received_dom_tree(JsonObject, BlockToken); void received_dom_tree(JsonObject, BlockToken);

View file

@ -9,12 +9,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<PageStyleActor> PageStyleActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<PageStyleActor> PageStyleActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new PageStyleActor(devtools, move(name))); return adopt_ref(*new PageStyleActor(devtools, move(name)));
} }
PageStyleActor::PageStyleActor(DevToolsServer& devtools, ByteString name) PageStyleActor::PageStyleActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,14 +15,14 @@ class PageStyleActor final : public Actor {
public: public:
static constexpr auto base_name = "page-style"sv; static constexpr auto base_name = "page-style"sv;
static NonnullRefPtr<PageStyleActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<PageStyleActor> create(DevToolsServer&, String name);
virtual ~PageStyleActor() override; virtual ~PageStyleActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
JsonValue serialize_style() const; JsonValue serialize_style() const;
private: private:
PageStyleActor(DevToolsServer&, ByteString name); PageStyleActor(DevToolsServer&, String name);
}; };
} }

View file

@ -9,12 +9,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<PreferenceActor> PreferenceActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<PreferenceActor> PreferenceActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new PreferenceActor(devtools, move(name))); return adopt_ref(*new PreferenceActor(devtools, move(name)));
} }
PreferenceActor::PreferenceActor(DevToolsServer& devtools, ByteString name) PreferenceActor::PreferenceActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,13 +15,13 @@ class PreferenceActor final : public Actor {
public: public:
static constexpr auto base_name = "preference"sv; static constexpr auto base_name = "preference"sv;
static NonnullRefPtr<PreferenceActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<PreferenceActor> create(DevToolsServer&, String name);
virtual ~PreferenceActor() override; virtual ~PreferenceActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
private: private:
PreferenceActor(DevToolsServer&, ByteString name); PreferenceActor(DevToolsServer&, String name);
}; };
} }

View file

@ -9,12 +9,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<ProcessActor> ProcessActor::create(DevToolsServer& devtools, ByteString name, ProcessDescription description) NonnullRefPtr<ProcessActor> ProcessActor::create(DevToolsServer& devtools, String name, ProcessDescription description)
{ {
return adopt_ref(*new ProcessActor(devtools, move(name), move(description))); return adopt_ref(*new ProcessActor(devtools, move(name), move(description)));
} }
ProcessActor::ProcessActor(DevToolsServer& devtools, ByteString name, ProcessDescription description) ProcessActor::ProcessActor(DevToolsServer& devtools, String name, ProcessDescription description)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
, m_description(move(description)) , m_description(move(description))
{ {

View file

@ -21,7 +21,7 @@ class ProcessActor final : public Actor {
public: public:
static constexpr auto base_name = "process"sv; static constexpr auto base_name = "process"sv;
static NonnullRefPtr<ProcessActor> create(DevToolsServer&, ByteString name, ProcessDescription); static NonnullRefPtr<ProcessActor> create(DevToolsServer&, String name, ProcessDescription);
virtual ~ProcessActor() override; virtual ~ProcessActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -30,7 +30,7 @@ public:
JsonObject serialize_description() const; JsonObject serialize_description() const;
private: private:
ProcessActor(DevToolsServer&, ByteString name, ProcessDescription); ProcessActor(DevToolsServer&, String name, ProcessDescription);
ProcessDescription m_description; ProcessDescription m_description;
}; };

View file

@ -16,7 +16,7 @@
namespace DevTools { namespace DevTools {
// https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#the-root-actor // https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#the-root-actor
NonnullRefPtr<RootActor> RootActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<RootActor> RootActor::create(DevToolsServer& devtools, String name)
{ {
auto actor = adopt_ref(*new RootActor(devtools, move(name))); auto actor = adopt_ref(*new RootActor(devtools, move(name)));
@ -35,7 +35,7 @@ NonnullRefPtr<RootActor> RootActor::create(DevToolsServer& devtools, ByteString
return actor; return actor;
} }
RootActor::RootActor(DevToolsServer& devtools, ByteString name) RootActor::RootActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }
@ -57,9 +57,9 @@ void RootActor::handle_message(StringView type, JsonObject const& message)
for (auto const& actor : devtools().actor_registry()) { for (auto const& actor : devtools().actor_registry()) {
if (is<DeviceActor>(*actor.value)) if (is<DeviceActor>(*actor.value))
response.set("deviceActor"sv, MUST(String::from_byte_string(actor.key))); response.set("deviceActor"sv, actor.key);
else if (is<PreferenceActor>(*actor.value)) else if (is<PreferenceActor>(*actor.value))
response.set("preferenceActor"sv, MUST(String::from_byte_string(actor.key))); response.set("preferenceActor"sv, actor.key);
} }
send_message(move(response)); send_message(move(response));

View file

@ -15,7 +15,7 @@ class RootActor final : public Actor {
public: public:
static constexpr auto base_name = "root"sv; static constexpr auto base_name = "root"sv;
static NonnullRefPtr<RootActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<RootActor> create(DevToolsServer&, String name);
virtual ~RootActor() override; virtual ~RootActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -23,7 +23,7 @@ public:
void send_tab_list_changed_message(); void send_tab_list_changed_message();
private: private:
RootActor(DevToolsServer&, ByteString name); RootActor(DevToolsServer&, String name);
// https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#the-request-reply-notify-pattern // https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#the-request-reply-notify-pattern
// the root actor sends at most one "tabListChanged" notification after each "listTabs" request. // the root actor sends at most one "tabListChanged" notification after each "listTabs" request.

View file

@ -11,12 +11,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<TabActor> TabActor::create(DevToolsServer& devtools, ByteString name, TabDescription description) NonnullRefPtr<TabActor> TabActor::create(DevToolsServer& devtools, String name, TabDescription description)
{ {
return adopt_ref(*new TabActor(devtools, move(name), move(description))); return adopt_ref(*new TabActor(devtools, move(name), move(description)));
} }
TabActor::TabActor(DevToolsServer& devtools, ByteString name, TabDescription description) TabActor::TabActor(DevToolsServer& devtools, String name, TabDescription description)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
, m_description(move(description)) , m_description(move(description))
{ {
@ -60,8 +60,8 @@ JsonObject TabActor::serialize_description() const
// provide different IDs for browserId, browsingContextID, and outerWindowID. // provide different IDs for browserId, browsingContextID, and outerWindowID.
JsonObject description; JsonObject description;
description.set("actor"sv, name()); description.set("actor"sv, name());
description.set("title"sv, MUST(String::from_byte_string(m_description.title))); description.set("title"sv, m_description.title);
description.set("url"sv, MUST(String::from_byte_string(m_description.url))); description.set("url"sv, m_description.url);
description.set("browserId"sv, m_description.id); description.set("browserId"sv, m_description.id);
description.set("browsingContextID"sv, m_description.id); description.set("browsingContextID"sv, m_description.id);
description.set("outerWindowID"sv, m_description.id); description.set("outerWindowID"sv, m_description.id);

View file

@ -7,21 +7,22 @@
#pragma once #pragma once
#include <AK/NonnullRefPtr.h> #include <AK/NonnullRefPtr.h>
#include <AK/String.h>
#include <LibDevTools/Actor.h> #include <LibDevTools/Actor.h>
namespace DevTools { namespace DevTools {
struct TabDescription { struct TabDescription {
u64 id { 0 }; u64 id { 0 };
ByteString title; String title;
ByteString url; String url;
}; };
class TabActor final : public Actor { class TabActor final : public Actor {
public: public:
static constexpr auto base_name = "tab"sv; static constexpr auto base_name = "tab"sv;
static NonnullRefPtr<TabActor> create(DevToolsServer&, ByteString name, TabDescription); static NonnullRefPtr<TabActor> create(DevToolsServer&, String name, TabDescription);
virtual ~TabActor() override; virtual ~TabActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -30,7 +31,7 @@ public:
JsonObject serialize_description() const; JsonObject serialize_description() const;
private: private:
TabActor(DevToolsServer&, ByteString name, TabDescription); TabActor(DevToolsServer&, String name, TabDescription);
TabDescription m_description; TabDescription m_description;
WeakPtr<WatcherActor> m_watcher; WeakPtr<WatcherActor> m_watcher;

View file

@ -10,12 +10,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<TargetConfigurationActor> TargetConfigurationActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<TargetConfigurationActor> TargetConfigurationActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new TargetConfigurationActor(devtools, move(name))); return adopt_ref(*new TargetConfigurationActor(devtools, move(name)));
} }
TargetConfigurationActor::TargetConfigurationActor(DevToolsServer& devtools, ByteString name) TargetConfigurationActor::TargetConfigurationActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,7 +15,7 @@ class TargetConfigurationActor final : public Actor {
public: public:
static constexpr auto base_name = "target-configuration"sv; static constexpr auto base_name = "target-configuration"sv;
static NonnullRefPtr<TargetConfigurationActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<TargetConfigurationActor> create(DevToolsServer&, String name);
virtual ~TargetConfigurationActor() override; virtual ~TargetConfigurationActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -23,7 +23,7 @@ public:
JsonObject serialize_configuration() const; JsonObject serialize_configuration() const;
private: private:
TargetConfigurationActor(DevToolsServer&, ByteString name); TargetConfigurationActor(DevToolsServer&, String name);
}; };
} }

View file

@ -8,12 +8,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<ThreadActor> ThreadActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<ThreadActor> ThreadActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new ThreadActor(devtools, move(name))); return adopt_ref(*new ThreadActor(devtools, move(name)));
} }
ThreadActor::ThreadActor(DevToolsServer& devtools, ByteString name) ThreadActor::ThreadActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,13 +15,13 @@ class ThreadActor final : public Actor {
public: public:
static constexpr auto base_name = "thread"sv; static constexpr auto base_name = "thread"sv;
static NonnullRefPtr<ThreadActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<ThreadActor> create(DevToolsServer&, String name);
virtual ~ThreadActor() override; virtual ~ThreadActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
private: private:
ThreadActor(DevToolsServer&, ByteString name); ThreadActor(DevToolsServer&, String name);
}; };
} }

View file

@ -10,12 +10,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<ThreadConfigurationActor> ThreadConfigurationActor::create(DevToolsServer& devtools, ByteString name) NonnullRefPtr<ThreadConfigurationActor> ThreadConfigurationActor::create(DevToolsServer& devtools, String name)
{ {
return adopt_ref(*new ThreadConfigurationActor(devtools, move(name))); return adopt_ref(*new ThreadConfigurationActor(devtools, move(name)));
} }
ThreadConfigurationActor::ThreadConfigurationActor(DevToolsServer& devtools, ByteString name) ThreadConfigurationActor::ThreadConfigurationActor(DevToolsServer& devtools, String name)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
{ {
} }

View file

@ -15,7 +15,7 @@ class ThreadConfigurationActor final : public Actor {
public: public:
static constexpr auto base_name = "thread-configuration"sv; static constexpr auto base_name = "thread-configuration"sv;
static NonnullRefPtr<ThreadConfigurationActor> create(DevToolsServer&, ByteString name); static NonnullRefPtr<ThreadConfigurationActor> create(DevToolsServer&, String name);
virtual ~ThreadConfigurationActor() override; virtual ~ThreadConfigurationActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -23,7 +23,7 @@ public:
JsonObject serialize_configuration() const; JsonObject serialize_configuration() const;
private: private:
ThreadConfigurationActor(DevToolsServer&, ByteString name); ThreadConfigurationActor(DevToolsServer&, String name);
}; };
} }

View file

@ -5,18 +5,19 @@
*/ */
#include <AK/JsonArray.h> #include <AK/JsonArray.h>
#include <AK/StringUtils.h>
#include <LibDevTools/Actors/TabActor.h> #include <LibDevTools/Actors/TabActor.h>
#include <LibDevTools/Actors/WalkerActor.h> #include <LibDevTools/Actors/WalkerActor.h>
#include <LibWeb/DOM/NodeType.h> #include <LibWeb/DOM/NodeType.h>
namespace DevTools { namespace DevTools {
NonnullRefPtr<WalkerActor> WalkerActor::create(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab, JsonObject dom_tree) NonnullRefPtr<WalkerActor> WalkerActor::create(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab, JsonObject dom_tree)
{ {
return adopt_ref(*new WalkerActor(devtools, move(name), move(tab), move(dom_tree))); return adopt_ref(*new WalkerActor(devtools, move(name), move(tab), move(dom_tree)));
} }
WalkerActor::WalkerActor(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab, JsonObject dom_tree) WalkerActor::WalkerActor(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab, JsonObject dom_tree)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
, m_tab(move(tab)) , m_tab(move(tab))
, m_dom_tree(move(dom_tree)) , m_dom_tree(move(dom_tree))
@ -32,7 +33,7 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
response.set("from"sv, name()); response.set("from"sv, name());
if (type == "children"sv) { if (type == "children"sv) {
auto node = message.get_byte_string("node"sv); auto node = message.get_string("node"sv);
if (!node.has_value()) { if (!node.has_value()) {
send_missing_parameter_error("node"sv); send_missing_parameter_error("node"sv);
return; return;
@ -57,13 +58,13 @@ void WalkerActor::handle_message(StringView type, JsonObject const& message)
} }
if (type == "querySelector"sv) { if (type == "querySelector"sv) {
auto node = message.get_byte_string("node"sv); auto node = message.get_string("node"sv);
if (!node.has_value()) { if (!node.has_value()) {
send_missing_parameter_error("node"sv); send_missing_parameter_error("node"sv);
return; return;
} }
auto selector = message.get_byte_string("selector"sv); auto selector = message.get_string("selector"sv);
if (!selector.has_value()) { if (!selector.has_value()) {
send_missing_parameter_error("selector"sv); send_missing_parameter_error("selector"sv);
return; return;
@ -112,12 +113,12 @@ bool WalkerActor::is_suitable_for_dom_inspection(JsonValue const& node)
if (!object.has_string("name"sv) || !object.has_string("type"sv)) if (!object.has_string("name"sv) || !object.has_string("type"sv))
return false; return false;
if (auto text = object.get_byte_string("text"sv); text.has_value()) { if (auto text = object.get_string("text"sv); text.has_value()) {
if (text->is_whitespace()) if (AK::StringUtils::is_whitespace(*text))
return false; return false;
} }
if (auto data = object.get_byte_string("data"sv); data.has_value()) { if (auto data = object.get_string("data"sv); data.has_value()) {
if (data->is_whitespace()) if (AK::StringUtils::is_whitespace(*data))
return false; return false;
} }
@ -189,7 +190,7 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const
JsonObject serialized; JsonObject serialized;
serialized.set("actor"sv, actor.release_value()); serialized.set("actor"sv, actor.release_value());
serialized.set("attrs"sv, move(attrs)); serialized.set("attrs"sv, move(attrs));
serialized.set("baseURI"sv, MUST(String::from_byte_string(tab->description().url))); serialized.set("baseURI"sv, tab->description().url);
serialized.set("causesOverflow"sv, false); serialized.set("causesOverflow"sv, false);
serialized.set("containerType"sv, JsonValue {}); serialized.set("containerType"sv, JsonValue {});
serialized.set("displayName"sv, name.to_ascii_lowercase()); serialized.set("displayName"sv, name.to_ascii_lowercase());
@ -230,7 +231,7 @@ JsonValue WalkerActor::serialize_node(JsonObject const& node) const
Optional<JsonObject const&> WalkerActor::find_node_by_selector(JsonObject const& node, StringView selector) Optional<JsonObject const&> WalkerActor::find_node_by_selector(JsonObject const& node, StringView selector)
{ {
auto matches = [&](auto const& candidate) { auto matches = [&](auto const& candidate) {
return candidate.get_byte_string("name"sv)->equals_ignoring_ascii_case(selector); return candidate.get_string("name"sv)->equals_ignoring_ascii_case(selector);
}; };
if (matches(node)) if (matches(node))
@ -256,7 +257,7 @@ void WalkerActor::populate_dom_tree_cache(JsonObject& node, JsonObject const* pa
m_dom_node_to_parent_map.set(&node, parent); m_dom_node_to_parent_map.set(&node, parent);
auto actor = MUST(String::formatted("{}-node{}", name(), m_dom_node_count++)); auto actor = MUST(String::formatted("{}-node{}", name(), m_dom_node_count++));
m_actor_to_dom_node_map.set(actor.to_byte_string(), &node); m_actor_to_dom_node_map.set(actor, &node);
node.set("actor"sv, actor); node.set("actor"sv, actor);
auto children = node.get_array("children"sv); auto children = node.get_array("children"sv);

View file

@ -18,7 +18,7 @@ class WalkerActor final : public Actor {
public: public:
static constexpr auto base_name = "walker"sv; static constexpr auto base_name = "walker"sv;
static NonnullRefPtr<WalkerActor> create(DevToolsServer&, ByteString name, WeakPtr<TabActor>, JsonObject dom_tree); static NonnullRefPtr<WalkerActor> create(DevToolsServer&, String name, WeakPtr<TabActor>, JsonObject dom_tree);
virtual ~WalkerActor() override; virtual ~WalkerActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -27,7 +27,7 @@ public:
JsonValue serialize_root() const; JsonValue serialize_root() const;
private: private:
WalkerActor(DevToolsServer&, ByteString name, WeakPtr<TabActor>, JsonObject dom_tree); WalkerActor(DevToolsServer&, String name, WeakPtr<TabActor>, JsonObject dom_tree);
JsonValue serialize_node(JsonObject const&) const; JsonValue serialize_node(JsonObject const&) const;
Optional<JsonObject const&> find_node_by_selector(JsonObject const& node, StringView selector); Optional<JsonObject const&> find_node_by_selector(JsonObject const& node, StringView selector);
@ -38,7 +38,7 @@ private:
JsonObject m_dom_tree; JsonObject m_dom_tree;
HashMap<JsonObject const*, JsonObject const*> m_dom_node_to_parent_map; HashMap<JsonObject const*, JsonObject const*> m_dom_node_to_parent_map;
HashMap<ByteString, JsonObject const*> m_actor_to_dom_node_map; HashMap<String, JsonObject const*> m_actor_to_dom_node_map;
size_t m_dom_node_count { 0 }; size_t m_dom_node_count { 0 };
}; };

View file

@ -18,12 +18,12 @@
namespace DevTools { namespace DevTools {
NonnullRefPtr<WatcherActor> WatcherActor::create(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab) NonnullRefPtr<WatcherActor> WatcherActor::create(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab)
{ {
return adopt_ref(*new WatcherActor(devtools, move(name), move(tab))); return adopt_ref(*new WatcherActor(devtools, move(name), move(tab)));
} }
WatcherActor::WatcherActor(DevToolsServer& devtools, ByteString name, WeakPtr<TabActor> tab) WatcherActor::WatcherActor(DevToolsServer& devtools, String name, WeakPtr<TabActor> tab)
: Actor(devtools, move(name)) : Actor(devtools, move(name))
, m_tab(move(tab)) , m_tab(move(tab))
{ {
@ -67,7 +67,7 @@ void WatcherActor::handle_message(StringView type, JsonObject const& message)
} }
if (type == "watchTargets"sv) { if (type == "watchTargets"sv) {
auto target_type = message.get_byte_string("targetType"sv); auto target_type = message.get_string("targetType"sv);
if (!target_type.has_value()) { if (!target_type.has_value()) {
send_missing_parameter_error("targetType"sv); send_missing_parameter_error("targetType"sv);
return; return;

View file

@ -15,7 +15,7 @@ class WatcherActor final : public Actor {
public: public:
static constexpr auto base_name = "watcher"sv; static constexpr auto base_name = "watcher"sv;
static NonnullRefPtr<WatcherActor> create(DevToolsServer&, ByteString name, WeakPtr<TabActor>); static NonnullRefPtr<WatcherActor> create(DevToolsServer&, String name, WeakPtr<TabActor>);
virtual ~WatcherActor() override; virtual ~WatcherActor() override;
virtual void handle_message(StringView type, JsonObject const&) override; virtual void handle_message(StringView type, JsonObject const&) override;
@ -23,7 +23,7 @@ public:
JsonObject serialize_description() const; JsonObject serialize_description() const;
private: private:
WatcherActor(DevToolsServer&, ByteString name, WeakPtr<TabActor>); WatcherActor(DevToolsServer&, String name, WeakPtr<TabActor>);
WeakPtr<TabActor> m_tab; WeakPtr<TabActor> m_tab;
WeakPtr<Actor> m_target; WeakPtr<Actor> m_target;

View file

@ -85,7 +85,7 @@ ErrorOr<void> DevToolsServer::on_new_client()
void DevToolsServer::on_message_received(JsonObject const& message) void DevToolsServer::on_message_received(JsonObject const& message)
{ {
auto to = message.get_byte_string("to"sv); auto to = message.get_string("to"sv);
if (!to.has_value()) { if (!to.has_value()) {
m_root_actor->send_missing_parameter_error("to"sv); m_root_actor->send_missing_parameter_error("to"sv);
return; return;
@ -97,7 +97,7 @@ void DevToolsServer::on_message_received(JsonObject const& message)
return; return;
} }
auto type = message.get_byte_string("type"sv); auto type = message.get_string("type"sv);
if (!type.has_value()) { if (!type.has_value()) {
actor->value->send_missing_parameter_error("type"sv); actor->value->send_missing_parameter_error("type"sv);
return; return;

View file

@ -10,13 +10,14 @@
#include <AK/HashMap.h> #include <AK/HashMap.h>
#include <AK/NonnullOwnPtr.h> #include <AK/NonnullOwnPtr.h>
#include <AK/NonnullRefPtr.h> #include <AK/NonnullRefPtr.h>
#include <AK/String.h>
#include <LibCore/Socket.h> #include <LibCore/Socket.h>
#include <LibDevTools/Actors/RootActor.h> #include <LibDevTools/Actors/RootActor.h>
#include <LibDevTools/Forward.h> #include <LibDevTools/Forward.h>
namespace DevTools { namespace DevTools {
using ActorRegistry = HashMap<ByteString, NonnullRefPtr<Actor>>; using ActorRegistry = HashMap<String, NonnullRefPtr<Actor>>;
class DevToolsServer { class DevToolsServer {
public: public:
@ -30,12 +31,12 @@ public:
template<typename ActorType, typename... Args> template<typename ActorType, typename... Args>
ActorType& register_actor(Args&&... args) ActorType& register_actor(Args&&... args)
{ {
ByteString name; String name;
if constexpr (IsSame<ActorType, RootActor>) { if constexpr (IsSame<ActorType, RootActor>) {
name = ActorType::base_name; name = String::from_utf8_without_validation(ActorType::base_name.bytes());
} else { } else {
name = ByteString::formatted("server{}-{}{}", m_server_id, ActorType::base_name, m_actor_count); name = MUST(String::formatted("server{}-{}{}", m_server_id, ActorType::base_name, m_actor_count));
} }
auto actor = ActorType::create(*this, name, forward<Args>(args)...); auto actor = ActorType::create(*this, name, forward<Args>(args)...);

View file

@ -340,7 +340,7 @@ Vector<DevTools::TabDescription> Application::tab_list() const
Vector<DevTools::TabDescription> tabs; Vector<DevTools::TabDescription> tabs;
ViewImplementation::for_each_view([&](ViewImplementation& view) { ViewImplementation::for_each_view([&](ViewImplementation& view) {
tabs.empend(view.view_id(), view.title(), view.url().to_byte_string()); tabs.empend(view.view_id(), MUST(String::from_byte_string(view.title())), view.url().to_string());
return IterationDecision::Continue; return IterationDecision::Continue;
}); });
@ -355,7 +355,7 @@ Vector<DevTools::CSSProperty> Application::css_property_list() const
auto property_id = static_cast<Web::CSS::PropertyID>(i); auto property_id = static_cast<Web::CSS::PropertyID>(i);
DevTools::CSSProperty property; DevTools::CSSProperty property;
property.name = Web::CSS::string_from_property_id(property_id).to_string().to_byte_string(); property.name = Web::CSS::string_from_property_id(property_id).to_string();
property.is_inherited = Web::CSS::is_inherited_property(property_id); property.is_inherited = Web::CSS::is_inherited_property(property_id);
property_list.append(move(property)); property_list.append(move(property));
} }