diff options
Diffstat (limited to 'Source/WebCore/inspector/InspectorCanvasAgent.cpp')
-rw-r--r-- | Source/WebCore/inspector/InspectorCanvasAgent.cpp | 328 |
1 files changed, 0 insertions, 328 deletions
diff --git a/Source/WebCore/inspector/InspectorCanvasAgent.cpp b/Source/WebCore/inspector/InspectorCanvasAgent.cpp deleted file mode 100644 index 95258efd4..000000000 --- a/Source/WebCore/inspector/InspectorCanvasAgent.cpp +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (C) 2012 Google Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "config.h" - -#if ENABLE(INSPECTOR) - -#include "InspectorCanvasAgent.h" - -#include "DOMWindow.h" -#include "HTMLCanvasElement.h" -#include "HTMLNames.h" -#include "InjectedScriptCanvasModule.h" -#include "InspectorPageAgent.h" -#include "InspectorWebFrontendDispatchers.h" -#include "InstrumentingAgents.h" -#include "MainFrame.h" -#include "NodeList.h" -#include "Page.h" -#include "ScriptProfiler.h" -#include "ScriptState.h" -#include <bindings/ScriptObject.h> -#include <inspector/InjectedScript.h> -#include <inspector/InjectedScriptManager.h> - -using Inspector::TypeBuilder::Array; -using Inspector::TypeBuilder::Canvas::ResourceId; -using Inspector::TypeBuilder::Canvas::ResourceInfo; -using Inspector::TypeBuilder::Canvas::ResourceState; -using Inspector::TypeBuilder::Canvas::TraceLog; -using Inspector::TypeBuilder::Canvas::TraceLogId; -using Inspector::TypeBuilder::Network::FrameId; - -using namespace Inspector; - -namespace WebCore { - -InspectorCanvasAgent::InspectorCanvasAgent(InstrumentingAgents* instrumentingAgents, InspectorPageAgent* pageAgent, InjectedScriptManager* injectedScriptManager) - : InspectorAgentBase(ASCIILiteral("Canvas"), instrumentingAgents) - , m_pageAgent(pageAgent) - , m_injectedScriptManager(injectedScriptManager) - , m_enabled(false) -{ -} - -InspectorCanvasAgent::~InspectorCanvasAgent() -{ -} - -void InspectorCanvasAgent::didCreateFrontendAndBackend(Inspector::InspectorFrontendChannel* frontendChannel, InspectorBackendDispatcher* backendDispatcher) -{ - m_frontendDispatcher = std::make_unique<InspectorCanvasFrontendDispatcher>(frontendChannel); - m_backendDispatcher = InspectorCanvasBackendDispatcher::create(backendDispatcher, this); -} - -void InspectorCanvasAgent::willDestroyFrontendAndBackend(InspectorDisconnectReason) -{ - m_frontendDispatcher = nullptr; - m_backendDispatcher.clear(); - - disable(nullptr); -} - -void InspectorCanvasAgent::enable(ErrorString*) -{ - if (m_enabled) - return; - m_enabled = true; - m_instrumentingAgents->setInspectorCanvasAgent(this); - findFramesWithUninstrumentedCanvases(); -} - -void InspectorCanvasAgent::disable(ErrorString*) -{ - m_enabled = false; - m_instrumentingAgents->setInspectorCanvasAgent(nullptr); - m_framesWithUninstrumentedCanvases.clear(); -} - -void InspectorCanvasAgent::dropTraceLog(ErrorString* errorString, const TraceLogId& traceLogId) -{ - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, traceLogId); - if (!module.hasNoValue()) - module.dropTraceLog(errorString, traceLogId); -} - -void InspectorCanvasAgent::hasUninstrumentedCanvases(ErrorString* errorString, bool* result) -{ - if (!checkIsEnabled(errorString)) - return; - for (FramesWithUninstrumentedCanvases::iterator it = m_framesWithUninstrumentedCanvases.begin(); it != m_framesWithUninstrumentedCanvases.end(); ++it) { - if (it->value) { - *result = true; - return; - } - } - *result = false; -} - -void InspectorCanvasAgent::captureFrame(ErrorString* errorString, const FrameId* frameId, TraceLogId* traceLogId) -{ - Frame* frame = frameId ? m_pageAgent->assertFrame(errorString, *frameId) : m_pageAgent->mainFrame(); - if (!frame) - return; - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, mainWorldExecState(frame)); - if (!module.hasNoValue()) - module.captureFrame(errorString, traceLogId); -} - -void InspectorCanvasAgent::startCapturing(ErrorString* errorString, const FrameId* frameId, TraceLogId* traceLogId) -{ - Frame* frame = frameId ? m_pageAgent->assertFrame(errorString, *frameId) : m_pageAgent->mainFrame(); - if (!frame) - return; - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, mainWorldExecState(frame)); - if (!module.hasNoValue()) - module.startCapturing(errorString, traceLogId); -} - -void InspectorCanvasAgent::stopCapturing(ErrorString* errorString, const TraceLogId& traceLogId) -{ - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, traceLogId); - if (!module.hasNoValue()) - module.stopCapturing(errorString, traceLogId); -} - -void InspectorCanvasAgent::getTraceLog(ErrorString* errorString, const TraceLogId& traceLogId, const int* startOffset, const int* maxLength, RefPtr<TraceLog>& traceLog) -{ - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, traceLogId); - if (!module.hasNoValue()) - module.traceLog(errorString, traceLogId, startOffset, maxLength, &traceLog); -} - -void InspectorCanvasAgent::replayTraceLog(ErrorString* errorString, const TraceLogId& traceLogId, int stepNo, RefPtr<ResourceState>& result) -{ - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, traceLogId); - if (!module.hasNoValue()) - module.replayTraceLog(errorString, traceLogId, stepNo, &result); -} - -void InspectorCanvasAgent::getResourceInfo(ErrorString* errorString, const ResourceId& resourceId, RefPtr<ResourceInfo>& result) -{ - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, resourceId); - if (!module.hasNoValue()) - module.resourceInfo(errorString, resourceId, &result); -} - -void InspectorCanvasAgent::getResourceState(ErrorString* errorString, const TraceLogId& traceLogId, const ResourceId& resourceId, RefPtr<ResourceState>& result) -{ - InjectedScriptCanvasModule module = injectedScriptCanvasModule(errorString, traceLogId); - if (!module.hasNoValue()) - module.resourceState(errorString, traceLogId, resourceId, &result); -} - -Deprecated::ScriptObject InspectorCanvasAgent::wrapCanvas2DRenderingContextForInstrumentation(const Deprecated::ScriptObject& context) -{ - ErrorString error; - InjectedScriptCanvasModule module = injectedScriptCanvasModule(&error, context); - if (module.hasNoValue()) - return Deprecated::ScriptObject(); - return notifyRenderingContextWasWrapped(module.wrapCanvas2DContext(context)); -} - -#if ENABLE(WEBGL) -Deprecated::ScriptObject InspectorCanvasAgent::wrapWebGLRenderingContextForInstrumentation(const Deprecated::ScriptObject& glContext) -{ - ErrorString error; - InjectedScriptCanvasModule module = injectedScriptCanvasModule(&error, glContext); - if (module.hasNoValue()) - return Deprecated::ScriptObject(); - return notifyRenderingContextWasWrapped(module.wrapWebGLContext(glContext)); -} -#endif - -Deprecated::ScriptObject InspectorCanvasAgent::notifyRenderingContextWasWrapped(const Deprecated::ScriptObject& wrappedContext) -{ - ASSERT(m_frontendDispatcher); - JSC::ExecState* scriptState = wrappedContext.scriptState(); - DOMWindow* domWindow = scriptState ? domWindowFromExecState(scriptState) : nullptr; - Frame* frame = domWindow ? domWindow->frame() : nullptr; - if (frame && !m_framesWithUninstrumentedCanvases.contains(frame)) - m_framesWithUninstrumentedCanvases.set(frame, false); - String frameId = m_pageAgent->frameId(frame); - if (!frameId.isEmpty()) - m_frontendDispatcher->contextCreated(frameId); - return wrappedContext; -} - -InjectedScriptCanvasModule InspectorCanvasAgent::injectedScriptCanvasModule(ErrorString* errorString, JSC::ExecState* scriptState) -{ - if (!checkIsEnabled(errorString)) - return InjectedScriptCanvasModule(); - InjectedScriptCanvasModule module = InjectedScriptCanvasModule::moduleForState(m_injectedScriptManager, scriptState); - if (module.hasNoValue()) { - ASSERT_NOT_REACHED(); - *errorString = "Internal error: no Canvas module"; - } - return module; -} - -InjectedScriptCanvasModule InspectorCanvasAgent::injectedScriptCanvasModule(ErrorString* errorString, const Deprecated::ScriptObject& scriptObject) -{ - if (!checkIsEnabled(errorString)) - return InjectedScriptCanvasModule(); - if (scriptObject.hasNoValue()) { - ASSERT_NOT_REACHED(); - *errorString = "Internal error: original Deprecated::ScriptObject has no value"; - return InjectedScriptCanvasModule(); - } - return injectedScriptCanvasModule(errorString, scriptObject.scriptState()); -} - -InjectedScriptCanvasModule InspectorCanvasAgent::injectedScriptCanvasModule(ErrorString* errorString, const String& objectId) -{ - if (!checkIsEnabled(errorString)) - return InjectedScriptCanvasModule(); - InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForObjectId(objectId); - if (injectedScript.hasNoValue()) { - *errorString = "Inspected frame has gone"; - return InjectedScriptCanvasModule(); - } - return injectedScriptCanvasModule(errorString, injectedScript.scriptState()); -} - -void InspectorCanvasAgent::findFramesWithUninstrumentedCanvases() -{ - m_framesWithUninstrumentedCanvases.clear(); - - for (Frame* frame = &m_pageAgent->page()->mainFrame(); frame; frame = frame->tree().traverseNext()) { - if (!frame->document()) - continue; - - RefPtr<NodeList> canvases = frame->document()->getElementsByTagName(HTMLNames::canvasTag.localName()); - if (canvases) { - for (unsigned i = 0, length = canvases->length(); i < length; i++) { - const HTMLCanvasElement* canvas = toHTMLCanvasElement(canvases->item(i)); - if (canvas->renderingContext()) { - m_framesWithUninstrumentedCanvases.set(frame, true); - break; - } - } - } - } - - for (FramesWithUninstrumentedCanvases::iterator it = m_framesWithUninstrumentedCanvases.begin(); it != m_framesWithUninstrumentedCanvases.end(); ++it) { - String frameId = m_pageAgent->frameId(it->key); - if (!frameId.isEmpty()) - m_frontendDispatcher->contextCreated(frameId); - } -} - -bool InspectorCanvasAgent::checkIsEnabled(ErrorString* errorString) const -{ - if (m_enabled) - return true; - *errorString = "Canvas agent is not enabled"; - return false; -} - -void InspectorCanvasAgent::frameNavigated(Frame* frame) -{ - if (!m_enabled) - return; - if (frame == m_pageAgent->mainFrame()) { - for (FramesWithUninstrumentedCanvases::iterator it = m_framesWithUninstrumentedCanvases.begin(); it != m_framesWithUninstrumentedCanvases.end(); ++it) - m_framesWithUninstrumentedCanvases.set(it->key, false); - m_frontendDispatcher->traceLogsRemoved(nullptr, nullptr); - } else { - while (frame) { - if (m_framesWithUninstrumentedCanvases.contains(frame)) - m_framesWithUninstrumentedCanvases.set(frame, false); - if (m_pageAgent->hasIdForFrame(frame)) { - String frameId = m_pageAgent->frameId(frame); - m_frontendDispatcher->traceLogsRemoved(&frameId, nullptr); - } - frame = frame->tree().traverseNext(); - } - } -} - -void InspectorCanvasAgent::frameDetached(Frame* frame) -{ - if (m_enabled) - m_framesWithUninstrumentedCanvases.remove(frame); -} - -void InspectorCanvasAgent::didBeginFrame() -{ - if (!m_enabled) - return; - ErrorString error; - for (FramesWithUninstrumentedCanvases::iterator it = m_framesWithUninstrumentedCanvases.begin(); it != m_framesWithUninstrumentedCanvases.end(); ++it) { - InjectedScriptCanvasModule module = injectedScriptCanvasModule(&error, mainWorldExecState(it->key)); - if (!module.hasNoValue()) - module.markFrameEnd(); - } -} - -} // namespace WebCore - -#endif // ENABLE(INSPECTOR) |