15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InjectedScriptCanvasModule.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "InjectedScriptCanvasModuleSource.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptFunctionCall.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptObject.h" 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)using WebCore::TypeBuilder::Array; 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)using WebCore::TypeBuilder::Canvas::ResourceId; 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)using WebCore::TypeBuilder::Canvas::ResourceState; 41926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)using WebCore::TypeBuilder::Canvas::TraceLog; 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)using WebCore::TypeBuilder::Canvas::TraceLogId; 43591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochusing WebCore::TypeBuilder::Runtime::RemoteObject; 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InjectedScriptCanvasModule::InjectedScriptCanvasModule() 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : InjectedScriptModule("InjectedScriptCanvasModule") 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)InjectedScriptCanvasModule InjectedScriptCanvasModule::moduleForState(InjectedScriptManager* injectedScriptManager, ScriptState* scriptState) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) InjectedScriptCanvasModule result; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.ensureInjected(injectedScriptManager, scriptState); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String InjectedScriptCanvasModule::source() const 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return String(reinterpret_cast<const char*>(InjectedScriptCanvasModuleSource_js), sizeof(InjectedScriptCanvasModuleSource_js)); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScriptObject InjectedScriptCanvasModule::wrapCanvas2DContext(const ScriptObject& context) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return callWrapContextFunction("wrapCanvas2DContext", context); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScriptObject InjectedScriptCanvasModule::wrapWebGLContext(const ScriptObject& glContext) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return callWrapContextFunction("wrapWebGLContext", glContext); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScriptObject InjectedScriptCanvasModule::callWrapContextFunction(const String& functionName, const ScriptObject& context) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), functionName); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function.appendArgument(context); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hadException = false; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScriptValue resultValue = callFunctionWithEvalEnabled(function, hadException); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hadException || resultValue.hasNoValue() || !resultValue.isObject()) { 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ScriptObject(); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ScriptObject(context.scriptState(), resultValue); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::markFrameEnd() 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), "markFrameEnd"); 90591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONValue> resultValue; 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) makeCall(function, &resultValue); 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(resultValue); 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::captureFrame(ErrorString* errorString, TraceLogId* traceLogId) 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callStartCapturingFunction("captureFrame", errorString, traceLogId); 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::startCapturing(ErrorString* errorString, TraceLogId* traceLogId) 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callStartCapturingFunction("startCapturing", errorString, traceLogId); 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::callStartCapturingFunction(const String& functionName, ErrorString* errorString, TraceLogId* traceLogId) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), functionName); 108591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONValue> resultValue; 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) makeCall(function, &resultValue); 110591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!resultValue || resultValue->type() != JSONValue::TypeString || !resultValue->asString(traceLogId)) 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Internal error: " + functionName; 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::stopCapturing(ErrorString* errorString, const TraceLogId& traceLogId) 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callVoidFunctionWithTraceLogIdArgument("stopCapturing", errorString, traceLogId); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::dropTraceLog(ErrorString* errorString, const TraceLogId& traceLogId) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) callVoidFunctionWithTraceLogIdArgument("dropTraceLog", errorString, traceLogId); 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::callVoidFunctionWithTraceLogIdArgument(const String& functionName, ErrorString* errorString, const TraceLogId& traceLogId) 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), functionName); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function.appendArgument(traceLogId); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hadException = false; 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callFunctionWithEvalEnabled(function, hadException); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!hadException); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hadException) 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Internal error: " + functionName; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::traceLog(ErrorString* errorString, const TraceLogId& traceLogId, const int* startOffset, const int* maxLength, RefPtr<TraceLog>* traceLog) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), "traceLog"); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function.appendArgument(traceLogId); 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (startOffset) 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function.appendArgument(*startOffset); 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (maxLength) 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function.appendArgument(*maxLength); 143591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONValue> resultValue; 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) makeCall(function, &resultValue); 145591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!resultValue || resultValue->type() != JSONValue::TypeObject) { 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!resultValue->asString(errorString)) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *errorString = "Internal error: traceLog"; 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *traceLog = TraceLog::runtimeCast(resultValue); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdochvoid InjectedScriptCanvasModule::replayTraceLog(ErrorString* errorString, const TraceLogId& traceLogId, int stepNo, RefPtr<ResourceState>* result, double* replayTime) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), "replayTraceLog"); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function.appendArgument(traceLogId); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function.appendArgument(stepNo); 158591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONValue> resultValue; 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) makeCall(function, &resultValue); 160591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!resultValue || resultValue->type() != JSONValue::TypeObject) { 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!resultValue->asString(errorString)) 162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Internal error: replayTraceLog"; 163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch RefPtr<JSONObject> resultObject = resultValue->asObject(); 1667757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch RefPtr<JSONObject> resourceStateObject = resultObject->getObject("resourceState"); 1677757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (!resourceStateObject) { 1687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch *errorString = "Internal error: replayTraceLog: no resourceState"; 1697757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return; 1707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 1717757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch *result = ResourceState::runtimeCast(resourceStateObject); 1727757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (!resultObject->getNumber("replayTime", replayTime)) 1737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch *errorString = "Internal error: replayTraceLog: no replayTime"; 174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void InjectedScriptCanvasModule::resourceState(ErrorString* errorString, const TraceLogId& traceLogId, const ResourceId& resourceId, RefPtr<ResourceState>* result) 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptFunctionCall function(injectedScriptObject(), "resourceState"); 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function.appendArgument(traceLogId); 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function.appendArgument(resourceId); 181591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONValue> resultValue; 182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) makeCall(function, &resultValue); 183591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!resultValue || resultValue->type() != JSONValue::TypeObject) { 184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!resultValue->asString(errorString)) 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *errorString = "Internal error: resourceState"; 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *result = ResourceState::runtimeCast(resultValue); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 191591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid InjectedScriptCanvasModule::evaluateTraceLogCallArgument(ErrorString* errorString, const TraceLogId& traceLogId, int callIndex, int argumentIndex, const String& objectGroup, RefPtr<RemoteObject>* result, RefPtr<ResourceState>* resourceState) 192591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{ 193591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch ScriptFunctionCall function(injectedScriptObject(), "evaluateTraceLogCallArgument"); 194591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function.appendArgument(traceLogId); 195591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function.appendArgument(callIndex); 196591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function.appendArgument(argumentIndex); 197591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch function.appendArgument(objectGroup); 198591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONValue> resultValue; 199591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch makeCall(function, &resultValue); 200591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!resultValue || resultValue->type() != JSONValue::TypeObject) { 201591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!resultValue->asString(errorString)) 202591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch *errorString = "Internal error: evaluateTraceLogCallArgument"; 203591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return; 204591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch } 205591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONObject> resultObject = resultValue->asObject(); 206591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONObject> remoteObject = resultObject->getObject("result"); 207591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (remoteObject) 208591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch *result = RemoteObject::runtimeCast(remoteObject); 209591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch RefPtr<JSONObject> resourceStateObject = resultObject->getObject("resourceState"); 210591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (resourceStateObject) 211591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch *resourceState = ResourceState::runtimeCast(resourceStateObject); 212591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (!remoteObject && !resourceStateObject) 213591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch *errorString = "Internal error: no result and no resource state"; 214591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 216591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch} // namespace WebCore 217