PassRefPtr<Array<CallFrame> > InjectedScript::wrapCallFrames(const ScriptValue& callFrames, int asyncOrdinal) { ASSERT(!isEmpty()); ScriptFunctionCall function(injectedScriptObject(), "wrapCallFrames"); function.appendArgument(callFrames); function.appendArgument(asyncOrdinal); bool hadException = false; ScriptValue callFramesValue = callFunctionWithEvalEnabled(function, hadException); ASSERT(!hadException); RefPtr<JSONValue> result = callFramesValue.toJSONValue(scriptState()); if (result && result->type() == JSONValue::TypeArray) return Array<CallFrame>::runtimeCast(result); return Array<CallFrame>::create(); }
PassRefPtr<TypeBuilder::Runtime::RemoteObject> InjectedScript::wrapObject(const ScriptValue& value, const String& groupName, bool generatePreview) const { ASSERT(!isEmpty()); ScriptFunctionCall wrapFunction(injectedScriptObject(), "wrapObject"); wrapFunction.appendArgument(value); wrapFunction.appendArgument(groupName); wrapFunction.appendArgument(canAccessInspectedWindow()); wrapFunction.appendArgument(generatePreview); bool hadException = false; ScriptValue r = callFunctionWithEvalEnabled(wrapFunction, hadException); if (hadException) return nullptr; RefPtr<JSONObject> rawResult = r.toJSONValue(scriptState())->asObject(); return TypeBuilder::Runtime::RemoteObject::runtimeCast(rawResult); }
PassRefPtr<TypeBuilder::Runtime::RemoteObject> InjectedScript::wrapTable(const ScriptValue& table, const ScriptValue& columns) const { ASSERT(!isEmpty()); ScriptFunctionCall wrapFunction(injectedScriptObject(), "wrapTable"); wrapFunction.appendArgument(canAccessInspectedWindow()); wrapFunction.appendArgument(table); if (columns.isEmpty()) wrapFunction.appendArgument(false); else wrapFunction.appendArgument(columns); bool hadException = false; ScriptValue r = callFunctionWithEvalEnabled(wrapFunction, hadException); if (hadException) return nullptr; RefPtr<JSONObject> rawResult = r.toJSONValue(scriptState())->asObject(); return TypeBuilder::Runtime::RemoteObject::runtimeCast(rawResult); }
void InjectedScriptBase::makeCall(ScriptFunctionCall& function, RefPtr<JSONValue>* result) { if (hasNoValue() || !canAccessInspectedWindow()) { *result = JSONValue::null(); return; } bool hadException = false; ScriptValue resultValue = callFunctionWithEvalEnabled(function, hadException); ASSERT(!hadException); if (!hadException) { *result = resultValue.toJSONValue(m_injectedScriptObject.scriptState()); if (!*result) *result = JSONString::create(String::format("Object has too long reference chain(must not be longer than %d)", JSONValue::maxDepth)); } else { *result = JSONString::create("Exception while making a call."); } }
PassRefPtr<JSONValue> toJSONValue(const ScriptValue& value) { ScriptState* scriptState = value.scriptState(); return value.toJSONValue(scriptState); }