bool InspectorFrontendClientLocal::evaluateAsBoolean(const String& expression) { if (!m_frontendPage->mainFrame()) return false; ScriptValue value = m_frontendPage->mainFrame()->script().executeScript(expression); return value.toString(mainWorldScriptState(m_frontendPage->mainFrame())) == "true"; }
ScriptState* PageRuntimeAgent::scriptStateForFrameId(const String& frameId) { Frame* frame = m_pageAgent->frameForId(frameId); if (!frame) return 0; return mainWorldScriptState(frame); }
void InspectorAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) { if (world != mainThreadNormalWorld()) return; if (!m_inspectorExtensionAPI.isEmpty()) m_injectedScriptManager->injectScript(m_inspectorExtensionAPI, mainWorldScriptState(frame)); }
void InspectorFrontendClientLocal::windowObjectCleared() { if (m_frontendHost) m_frontendHost->disconnectClient(); ScriptState* frontendScriptState = mainWorldScriptState(m_frontendPage->mainFrame()); m_frontendHost = InspectorFrontendHost::create(this, m_frontendPage); ScriptGlobalObject::set(frontendScriptState, "InspectorFrontendHost", m_frontendHost.get()); }
void PageRuntimeAgent::didClearWindowObject(Frame* frame) { if (!m_state->getBoolean(PageRuntimeAgentState::reportExecutionContextCreation)) return; ASSERT(m_frontend); String frameId = m_pageAgent->frameId(frame); ScriptState* scriptState = mainWorldScriptState(frame); notifyContextCreated(frameId, scriptState, 0, true); }
void ScriptDebugServer::handleV8DebugMessage(const v8::Debug::Message& message) { v8::HandleScope scope; if (!message.IsEvent()) return; // Ignore unsupported event types. if (message.GetEvent() != v8::AfterCompile && message.GetEvent() != v8::Break && message.GetEvent() != v8::Exception) return; v8::Handle<v8::Context> context = message.GetEventContext(); // If the context is from one of the inpected tabs it should have its context // data. Skip events from unknown contexts. if (context.IsEmpty()) return; // Test that context has associated global dom window object. v8::Handle<v8::Object> global = context->Global(); if (global.IsEmpty()) return; global = V8DOMWrapper::lookupDOMWrapper(V8DOMWindow::GetTemplate(), global); if (global.IsEmpty()) return; bool handled = false; Frame* frame = V8Proxy::retrieveFrame(context); if (frame) { ScriptDebugListener* listener = m_listenersMap.get(frame->page()); if (listener) { if (message.GetEvent() == v8::AfterCompile) { handled = true; v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); v8::Local<v8::Object> args = v8::Object::New(); args->Set(v8::String::New("eventData"), message.GetEventData()); v8::Handle<v8::Function> onAfterCompileFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("getAfterCompileScript"))); v8::Handle<v8::Value> argv[] = { message.GetExecutionState(), args }; v8::Handle<v8::Value> value = onAfterCompileFunction->Call(m_debuggerScript.get(), 2, argv); ASSERT(value->IsObject()); v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value); dispatchDidParseSource(listener, object); } else if (message.GetEvent() == v8::Break || message.GetEvent() == v8::Exception) { handled = true; m_executionState.set(message.GetExecutionState()); m_currentCallFrameState = mainWorldScriptState(frame); listener->didPause(); m_currentCallFrameState = 0; } } } if (!handled && !message.WillStartRunning()) continueProgram(); }
InjectedScript PageRuntimeAgent::injectedScriptForEval(ErrorString* errorString, const int* executionContextId) { if (!executionContextId) { ScriptState* scriptState = mainWorldScriptState(m_inspectedPage->mainFrame()); return injectedScriptManager()->injectedScriptFor(scriptState); } InjectedScript injectedScript = injectedScriptManager()->injectedScriptForId(*executionContextId); if (injectedScript.hasNoValue()) *errorString = "Execution context with given id not found."; return injectedScript; }
void PageRuntimeAgent::didCreateMainWorldContext(Frame* frame) { m_mainWorldContextCreated = true; if (!m_enabled) return; ASSERT(m_frontend); String frameId = m_pageAgent->frameId(frame); ScriptState* scriptState = mainWorldScriptState(frame); notifyContextCreated(frameId, scriptState, 0, true); }
void InspectorAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) { if (world != mainThreadNormalWorld()) return; if (m_injectedScriptForOrigin.isEmpty()) return; String origin = frame->document()->securityOrigin()->toString(); String script = m_injectedScriptForOrigin.get(origin); if (!script.isEmpty()) m_injectedScriptManager->injectScript(script, mainWorldScriptState(frame)); }
void PageRuntimeAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) { if (world != mainThreadNormalWorld()) return; m_mainWorldContextCreated = true; if (!m_enabled) return; ASSERT(m_frontend); String frameId = m_pageAgent->frameId(frame); ScriptState* scriptState = mainWorldScriptState(frame); notifyContextCreated(frameId, scriptState, 0, true); }
void MediaQueryMatcher::styleSelectorChanged() { ASSERT(m_document); ScriptState* scriptState = mainWorldScriptState(m_document->frame()); if (!scriptState) return; ++m_evaluationRound; OwnPtr<MediaQueryEvaluator> evaluator = prepareEvaluator(); if (!evaluator) return; for (size_t i = 0; i < m_listeners.size(); ++i) m_listeners[i]->evaluate(scriptState, evaluator.get()); }
void InspectorPageAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) { if (world != mainThreadNormalWorld()) return; if (frame == m_page->mainFrame()) m_injectedScriptManager->discardInjectedScripts(); if (m_scriptsToEvaluateOnLoad.size()) { ScriptState* scriptState = mainWorldScriptState(frame); for (Vector<String>::iterator it = m_scriptsToEvaluateOnLoad.begin(); it != m_scriptsToEvaluateOnLoad.end(); ++it) { m_injectedScriptManager->injectScript(*it, scriptState); } } }
void InspectorController::inspect(Node* node) { Document* document = node->ownerDocument(); if (!document) return; Frame* frame = document->frame(); if (!frame) return; if (node->nodeType() != Node::ELEMENT_NODE && node->nodeType() != Node::DOCUMENT_NODE) node = node->parentNode(); InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(mainWorldScriptState(frame)); if (injectedScript.hasNoValue()) return; injectedScript.inspectNode(node); }
void PageRuntimeAgent::reportExecutionContextCreation() { Vector<std::pair<ScriptState*, SecurityOrigin*> > isolatedContexts; for (Frame* frame = m_inspectedPage->mainFrame(); frame; frame = frame->tree()->traverseNext()) { if (!frame->script()->canExecuteScripts(NotAboutToExecuteScript)) continue; String frameId = m_pageAgent->frameId(frame); ScriptState* scriptState = mainWorldScriptState(frame); notifyContextCreated(frameId, scriptState, 0, true); frame->script()->collectIsolatedContexts(isolatedContexts); if (isolatedContexts.isEmpty()) continue; for (size_t i = 0; i< isolatedContexts.size(); i++) notifyContextCreated(frameId, isolatedContexts[i].first, isolatedContexts[i].second, false); isolatedContexts.clear(); } }
void InspectorAgent::didClearWindowObjectInWorld(Frame* frame, DOMWrapperWorld* world) { if (world != mainThreadNormalWorld()) return; if (m_injectedScriptForOrigin.isEmpty()) return; String origin = frame->document()->securityOrigin()->toRawString(); String script = m_injectedScriptForOrigin.get(origin); if (script.isEmpty()) return; int injectedScriptId = m_injectedScriptManager->injectedScriptIdFor(mainWorldScriptState(frame)); StringBuilder scriptSource; scriptSource.append(script); scriptSource.append("("); scriptSource.appendNumber(injectedScriptId); scriptSource.append(")"); frame->script().executeScript(scriptSource.toString()); }
void InspectorIndexedDBAgent::requestData(ErrorString* errorString, int requestId, const String& frameId, const String& databaseName, const String& objectStoreName, const String& indexName, int skipCount, int pageSize, const RefPtr<InspectorObject>* keyRange) { Frame* frame = assertFrame(errorString, frameId, m_pageAgent); if (!frame) return; Document* document = assertDocument(errorString, frame); if (!document) return; IDBFactoryBackendInterface* idbFactory = assertIDBFactory(errorString, document); if (!idbFactory) return; InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(mainWorldScriptState(frame)); RefPtr<IDBKeyRange> idbKeyRange = keyRange ? idbKeyRangeFromKeyRange(keyRange->get()) : 0; if (keyRange && !idbKeyRange) { *errorString = "Can not parse key range."; return; } RefPtr<DataLoaderCallback> dataLoaderCallback = DataLoaderCallback::create(m_frontendProvider, requestId, injectedScript, objectStoreName, indexName, idbKeyRange, skipCount, pageSize); dataLoaderCallback->start(idbFactory, document->securityOrigin(), document->frame(), databaseName); }
ScriptState* scriptStateFromPage(DOMWrapperWorld*, Page* page) { // This should be only reached with V8 bindings from single process layout tests. return mainWorldScriptState(page->mainFrame()); }
ScriptState* PageRuntimeAgent::getDefaultInspectedState() { return mainWorldScriptState(m_inspectedPage->mainFrame()); }