RemoteInspectorServer.h [plain text]
#pragma once
#if ENABLE(REMOTE_INSPECTOR)
#include "RemoteInspector.h"
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/glib/GRefPtr.h>
#include <wtf/glib/SocketConnection.h>
typedef struct _GSocketConnection GSocketConnection;
typedef struct _GSocketService GSocketService;
namespace Inspector {
class RemoteInspectorServer {
public:
static RemoteInspectorServer& singleton();
~RemoteInspectorServer();
bool start(const char* address, unsigned port);
bool isRunning() const { return !!m_service; }
private:
static gboolean incomingConnectionCallback(GSocketService*, GSocketConnection*, GObject*, RemoteInspectorServer*);
void incomingConnection(Ref<SocketConnection>&&);
static const SocketConnection::MessageHandlers& messageHandlers();
void connectionDidClose(SocketConnection&);
void setTargetList(SocketConnection&, GVariant*);
GVariant* setupInspectorClient(SocketConnection&, const char* clientBackendCommandsHash);
void setup(SocketConnection&, uint64_t connectionID, uint64_t targetID);
void close(SocketConnection&, uint64_t connectionID, uint64_t targetID);
void sendMessageToFrontend(SocketConnection&, uint64_t target, const char*);
void sendMessageToBackend(SocketConnection&, uint64_t connectionID, uint64_t targetID, const char*);
void startAutomationSession(SocketConnection&, const char* sessionID, const RemoteInspector::Client::SessionCapabilities&);
GRefPtr<GSocketService> m_service;
HashSet<RefPtr<SocketConnection>> m_connections;
HashMap<SocketConnection*, uint64_t> m_remoteInspectorConnectionToIDMap;
HashMap<uint64_t, SocketConnection*> m_idToRemoteInspectorConnectionMap;
SocketConnection* m_clientConnection { nullptr };
SocketConnection* m_automationConnection { nullptr };
HashSet<std::pair<uint64_t, uint64_t>> m_inspectionTargets;
HashSet<std::pair<uint64_t, uint64_t>> m_automationTargets;
};
}
#endif // ENABLE(REMOTE_INSPECTOR)