v8::Local<v8::Value> ScriptDebugServer::functionScopes(v8::Handle<v8::Function> function) { ensureDebuggerScriptCompiled(); v8::Handle<v8::Value> argv[] = { function }; return callDebuggerMethod("getFunctionScopes", 1, argv); }
void WorkerScriptDebugServer::addListener(ScriptDebugListener* listener, WorkerContext* workerContext) { v8::HandleScope scope; v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext(); v8::Context::Scope contextScope(debuggerContext); if (!m_listenersMap.size()) { // FIXME: synchronize access to this code. ensureDebuggerScriptCompiled(); ASSERT(!m_debuggerScript.get()->IsUndefined()); v8::Debug::SetDebugEventListener2(&WorkerScriptDebugServer::v8DebugEventCallback, v8::External::New(this)); } m_listenersMap.set(workerContext, listener); WorkerContextExecutionProxy* proxy = workerContext->script()->proxy(); if (!proxy) return; v8::Handle<v8::Context> context = proxy->context(); v8::Handle<v8::Function> getScriptsFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("getWorkerScripts"))); v8::Handle<v8::Value> argv[] = { v8::Handle<v8::Value>() }; v8::Handle<v8::Value> value = getScriptsFunction->Call(m_debuggerScript.get(), 0, argv); if (value.IsEmpty()) return; ASSERT(!value->IsUndefined() && value->IsArray()); v8::Handle<v8::Array> scriptsArray = v8::Handle<v8::Array>::Cast(value); for (unsigned i = 0; i < scriptsArray->Length(); ++i) dispatchDidParseSource(listener, v8::Handle<v8::Object>::Cast(scriptsArray->Get(v8::Integer::New(i)))); }
bool ScriptDebugServer::setScriptSource(const String& sourceID, const String& newContent, bool preview, String* error, ScriptValue* newCallFrames, ScriptObject* result) { ensureDebuggerScriptCompiled(); v8::HandleScope scope; OwnPtr<v8::Context::Scope> contextScope; if (!isPaused()) contextScope = adoptPtr(new v8::Context::Scope(v8::Debug::GetDebugContext())); v8::Handle<v8::Value> argv[] = { v8String(sourceID), v8String(newContent), v8Boolean(preview) }; v8::TryCatch tryCatch; tryCatch.SetVerbose(false); v8::Local<v8::Value> v8result = callDebuggerMethod("setScriptSource", 3, argv); if (tryCatch.HasCaught()) { v8::Local<v8::Message> message = tryCatch.Message(); if (!message.IsEmpty()) *error = toWebCoreStringWithNullOrUndefinedCheck(message->Get()); else *error = "Unknown error."; return false; } ASSERT(!v8result.IsEmpty()); if (v8result->IsObject()) *result = ScriptObject(ScriptState::current(), v8result->ToObject()); // Call stack may have changed after if the edited function was on the stack. if (!preview && isPaused()) *newCallFrames = currentCallFrame(); return true; }
void ScriptDebugServer::setPauseOnExceptionsState(PauseOnExceptionsState pauseOnExceptionsState) { ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); v8::Handle<v8::Value> argv[] = { v8::Int32::New(pauseOnExceptionsState) }; callDebuggerMethod("setPauseOnExceptionsState", 1, argv); }
ScriptDebugServer::PauseOnExceptionsState ScriptDebugServer::pauseOnExceptionsState() { ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); v8::Handle<v8::Value> argv[] = { v8::Handle<v8::Value>() }; v8::Handle<v8::Value> result = callDebuggerMethod("pauseOnExceptionsState", 0, argv); return static_cast<ScriptDebugServer::PauseOnExceptionsState>(result->Int32Value()); }
void ScriptDebugServer::clearBreakpoints() { ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext(); v8::Context::Scope contextScope(debuggerContext); v8::Handle<v8::Function> clearBreakpoints = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("clearBreakpoints"))); v8::Debug::Call(clearBreakpoints); }
void ScriptDebugServer::setPauseOnExceptionsState(PauseOnExceptionsState pauseOnExceptionsState) { #if ENABLE(V8_SCRIPT_DEBUG_SERVER) ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); v8::Handle<v8::Function> currentCallFrameFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("setPauseOnExceptionsState"))); v8::Handle<v8::Value> argv[] = { v8::Int32::New(pauseOnExceptionsState) }; currentCallFrameFunction->Call(m_debuggerScript.get(), 1, argv); #endif }
void ScriptDebugServer::clearBreakpoints() { #if ENABLE(V8_SCRIPT_DEBUG_SERVER) ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext(); v8::Context::Scope contextScope(debuggerContext); v8::Handle<v8::Function> setBreakpointsActivated = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("clearBreakpoints"))); v8::Debug::Call(setBreakpointsActivated); #endif }
void ScriptDebugServer::setBreakpointsActivated(bool enabled) { #if ENABLE(V8_SCRIPT_DEBUG_SERVER) ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext(); v8::Context::Scope contextScope(debuggerContext); v8::Local<v8::Object> args = v8::Object::New(); args->Set(v8::String::New("enabled"), v8::Boolean::New(enabled)); v8::Handle<v8::Function> setBreakpointsActivated = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("setBreakpointsActivated"))); v8::Debug::Call(setBreakpointsActivated, args); #endif }
ScriptDebugServer::PauseOnExceptionsState ScriptDebugServer::pauseOnExceptionsState() { #if ENABLE(V8_SCRIPT_DEBUG_SERVER) ensureDebuggerScriptCompiled(); v8::HandleScope scope; v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); v8::Handle<v8::Function> currentCallFrameFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::New("pauseOnExceptionsState"))); v8::Handle<v8::Value> argv[] = { v8::Handle<v8::Value>() }; v8::Handle<v8::Value> result = currentCallFrameFunction->Call(m_debuggerScript.get(), 0, argv); return static_cast<ScriptDebugServer::PauseOnExceptionsState>(result->Int32Value()); #else return DontPauseOnExceptions; #endif }
void WorkerScriptDebugServer::addListener(ScriptDebugListener* listener) { v8::HandleScope scope; v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext(); v8::Context::Scope contextScope(debuggerContext); ASSERT(!m_listener); m_listener = listener; ensureDebuggerScriptCompiled(); ASSERT(!m_debuggerScript.get()->IsUndefined()); v8::Debug::SetDebugEventListener2(&WorkerScriptDebugServer::v8DebugEventCallback, v8::External::New(this)); v8::Handle<v8::Function> getScriptsFunction = v8::Local<v8::Function>::Cast(m_debuggerScript.get()->Get(v8::String::NewSymbol("getWorkerScripts"))); v8::Handle<v8::Value> argv[] = { v8Undefined() }; v8::Handle<v8::Value> value = getScriptsFunction->Call(m_debuggerScript.get(), 0, argv); if (value.IsEmpty()) return; ASSERT(!value->IsUndefined() && value->IsArray()); v8::Handle<v8::Array> scriptsArray = v8::Handle<v8::Array>::Cast(value); for (unsigned i = 0; i < scriptsArray->Length(); ++i) dispatchDidParseSource(listener, v8::Handle<v8::Object>::Cast(scriptsArray->Get(v8Integer(i, debuggerContext->GetIsolate())))); }
void WorkerScriptDebugServer::addListener(ScriptDebugListener* listener) { v8::HandleScope scope(m_isolate); v8::Local<v8::Context> debuggerContext = v8::Debug::GetDebugContext(); v8::Context::Scope contextScope(debuggerContext); ASSERT(!m_listener); m_listener = listener; ensureDebuggerScriptCompiled(); v8::Local<v8::Object> debuggerScript = m_debuggerScript.newLocal(m_isolate); ASSERT(!debuggerScript->IsUndefined()); v8::Debug::SetDebugEventListener2(&WorkerScriptDebugServer::v8DebugEventCallback, v8::External::New(m_isolate, this)); v8::Handle<v8::Function> getScriptsFunction = v8::Local<v8::Function>::Cast(debuggerScript->Get(v8AtomicString(m_isolate, "getWorkerScripts"))); v8::Handle<v8::Value> value = V8ScriptRunner::callInternalFunction(getScriptsFunction, debuggerScript, 0, 0, m_isolate); if (value.IsEmpty()) return; ASSERT(!value->IsUndefined() && value->IsArray()); v8::Handle<v8::Array> scriptsArray = v8::Handle<v8::Array>::Cast(value); for (unsigned i = 0; i < scriptsArray->Length(); ++i) dispatchDidParseSource(listener, v8::Handle<v8::Object>::Cast(scriptsArray->Get(v8::Integer::New(m_isolate, i)))); }