#pragma once
#include "Connection.h"
#include "DebuggableInfoData.h"
#include "WebInspectorFrontendAPIDispatcher.h"
#include "WebPageProxyIdentifier.h"
#include <WebCore/InspectorDebuggableType.h>
#include <WebCore/InspectorFrontendClient.h>
#include <WebCore/InspectorFrontendHost.h>
namespace WebCore {
class InspectorController;
class CertificateInfo;
class FloatRect;
}
namespace WebKit {
class WebPage;
class WebInspectorUI : public RefCounted<WebInspectorUI>, private IPC::Connection::Client, public WebCore::InspectorFrontendClient {
public:
static Ref<WebInspectorUI> create(WebPage&);
static void enableFrontendFeatures();
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
void didClose(IPC::Connection&) override { }
void didReceiveInvalidMessage(IPC::Connection&, IPC::MessageName) override { closeWindow(); }
void establishConnection(WebPageProxyIdentifier inspectedPageIdentifier, const DebuggableInfoData&, bool underTest, unsigned inspectionLevel);
void updateConnection();
void showConsole();
void showResources();
void showMainResourceForFrame(const String& frameIdentifier);
void startPageProfiling();
void stopPageProfiling();
void startElementSelection();
void stopElementSelection();
void attachedBottom() { setDockSide(DockSide::Bottom); }
void attachedRight() { setDockSide(DockSide::Right); }
void attachedLeft() { setDockSide(DockSide::Left); }
void detached() { setDockSide(DockSide::Undocked); }
void setDockSide(DockSide);
void setDockingUnavailable(bool);
void setIsVisible(bool);
void updateFindString(const String&);
void didSave(const String& url);
void didAppend(const String& url);
void sendMessageToFrontend(const String&);
#if ENABLE(INSPECTOR_TELEMETRY)
void setDiagnosticLoggingAvailable(bool avaliable);
#endif
void windowObjectCleared() override;
void frontendLoaded() override;
void startWindowDrag() override;
void moveWindowBy(float x, float y) override;
bool isRemote() const final { return false; }
String localizedStringsURL() const override;
String backendCommandsURL() const final { return String(); }
Inspector::DebuggableType debuggableType() const final { return Inspector::DebuggableType::WebPage; }
String targetPlatformName() const override;
String targetBuildVersion() const override;
String targetProductVersion() const override;
bool targetIsSimulator() const final { return false; }
unsigned inspectionLevel() const override { return m_inspectionLevel; }
void bringToFront() override;
void closeWindow() override;
void reopen() override;
void resetState() override;
void setForcedAppearance(WebCore::InspectorFrontendClient::Appearance) override;
WebCore::UserInterfaceLayoutDirection userInterfaceLayoutDirection() const override;
bool supportsDockSide(DockSide) override;
void requestSetDockSide(DockSide) override;
void changeAttachedWindowHeight(unsigned) override;
void changeAttachedWindowWidth(unsigned) override;
void changeSheetRect(const WebCore::FloatRect&) override;
void openInNewTab(const String& url) override;
bool canSave() override;
void save(const WTF::String& url, const WTF::String& content, bool base64Encoded, bool forceSaveAs) override;
void append(const WTF::String& url, const WTF::String& content) override;
void inspectedURLChanged(const String&) override;
void showCertificate(const WebCore::CertificateInfo&) override;
#if ENABLE(INSPECTOR_TELEMETRY)
bool supportsDiagnosticLogging() override;
bool diagnosticLoggingAvailable() override { return m_diagnosticLoggingAvailable; }
void logDiagnosticEvent(const WTF::String& eventName, const WebCore::DiagnosticLoggingClient::ValueDictionary&) override;
#endif
void sendMessageToBackend(const String&) override;
void pagePaused() override;
void pageUnpaused() override;
bool isUnderTest() override { return m_underTest; }
private:
explicit WebInspectorUI(WebPage&);
WebPage& m_page;
WebInspectorFrontendAPIDispatcher m_frontendAPIDispatcher;
RefPtr<WebCore::InspectorFrontendHost> m_frontendHost;
RefPtr<IPC::Connection> m_backendConnection;
WebCore::InspectorController* m_frontendController { nullptr };
WebPageProxyIdentifier m_inspectedPageIdentifier;
bool m_underTest { false };
DebuggableInfoData m_debuggableInfo;
bool m_dockingUnavailable { false };
bool m_isVisible { false };
#if ENABLE(INSPECTOR_TELEMETRY)
bool m_diagnosticLoggingAvailable { false };
#endif
DockSide m_dockSide { DockSide::Undocked };
unsigned m_inspectionLevel { 1 };
};
}