Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/WebKit/Source/platform/v8_inspector/V8RuntimeAgentImpl.cpp

Issue 1812983002: [DevTools] Move evaluate from InjectedScriptSource.js to native (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move-evaluate-on-call-frame
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 const Maybe<bool>& generatePreview, 101 const Maybe<bool>& generatePreview,
102 const Maybe<bool>& userGesture, 102 const Maybe<bool>& userGesture,
103 OwnPtr<RemoteObject>* result, 103 OwnPtr<RemoteObject>* result,
104 Maybe<bool>* wasThrown, 104 Maybe<bool>* wasThrown,
105 Maybe<ExceptionDetails>* exceptionDetails) 105 Maybe<ExceptionDetails>* exceptionDetails)
106 { 106 {
107 if (!executionContextId.isJust()) { 107 if (!executionContextId.isJust()) {
108 *errorString = "Cannot find default execution context"; 108 *errorString = "Cannot find default execution context";
109 return; 109 return;
110 } 110 }
111 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (executionContextId.fromJust()); 111 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (errorString, executionContextId.fromJust());
112 if (!injectedScript) { 112 if (!injectedScript)
113 *errorString = "Cannot find execution context with given id"; 113 return;
114
115 v8::HandleScope scope(injectedScript->isolate());
116 v8::Local<v8::Context> localContext = injectedScript->context();
117 v8::Context::Scope contextScope(localContext);
118
119 if (!injectedScript->canAccessInspectedWindow()) {
120 *errorString = "Can not access given context";
121 return;
122 }
123 InjectedScriptManager::InjectScopeExtensionByName scopeExtension(errorString , injectedScript, false, includeCommandLineAPI.fromMaybe(false) ? "commandLineAP I" : String16());
124 if (scopeExtension.hasError()) {
125 *errorString = "Internal error";
114 return; 126 return;
115 } 127 }
116 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon sole.fromMaybe(false) ? m_debugger : nullptr); 128 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon sole.fromMaybe(false) ? m_debugger : nullptr);
117 injectedScript->evaluate(errorString, expression, objectGroup.fromMaybe(""), includeCommandLineAPI.fromMaybe(false), returnByValue.fromMaybe(false), generat ePreview.fromMaybe(false), result, wasThrown, exceptionDetails); 129
130 v8::TryCatch tryCatch(injectedScript->isolate());
131
132 v8::Local<v8::Value> resultValue;
133 bool success = m_debugger->compileAndRunInternalScript(localContext, toV8Str ing(injectedScript->isolate(), expression)).ToLocal(&resultValue);
134 ALLOW_UNUSED_LOCAL(success);
135
136 injectedScript = m_injectedScriptManager->findInjectedScript(errorString, ex ecutionContextId.fromJust());
pfeldman 2016/03/17 21:24:22 Is there a chance m_injectedScriptManager no longe
kozy 2016/03/17 21:27:58 We keep OwnPtr to manager in this agent.
137 if (!injectedScript)
138 return;
139
140 V8RuntimeAgentImpl::wrapEvaluateResult(errorString,
141 m_debugger,
142 injectedScript,
143 resultValue,
144 tryCatch,
145 objectGroup.fromMaybe(""),
146 returnByValue.fromMaybe(false),
147 generatePreview.fromMaybe(false),
148 result,
149 wasThrown,
150 exceptionDetails);
118 } 151 }
119 152
120 void V8RuntimeAgentImpl::callFunctionOn(ErrorString* errorString, 153 void V8RuntimeAgentImpl::callFunctionOn(ErrorString* errorString,
121 const String16& objectId, 154 const String16& objectId,
122 const String16& expression, 155 const String16& expression,
123 const Maybe<protocol::Array<protocol::Runtime::CallArgument>>& optionalArgum ents, 156 const Maybe<protocol::Array<protocol::Runtime::CallArgument>>& optionalArgum ents,
124 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, 157 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole,
125 const Maybe<bool>& returnByValue, 158 const Maybe<bool>& returnByValue,
126 const Maybe<bool>& generatePreview, 159 const Maybe<bool>& generatePreview,
127 const Maybe<bool>& userGesture, 160 const Maybe<bool>& userGesture,
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 const String16& sourceURL, 242 const String16& sourceURL,
210 bool persistScript, 243 bool persistScript,
211 int executionContextId, 244 int executionContextId,
212 Maybe<String16>* scriptId, 245 Maybe<String16>* scriptId,
213 Maybe<ExceptionDetails>* exceptionDetails) 246 Maybe<ExceptionDetails>* exceptionDetails)
214 { 247 {
215 if (!m_enabled) { 248 if (!m_enabled) {
216 *errorString = "Runtime agent is not enabled"; 249 *errorString = "Runtime agent is not enabled";
217 return; 250 return;
218 } 251 }
219 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (executionContextId); 252 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (errorString, executionContextId);
220 if (!injectedScript) { 253 if (!injectedScript)
221 *errorString = "Inspected frame has gone";
222 return; 254 return;
223 }
224 255
225 v8::Isolate* isolate = injectedScript->isolate(); 256 v8::Isolate* isolate = injectedScript->isolate();
226 v8::HandleScope handles(isolate); 257 v8::HandleScope handles(isolate);
227 v8::Context::Scope scope(injectedScript->context()); 258 v8::Context::Scope scope(injectedScript->context());
228 v8::TryCatch tryCatch(isolate); 259 v8::TryCatch tryCatch(isolate);
229 v8::Local<v8::Script> script = m_debugger->compileInternalScript(injectedScr ipt->context(), toV8String(isolate, expression), sourceURL); 260 v8::Local<v8::Script> script = m_debugger->compileInternalScript(injectedScr ipt->context(), toV8String(isolate, expression), sourceURL);
230 if (script.IsEmpty()) { 261 if (script.IsEmpty()) {
231 v8::Local<v8::Message> message = tryCatch.Message(); 262 v8::Local<v8::Message> message = tryCatch.Message();
232 if (!message.IsEmpty()) 263 if (!message.IsEmpty())
233 *exceptionDetails = createExceptionDetails(m_debugger, injectedScrip t->context(), message); 264 *exceptionDetails = createExceptionDetails(m_debugger, injectedScrip t->context(), message);
(...skipping 17 matching lines...) Expand all
251 const Maybe<String16>& objectGroup, 282 const Maybe<String16>& objectGroup,
252 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, 283 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole,
253 const Maybe<bool>& includeCommandLineAPI, 284 const Maybe<bool>& includeCommandLineAPI,
254 OwnPtr<RemoteObject>* result, 285 OwnPtr<RemoteObject>* result,
255 Maybe<ExceptionDetails>* exceptionDetails) 286 Maybe<ExceptionDetails>* exceptionDetails)
256 { 287 {
257 if (!m_enabled) { 288 if (!m_enabled) {
258 *errorString = "Runtime agent is not enabled"; 289 *errorString = "Runtime agent is not enabled";
259 return; 290 return;
260 } 291 }
261 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (executionContextId); 292 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (errorString, executionContextId);
262 if (!injectedScript) { 293 if (!injectedScript)
263 *errorString = "Inspected frame has gone";
264 return; 294 return;
265 }
266 295
267 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon sole.fromMaybe(false) ? m_debugger : nullptr); 296 IgnoreExceptionsScope ignoreExceptionsScope(doNotPauseOnExceptionsAndMuteCon sole.fromMaybe(false) ? m_debugger : nullptr);
268 297
269 if (!m_compiledScripts.contains(scriptId)) { 298 if (!m_compiledScripts.contains(scriptId)) {
270 *errorString = "Script execution failed"; 299 *errorString = "Script execution failed";
271 return; 300 return;
272 } 301 }
273 302
274 v8::Isolate* isolate = injectedScript->isolate(); 303 v8::Isolate* isolate = injectedScript->isolate();
275 v8::HandleScope handles(isolate); 304 v8::HandleScope handles(isolate);
276 v8::Local<v8::Context> context = injectedScript->context(); 305 v8::Local<v8::Context> context = injectedScript->context();
277 v8::Context::Scope scope(context); 306 v8::Context::Scope scope(context);
278 OwnPtr<v8::Global<v8::Script>> scriptWrapper = m_compiledScripts.take(script Id); 307 OwnPtr<v8::Global<v8::Script>> scriptWrapper = m_compiledScripts.take(script Id);
279 v8::Local<v8::Script> script = scriptWrapper->Get(isolate); 308 v8::Local<v8::Script> script = scriptWrapper->Get(isolate);
280 309
281 if (script.IsEmpty()) { 310 if (script.IsEmpty()) {
282 *errorString = "Script execution failed"; 311 *errorString = "Script execution failed";
283 return; 312 return;
284 } 313 }
285 v8::TryCatch tryCatch(isolate); 314 v8::TryCatch tryCatch(isolate);
286 315
287 v8::Local<v8::Value> value;
288
289 InjectedScriptManager::InjectScopeExtensionByName scopeExtension(errorString , injectedScript, false, "commandLineAPI"); 316 InjectedScriptManager::InjectScopeExtensionByName scopeExtension(errorString , injectedScript, false, "commandLineAPI");
290 if (scopeExtension.hasError()) 317 if (scopeExtension.hasError())
291 return; 318 return;
292 319
293 v8::MaybeLocal<v8::Value> maybeValue = m_debugger->runCompiledScript(context , script); 320 v8::Local<v8::Value> resultValue;
294 if (maybeValue.IsEmpty()) { 321 bool success = m_debugger->runCompiledScript(context, script).ToLocal(&resul tValue);
295 value = tryCatch.Exception(); 322 ALLOW_UNUSED_LOCAL(success);
296 v8::Local<v8::Message> message = tryCatch.Message();
297 if (!message.IsEmpty())
298 *exceptionDetails = createExceptionDetails(m_debugger, injectedScrip t->context(), message);
299 } else {
300 value = maybeValue.ToLocalChecked();
301 }
302 323
303 if (value.IsEmpty()) { 324 injectedScript = m_injectedScriptManager->findInjectedScript(errorString, ex ecutionContextId);
304 *errorString = "Script execution failed"; 325 if (!injectedScript)
305 return; 326 return;
306 }
307 327
308 injectedScript = m_injectedScriptManager->findInjectedScript(executionContex tId); 328 V8RuntimeAgentImpl::wrapEvaluateResult(errorString,
309 if (!injectedScript) { 329 m_debugger,
310 *errorString = "Inspected frame has gone during script running"; 330 injectedScript,
311 return; 331 resultValue,
312 } 332 tryCatch,
313 333 objectGroup.fromMaybe(""),
314 OwnPtr<RemoteObject> resultObject = injectedScript->wrapObject(errorString, value, objectGroup.fromMaybe("")); 334 false,
315 if (!resultObject) 335 false,
316 return; 336 result,
317 *result = resultObject.release(); 337 nullptr,
338 exceptionDetails);
318 } 339 }
319 340
320 void V8RuntimeAgentImpl::setInspectorState(protocol::DictionaryValue* state) 341 void V8RuntimeAgentImpl::setInspectorState(protocol::DictionaryValue* state)
321 { 342 {
322 m_state = state; 343 m_state = state;
323 } 344 }
324 345
325 void V8RuntimeAgentImpl::setFrontend(protocol::Frontend::Runtime* frontend) 346 void V8RuntimeAgentImpl::setFrontend(protocol::Frontend::Runtime* frontend)
326 { 347 {
327 m_frontend = frontend; 348 m_frontend = frontend;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 if (resultValue.IsEmpty()) { 480 if (resultValue.IsEmpty()) {
460 *errorString = "Internal error"; 481 *errorString = "Internal error";
461 return; 482 return;
462 } 483 }
463 OwnPtr<RemoteObject> remoteObject = injectedScript->wrapObject(errorStri ng, resultValue, objectGroup, returnByValue, generatePreview); 484 OwnPtr<RemoteObject> remoteObject = injectedScript->wrapObject(errorStri ng, resultValue, objectGroup, returnByValue, generatePreview);
464 if (!remoteObject) 485 if (!remoteObject)
465 return; 486 return;
466 if (objectGroup == "console" && !injectedScript->setLastEvaluationResult (errorString, resultValue)) 487 if (objectGroup == "console" && !injectedScript->setLastEvaluationResult (errorString, resultValue))
467 return; 488 return;
468 *result = remoteObject.release(); 489 *result = remoteObject.release();
469 *wasThrown = false; 490 if (wasThrown)
491 *wasThrown = false;
470 } else { 492 } else {
471 v8::Local<v8::Value> exception = tryCatch.Exception(); 493 v8::Local<v8::Value> exception = tryCatch.Exception();
472 OwnPtr<RemoteObject> remoteObject = injectedScript->wrapObject(errorStri ng, exception, objectGroup, false, generatePreview && !exception->IsNativeError( )); 494 OwnPtr<RemoteObject> remoteObject = injectedScript->wrapObject(errorStri ng, exception, objectGroup, false, generatePreview && !exception->IsNativeError( ));
473 if (!remoteObject) 495 if (!remoteObject)
474 return; 496 return;
475 *result = remoteObject.release();
476 OwnPtr<ExceptionDetails> exceptionDetailsObject = createExceptionDetails (debugger, injectedScript->context(), tryCatch.Message()); 497 OwnPtr<ExceptionDetails> exceptionDetailsObject = createExceptionDetails (debugger, injectedScript->context(), tryCatch.Message());
477 if (!exceptionDetailsObject) { 498 if (!exceptionDetailsObject) {
478 *errorString = "Internal error"; 499 *errorString = "Internal error";
479 return; 500 return;
480 } 501 }
502 *result = remoteObject.release();
481 *exceptionDetails = exceptionDetailsObject.release(); 503 *exceptionDetails = exceptionDetailsObject.release();
482 *wasThrown = true; 504 if (wasThrown)
505 *wasThrown = true;
483 } 506 }
484 } 507 }
485 508
486 } // namespace blink 509 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698