InspectorCanvasAgent.h [plain text]
#pragma once
#include "HTMLCanvasElement.h"
#include "InspectorWebAgentBase.h"
#include "Timer.h"
#include <inspector/InspectorBackendDispatchers.h>
#include <inspector/InspectorFrontendDispatchers.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace Inspector {
class InjectedScriptManager;
}
namespace WebCore {
class InspectorPageAgent;
class WebGLRenderingContextBase;
typedef String ErrorString;
class InspectorCanvasAgent final : public InspectorAgentBase, public CanvasObserver, public Inspector::CanvasBackendDispatcherHandler {
WTF_MAKE_NONCOPYABLE(InspectorCanvasAgent);
WTF_MAKE_FAST_ALLOCATED;
public:
InspectorCanvasAgent(WebAgentContext&, InspectorPageAgent*);
virtual ~InspectorCanvasAgent() { }
void didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) override;
void willDestroyFrontendAndBackend(Inspector::DisconnectReason) override;
void discardAgent() override;
void enable(ErrorString&) override;
void disable(ErrorString&) override;
void requestNode(ErrorString&, const String& canvasId, int* nodeId) override;
void requestContent(ErrorString&, const String& canvasId, String* content) override;
void requestCSSCanvasClientNodes(ErrorString&, const String& canvasId, RefPtr<Inspector::Protocol::Array<int>>&) override;
void resolveCanvasContext(ErrorString&, const String& canvasId, const String* const objectGroup, RefPtr<Inspector::Protocol::Runtime::RemoteObject>&) override;
void frameNavigated(Frame&);
void didCreateCSSCanvas(HTMLCanvasElement&, const String&);
void didChangeCSSCanvasClientNodes(HTMLCanvasElement&);
void didCreateCanvasRenderingContext(HTMLCanvasElement&);
void didChangeCanvasMemory(HTMLCanvasElement&);
void canvasChanged(HTMLCanvasElement&, const FloatRect&) override { }
void canvasResized(HTMLCanvasElement&) override { }
void canvasDestroyed(HTMLCanvasElement&) override;
private:
struct CanvasEntry {
String identifier;
String cssCanvasName;
HTMLCanvasElement* element = { nullptr };
CanvasEntry() { }
CanvasEntry(const String& identifier, HTMLCanvasElement* canvasElement)
: identifier(identifier)
, element(canvasElement)
{
}
};
void canvasDestroyedTimerFired();
void clearCanvasData();
CanvasEntry* getCanvasEntry(HTMLCanvasElement&);
CanvasEntry* getCanvasEntry(const String&);
Ref<Inspector::Protocol::Canvas::Canvas> buildObjectForCanvas(const CanvasEntry&, HTMLCanvasElement&);
std::unique_ptr<Inspector::CanvasFrontendDispatcher> m_frontendDispatcher;
RefPtr<Inspector::CanvasBackendDispatcher> m_backendDispatcher;
Inspector::InjectedScriptManager& m_injectedScriptManager;
InspectorPageAgent* m_pageAgent;
HashMap<HTMLCanvasElement*, CanvasEntry> m_canvasEntries;
HashMap<HTMLCanvasElement*, String> m_canvasToCSSCanvasId;
Vector<String> m_removedCanvasIdentifiers;
Timer m_timer;
bool m_enabled { false };
};
}