InjectedScript InjectedScriptManager::injectedScriptFor(ExecState* inspectedExecState) { auto it = m_scriptStateToId.find(inspectedExecState); if (it != m_scriptStateToId.end()) { auto it1 = m_idToInjectedScript.find(it->value); if (it1 != m_idToInjectedScript.end()) return it1->value; } if (!m_environment.canAccessInspectedScriptState(inspectedExecState)) return InjectedScript(); int id = injectedScriptIdFor(inspectedExecState); Deprecated::ScriptObject injectedScriptObject = createInjectedScript(injectedScriptSource(), inspectedExecState, id); if (injectedScriptObject.scriptState() != inspectedExecState) { WTFLogAlways("Failed to parse/execute InjectedScriptSource.js!"); WTFLogAlways("%s\n", injectedScriptSource().ascii().data()); RELEASE_ASSERT_NOT_REACHED(); } InjectedScript result(injectedScriptObject, &m_environment); m_idToInjectedScript.set(id, result); didCreateInjectedScript(result); return result; }
ScriptFunctionCall::ScriptFunctionCall(const Deprecated::ScriptObject& thisObject, const String& name, ScriptFunctionCallHandler callHandler) : ScriptCallArgumentHandler(thisObject.scriptState()) , m_callHandler(callHandler) , m_thisObject(thisObject) , m_name(name) { }
void ScriptCallArgumentHandler::appendArgument(const Deprecated::ScriptObject& argument) { if (argument.scriptState() != m_exec) { ASSERT_NOT_REACHED(); return; } m_arguments.append(argument.jsObject()); }
Deprecated::ScriptObject InjectedScriptCanvasModule::callWrapContextFunction(const String& functionName, const Deprecated::ScriptObject& context) { Deprecated::ScriptFunctionCall function(injectedScriptObject(), functionName, WebCore::functionCallHandlerFromAnyThread); function.appendArgument(context); bool hadException = false; Deprecated::ScriptValue resultValue = callFunctionWithEvalEnabled(function, hadException); if (hadException || resultValue.hasNoValue() || !resultValue.isObject()) { ASSERT_NOT_REACHED(); return Deprecated::ScriptObject(); } return Deprecated::ScriptObject(context.scriptState(), resultValue); }
void InspectorHeapProfilerAgent::getObjectByHeapObjectId(ErrorString* error, const String& heapSnapshotObjectId, const String* objectGroup, RefPtr<Inspector::TypeBuilder::Runtime::RemoteObject>& result) { bool ok; unsigned id = heapSnapshotObjectId.toUInt(&ok); if (!ok) { *error = "Invalid heap snapshot object id"; return; } Deprecated::ScriptObject heapObject = ScriptProfiler::objectByHeapObjectId(id); if (heapObject.hasNoValue()) { *error = "Object is not available"; return; } InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(heapObject.scriptState()); if (injectedScript.hasNoValue()) { *error = "Object is not available. Inspected context is gone"; return; } result = injectedScript.wrapObject(heapObject, objectGroup ? *objectGroup : ""); if (!result) *error = "Failed to wrap object"; }