| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 const Maybe<bool>& generatePreview, | 81 const Maybe<bool>& generatePreview, |
| 82 const Maybe<bool>& userGesture, | 82 const Maybe<bool>& userGesture, |
| 83 OwnPtr<RemoteObject>* result, | 83 OwnPtr<RemoteObject>* result, |
| 84 Maybe<bool>* wasThrown, | 84 Maybe<bool>* wasThrown, |
| 85 Maybe<ExceptionDetails>* exceptionDetails) | 85 Maybe<ExceptionDetails>* exceptionDetails) |
| 86 { | 86 { |
| 87 if (!executionContextId.isJust()) { | 87 if (!executionContextId.isJust()) { |
| 88 *errorString = "Cannot find default execution context"; | 88 *errorString = "Cannot find default execution context"; |
| 89 return; | 89 return; |
| 90 } | 90 } |
| 91 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript
(executionContextId.fromJust()); | 91 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript
(errorString, executionContextId.fromJust()); |
| 92 if (!injectedScript) { | 92 if (!injectedScript) |
| 93 *errorString = "Cannot find execution context with given id"; | 93 return; |
| 94 |
| 95 v8::HandleScope scope(injectedScript->isolate()); |
| 96 v8::Local<v8::Context> localContext = injectedScript->context(); |
| 97 v8::Context::Scope contextScope(localContext); |
| 98 |
| 99 if (!injectedScript->canAccessInspectedWindow()) { |
| 100 *errorString = "Can not access given context"; |
| 94 return; | 101 return; |
| 95 } | 102 } |
| 103 |
| 104 v8::MaybeLocal<v8::Object> commandLineAPI = includeCommandLineAPI.fromMaybe(
false) ? injectedScript->commandLineAPI(errorString) : v8::MaybeLocal<v8::Object
>(); |
| 105 if (includeCommandLineAPI.fromMaybe(false) && commandLineAPI.IsEmpty()) |
| 106 return; |
| 107 |
| 108 InjectedScriptManager::ScopedGlobalObjectExtension scopeExtension(injectedSc
ript, nullptr, commandLineAPI); |
| 109 |
| 96 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon
sole.fromMaybe(false) ? m_debugger : nullptr); | 110 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon
sole.fromMaybe(false) ? m_debugger : nullptr); |
| 97 injectedScript->evaluate(errorString, expression, objectGroup.fromMaybe(""),
includeCommandLineAPI.fromMaybe(false), returnByValue.fromMaybe(false), generat
ePreview.fromMaybe(false), result, wasThrown, exceptionDetails); | 111 |
| 112 v8::TryCatch tryCatch(injectedScript->isolate()); |
| 113 v8::MaybeLocal<v8::Value> maybeResultValue = m_debugger->compileAndRunIntern
alScript(localContext, toV8String(injectedScript->isolate(), expression)); |
| 114 |
| 115 // InjectedScript may be gone after any evaluate call - find it again. |
| 116 injectedScript = m_injectedScriptManager->findInjectedScript(errorString, ex
ecutionContextId.fromJust()); |
| 117 if (!injectedScript) |
| 118 return; |
| 119 |
| 120 injectedScript->wrapEvaluateResult(errorString, |
| 121 maybeResultValue, |
| 122 tryCatch, |
| 123 objectGroup.fromMaybe(""), |
| 124 returnByValue.fromMaybe(false), |
| 125 generatePreview.fromMaybe(false), |
| 126 result, |
| 127 wasThrown, |
| 128 exceptionDetails); |
| 98 } | 129 } |
| 99 | 130 |
| 100 void V8RuntimeAgentImpl::callFunctionOn(ErrorString* errorString, | 131 void V8RuntimeAgentImpl::callFunctionOn(ErrorString* errorString, |
| 101 const String16& objectId, | 132 const String16& objectId, |
| 102 const String16& expression, | 133 const String16& expression, |
| 103 const Maybe<protocol::Array<protocol::Runtime::CallArgument>>& optionalArgum
ents, | 134 const Maybe<protocol::Array<protocol::Runtime::CallArgument>>& optionalArgum
ents, |
| 104 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, | 135 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, |
| 105 const Maybe<bool>& returnByValue, | 136 const Maybe<bool>& returnByValue, |
| 106 const Maybe<bool>& generatePreview, | 137 const Maybe<bool>& generatePreview, |
| 107 const Maybe<bool>& userGesture, | 138 const Maybe<bool>& userGesture, |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 const String16& sourceURL, | 220 const String16& sourceURL, |
| 190 bool persistScript, | 221 bool persistScript, |
| 191 int executionContextId, | 222 int executionContextId, |
| 192 Maybe<String16>* scriptId, | 223 Maybe<String16>* scriptId, |
| 193 Maybe<ExceptionDetails>* exceptionDetails) | 224 Maybe<ExceptionDetails>* exceptionDetails) |
| 194 { | 225 { |
| 195 if (!m_enabled) { | 226 if (!m_enabled) { |
| 196 *errorString = "Runtime agent is not enabled"; | 227 *errorString = "Runtime agent is not enabled"; |
| 197 return; | 228 return; |
| 198 } | 229 } |
| 199 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript
(executionContextId); | 230 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript
(errorString, executionContextId); |
| 200 if (!injectedScript) { | 231 if (!injectedScript) |
| 201 *errorString = "Inspected frame has gone"; | |
| 202 return; | 232 return; |
| 203 } | |
| 204 | 233 |
| 205 v8::Isolate* isolate = injectedScript->isolate(); | 234 v8::Isolate* isolate = injectedScript->isolate(); |
| 206 v8::HandleScope handles(isolate); | 235 v8::HandleScope handles(isolate); |
| 207 v8::Context::Scope scope(injectedScript->context()); | 236 v8::Context::Scope scope(injectedScript->context()); |
| 208 v8::TryCatch tryCatch(isolate); | 237 v8::TryCatch tryCatch(isolate); |
| 209 v8::Local<v8::Script> script = m_debugger->compileInternalScript(injectedScr
ipt->context(), toV8String(isolate, expression), sourceURL); | 238 v8::Local<v8::Script> script = m_debugger->compileInternalScript(injectedScr
ipt->context(), toV8String(isolate, expression), sourceURL); |
| 210 if (script.IsEmpty()) { | 239 if (script.IsEmpty()) { |
| 211 v8::Local<v8::Message> message = tryCatch.Message(); | 240 v8::Local<v8::Message> message = tryCatch.Message(); |
| 212 if (!message.IsEmpty()) | 241 if (!message.IsEmpty()) |
| 213 *exceptionDetails = injectedScript->createExceptionDetails(message); | 242 *exceptionDetails = injectedScript->createExceptionDetails(message); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 231 const Maybe<String16>& objectGroup, | 260 const Maybe<String16>& objectGroup, |
| 232 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, | 261 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, |
| 233 const Maybe<bool>& includeCommandLineAPI, | 262 const Maybe<bool>& includeCommandLineAPI, |
| 234 OwnPtr<RemoteObject>* result, | 263 OwnPtr<RemoteObject>* result, |
| 235 Maybe<ExceptionDetails>* exceptionDetails) | 264 Maybe<ExceptionDetails>* exceptionDetails) |
| 236 { | 265 { |
| 237 if (!m_enabled) { | 266 if (!m_enabled) { |
| 238 *errorString = "Runtime agent is not enabled"; | 267 *errorString = "Runtime agent is not enabled"; |
| 239 return; | 268 return; |
| 240 } | 269 } |
| 241 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript
(executionContextId); | 270 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript
(errorString, executionContextId); |
| 242 if (!injectedScript) { | 271 if (!injectedScript) |
| 243 *errorString = "Inspected frame has gone"; | |
| 244 return; | 272 return; |
| 245 } | |
| 246 | 273 |
| 247 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon
sole.fromMaybe(false) ? m_debugger : nullptr); | 274 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon
sole.fromMaybe(false) ? m_debugger : nullptr); |
| 248 | 275 |
| 249 if (!m_compiledScripts.contains(scriptId)) { | 276 if (!m_compiledScripts.contains(scriptId)) { |
| 250 *errorString = "Script execution failed"; | 277 *errorString = "Script execution failed"; |
| 251 return; | 278 return; |
| 252 } | 279 } |
| 253 | 280 |
| 254 v8::Isolate* isolate = injectedScript->isolate(); | 281 v8::Isolate* isolate = injectedScript->isolate(); |
| 255 v8::HandleScope handles(isolate); | 282 v8::HandleScope handles(isolate); |
| 256 v8::Local<v8::Context> context = injectedScript->context(); | 283 v8::Local<v8::Context> context = injectedScript->context(); |
| 257 v8::Context::Scope scope(context); | 284 v8::Context::Scope scope(context); |
| 258 OwnPtr<v8::Global<v8::Script>> scriptWrapper = m_compiledScripts.take(script
Id); | 285 OwnPtr<v8::Global<v8::Script>> scriptWrapper = m_compiledScripts.take(script
Id); |
| 259 v8::Local<v8::Script> script = scriptWrapper->Get(isolate); | 286 v8::Local<v8::Script> script = scriptWrapper->Get(isolate); |
| 260 | 287 |
| 261 if (script.IsEmpty()) { | 288 if (script.IsEmpty()) { |
| 262 *errorString = "Script execution failed"; | 289 *errorString = "Script execution failed"; |
| 263 return; | 290 return; |
| 264 } | 291 } |
| 265 v8::TryCatch tryCatch(isolate); | |
| 266 | 292 |
| 267 v8::MaybeLocal<v8::Object> commandLineAPI = includeCommandLineAPI.fromMaybe(
false) ? injectedScript->commandLineAPI(errorString) : v8::MaybeLocal<v8::Object
>(); | 293 v8::MaybeLocal<v8::Object> commandLineAPI = includeCommandLineAPI.fromMaybe(
false) ? injectedScript->commandLineAPI(errorString) : v8::MaybeLocal<v8::Object
>(); |
| 268 if (includeCommandLineAPI.fromMaybe(false) && commandLineAPI.IsEmpty()) | 294 if (includeCommandLineAPI.fromMaybe(false) && commandLineAPI.IsEmpty()) |
| 269 return; | 295 return; |
| 270 | 296 |
| 271 InjectedScriptManager::ScopedGlobalObjectExtension scopeExtension(injectedSc
ript, nullptr, commandLineAPI); | 297 InjectedScriptManager::ScopedGlobalObjectExtension scopeExtension(injectedSc
ript, nullptr, commandLineAPI); |
| 272 | 298 |
| 273 v8::Local<v8::Value> value; | 299 v8::TryCatch tryCatch(isolate); |
| 274 v8::MaybeLocal<v8::Value> maybeValue = m_debugger->runCompiledScript(context
, script); | 300 v8::MaybeLocal<v8::Value> maybeResultValue = m_debugger->runCompiledScript(c
ontext, script); |
| 275 if (maybeValue.IsEmpty()) { | |
| 276 value = tryCatch.Exception(); | |
| 277 v8::Local<v8::Message> message = tryCatch.Message(); | |
| 278 if (!message.IsEmpty()) | |
| 279 *exceptionDetails = injectedScript->createExceptionDetails(message); | |
| 280 } else { | |
| 281 value = maybeValue.ToLocalChecked(); | |
| 282 } | |
| 283 | |
| 284 if (value.IsEmpty()) { | |
| 285 *errorString = "Script execution failed"; | |
| 286 return; | |
| 287 } | |
| 288 | 301 |
| 289 // InjectedScript may be gone after any evaluate call - find it again. | 302 // InjectedScript may be gone after any evaluate call - find it again. |
| 290 injectedScript = m_injectedScriptManager->findInjectedScript(executionContex
tId); | 303 injectedScript = m_injectedScriptManager->findInjectedScript(errorString, ex
ecutionContextId); |
| 291 if (!injectedScript) { | 304 if (!injectedScript) |
| 292 *errorString = "Inspected frame has gone during script running"; | |
| 293 return; | 305 return; |
| 294 } | |
| 295 | 306 |
| 296 *result = injectedScript->wrapObject(errorString, value, objectGroup.fromMay
be("")); | 307 injectedScript->wrapEvaluateResult(errorString, maybeResultValue, tryCatch,
objectGroup.fromMaybe(""), false, false, result, nullptr, exceptionDetails); |
| 297 } | 308 } |
| 298 | 309 |
| 299 void V8RuntimeAgentImpl::setInspectorState(protocol::DictionaryValue* state) | 310 void V8RuntimeAgentImpl::setInspectorState(protocol::DictionaryValue* state) |
| 300 { | 311 { |
| 301 m_state = state; | 312 m_state = state; |
| 302 } | 313 } |
| 303 | 314 |
| 304 void V8RuntimeAgentImpl::setFrontend(protocol::Frontend::Runtime* frontend) | 315 void V8RuntimeAgentImpl::setFrontend(protocol::Frontend::Runtime* frontend) |
| 305 { | 316 { |
| 306 m_frontend = frontend; | 317 m_frontend = frontend; |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 | 437 |
| 427 void V8RuntimeAgentImpl::reportExecutionContextDestroyed(v8::Local<v8::Context>
context) | 438 void V8RuntimeAgentImpl::reportExecutionContextDestroyed(v8::Local<v8::Context>
context) |
| 428 { | 439 { |
| 429 int contextId = m_injectedScriptManager->discardInjectedScriptFor(context); | 440 int contextId = m_injectedScriptManager->discardInjectedScriptFor(context); |
| 430 if (!m_enabled) | 441 if (!m_enabled) |
| 431 return; | 442 return; |
| 432 m_frontend->executionContextDestroyed(contextId); | 443 m_frontend->executionContextDestroyed(contextId); |
| 433 } | 444 } |
| 434 | 445 |
| 435 } // namespace blink | 446 } // namespace blink |
| OLD | NEW |