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

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

Issue 2116563003: [DevTools] Report unhandled exceptions and promise rejections through Runtime. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tests pass Created 4 years, 5 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) 2010-2011 Google Inc. All rights reserved. 2 * Copyright (c) 2010-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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 std::unique_ptr<V8Debugger> V8Debugger::create(v8::Isolate* isolate, V8DebuggerC lient* client) 78 std::unique_ptr<V8Debugger> V8Debugger::create(v8::Isolate* isolate, V8DebuggerC lient* client)
79 { 79 {
80 return wrapUnique(new V8DebuggerImpl(isolate, client)); 80 return wrapUnique(new V8DebuggerImpl(isolate, client));
81 } 81 }
82 82
83 V8DebuggerImpl::V8DebuggerImpl(v8::Isolate* isolate, V8DebuggerClient* client) 83 V8DebuggerImpl::V8DebuggerImpl(v8::Isolate* isolate, V8DebuggerClient* client)
84 : m_isolate(isolate) 84 : m_isolate(isolate)
85 , m_client(client) 85 , m_client(client)
86 , m_capturingStackTracesCount(0) 86 , m_capturingStackTracesCount(0)
87 , m_muteConsoleCount(0) 87 , m_muteConsoleCount(0)
88 , m_lastConsoleMessageId(0) 88 , m_lastExceptionId(0)
89 , m_enabledAgentsCount(0) 89 , m_enabledAgentsCount(0)
90 , m_breakpointsActivated(true) 90 , m_breakpointsActivated(true)
91 , m_runningNestedMessageLoop(false) 91 , m_runningNestedMessageLoop(false)
92 , m_maxAsyncCallStackDepth(0) 92 , m_maxAsyncCallStackDepth(0)
93 { 93 {
94 } 94 }
95 95
96 V8DebuggerImpl::~V8DebuggerImpl() 96 V8DebuggerImpl::~V8DebuggerImpl()
97 { 97 {
98 } 98 }
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 if (!inspectedContext) 1009 if (!inspectedContext)
1010 return; 1010 return;
1011 std::vector<v8::Local<v8::Value>> arguments; 1011 std::vector<v8::Local<v8::Value>> arguments;
1012 if (!arg1.IsEmpty()) 1012 if (!arg1.IsEmpty())
1013 arguments.push_back(arg1); 1013 arguments.push_back(arg1);
1014 if (!arg2.IsEmpty()) 1014 if (!arg2.IsEmpty())
1015 arguments.push_back(arg2); 1015 arguments.push_back(arg2);
1016 ensureConsoleMessageStorage(contextGroupId)->addMessage(V8ConsoleMessage::cr eateForConsoleAPI(m_client->currentTimeMS(), LogMessageType, LogMessageLevel, me ssage, arguments.size() ? &arguments : nullptr, captureStackTrace(false), inspec tedContext)); 1016 ensureConsoleMessageStorage(contextGroupId)->addMessage(V8ConsoleMessage::cr eateForConsoleAPI(m_client->currentTimeMS(), LogMessageType, LogMessageLevel, me ssage, arguments.size() ? &arguments : nullptr, captureStackTrace(false), inspec tedContext));
1017 } 1017 }
1018 1018
1019 unsigned V8DebuggerImpl::promiseRejected(v8::Local<v8::Context> context, const S tring16& errorMessage, v8::Local<v8::Value> reason, const String16& url, unsigne d lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, i nt scriptId) 1019 void V8DebuggerImpl::exceptionUnhandled(int contextGroupId, const String16& erro rMessage, const String16& url, unsigned lineNumber, unsigned columnNumber, std:: unique_ptr<V8StackTrace> stackTrace, int scriptId)
1020 {
1021 if (m_muteConsoleCount || !contextGroupId)
1022 return;
1023 m_client->messageAddedToConsole(contextGroupId, JSMessageSource, ErrorMessag eLevel, errorMessage, url, lineNumber, columnNumber, stackTrace.get());
1024 unsigned exceptionId = ++m_lastExceptionId;
1025 std::unique_ptr<V8ConsoleMessage> consoleMessage = V8ConsoleMessage::createF orException(m_client->currentTimeMS(), errorMessage, url, lineNumber, columnNumb er, std::move(stackTrace), scriptId, m_isolate, 0, v8::Local<v8::Value>(), excep tionId);
1026 ensureConsoleMessageStorage(contextGroupId)->addMessage(std::move(consoleMes sage));
1027 }
1028
1029 unsigned V8DebuggerImpl::promiseRejected(v8::Local<v8::Context> context, const S tring16& errorMessage, v8::Local<v8::Value> exception, const String16& url, unsi gned lineNumber, unsigned columnNumber, std::unique_ptr<V8StackTrace> stackTrace , int scriptId)
1020 { 1030 {
1021 if (m_muteConsoleCount) 1031 if (m_muteConsoleCount)
1022 return 0; 1032 return 0;
1023 int contextGroupId = getGroupId(context); 1033 int contextGroupId = getGroupId(context);
1024 if (!contextGroupId) 1034 if (!contextGroupId)
1025 return 0; 1035 return 0;
1026 1036
1027 const String16 defaultMessage = "Uncaught (in promise)"; 1037 const String16 defaultMessage = "Uncaught (in promise)";
1028 String16 message = errorMessage; 1038 String16 message = errorMessage;
1029 if (message.isEmpty()) 1039 if (message.isEmpty())
1030 message = defaultMessage; 1040 message = defaultMessage;
1031 else if (message.startWith("Uncaught ")) 1041 else if (message.startWith("Uncaught "))
1032 message = message.substring(0, 8) + " (in promise)" + message.substring( 8); 1042 message = message.substring(0, 8) + " (in promise)" + message.substring( 8);
1033 1043
1034 m_client->messageAddedToConsole(contextGroupId, JSMessageSource, ErrorMessag eLevel, message, url, lineNumber, columnNumber, stackTrace.get()); 1044 m_client->messageAddedToConsole(contextGroupId, JSMessageSource, ErrorMessag eLevel, message, url, lineNumber, columnNumber, stackTrace.get());
1035 std::unique_ptr<V8ConsoleMessage> consoleMessage = wrapUnique(new V8ConsoleM essage(m_client->currentTimeMS(), JSMessageSource, ErrorMessageLevel, message, u rl, lineNumber, columnNumber, std::move(stackTrace), scriptId, String16())); 1045 unsigned exceptionId = ++m_lastExceptionId;
1036 unsigned id = ++m_lastConsoleMessageId; 1046 std::unique_ptr<V8ConsoleMessage> consoleMessage = V8ConsoleMessage::createF orException(m_client->currentTimeMS(), message, url, lineNumber, columnNumber, s td::move(stackTrace), scriptId, m_isolate, contextId(context), exception, except ionId);
1037 consoleMessage->assignId(id);
1038
1039 std::vector<v8::Local<v8::Value>> arguments;
1040 arguments.push_back(toV8String(m_isolate, defaultMessage));
1041 arguments.push_back(reason);
1042 consoleMessage->addArguments(m_isolate, contextId(context), &arguments);
1043
1044 ensureConsoleMessageStorage(contextGroupId)->addMessage(std::move(consoleMes sage)); 1047 ensureConsoleMessageStorage(contextGroupId)->addMessage(std::move(consoleMes sage));
1045 return id; 1048 return exceptionId;
1046 } 1049 }
1047 1050
1048 void V8DebuggerImpl::promiseRejectionRevoked(v8::Local<v8::Context> context, uns igned promiseRejectionId) 1051 void V8DebuggerImpl::promiseRejectionRevoked(v8::Local<v8::Context> context, uns igned promiseRejectionId)
1049 { 1052 {
1050 if (m_muteConsoleCount) 1053 if (m_muteConsoleCount)
1051 return; 1054 return;
1052 int contextGroupId = getGroupId(context); 1055 int contextGroupId = getGroupId(context);
1053 if (!contextGroupId) 1056 if (!contextGroupId)
1054 return; 1057 return;
1055 1058
1056 const String16 message = "Handler added to rejected promise"; 1059 const String16 message = "Handler added to rejected promise";
1057 m_client->messageAddedToConsole(contextGroupId, JSMessageSource, RevokedErro rMessageLevel, message, String16(), 0, 0, nullptr); 1060 m_client->messageAddedToConsole(contextGroupId, JSMessageSource, InfoMessage Level, message, String16(), 0, 0, nullptr);
1058 std::unique_ptr<V8ConsoleMessage> consoleMessage = wrapUnique(new V8ConsoleM essage(m_client->currentTimeMS(), JSMessageSource, RevokedErrorMessageLevel, mes sage, String16(), 0, 0, nullptr, 0, String16())); 1061 std::unique_ptr<V8ConsoleMessage> consoleMessage = V8ConsoleMessage::createF orRevokedException(m_client->currentTimeMS(), message, promiseRejectionId);
1059 consoleMessage->assignRelatedId(promiseRejectionId);
1060 ensureConsoleMessageStorage(contextGroupId)->addMessage(std::move(consoleMes sage)); 1062 ensureConsoleMessageStorage(contextGroupId)->addMessage(std::move(consoleMes sage));
1061 } 1063 }
1062 1064
1063 void V8DebuggerImpl::consoleMessagesCount(int contextGroupId, unsigned* total, u nsigned* withArguments) 1065 void V8DebuggerImpl::consoleMessagesCount(int contextGroupId, unsigned* total, u nsigned* withArguments)
1064 { 1066 {
1065 *total = 0; 1067 *total = 0;
1066 *withArguments = 0; 1068 *withArguments = 0;
1067 ConsoleStorageMap::iterator storageIt = m_consoleStorageMap.find(contextGrou pId); 1069 ConsoleStorageMap::iterator storageIt = m_consoleStorageMap.find(contextGrou pId);
1068 if (storageIt == m_consoleStorageMap.end()) 1070 if (storageIt == m_consoleStorageMap.end())
1069 return; 1071 return;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 1118
1117 V8InspectorSessionImpl* V8DebuggerImpl::sessionForContextGroup(int contextGroupI d) 1119 V8InspectorSessionImpl* V8DebuggerImpl::sessionForContextGroup(int contextGroupI d)
1118 { 1120 {
1119 if (!contextGroupId) 1121 if (!contextGroupId)
1120 return nullptr; 1122 return nullptr;
1121 SessionMap::iterator iter = m_sessions.find(contextGroupId); 1123 SessionMap::iterator iter = m_sessions.find(contextGroupId);
1122 return iter == m_sessions.end() ? nullptr : iter->second; 1124 return iter == m_sessions.end() ? nullptr : iter->second;
1123 } 1125 }
1124 1126
1125 } // namespace blink 1127 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698