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

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

Issue 1811853002: [DevTools] Move evaluateOnCallFrame to native (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 namespace blink { 44 namespace blink {
45 45
46 namespace V8RuntimeAgentImplState { 46 namespace V8RuntimeAgentImplState {
47 static const char customObjectFormatterEnabled[] = "customObjectFormatterEnabled "; 47 static const char customObjectFormatterEnabled[] = "customObjectFormatterEnabled ";
48 }; 48 };
49 49
50 using protocol::Runtime::ExceptionDetails; 50 using protocol::Runtime::ExceptionDetails;
51 using protocol::Runtime::RemoteObject; 51 using protocol::Runtime::RemoteObject;
52 52
53 static PassOwnPtr<ExceptionDetails> createExceptionDetails(V8Debugger* debugger, v8::Local<v8::Context> context, v8::Local<v8::Message> message)
54 {
55 OwnPtr<protocol::Runtime::ExceptionDetails> exceptionDetailsObject = protoco l::Runtime::ExceptionDetails::create().setText(toProtocolString(message->Get())) .build();
56 exceptionDetailsObject->setUrl(toProtocolStringWithTypeCheck(message->GetScr iptResourceName()));
57 exceptionDetailsObject->setScriptId(String16::number(message->GetScriptOrigi n().ScriptID()->Value()));
58
59 v8::Maybe<int> lineNumber = message->GetLineNumber(context);
60 if (lineNumber.IsJust())
61 exceptionDetailsObject->setLine(lineNumber.FromJust());
62 v8::Maybe<int> columnNumber = message->GetStartColumn(context);
63 if (columnNumber.IsJust())
64 exceptionDetailsObject->setColumn(columnNumber.FromJust());
65
66 v8::Local<v8::StackTrace> stackTrace = message->GetStackTrace();
67 if (!stackTrace.IsEmpty() && stackTrace->GetFrameCount() > 0)
68 exceptionDetailsObject->setStack(debugger->createStackTrace(stackTrace, stackTrace->GetFrameCount())->buildInspectorObject());
69 return exceptionDetailsObject.release();
70 }
71
53 PassOwnPtr<V8RuntimeAgent> V8RuntimeAgent::create(V8Debugger* debugger, int cont extGroupId) 72 PassOwnPtr<V8RuntimeAgent> V8RuntimeAgent::create(V8Debugger* debugger, int cont extGroupId)
54 { 73 {
55 return adoptPtr(new V8RuntimeAgentImpl(static_cast<V8DebuggerImpl*>(debugger ), contextGroupId)); 74 return adoptPtr(new V8RuntimeAgentImpl(static_cast<V8DebuggerImpl*>(debugger ), contextGroupId));
56 } 75 }
57 76
58 V8RuntimeAgentImpl::V8RuntimeAgentImpl(V8DebuggerImpl* debugger, int contextGrou pId) 77 V8RuntimeAgentImpl::V8RuntimeAgentImpl(V8DebuggerImpl* debugger, int contextGrou pId)
59 : m_contextGroupId(contextGroupId) 78 : m_contextGroupId(contextGroupId)
60 , m_state(nullptr) 79 , m_state(nullptr)
61 , m_frontend(nullptr) 80 , m_frontend(nullptr)
62 , m_injectedScriptManager(InjectedScriptManager::create(debugger)) 81 , m_injectedScriptManager(InjectedScriptManager::create(debugger))
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } 223 }
205 224
206 v8::Isolate* isolate = injectedScript->isolate(); 225 v8::Isolate* isolate = injectedScript->isolate();
207 v8::HandleScope handles(isolate); 226 v8::HandleScope handles(isolate);
208 v8::Context::Scope scope(injectedScript->context()); 227 v8::Context::Scope scope(injectedScript->context());
209 v8::TryCatch tryCatch(isolate); 228 v8::TryCatch tryCatch(isolate);
210 v8::Local<v8::Script> script = m_debugger->compileInternalScript(injectedScr ipt->context(), toV8String(isolate, expression), sourceURL); 229 v8::Local<v8::Script> script = m_debugger->compileInternalScript(injectedScr ipt->context(), toV8String(isolate, expression), sourceURL);
211 if (script.IsEmpty()) { 230 if (script.IsEmpty()) {
212 v8::Local<v8::Message> message = tryCatch.Message(); 231 v8::Local<v8::Message> message = tryCatch.Message();
213 if (!message.IsEmpty()) 232 if (!message.IsEmpty())
214 *exceptionDetails = createExceptionDetails(isolate, message); 233 *exceptionDetails = createExceptionDetails(m_debugger, injectedScrip t->context(), message);
215 else 234 else
216 *errorString = "Script compilation failed"; 235 *errorString = "Script compilation failed";
217 return; 236 return;
218 } 237 }
219 238
220 if (!persistScript) 239 if (!persistScript)
221 return; 240 return;
222 241
223 String16 scriptValueId = String16::number(script->GetUnboundScript()->GetId( )); 242 String16 scriptValueId = String16::number(script->GetUnboundScript()->GetId( ));
224 OwnPtr<v8::Global<v8::Script>> global = adoptPtr(new v8::Global<v8::Script>( isolate, script)); 243 OwnPtr<v8::Global<v8::Script>> global = adoptPtr(new v8::Global<v8::Script>( isolate, script));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 OwnPtr<v8::Global<v8::Script>> scriptWrapper = m_compiledScripts.take(script Id); 278 OwnPtr<v8::Global<v8::Script>> scriptWrapper = m_compiledScripts.take(script Id);
260 v8::Local<v8::Script> script = scriptWrapper->Get(isolate); 279 v8::Local<v8::Script> script = scriptWrapper->Get(isolate);
261 280
262 if (script.IsEmpty()) { 281 if (script.IsEmpty()) {
263 *errorString = "Script execution failed"; 282 *errorString = "Script execution failed";
264 return; 283 return;
265 } 284 }
266 v8::TryCatch tryCatch(isolate); 285 v8::TryCatch tryCatch(isolate);
267 286
268 v8::Local<v8::Value> value; 287 v8::Local<v8::Value> value;
269 v8::MaybeLocal<v8::Value> maybeValue = injectedScript->runCompiledScript(scr ipt, includeCommandLineAPI.fromMaybe(false)); 288
289 InjectedScriptManager::InjectScopeExtensionByName scopeExtension(errorString , injectedScript, false, "commandLineAPI");
290 if (scopeExtension.hasError())
291 return;
292
293 v8::MaybeLocal<v8::Value> maybeValue = m_debugger->runCompiledScript(context , script);
270 if (maybeValue.IsEmpty()) { 294 if (maybeValue.IsEmpty()) {
271 value = tryCatch.Exception(); 295 value = tryCatch.Exception();
272 v8::Local<v8::Message> message = tryCatch.Message(); 296 v8::Local<v8::Message> message = tryCatch.Message();
273 if (!message.IsEmpty()) 297 if (!message.IsEmpty())
274 *exceptionDetails = createExceptionDetails(isolate, message); 298 *exceptionDetails = createExceptionDetails(m_debugger, injectedScrip t->context(), message);
275 } else { 299 } else {
276 value = maybeValue.ToLocalChecked(); 300 value = maybeValue.ToLocalChecked();
277 } 301 }
278 302
279 if (value.IsEmpty()) { 303 if (value.IsEmpty()) {
280 *errorString = "Script execution failed"; 304 *errorString = "Script execution failed";
281 return; 305 return;
282 } 306 }
283 307
284 *result = injectedScript->wrapObject(value, objectGroup.fromMaybe("")); 308 injectedScript = m_injectedScriptManager->findInjectedScript(executionContex tId);
dgozman 2016/03/17 19:16:12 Same comment here.
kozy 2016/03/17 20:48:56 Done.
309 if (!injectedScript) {
310 *errorString = "Inspected frame has gone during script running";
311 return;
312 }
313
314 OwnPtr<RemoteObject> resultObject = injectedScript->wrapObject(errorString, value, objectGroup.fromMaybe(""));
dgozman 2016/03/17 19:16:12 Just return.
kozy 2016/03/17 20:48:56 Done.
315 if (!resultObject)
316 return;
317 *result = resultObject.release();
285 } 318 }
286 319
287 void V8RuntimeAgentImpl::setInspectorState(protocol::DictionaryValue* state) 320 void V8RuntimeAgentImpl::setInspectorState(protocol::DictionaryValue* state)
288 { 321 {
289 m_state = state; 322 m_state = state;
290 } 323 }
291 324
292 void V8RuntimeAgentImpl::setFrontend(protocol::Frontend::Runtime* frontend) 325 void V8RuntimeAgentImpl::setFrontend(protocol::Frontend::Runtime* frontend)
293 { 326 {
294 m_frontend = frontend; 327 m_frontend = frontend;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 void V8RuntimeAgentImpl::setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::Ins pectCallback> callback) 378 void V8RuntimeAgentImpl::setInspectObjectCallback(PassOwnPtr<V8RuntimeAgent::Ins pectCallback> callback)
346 { 379 {
347 m_injectedScriptManager->injectedScriptHost()->setInspectObjectCallback(call back); 380 m_injectedScriptManager->injectedScriptHost()->setInspectObjectCallback(call back);
348 } 381 }
349 382
350 PassOwnPtr<RemoteObject> V8RuntimeAgentImpl::wrapObject(v8::Local<v8::Context> c ontext, v8::Local<v8::Value> value, const String16& groupName, bool generatePrev iew) 383 PassOwnPtr<RemoteObject> V8RuntimeAgentImpl::wrapObject(v8::Local<v8::Context> c ontext, v8::Local<v8::Value> value, const String16& groupName, bool generatePrev iew)
351 { 384 {
352 InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor( context); 385 InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor( context);
353 if (!injectedScript) 386 if (!injectedScript)
354 return nullptr; 387 return nullptr;
355 return injectedScript->wrapObject(value, groupName, generatePreview); 388 ErrorString errorString;
389 return injectedScript->wrapObject(&errorString, value, groupName, false, gen eratePreview);
356 } 390 }
357 391
358 PassOwnPtr<RemoteObject> V8RuntimeAgentImpl::wrapTable(v8::Local<v8::Context> co ntext, v8::Local<v8::Value> table, v8::Local<v8::Value> columns) 392 PassOwnPtr<RemoteObject> V8RuntimeAgentImpl::wrapTable(v8::Local<v8::Context> co ntext, v8::Local<v8::Value> table, v8::Local<v8::Value> columns)
359 { 393 {
360 InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor( context); 394 InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor( context);
361 if (!injectedScript) 395 if (!injectedScript)
362 return nullptr; 396 return nullptr;
363 return injectedScript->wrapTable(table, columns); 397 return injectedScript->wrapTable(table, columns);
364 } 398 }
365 399
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 } 446 }
413 447
414 void V8RuntimeAgentImpl::reportExecutionContextDestroyed(v8::Local<v8::Context> context) 448 void V8RuntimeAgentImpl::reportExecutionContextDestroyed(v8::Local<v8::Context> context)
415 { 449 {
416 int contextId = m_injectedScriptManager->discardInjectedScriptFor(context); 450 int contextId = m_injectedScriptManager->discardInjectedScriptFor(context);
417 if (!m_enabled) 451 if (!m_enabled)
418 return; 452 return;
419 m_frontend->executionContextDestroyed(contextId); 453 m_frontend->executionContextDestroyed(contextId);
420 } 454 }
421 455
422 PassOwnPtr<ExceptionDetails> V8RuntimeAgentImpl::createExceptionDetails(v8::Isol ate* isolate, v8::Local<v8::Message> message) 456 void V8RuntimeAgentImpl::wrapEvaluateResult(ErrorString* errorString, V8Debugger * debugger, InjectedScript* injectedScript, v8::Local<v8::Value> resultValue, v8 ::TryCatch& tryCatch, const String16& objectGroup, bool returnByValue, bool gene ratePreview, OwnPtr<protocol::Runtime::RemoteObject>* result, Maybe<bool>* wasTh rown, Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails)
423 { 457 {
424 OwnPtr<ExceptionDetails> exceptionDetails = ExceptionDetails::create().setTe xt(toProtocolStringWithTypeCheck(message->Get())).build(); 458 if (!tryCatch.HasCaught()) {
425 exceptionDetails->setLine(message->GetLineNumber()); 459 if (resultValue.IsEmpty()) {
426 exceptionDetails->setColumn(message->GetStartColumn()); 460 *errorString = "Internal error";
427 v8::Local<v8::StackTrace> messageStackTrace = message->GetStackTrace(); 461 return;
428 if (!messageStackTrace.IsEmpty() && messageStackTrace->GetFrameCount() > 0) 462 }
429 exceptionDetails->setStack(m_debugger->createStackTrace(messageStackTrac e, messageStackTrace->GetFrameCount())->buildInspectorObject()); 463 OwnPtr<RemoteObject> remoteObject = injectedScript->wrapObject(errorStri ng, resultValue, objectGroup, returnByValue, generatePreview);
430 return exceptionDetails.release(); 464 if (!remoteObject)
465 return;
466 if (objectGroup == "console" && !injectedScript->setLastEvaluationResult (errorString, resultValue))
467 return;
468 *result = remoteObject.release();
469 *wasThrown = false;
470 } else {
471 v8::Local<v8::Value> exception = tryCatch.Exception();
472 OwnPtr<RemoteObject> remoteObject = injectedScript->wrapObject(errorStri ng, exception, objectGroup, false, generatePreview && !exception->IsNativeError( ));
473 if (!remoteObject)
474 return;
475 *result = remoteObject.release();
dgozman 2016/03/17 19:16:12 Move after error checking.
kozy 2016/03/17 20:48:56 Done.
476 OwnPtr<ExceptionDetails> exceptionDetailsObject = createExceptionDetails (debugger, injectedScript->context(), tryCatch.Message());
477 if (!exceptionDetailsObject) {
dgozman 2016/03/17 19:16:12 It always returns something.
kozy 2016/03/17 20:48:56 Done.
478 *errorString = "Internal error";
479 return;
480 }
481 *exceptionDetails = exceptionDetailsObject.release();
482 *wasThrown = true;
483 }
431 } 484 }
432 485
433 } // namespace blink 486 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698