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

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

Issue 2249743006: [DevTools] Fill ExceptionDetails with more details, unify usage across protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: browser test Created 4 years, 4 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 #include "platform/v8_inspector/V8StringUtil.h" 43 #include "platform/v8_inspector/V8StringUtil.h"
44 #include "platform/v8_inspector/public/V8InspectorClient.h" 44 #include "platform/v8_inspector/public/V8InspectorClient.h"
45 45
46 namespace v8_inspector { 46 namespace v8_inspector {
47 47
48 namespace V8RuntimeAgentImplState { 48 namespace V8RuntimeAgentImplState {
49 static const char customObjectFormatterEnabled[] = "customObjectFormatterEnabled "; 49 static const char customObjectFormatterEnabled[] = "customObjectFormatterEnabled ";
50 static const char runtimeEnabled[] = "runtimeEnabled"; 50 static const char runtimeEnabled[] = "runtimeEnabled";
51 }; 51 };
52 52
53 using protocol::Runtime::ExceptionDetails;
54 using protocol::Runtime::RemoteObject; 53 using protocol::Runtime::RemoteObject;
55 54
56 static bool hasInternalError(ErrorString* errorString, bool hasError) 55 static bool hasInternalError(ErrorString* errorString, bool hasError)
57 { 56 {
58 if (hasError) 57 if (hasError)
59 *errorString = "Internal error"; 58 *errorString = "Internal error";
60 return hasError; 59 return hasError;
61 } 60 }
62 61
63 namespace { 62 namespace {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 v8::Local<v8::Value> value = info.Length() > 0 ? info[0] : v8::Local<v8: :Value>::Cast(v8::Undefined(info.GetIsolate())); 98 v8::Local<v8::Value> value = info.Length() > 0 ? info[0] : v8::Local<v8: :Value>::Cast(v8::Undefined(info.GetIsolate()));
100 handler->m_callback->sendSuccess(handler->wrapObject(value), Maybe<proto col::Runtime::ExceptionDetails>()); 99 handler->m_callback->sendSuccess(handler->wrapObject(value), Maybe<proto col::Runtime::ExceptionDetails>());
101 } 100 }
102 101
103 static void catchCallback(const v8::FunctionCallbackInfo<v8::Value>& info) 102 static void catchCallback(const v8::FunctionCallbackInfo<v8::Value>& info)
104 { 103 {
105 ProtocolPromiseHandler<Callback>* handler = static_cast<ProtocolPromiseH andler<Callback>*>(info.Data().As<v8::External>()->Value()); 104 ProtocolPromiseHandler<Callback>* handler = static_cast<ProtocolPromiseH andler<Callback>*>(info.Data().As<v8::External>()->Value());
106 DCHECK(handler); 105 DCHECK(handler);
107 v8::Local<v8::Value> value = info.Length() > 0 ? info[0] : v8::Local<v8: :Value>::Cast(v8::Undefined(info.GetIsolate())); 106 v8::Local<v8::Value> value = info.Length() > 0 ? info[0] : v8::Local<v8: :Value>::Cast(v8::Undefined(info.GetIsolate()));
108 107
109 std::unique_ptr<protocol::Runtime::ExceptionDetails> exceptionDetails;
110 std::unique_ptr<V8StackTraceImpl> stack = handler->m_inspector->debugger ()->captureStackTrace(true); 108 std::unique_ptr<V8StackTraceImpl> stack = handler->m_inspector->debugger ()->captureStackTrace(true);
111 if (stack) { 109 std::unique_ptr<protocol::Runtime::ExceptionDetails> exceptionDetails = protocol::Runtime::ExceptionDetails::create()
112 exceptionDetails = protocol::Runtime::ExceptionDetails::create() 110 .setExceptionId(handler->m_inspector->nextExceptionId())
113 .setText("Promise was rejected") 111 .setText("Uncaught (in promise)")
114 .setLineNumber(!stack->isEmpty() ? stack->topLineNumber() : 0) 112 .setLineNumber(stack && !stack->isEmpty() ? stack->topLineNumber() : 0)
115 .setColumnNumber(!stack->isEmpty() ? stack->topColumnNumber() : 0) 113 .setColumnNumber(stack && !stack->isEmpty() ? stack->topColumnNumber () : 0)
116 .setScriptId(!stack->isEmpty() ? stack->topScriptId() : String16 ()) 114 .setException(handler->wrapObject(value))
117 .setStackTrace(stack->buildInspectorObjectImpl()) 115 .build();
118 .build(); 116 if (stack)
119 } 117 exceptionDetails->setStackTrace(stack->buildInspectorObjectImpl());
118 if (stack && !stack->isEmpty())
119 exceptionDetails->setScriptId(stack->topScriptId());
120 handler->m_callback->sendSuccess(handler->wrapObject(value), std::move(e xceptionDetails)); 120 handler->m_callback->sendSuccess(handler->wrapObject(value), std::move(e xceptionDetails));
121 } 121 }
122 122
123 ProtocolPromiseHandler(V8InspectorImpl* inspector, int contextGroupId, int e xecutionContextId, const String16& objectGroup, bool returnByValue, bool generat ePreview, std::unique_ptr<Callback> callback) 123 ProtocolPromiseHandler(V8InspectorImpl* inspector, int contextGroupId, int e xecutionContextId, const String16& objectGroup, bool returnByValue, bool generat ePreview, std::unique_ptr<Callback> callback)
124 : m_inspector(inspector) 124 : m_inspector(inspector)
125 , m_contextGroupId(contextGroupId) 125 , m_contextGroupId(contextGroupId)
126 , m_executionContextId(executionContextId) 126 , m_executionContextId(executionContextId)
127 , m_objectGroup(objectGroup) 127 , m_objectGroup(objectGroup)
128 , m_returnByValue(returnByValue) 128 , m_returnByValue(returnByValue)
129 , m_generatePreview(generatePreview) 129 , m_generatePreview(generatePreview)
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 } 404 }
405 405
406 void V8RuntimeAgentImpl::getProperties( 406 void V8RuntimeAgentImpl::getProperties(
407 ErrorString* errorString, 407 ErrorString* errorString,
408 const String16& objectId, 408 const String16& objectId,
409 const Maybe<bool>& ownProperties, 409 const Maybe<bool>& ownProperties,
410 const Maybe<bool>& accessorPropertiesOnly, 410 const Maybe<bool>& accessorPropertiesOnly,
411 const Maybe<bool>& generatePreview, 411 const Maybe<bool>& generatePreview,
412 std::unique_ptr<protocol::Array<protocol::Runtime::PropertyDescriptor>>* res ult, 412 std::unique_ptr<protocol::Array<protocol::Runtime::PropertyDescriptor>>* res ult,
413 Maybe<protocol::Array<protocol::Runtime::InternalPropertyDescriptor>>* inter nalProperties, 413 Maybe<protocol::Array<protocol::Runtime::InternalPropertyDescriptor>>* inter nalProperties,
414 Maybe<ExceptionDetails>* exceptionDetails) 414 Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails)
415 { 415 {
416 using protocol::Runtime::InternalPropertyDescriptor; 416 using protocol::Runtime::InternalPropertyDescriptor;
417 417
418 InjectedScript::ObjectScope scope(errorString, m_inspector, m_session->conte xtGroupId(), objectId); 418 InjectedScript::ObjectScope scope(errorString, m_inspector, m_session->conte xtGroupId(), objectId);
419 if (!scope.initialize()) 419 if (!scope.initialize())
420 return; 420 return;
421 421
422 scope.ignoreExceptionsAndMuteConsole(); 422 scope.ignoreExceptionsAndMuteConsole();
423 if (!scope.object()->IsObject()) { 423 if (!scope.object()->IsObject()) {
424 *errorString = "Value with given id is not an object"; 424 *errorString = "Value with given id is not an object";
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 V8ConsoleMessageStorage* storage = m_inspector->ensureConsoleMessageStorage( m_session->contextGroupId()); 481 V8ConsoleMessageStorage* storage = m_inspector->ensureConsoleMessageStorage( m_session->contextGroupId());
482 storage->clear(); 482 storage->clear();
483 } 483 }
484 484
485 void V8RuntimeAgentImpl::compileScript(ErrorString* errorString, 485 void V8RuntimeAgentImpl::compileScript(ErrorString* errorString,
486 const String16& expression, 486 const String16& expression,
487 const String16& sourceURL, 487 const String16& sourceURL,
488 bool persistScript, 488 bool persistScript,
489 const Maybe<int>& executionContextId, 489 const Maybe<int>& executionContextId,
490 Maybe<String16>* scriptId, 490 Maybe<String16>* scriptId,
491 Maybe<ExceptionDetails>* exceptionDetails) 491 Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails)
492 { 492 {
493 if (!m_enabled) { 493 if (!m_enabled) {
494 *errorString = "Runtime agent is not enabled"; 494 *errorString = "Runtime agent is not enabled";
495 return; 495 return;
496 } 496 }
497 int contextId = ensureContext(errorString, m_inspector, m_session->contextGr oupId(), executionContextId); 497 int contextId = ensureContext(errorString, m_inspector, m_session->contextGr oupId(), executionContextId);
498 if (!errorString->isEmpty()) 498 if (!errorString->isEmpty())
499 return; 499 return;
500 InjectedScript::ContextScope scope(errorString, m_inspector, m_session->cont extGroupId(), contextId); 500 InjectedScript::ContextScope scope(errorString, m_inspector, m_session->cont extGroupId(), contextId);
501 if (!scope.initialize()) 501 if (!scope.initialize())
502 return; 502 return;
503 503
504 if (!persistScript) 504 if (!persistScript)
505 m_inspector->debugger()->muteScriptParsedEvents(); 505 m_inspector->debugger()->muteScriptParsedEvents();
506 v8::Local<v8::Script> script = m_inspector->compileScript(scope.context(), t oV8String(m_inspector->isolate(), expression), sourceURL, false); 506 v8::Local<v8::Script> script = m_inspector->compileScript(scope.context(), t oV8String(m_inspector->isolate(), expression), sourceURL, false);
507 if (!persistScript) 507 if (!persistScript)
508 m_inspector->debugger()->unmuteScriptParsedEvents(); 508 m_inspector->debugger()->unmuteScriptParsedEvents();
509 if (script.IsEmpty()) { 509 if (script.IsEmpty()) {
510 v8::Local<v8::Message> message = scope.tryCatch().Message(); 510 if (scope.tryCatch().HasCaught())
511 if (!message.IsEmpty()) 511 *exceptionDetails = scope.injectedScript()->createExceptionDetails(e rrorString, scope.tryCatch(), String16(), false);
512 *exceptionDetails = scope.injectedScript()->createExceptionDetails(m essage);
513 else 512 else
514 *errorString = "Script compilation failed"; 513 *errorString = "Script compilation failed";
515 return; 514 return;
516 } 515 }
517 516
518 if (!persistScript) 517 if (!persistScript)
519 return; 518 return;
520 519
521 String16 scriptValueId = String16::fromInteger(script->GetUnboundScript()->G etId()); 520 String16 scriptValueId = String16::fromInteger(script->GetUnboundScript()->G etId());
522 std::unique_ptr<v8::Global<v8::Script>> global(new v8::Global<v8::Script>(m_ inspector->isolate(), script)); 521 std::unique_ptr<v8::Global<v8::Script>> global(new v8::Global<v8::Script>(m_ inspector->isolate(), script));
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 reportMessage(message, true); 678 reportMessage(message, true);
680 } 679 }
681 680
682 void V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message, bool generateP review) 681 void V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message, bool generateP review)
683 { 682 {
684 message->reportToFrontend(&m_frontend, m_session, generatePreview); 683 message->reportToFrontend(&m_frontend, m_session, generatePreview);
685 m_frontend.flush(); 684 m_frontend.flush();
686 } 685 }
687 686
688 } // namespace v8_inspector 687 } // namespace v8_inspector
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698