RemoteWebInspectorProxy.h [plain text]
#pragma once
#include "APIObject.h"
#include "MessageReceiver.h"
#include <WebCore/FloatRect.h>
#include <WebCore/InspectorFrontendClient.h>
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/RetainPtr.h>
#include <wtf/text/WTFString.h>
#if PLATFORM(MAC)
OBJC_CLASS NSURL;
OBJC_CLASS NSWindow;
OBJC_CLASS WKInspectorViewController;
OBJC_CLASS WKRemoteWebInspectorProxyObjCAdapter;
OBJC_CLASS WKWebView;
#endif
namespace WebCore {
class CertificateInfo;
}
namespace API {
class DebuggableInfo;
class InspectorConfiguration;
}
namespace WebKit {
class RemoteWebInspectorProxy;
class WebPageProxy;
class WebView;
#if ENABLE(INSPECTOR_EXTENSIONS)
class WebInspectorUIExtensionControllerProxy;
#endif
class RemoteWebInspectorProxyClient {
public:
virtual ~RemoteWebInspectorProxyClient() { }
virtual void sendMessageToBackend(const String& message) = 0;
virtual void closeFromFrontend() = 0;
virtual Ref<API::InspectorConfiguration> configurationForRemoteInspector(RemoteWebInspectorProxy&) = 0;
};
class RemoteWebInspectorProxy : public RefCounted<RemoteWebInspectorProxy>, public IPC::MessageReceiver {
public:
static Ref<RemoteWebInspectorProxy> create()
{
return adoptRef(*new RemoteWebInspectorProxy());
}
~RemoteWebInspectorProxy();
void setClient(RemoteWebInspectorProxyClient* client) { m_client = client; }
bool isUnderTest() const { return false; }
void setDiagnosticLoggingAvailable(bool);
void invalidate();
void load(Ref<API::DebuggableInfo>&&, const String& backendCommandsURL);
void closeFromBackend();
void show();
void sendMessageToFrontend(const String& message);
#if ENABLE(INSPECTOR_EXTENSIONS)
WebInspectorUIExtensionControllerProxy& extensionController() const { return *m_extensionController; }
#endif
#if PLATFORM(MAC)
NSWindow *window() const { return m_window.get(); }
WKWebView *webView() const;
const WebCore::FloatRect& sheetRect() const { return m_sheetRect; }
void didBecomeActive();
#endif
#if PLATFORM(GTK)
void updateWindowTitle(const CString&);
#endif
#if PLATFORM(WIN_CAIRO)
LRESULT sizeChange();
LRESULT onClose();
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
#endif
void closeFromCrash();
private:
RemoteWebInspectorProxy();
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
void frontendLoaded();
void frontendDidClose();
void reopen();
void resetState();
void bringToFront();
void save(const String& filename, const String& content, bool base64Encoded, bool forceSaveAs);
void append(const String& filename, const String& content);
void setSheetRect(const WebCore::FloatRect&);
void setForcedAppearance(WebCore::InspectorFrontendClient::Appearance);
void startWindowDrag();
void openURLExternally(const String& url);
void showCertificate(const WebCore::CertificateInfo&);
void sendMessageToBackend(const String& message);
void createFrontendPageAndWindow();
void closeFrontendPageAndWindow();
WebPageProxy* platformCreateFrontendPageAndWindow();
void platformCloseFrontendPageAndWindow();
void platformResetState();
void platformBringToFront();
void platformSave(const String& filename, const String& content, bool base64Encoded, bool forceSaveAs);
void platformAppend(const String& filename, const String& content);
void platformSetSheetRect(const WebCore::FloatRect&);
void platformSetForcedAppearance(WebCore::InspectorFrontendClient::Appearance);
void platformStartWindowDrag();
void platformOpenURLExternally(const String& url);
void platformShowCertificate(const WebCore::CertificateInfo&);
RemoteWebInspectorProxyClient* m_client { nullptr };
WebPageProxy* m_inspectorPage { nullptr };
#if ENABLE(INSPECTOR_EXTENSIONS)
std::unique_ptr<WebInspectorUIExtensionControllerProxy> m_extensionController;
#endif
Ref<API::DebuggableInfo> m_debuggableInfo;
String m_backendCommandsURL;
#if PLATFORM(MAC)
RetainPtr<WKInspectorViewController> m_inspectorView;
RetainPtr<NSWindow> m_window;
RetainPtr<WKRemoteWebInspectorProxyObjCAdapter> m_objCAdapter;
HashMap<String, RetainPtr<NSURL>> m_suggestedToActualURLMap;
WebCore::FloatRect m_sheetRect;
#endif
#if PLATFORM(GTK)
GtkWidget* m_webView { nullptr };
GtkWidget* m_window { nullptr };
#endif
#if PLATFORM(WIN_CAIRO)
HWND m_frontendHandle;
RefPtr<WebView> m_webView;
#endif
};
}