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

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

Issue 1827993002: [DevTools] Remove promise inspector experiment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased 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 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/v8_inspector/V8DebuggerAgentImpl.h" 5 #include "platform/v8_inspector/V8DebuggerAgentImpl.h"
6 6
7 #include "platform/inspector_protocol/String16.h" 7 #include "platform/inspector_protocol/String16.h"
8 #include "platform/inspector_protocol/Values.h" 8 #include "platform/inspector_protocol/Values.h"
9 #include "platform/v8_inspector/IgnoreExceptionsScope.h" 9 #include "platform/v8_inspector/IgnoreExceptionsScope.h"
10 #include "platform/v8_inspector/InjectedScript.h" 10 #include "platform/v8_inspector/InjectedScript.h"
11 #include "platform/v8_inspector/InjectedScriptHost.h" 11 #include "platform/v8_inspector/InjectedScriptHost.h"
12 #include "platform/v8_inspector/InjectedScriptManager.h" 12 #include "platform/v8_inspector/InjectedScriptManager.h"
13 #include "platform/v8_inspector/JavaScriptCallFrame.h" 13 #include "platform/v8_inspector/JavaScriptCallFrame.h"
14 #include "platform/v8_inspector/PromiseTracker.h"
15 #include "platform/v8_inspector/RemoteObjectId.h" 14 #include "platform/v8_inspector/RemoteObjectId.h"
16 #include "platform/v8_inspector/ScriptBreakpoint.h" 15 #include "platform/v8_inspector/ScriptBreakpoint.h"
17 #include "platform/v8_inspector/V8AsyncCallTracker.h" 16 #include "platform/v8_inspector/V8AsyncCallTracker.h"
18 #include "platform/v8_inspector/V8Regex.h" 17 #include "platform/v8_inspector/V8Regex.h"
19 #include "platform/v8_inspector/V8RuntimeAgentImpl.h" 18 #include "platform/v8_inspector/V8RuntimeAgentImpl.h"
20 #include "platform/v8_inspector/V8StackTraceImpl.h" 19 #include "platform/v8_inspector/V8StackTraceImpl.h"
21 #include "platform/v8_inspector/V8StringUtil.h" 20 #include "platform/v8_inspector/V8StringUtil.h"
22 #include "platform/v8_inspector/public/V8ContentSearchUtil.h" 21 #include "platform/v8_inspector/public/V8ContentSearchUtil.h"
23 #include "platform/v8_inspector/public/V8Debugger.h" 22 #include "platform/v8_inspector/public/V8Debugger.h"
24 #include "platform/v8_inspector/public/V8DebuggerClient.h" 23 #include "platform/v8_inspector/public/V8DebuggerClient.h"
25 #include "platform/v8_inspector/public/V8ToProtocolValue.h" 24 #include "platform/v8_inspector/public/V8ToProtocolValue.h"
26 25
27 using blink::protocol::Array; 26 using blink::protocol::Array;
28 using blink::protocol::Maybe; 27 using blink::protocol::Maybe;
29 using blink::protocol::Debugger::AsyncOperation; 28 using blink::protocol::Debugger::AsyncOperation;
30 using blink::protocol::Debugger::BreakpointId; 29 using blink::protocol::Debugger::BreakpointId;
31 using blink::protocol::Debugger::CallFrame; 30 using blink::protocol::Debugger::CallFrame;
32 using blink::protocol::Debugger::CollectionEntry; 31 using blink::protocol::Debugger::CollectionEntry;
33 using blink::protocol::Runtime::ExceptionDetails; 32 using blink::protocol::Runtime::ExceptionDetails;
34 using blink::protocol::Debugger::FunctionDetails; 33 using blink::protocol::Debugger::FunctionDetails;
35 using blink::protocol::Debugger::GeneratorObjectDetails; 34 using blink::protocol::Debugger::GeneratorObjectDetails;
36 using blink::protocol::Debugger::PromiseDetails;
37 using blink::protocol::Runtime::ScriptId; 35 using blink::protocol::Runtime::ScriptId;
38 using blink::protocol::Runtime::StackTrace; 36 using blink::protocol::Runtime::StackTrace;
39 using blink::protocol::Runtime::RemoteObject; 37 using blink::protocol::Runtime::RemoteObject;
40 38
41 namespace blink { 39 namespace blink {
42 40
43 namespace DebuggerAgentState { 41 namespace DebuggerAgentState {
44 static const char javaScriptBreakpoints[] = "javaScriptBreakopints"; 42 static const char javaScriptBreakpoints[] = "javaScriptBreakopints";
45 static const char pauseOnExceptionsState[] = "pauseOnExceptionsState"; 43 static const char pauseOnExceptionsState[] = "pauseOnExceptionsState";
46 static const char asyncCallStackDepth[] = "asyncCallStackDepth"; 44 static const char asyncCallStackDepth[] = "asyncCallStackDepth";
47 static const char promiseTrackerEnabled[] = "promiseTrackerEnabled";
48 static const char promiseTrackerCaptureStacks[] = "promiseTrackerCaptureStacks";
49 45
50 // Breakpoint properties. 46 // Breakpoint properties.
51 static const char url[] = "url"; 47 static const char url[] = "url";
52 static const char isRegex[] = "isRegex"; 48 static const char isRegex[] = "isRegex";
53 static const char lineNumber[] = "lineNumber"; 49 static const char lineNumber[] = "lineNumber";
54 static const char columnNumber[] = "columnNumber"; 50 static const char columnNumber[] = "columnNumber";
55 static const char condition[] = "condition"; 51 static const char condition[] = "condition";
56 static const char skipAllPauses[] = "skipAllPauses"; 52 static const char skipAllPauses[] = "skipAllPauses";
57 53
58 } // namespace DebuggerAgentState; 54 } // namespace DebuggerAgentState;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 , m_nestedAsyncCallCount(0) 185 , m_nestedAsyncCallCount(0)
190 , m_currentAsyncOperationId(unknownAsyncOperationId) 186 , m_currentAsyncOperationId(unknownAsyncOperationId)
191 , m_pendingTraceAsyncOperationCompleted(false) 187 , m_pendingTraceAsyncOperationCompleted(false)
192 , m_startingStepIntoAsync(false) 188 , m_startingStepIntoAsync(false)
193 { 189 {
194 ASSERT(contextGroupId); 190 ASSERT(contextGroupId);
195 m_injectedScriptManager->injectedScriptHost()->setDebuggerAgent(this); 191 m_injectedScriptManager->injectedScriptHost()->setDebuggerAgent(this);
196 192
197 // FIXME: remove once InjectedScriptManager moves to v8. 193 // FIXME: remove once InjectedScriptManager moves to v8.
198 m_v8AsyncCallTracker = V8AsyncCallTracker::create(this); 194 m_v8AsyncCallTracker = V8AsyncCallTracker::create(this);
199 m_promiseTracker = PromiseTracker::create(this, m_isolate);
200 clearBreakDetails(); 195 clearBreakDetails();
201 } 196 }
202 197
203 V8DebuggerAgentImpl::~V8DebuggerAgentImpl() 198 V8DebuggerAgentImpl::~V8DebuggerAgentImpl()
204 { 199 {
205 } 200 }
206 201
207 bool V8DebuggerAgentImpl::checkEnabled(ErrorString* errorString) 202 bool V8DebuggerAgentImpl::checkEnabled(ErrorString* errorString)
208 { 203 {
209 if (enabled()) 204 if (enabled())
(...skipping 28 matching lines...) Expand all
238 } 233 }
239 234
240 void V8DebuggerAgentImpl::disable(ErrorString*) 235 void V8DebuggerAgentImpl::disable(ErrorString*)
241 { 236 {
242 if (!enabled()) 237 if (!enabled())
243 return; 238 return;
244 239
245 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create()); 240 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create());
246 m_state->setNumber(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerImp l::DontPauseOnExceptions); 241 m_state->setNumber(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerImp l::DontPauseOnExceptions);
247 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, 0); 242 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, 0);
248 m_state->setBoolean(DebuggerAgentState::promiseTrackerEnabled, false);
249 m_state->setBoolean(DebuggerAgentState::promiseTrackerCaptureStacks, false);
250 243
251 debugger().removeDebuggerAgent(m_contextGroupId); 244 debugger().removeDebuggerAgent(m_contextGroupId);
252 m_pausedContext.Reset(); 245 m_pausedContext.Reset();
253 m_currentCallStack.clear(); 246 m_currentCallStack.clear();
254 m_scripts.clear(); 247 m_scripts.clear();
255 m_blackboxedPositions.clear(); 248 m_blackboxedPositions.clear();
256 m_breakpointIdToDebuggerBreakpointIds.clear(); 249 m_breakpointIdToDebuggerBreakpointIds.clear();
257 internalSetAsyncCallStackDepth(0); 250 internalSetAsyncCallStackDepth(0);
258 m_promiseTracker->setEnabled(false, false);
259 m_continueToLocationBreakpointId = String16(); 251 m_continueToLocationBreakpointId = String16();
260 clearBreakDetails(); 252 clearBreakDetails();
261 m_scheduledDebuggerStep = NoStep; 253 m_scheduledDebuggerStep = NoStep;
262 m_skipNextDebuggerStepOut = false; 254 m_skipNextDebuggerStepOut = false;
263 m_javaScriptPauseScheduled = false; 255 m_javaScriptPauseScheduled = false;
264 m_steppingFromFramework = false; 256 m_steppingFromFramework = false;
265 m_pausingOnNativeEvent = false; 257 m_pausingOnNativeEvent = false;
266 m_skippedStepFrameCount = 0; 258 m_skippedStepFrameCount = 0;
267 m_recursionLevelForStepFrame = 0; 259 m_recursionLevelForStepFrame = 0;
268 m_asyncOperationNotifications.clear(); 260 m_asyncOperationNotifications.clear();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 295
304 int pauseState = V8DebuggerImpl::DontPauseOnExceptions; 296 int pauseState = V8DebuggerImpl::DontPauseOnExceptions;
305 m_state->getNumber(DebuggerAgentState::pauseOnExceptionsState, &pauseState); 297 m_state->getNumber(DebuggerAgentState::pauseOnExceptionsState, &pauseState);
306 setPauseOnExceptionsImpl(&error, pauseState); 298 setPauseOnExceptionsImpl(&error, pauseState);
307 299
308 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false); 300 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false);
309 301
310 int asyncCallStackDepth = 0; 302 int asyncCallStackDepth = 0;
311 m_state->getNumber(DebuggerAgentState::asyncCallStackDepth, &asyncCallStackD epth); 303 m_state->getNumber(DebuggerAgentState::asyncCallStackDepth, &asyncCallStackD epth);
312 internalSetAsyncCallStackDepth(asyncCallStackDepth); 304 internalSetAsyncCallStackDepth(asyncCallStackDepth);
313
314 m_promiseTracker->setEnabled(m_state->booleanProperty(DebuggerAgentState::pr omiseTrackerEnabled, false), m_state->booleanProperty(DebuggerAgentState::promis eTrackerCaptureStacks, false));
315 } 305 }
316 306
317 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive) 307 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive)
318 { 308 {
319 if (!checkEnabled(errorString)) 309 if (!checkEnabled(errorString))
320 return; 310 return;
321 debugger().setBreakpointsActivated(active); 311 debugger().setBreakpointsActivated(active);
322 } 312 }
323 313
324 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped) 314 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped)
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 { 855 {
866 return trackingAsyncCalls(); 856 return trackingAsyncCalls();
867 } 857 }
868 858
869 void V8DebuggerAgentImpl::didReceiveV8AsyncTaskEvent(v8::Local<v8::Context> cont ext, const String16& eventType, const String16& eventName, int id) 859 void V8DebuggerAgentImpl::didReceiveV8AsyncTaskEvent(v8::Local<v8::Context> cont ext, const String16& eventType, const String16& eventName, int id)
870 { 860 {
871 ASSERT(trackingAsyncCalls()); 861 ASSERT(trackingAsyncCalls());
872 m_v8AsyncCallTracker->didReceiveV8AsyncTaskEvent(context, eventType, eventNa me, id); 862 m_v8AsyncCallTracker->didReceiveV8AsyncTaskEvent(context, eventType, eventNa me, id);
873 } 863 }
874 864
875 bool V8DebuggerAgentImpl::v8PromiseEventsEnabled() const
876 {
877 return m_promiseTracker->isEnabled();
878 }
879
880 void V8DebuggerAgentImpl::didReceiveV8PromiseEvent(v8::Local<v8::Context> contex t, v8::Local<v8::Object> promise, v8::Local<v8::Value> parentPromise, int status )
881 {
882 ASSERT(m_promiseTracker->isEnabled());
883 m_promiseTracker->didReceiveV8PromiseEvent(context, promise, parentPromise, status);
884 }
885
886 void V8DebuggerAgentImpl::pause(ErrorString* errorString) 865 void V8DebuggerAgentImpl::pause(ErrorString* errorString)
887 { 866 {
888 if (!checkEnabled(errorString)) 867 if (!checkEnabled(errorString))
889 return; 868 return;
890 if (m_javaScriptPauseScheduled || isPaused()) 869 if (m_javaScriptPauseScheduled || isPaused())
891 return; 870 return;
892 clearBreakDetails(); 871 clearBreakDetails();
893 clearStepIntoAsync(); 872 clearStepIntoAsync();
894 m_javaScriptPauseScheduled = true; 873 m_javaScriptPauseScheduled = true;
895 m_scheduledDebuggerStep = NoStep; 874 m_scheduledDebuggerStep = NoStep;
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 } 1066 }
1088 1067
1089 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth) 1068 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth)
1090 { 1069 {
1091 if (!checkEnabled(errorString)) 1070 if (!checkEnabled(errorString))
1092 return; 1071 return;
1093 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, depth); 1072 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, depth);
1094 internalSetAsyncCallStackDepth(depth); 1073 internalSetAsyncCallStackDepth(depth);
1095 } 1074 }
1096 1075
1097 void V8DebuggerAgentImpl::enablePromiseTracker(ErrorString* errorString,
1098 const Maybe<bool>& captureStacks)
1099 {
1100 if (!checkEnabled(errorString))
1101 return;
1102 m_state->setBoolean(DebuggerAgentState::promiseTrackerEnabled, true);
1103 m_state->setBoolean(DebuggerAgentState::promiseTrackerCaptureStacks, capture Stacks.fromMaybe(false));
1104 m_promiseTracker->setEnabled(true, captureStacks.fromMaybe(false));
1105 }
1106
1107 void V8DebuggerAgentImpl::disablePromiseTracker(ErrorString* errorString)
1108 {
1109 if (!checkEnabled(errorString))
1110 return;
1111 m_state->setBoolean(DebuggerAgentState::promiseTrackerEnabled, false);
1112 m_promiseTracker->setEnabled(false, false);
1113 }
1114
1115 void V8DebuggerAgentImpl::getPromiseById(ErrorString* errorString, int promiseId , const Maybe<String16>& objectGroup, OwnPtr<RemoteObject>* promise)
1116 {
1117 if (!checkEnabled(errorString))
1118 return;
1119 if (!m_promiseTracker->isEnabled()) {
1120 *errorString = "Promise tracking is disabled";
1121 return;
1122 }
1123 v8::HandleScope handles(m_isolate);
1124 v8::Local<v8::Object> value = m_promiseTracker->promiseById(promiseId);
1125 if (value.IsEmpty()) {
1126 *errorString = "Promise with specified ID not found.";
1127 return;
1128 }
1129 InjectedScript* injectedScript = m_injectedScriptManager->injectedScriptFor( value->CreationContext());
1130 *promise = injectedScript->wrapObject(errorString, value, objectGroup.fromMa ybe(""));
1131 }
1132
1133 void V8DebuggerAgentImpl::didUpdatePromise(const String16& eventType, PassOwnPtr <protocol::Debugger::PromiseDetails> promise)
1134 {
1135 if (m_frontend)
1136 m_frontend->promiseUpdated(eventType, promise);
1137 }
1138
1139 int V8DebuggerAgentImpl::traceAsyncOperationStarting(const String16& description ) 1076 int V8DebuggerAgentImpl::traceAsyncOperationStarting(const String16& description )
1140 { 1077 {
1141 v8::HandleScope scope(m_isolate); 1078 v8::HandleScope scope(m_isolate);
1142 OwnPtr<V8StackTraceImpl> chain = V8StackTraceImpl::capture(this, V8StackTrac e::maxCallStackSizeToCapture, description); 1079 OwnPtr<V8StackTraceImpl> chain = V8StackTraceImpl::capture(this, V8StackTrac e::maxCallStackSizeToCapture, description);
1143 1080
1144 do { 1081 do {
1145 ++m_lastAsyncOperationId; 1082 ++m_lastAsyncOperationId;
1146 if (m_lastAsyncOperationId <= 0) 1083 if (m_lastAsyncOperationId <= 0)
1147 m_lastAsyncOperationId = 1; 1084 m_lastAsyncOperationId = 1;
1148 } while (m_asyncOperations.contains(m_lastAsyncOperationId)); 1085 } while (m_asyncOperations.contains(m_lastAsyncOperationId));
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
1695 1632
1696 void V8DebuggerAgentImpl::reset() 1633 void V8DebuggerAgentImpl::reset()
1697 { 1634 {
1698 if (!enabled()) 1635 if (!enabled())
1699 return; 1636 return;
1700 m_scheduledDebuggerStep = NoStep; 1637 m_scheduledDebuggerStep = NoStep;
1701 m_scripts.clear(); 1638 m_scripts.clear();
1702 m_blackboxedPositions.clear(); 1639 m_blackboxedPositions.clear();
1703 m_breakpointIdToDebuggerBreakpointIds.clear(); 1640 m_breakpointIdToDebuggerBreakpointIds.clear();
1704 resetAsyncCallTracker(); 1641 resetAsyncCallTracker();
1705 m_promiseTracker->clear();
1706 } 1642 }
1707 1643
1708 } // namespace blink 1644 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698