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

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

Issue 2199943004: [DevTools] Rename V8Debugger to V8Inspector. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 // 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/InjectedScript.h" 9 #include "platform/v8_inspector/InjectedScript.h"
10 #include "platform/v8_inspector/InspectedContext.h" 10 #include "platform/v8_inspector/InspectedContext.h"
11 #include "platform/v8_inspector/JavaScriptCallFrame.h" 11 #include "platform/v8_inspector/JavaScriptCallFrame.h"
12 #include "platform/v8_inspector/RemoteObjectId.h" 12 #include "platform/v8_inspector/RemoteObjectId.h"
13 #include "platform/v8_inspector/ScriptBreakpoint.h" 13 #include "platform/v8_inspector/ScriptBreakpoint.h"
14 #include "platform/v8_inspector/V8InspectorImpl.h"
14 #include "platform/v8_inspector/V8InspectorSessionImpl.h" 15 #include "platform/v8_inspector/V8InspectorSessionImpl.h"
15 #include "platform/v8_inspector/V8Regex.h" 16 #include "platform/v8_inspector/V8Regex.h"
16 #include "platform/v8_inspector/V8RuntimeAgentImpl.h" 17 #include "platform/v8_inspector/V8RuntimeAgentImpl.h"
17 #include "platform/v8_inspector/V8StackTraceImpl.h" 18 #include "platform/v8_inspector/V8StackTraceImpl.h"
18 #include "platform/v8_inspector/V8StringUtil.h" 19 #include "platform/v8_inspector/V8StringUtil.h"
19 #include "platform/v8_inspector/public/V8Debugger.h" 20 #include "platform/v8_inspector/public/V8InspectorClient.h"
20 #include "platform/v8_inspector/public/V8DebuggerClient.h"
21 21
22 #include <algorithm> 22 #include <algorithm>
23 23
24 using blink::protocol::Array; 24 using blink::protocol::Array;
25 using blink::protocol::Maybe; 25 using blink::protocol::Maybe;
26 using blink::protocol::Debugger::BreakpointId; 26 using blink::protocol::Debugger::BreakpointId;
27 using blink::protocol::Debugger::CallFrame; 27 using blink::protocol::Debugger::CallFrame;
28 using blink::protocol::Runtime::ExceptionDetails; 28 using blink::protocol::Runtime::ExceptionDetails;
29 using blink::protocol::Runtime::ScriptId; 29 using blink::protocol::Runtime::ScriptId;
30 using blink::protocol::Runtime::StackTrace; 30 using blink::protocol::Runtime::StackTrace;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 86
87 static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(const String16& scriptId, int lineNumber, int columnNumber) 87 static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(const String16& scriptId, int lineNumber, int columnNumber)
88 { 88 {
89 return protocol::Debugger::Location::create() 89 return protocol::Debugger::Location::create()
90 .setScriptId(scriptId) 90 .setScriptId(scriptId)
91 .setLineNumber(lineNumber) 91 .setLineNumber(lineNumber)
92 .setColumnNumber(columnNumber).build(); 92 .setColumnNumber(columnNumber).build();
93 } 93 }
94 94
95 V8DebuggerAgentImpl::V8DebuggerAgentImpl(V8InspectorSessionImpl* session, protoc ol::FrontendChannel* frontendChannel, protocol::DictionaryValue* state) 95 V8DebuggerAgentImpl::V8DebuggerAgentImpl(V8InspectorSessionImpl* session, protoc ol::FrontendChannel* frontendChannel, protocol::DictionaryValue* state)
96 : m_debugger(session->debugger()) 96 : m_inspector(session->inspector())
97 , m_session(session) 97 , m_session(session)
98 , m_enabled(false) 98 , m_enabled(false)
99 , m_state(state) 99 , m_state(state)
100 , m_frontend(frontendChannel) 100 , m_frontend(frontendChannel)
101 , m_isolate(m_debugger->isolate()) 101 , m_isolate(m_inspector->isolate())
102 , m_breakReason(protocol::Debugger::Paused::ReasonEnum::Other) 102 , m_breakReason(protocol::Debugger::Paused::ReasonEnum::Other)
103 , m_scheduledDebuggerStep(NoStep) 103 , m_scheduledDebuggerStep(NoStep)
104 , m_skipNextDebuggerStepOut(false) 104 , m_skipNextDebuggerStepOut(false)
105 , m_javaScriptPauseScheduled(false) 105 , m_javaScriptPauseScheduled(false)
106 , m_steppingFromFramework(false) 106 , m_steppingFromFramework(false)
107 , m_pausingOnNativeEvent(false) 107 , m_pausingOnNativeEvent(false)
108 , m_skippedStepFrameCount(0) 108 , m_skippedStepFrameCount(0)
109 , m_recursionLevelForStepOut(0) 109 , m_recursionLevelForStepOut(0)
110 , m_recursionLevelForStepFrame(0) 110 , m_recursionLevelForStepFrame(0)
111 , m_skipAllPauses(false) 111 , m_skipAllPauses(false)
112 { 112 {
113 clearBreakDetails(); 113 clearBreakDetails();
114 } 114 }
115 115
116 V8DebuggerAgentImpl::~V8DebuggerAgentImpl() 116 V8DebuggerAgentImpl::~V8DebuggerAgentImpl()
117 { 117 {
118 } 118 }
119 119
120 bool V8DebuggerAgentImpl::checkEnabled(ErrorString* errorString) 120 bool V8DebuggerAgentImpl::checkEnabled(ErrorString* errorString)
121 { 121 {
122 if (enabled()) 122 if (enabled())
123 return true; 123 return true;
124 *errorString = "Debugger agent is not enabled"; 124 *errorString = "Debugger agent is not enabled";
125 return false; 125 return false;
126 } 126 }
127 127
128 void V8DebuggerAgentImpl::enable() 128 void V8DebuggerAgentImpl::enable()
129 { 129 {
130 // debugger().addListener may result in reporting all parsed scripts to 130 // m_inspector->addListener may result in reporting all parsed scripts to
131 // the agent so it should already be in enabled state by then. 131 // the agent so it should already be in enabled state by then.
132 m_enabled = true; 132 m_enabled = true;
133 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, true); 133 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, true);
134 debugger().debuggerAgentEnabled(); 134 m_inspector->debuggerAgentEnabled();
135 135
136 std::vector<std::unique_ptr<V8DebuggerScript>> compiledScripts; 136 std::vector<std::unique_ptr<V8DebuggerScript>> compiledScripts;
137 debugger().getCompiledScripts(m_session->contextGroupId(), compiledScripts); 137 m_inspector->getCompiledScripts(m_session->contextGroupId(), compiledScripts );
138 for (size_t i = 0; i < compiledScripts.size(); i++) 138 for (size_t i = 0; i < compiledScripts.size(); i++)
139 didParseSource(std::move(compiledScripts[i]), true); 139 didParseSource(std::move(compiledScripts[i]), true);
140 140
141 // FIXME(WK44513): breakpoints activated flag should be synchronized between all front-ends 141 // FIXME(WK44513): breakpoints activated flag should be synchronized between all front-ends
142 debugger().setBreakpointsActivated(true); 142 m_inspector->setBreakpointsActivated(true);
143 } 143 }
144 144
145 bool V8DebuggerAgentImpl::enabled() 145 bool V8DebuggerAgentImpl::enabled()
146 { 146 {
147 return m_enabled; 147 return m_enabled;
148 } 148 }
149 149
150 void V8DebuggerAgentImpl::enable(ErrorString* errorString) 150 void V8DebuggerAgentImpl::enable(ErrorString* errorString)
151 { 151 {
152 if (enabled()) 152 if (enabled())
153 return; 153 return;
154 154
155 if (!m_debugger->client()->canExecuteScripts(m_session->contextGroupId())) { 155 if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) {
156 *errorString = "Script execution is prohibited"; 156 *errorString = "Script execution is prohibited";
157 return; 157 return;
158 } 158 }
159 159
160 enable(); 160 enable();
161 } 161 }
162 162
163 void V8DebuggerAgentImpl::disable(ErrorString*) 163 void V8DebuggerAgentImpl::disable(ErrorString*)
164 { 164 {
165 if (!enabled()) 165 if (!enabled())
166 return; 166 return;
167 167
168 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create()); 168 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create());
169 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerIm pl::DontPauseOnExceptions); 169 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, V8InspectorI mpl::DontPauseOnExceptions);
170 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, 0); 170 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, 0);
171 171
172 if (!m_pausedContext.IsEmpty()) 172 if (!m_pausedContext.IsEmpty())
173 debugger().continueProgram(); 173 m_inspector->continueProgram();
174 debugger().debuggerAgentDisabled(); 174 m_inspector->debuggerAgentDisabled();
175 m_pausedContext.Reset(); 175 m_pausedContext.Reset();
176 JavaScriptCallFrames emptyCallFrames; 176 JavaScriptCallFrames emptyCallFrames;
177 m_pausedCallFrames.swap(emptyCallFrames); 177 m_pausedCallFrames.swap(emptyCallFrames);
178 m_scripts.clear(); 178 m_scripts.clear();
179 m_blackboxedPositions.clear(); 179 m_blackboxedPositions.clear();
180 m_breakpointIdToDebuggerBreakpointIds.clear(); 180 m_breakpointIdToDebuggerBreakpointIds.clear();
181 m_debugger->setAsyncCallStackDepth(this, 0); 181 m_inspector->setAsyncCallStackDepth(this, 0);
182 m_continueToLocationBreakpointId = String16(); 182 m_continueToLocationBreakpointId = String16();
183 clearBreakDetails(); 183 clearBreakDetails();
184 m_scheduledDebuggerStep = NoStep; 184 m_scheduledDebuggerStep = NoStep;
185 m_skipNextDebuggerStepOut = false; 185 m_skipNextDebuggerStepOut = false;
186 m_javaScriptPauseScheduled = false; 186 m_javaScriptPauseScheduled = false;
187 m_steppingFromFramework = false; 187 m_steppingFromFramework = false;
188 m_pausingOnNativeEvent = false; 188 m_pausingOnNativeEvent = false;
189 m_skippedStepFrameCount = 0; 189 m_skippedStepFrameCount = 0;
190 m_recursionLevelForStepFrame = 0; 190 m_recursionLevelForStepFrame = 0;
191 m_skipAllPauses = false; 191 m_skipAllPauses = false;
192 m_blackboxPattern = nullptr; 192 m_blackboxPattern = nullptr;
193 m_state->remove(DebuggerAgentState::blackboxPattern); 193 m_state->remove(DebuggerAgentState::blackboxPattern);
194 m_enabled = false; 194 m_enabled = false;
195 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, false); 195 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, false);
196 } 196 }
197 197
198 void V8DebuggerAgentImpl::restore() 198 void V8DebuggerAgentImpl::restore()
199 { 199 {
200 DCHECK(!m_enabled); 200 DCHECK(!m_enabled);
201 if (!m_state->booleanProperty(DebuggerAgentState::debuggerEnabled, false)) 201 if (!m_state->booleanProperty(DebuggerAgentState::debuggerEnabled, false))
202 return; 202 return;
203 if (!m_debugger->client()->canExecuteScripts(m_session->contextGroupId())) 203 if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId()))
204 return; 204 return;
205 205
206 enable(); 206 enable();
207 ErrorString error; 207 ErrorString error;
208 208
209 int pauseState = V8DebuggerImpl::DontPauseOnExceptions; 209 int pauseState = V8InspectorImpl::DontPauseOnExceptions;
210 m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState) ; 210 m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState) ;
211 setPauseOnExceptionsImpl(&error, pauseState); 211 setPauseOnExceptionsImpl(&error, pauseState);
212 DCHECK(error.isEmpty()); 212 DCHECK(error.isEmpty());
213 213
214 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false); 214 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false);
215 215
216 int asyncCallStackDepth = 0; 216 int asyncCallStackDepth = 0;
217 m_state->getInteger(DebuggerAgentState::asyncCallStackDepth, &asyncCallStack Depth); 217 m_state->getInteger(DebuggerAgentState::asyncCallStackDepth, &asyncCallStack Depth);
218 m_debugger->setAsyncCallStackDepth(this, asyncCallStackDepth); 218 m_inspector->setAsyncCallStackDepth(this, asyncCallStackDepth);
219 219
220 String16 blackboxPattern; 220 String16 blackboxPattern;
221 if (m_state->getString(DebuggerAgentState::blackboxPattern, &blackboxPattern )) { 221 if (m_state->getString(DebuggerAgentState::blackboxPattern, &blackboxPattern )) {
222 if (!setBlackboxPattern(&error, blackboxPattern)) 222 if (!setBlackboxPattern(&error, blackboxPattern))
223 NOTREACHED(); 223 NOTREACHED();
224 } 224 }
225 } 225 }
226 226
227 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive) 227 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive)
228 { 228 {
229 if (!checkEnabled(errorString)) 229 if (!checkEnabled(errorString))
230 return; 230 return;
231 debugger().setBreakpointsActivated(active); 231 m_inspector->setBreakpointsActivated(active);
232 } 232 }
233 233
234 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped) 234 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped)
235 { 235 {
236 m_skipAllPauses = skipped; 236 m_skipAllPauses = skipped;
237 m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses); 237 m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses);
238 } 238 }
239 239
240 static std::unique_ptr<protocol::DictionaryValue> buildObjectForBreakpointCookie (const String16& url, int lineNumber, int columnNumber, const String16& conditio n, bool isRegex) 240 static std::unique_ptr<protocol::DictionaryValue> buildObjectForBreakpointCookie (const String16& url, int lineNumber, int columnNumber, const String16& conditio n, bool isRegex)
241 { 241 {
242 std::unique_ptr<protocol::DictionaryValue> breakpointObject = protocol::Dict ionaryValue::create(); 242 std::unique_ptr<protocol::DictionaryValue> breakpointObject = protocol::Dict ionaryValue::create();
243 breakpointObject->setString(DebuggerAgentState::url, url); 243 breakpointObject->setString(DebuggerAgentState::url, url);
244 breakpointObject->setInteger(DebuggerAgentState::lineNumber, lineNumber); 244 breakpointObject->setInteger(DebuggerAgentState::lineNumber, lineNumber);
245 breakpointObject->setInteger(DebuggerAgentState::columnNumber, columnNumber) ; 245 breakpointObject->setInteger(DebuggerAgentState::columnNumber, columnNumber) ;
246 breakpointObject->setString(DebuggerAgentState::condition, condition); 246 breakpointObject->setString(DebuggerAgentState::condition, condition);
247 breakpointObject->setBoolean(DebuggerAgentState::isRegex, isRegex); 247 breakpointObject->setBoolean(DebuggerAgentState::isRegex, isRegex);
248 return breakpointObject; 248 return breakpointObject;
249 } 249 }
250 250
251 static bool matches(V8DebuggerImpl* debugger, const String16& url, const String1 6& pattern, bool isRegex) 251 static bool matches(V8InspectorImpl* inspector, const String16& url, const Strin g16& pattern, bool isRegex)
252 { 252 {
253 if (isRegex) { 253 if (isRegex) {
254 V8Regex regex(debugger, pattern, true); 254 V8Regex regex(inspector, pattern, true);
255 return regex.match(url) != -1; 255 return regex.match(url) != -1;
256 } 256 }
257 return url == pattern; 257 return url == pattern;
258 } 258 }
259 259
260 void V8DebuggerAgentImpl::setBreakpointByUrl(ErrorString* errorString, 260 void V8DebuggerAgentImpl::setBreakpointByUrl(ErrorString* errorString,
261 int lineNumber, 261 int lineNumber,
262 const Maybe<String16>& optionalURL, 262 const Maybe<String16>& optionalURL,
263 const Maybe<String16>& optionalURLRegex, 263 const Maybe<String16>& optionalURLRegex,
264 const Maybe<int>& optionalColumnNumber, 264 const Maybe<int>& optionalColumnNumber,
(...skipping 28 matching lines...) Expand all
293 } 293 }
294 if (breakpointsCookie->get(breakpointId)) { 294 if (breakpointsCookie->get(breakpointId)) {
295 *errorString = "Breakpoint at specified location already exists."; 295 *errorString = "Breakpoint at specified location already exists.";
296 return; 296 return;
297 } 297 }
298 298
299 breakpointsCookie->setObject(breakpointId, buildObjectForBreakpointCookie(ur l, lineNumber, columnNumber, condition, isRegex)); 299 breakpointsCookie->setObject(breakpointId, buildObjectForBreakpointCookie(ur l, lineNumber, columnNumber, condition, isRegex));
300 300
301 ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition); 301 ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition);
302 for (const auto& script : m_scripts) { 302 for (const auto& script : m_scripts) {
303 if (!matches(m_debugger, script.second->sourceURL(), url, isRegex)) 303 if (!matches(m_inspector, script.second->sourceURL(), url, isRegex))
304 continue; 304 continue;
305 std::unique_ptr<protocol::Debugger::Location> location = resolveBreakpoi nt(breakpointId, script.first, breakpoint, UserBreakpointSource); 305 std::unique_ptr<protocol::Debugger::Location> location = resolveBreakpoi nt(breakpointId, script.first, breakpoint, UserBreakpointSource);
306 if (location) 306 if (location)
307 (*locations)->addItem(std::move(location)); 307 (*locations)->addItem(std::move(location));
308 } 308 }
309 309
310 *outBreakpointId = breakpointId; 310 *outBreakpointId = breakpointId;
311 } 311 }
312 312
313 static bool parseLocation(ErrorString* errorString, std::unique_ptr<protocol::De bugger::Location> location, String16* scriptId, int* lineNumber, int* columnNumb er) 313 static bool parseLocation(ErrorString* errorString, std::unique_ptr<protocol::De bugger::Location> location, String16* scriptId, int* lineNumber, int* columnNumb er)
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 void V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId) 359 void V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId)
360 { 360 {
361 DCHECK(enabled()); 361 DCHECK(enabled());
362 BreakpointIdToDebuggerBreakpointIdsMap::iterator debuggerBreakpointIdsIterat or = m_breakpointIdToDebuggerBreakpointIds.find(breakpointId); 362 BreakpointIdToDebuggerBreakpointIdsMap::iterator debuggerBreakpointIdsIterat or = m_breakpointIdToDebuggerBreakpointIds.find(breakpointId);
363 if (debuggerBreakpointIdsIterator == m_breakpointIdToDebuggerBreakpointIds.e nd()) 363 if (debuggerBreakpointIdsIterator == m_breakpointIdToDebuggerBreakpointIds.e nd())
364 return; 364 return;
365 const std::vector<String16>& ids = debuggerBreakpointIdsIterator->second; 365 const std::vector<String16>& ids = debuggerBreakpointIdsIterator->second;
366 for (size_t i = 0; i < ids.size(); ++i) { 366 for (size_t i = 0; i < ids.size(); ++i) {
367 const String16& debuggerBreakpointId = ids[i]; 367 const String16& debuggerBreakpointId = ids[i];
368 368
369 debugger().removeBreakpoint(debuggerBreakpointId); 369 m_inspector->removeBreakpoint(debuggerBreakpointId);
370 m_serverBreakpoints.erase(debuggerBreakpointId); 370 m_serverBreakpoints.erase(debuggerBreakpointId);
371 } 371 }
372 m_breakpointIdToDebuggerBreakpointIds.erase(breakpointId); 372 m_breakpointIdToDebuggerBreakpointIds.erase(breakpointId);
373 } 373 }
374 374
375 void V8DebuggerAgentImpl::continueToLocation(ErrorString* errorString, 375 void V8DebuggerAgentImpl::continueToLocation(ErrorString* errorString,
376 std::unique_ptr<protocol::Debugger::Location> location, 376 std::unique_ptr<protocol::Debugger::Location> location,
377 const protocol::Maybe<bool>& interstateLocationOpt) 377 const protocol::Maybe<bool>& interstateLocationOpt)
378 { 378 {
379 if (!checkEnabled(errorString)) 379 if (!checkEnabled(errorString))
380 return; 380 return;
381 if (!m_continueToLocationBreakpointId.isEmpty()) { 381 if (!m_continueToLocationBreakpointId.isEmpty()) {
382 debugger().removeBreakpoint(m_continueToLocationBreakpointId); 382 m_inspector->removeBreakpoint(m_continueToLocationBreakpointId);
383 m_continueToLocationBreakpointId = ""; 383 m_continueToLocationBreakpointId = "";
384 } 384 }
385 385
386 String16 scriptId; 386 String16 scriptId;
387 int lineNumber; 387 int lineNumber;
388 int columnNumber; 388 int columnNumber;
389 389
390 if (!parseLocation(errorString, std::move(location), &scriptId, &lineNumber, &columnNumber)) 390 if (!parseLocation(errorString, std::move(location), &scriptId, &lineNumber, &columnNumber))
391 return; 391 return;
392 392
393 ScriptBreakpoint breakpoint(lineNumber, columnNumber, ""); 393 ScriptBreakpoint breakpoint(lineNumber, columnNumber, "");
394 m_continueToLocationBreakpointId = debugger().setBreakpoint(scriptId, breakp oint, &lineNumber, &columnNumber, interstateLocationOpt.fromMaybe(false)); 394 m_continueToLocationBreakpointId = m_inspector->setBreakpoint(scriptId, brea kpoint, &lineNumber, &columnNumber, interstateLocationOpt.fromMaybe(false));
395 resume(errorString); 395 resume(errorString);
396 } 396 }
397 397
398 void V8DebuggerAgentImpl::getBacktrace(ErrorString* errorString, std::unique_ptr <Array<CallFrame>>* callFrames, Maybe<StackTrace>* asyncStackTrace) 398 void V8DebuggerAgentImpl::getBacktrace(ErrorString* errorString, std::unique_ptr <Array<CallFrame>>* callFrames, Maybe<StackTrace>* asyncStackTrace)
399 { 399 {
400 if (!assertPaused(errorString)) 400 if (!assertPaused(errorString))
401 return; 401 return;
402 JavaScriptCallFrames frames = debugger().currentCallFrames(); 402 JavaScriptCallFrames frames = m_inspector->currentCallFrames();
403 m_pausedCallFrames.swap(frames); 403 m_pausedCallFrames.swap(frames);
404 *callFrames = currentCallFrames(errorString); 404 *callFrames = currentCallFrames(errorString);
405 if (!*callFrames) 405 if (!*callFrames)
406 return; 406 return;
407 *asyncStackTrace = currentAsyncStackTrace(); 407 *asyncStackTrace = currentAsyncStackTrace();
408 } 408 }
409 409
410 bool V8DebuggerAgentImpl::isCurrentCallStackEmptyOrBlackboxed() 410 bool V8DebuggerAgentImpl::isCurrentCallStackEmptyOrBlackboxed()
411 { 411 {
412 DCHECK(enabled()); 412 DCHECK(enabled());
413 JavaScriptCallFrames callFrames = debugger().currentCallFrames(); 413 JavaScriptCallFrames callFrames = m_inspector->currentCallFrames();
414 for (size_t index = 0; index < callFrames.size(); ++index) { 414 for (size_t index = 0; index < callFrames.size(); ++index) {
415 if (!isCallFrameWithUnknownScriptOrBlackboxed(callFrames[index].get())) 415 if (!isCallFrameWithUnknownScriptOrBlackboxed(callFrames[index].get()))
416 return false; 416 return false;
417 } 417 }
418 return true; 418 return true;
419 } 419 }
420 420
421 bool V8DebuggerAgentImpl::isTopPausedCallFrameBlackboxed() 421 bool V8DebuggerAgentImpl::isTopPausedCallFrameBlackboxed()
422 { 422 {
423 DCHECK(enabled()); 423 DCHECK(enabled());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 CHECK(!breakpointId.isEmpty()); 491 CHECK(!breakpointId.isEmpty());
492 CHECK(!scriptId.isEmpty()); 492 CHECK(!scriptId.isEmpty());
493 ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId); 493 ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId);
494 if (scriptIterator == m_scripts.end()) 494 if (scriptIterator == m_scripts.end())
495 return nullptr; 495 return nullptr;
496 if (breakpoint.lineNumber < scriptIterator->second->startLine() || scriptIte rator->second->endLine() < breakpoint.lineNumber) 496 if (breakpoint.lineNumber < scriptIterator->second->startLine() || scriptIte rator->second->endLine() < breakpoint.lineNumber)
497 return nullptr; 497 return nullptr;
498 498
499 int actualLineNumber; 499 int actualLineNumber;
500 int actualColumnNumber; 500 int actualColumnNumber;
501 String16 debuggerBreakpointId = debugger().setBreakpoint(scriptId, breakpoin t, &actualLineNumber, &actualColumnNumber, false); 501 String16 debuggerBreakpointId = m_inspector->setBreakpoint(scriptId, breakpo int, &actualLineNumber, &actualColumnNumber, false);
502 if (debuggerBreakpointId.isEmpty()) 502 if (debuggerBreakpointId.isEmpty())
503 return nullptr; 503 return nullptr;
504 504
505 m_serverBreakpoints[debuggerBreakpointId] = std::make_pair(breakpointId, sou rce); 505 m_serverBreakpoints[debuggerBreakpointId] = std::make_pair(breakpointId, sou rce);
506 CHECK(!breakpointId.isEmpty()); 506 CHECK(!breakpointId.isEmpty());
507 507
508 m_breakpointIdToDebuggerBreakpointIds[breakpointId].push_back(debuggerBreakp ointId); 508 m_breakpointIdToDebuggerBreakpointIds[breakpointId].push_back(debuggerBreakp ointId);
509 return buildProtocolLocation(scriptId, actualLineNumber, actualColumnNumber) ; 509 return buildProtocolLocation(scriptId, actualLineNumber, actualColumnNumber) ;
510 } 510 }
511 511
(...skipping 22 matching lines...) Expand all
534 Maybe<protocol::Array<protocol::Debugger::CallFrame>>* newCallFrames, 534 Maybe<protocol::Array<protocol::Debugger::CallFrame>>* newCallFrames,
535 Maybe<bool>* stackChanged, 535 Maybe<bool>* stackChanged,
536 Maybe<StackTrace>* asyncStackTrace, 536 Maybe<StackTrace>* asyncStackTrace,
537 Maybe<protocol::Runtime::ExceptionDetails>* optOutCompileError) 537 Maybe<protocol::Runtime::ExceptionDetails>* optOutCompileError)
538 { 538 {
539 if (!checkEnabled(errorString)) 539 if (!checkEnabled(errorString))
540 return; 540 return;
541 541
542 v8::HandleScope handles(m_isolate); 542 v8::HandleScope handles(m_isolate);
543 v8::Local<v8::String> newSource = toV8String(m_isolate, newContent); 543 v8::Local<v8::String> newSource = toV8String(m_isolate, newContent);
544 if (!debugger().setScriptSource(scriptId, newSource, preview.fromMaybe(false ), errorString, optOutCompileError, &m_pausedCallFrames, stackChanged)) 544 if (!m_inspector->setScriptSource(scriptId, newSource, preview.fromMaybe(fal se), errorString, optOutCompileError, &m_pausedCallFrames, stackChanged))
545 return; 545 return;
546 546
547 ScriptsMap::iterator it = m_scripts.find(scriptId); 547 ScriptsMap::iterator it = m_scripts.find(scriptId);
548 if (it != m_scripts.end()) 548 if (it != m_scripts.end())
549 it->second->setSource(m_isolate, newSource); 549 it->second->setSource(m_isolate, newSource);
550 550
551 std::unique_ptr<Array<CallFrame>> callFrames = currentCallFrames(errorString ); 551 std::unique_ptr<Array<CallFrame>> callFrames = currentCallFrames(errorString );
552 if (!callFrames) 552 if (!callFrames)
553 return; 553 return;
554 *newCallFrames = std::move(callFrames); 554 *newCallFrames = std::move(callFrames);
555 *asyncStackTrace = currentAsyncStackTrace(); 555 *asyncStackTrace = currentAsyncStackTrace();
556 } 556 }
557 557
558 void V8DebuggerAgentImpl::restartFrame(ErrorString* errorString, 558 void V8DebuggerAgentImpl::restartFrame(ErrorString* errorString,
559 const String16& callFrameId, 559 const String16& callFrameId,
560 std::unique_ptr<Array<CallFrame>>* newCallFrames, 560 std::unique_ptr<Array<CallFrame>>* newCallFrames,
561 Maybe<StackTrace>* asyncStackTrace) 561 Maybe<StackTrace>* asyncStackTrace)
562 { 562 {
563 if (!assertPaused(errorString)) 563 if (!assertPaused(errorString))
564 return; 564 return;
565 InjectedScript::CallFrameScope scope(errorString, m_debugger, m_session->con textGroupId(), callFrameId); 565 InjectedScript::CallFrameScope scope(errorString, m_inspector, m_session->co ntextGroupId(), callFrameId);
566 if (!scope.initialize()) 566 if (!scope.initialize())
567 return; 567 return;
568 if (scope.frameOrdinal() >= m_pausedCallFrames.size()) { 568 if (scope.frameOrdinal() >= m_pausedCallFrames.size()) {
569 *errorString = "Could not find call frame with given id"; 569 *errorString = "Could not find call frame with given id";
570 return; 570 return;
571 } 571 }
572 572
573 v8::Local<v8::Value> resultValue; 573 v8::Local<v8::Value> resultValue;
574 v8::Local<v8::Boolean> result; 574 v8::Local<v8::Boolean> result;
575 if (!m_pausedCallFrames[scope.frameOrdinal()]->restart().ToLocal(&resultValu e) || scope.tryCatch().HasCaught() || !resultValue->ToBoolean(scope.context()).T oLocal(&result) || !result->Value()) { 575 if (!m_pausedCallFrames[scope.frameOrdinal()]->restart().ToLocal(&resultValu e) || scope.tryCatch().HasCaught() || !resultValue->ToBoolean(scope.context()).T oLocal(&result) || !result->Value()) {
576 *errorString = "Internal error"; 576 *errorString = "Internal error";
577 return; 577 return;
578 } 578 }
579 JavaScriptCallFrames frames = debugger().currentCallFrames(); 579 JavaScriptCallFrames frames = m_inspector->currentCallFrames();
580 m_pausedCallFrames.swap(frames); 580 m_pausedCallFrames.swap(frames);
581 581
582 *newCallFrames = currentCallFrames(errorString); 582 *newCallFrames = currentCallFrames(errorString);
583 if (!*newCallFrames) 583 if (!*newCallFrames)
584 return; 584 return;
585 *asyncStackTrace = currentAsyncStackTrace(); 585 *asyncStackTrace = currentAsyncStackTrace();
586 } 586 }
587 587
588 void V8DebuggerAgentImpl::getScriptSource(ErrorString* error, const String16& sc riptId, String16* scriptSource) 588 void V8DebuggerAgentImpl::getScriptSource(ErrorString* error, const String16& sc riptId, String16* scriptSource)
589 { 589 {
590 if (!checkEnabled(error)) 590 if (!checkEnabled(error))
591 return; 591 return;
592 ScriptsMap::iterator it = m_scripts.find(scriptId); 592 ScriptsMap::iterator it = m_scripts.find(scriptId);
593 if (it == m_scripts.end()) { 593 if (it == m_scripts.end()) {
594 *error = "No script for id: " + scriptId; 594 *error = "No script for id: " + scriptId;
595 return; 595 return;
596 } 596 }
597 v8::HandleScope handles(m_isolate); 597 v8::HandleScope handles(m_isolate);
598 *scriptSource = toProtocolString(it->second->source(m_isolate)); 598 *scriptSource = toProtocolString(it->second->source(m_isolate));
599 } 599 }
600 600
601 void V8DebuggerAgentImpl::schedulePauseOnNextStatement(const String16& breakReas on, std::unique_ptr<protocol::DictionaryValue> data) 601 void V8DebuggerAgentImpl::schedulePauseOnNextStatement(const String16& breakReas on, std::unique_ptr<protocol::DictionaryValue> data)
602 { 602 {
603 if (!enabled() || m_scheduledDebuggerStep == StepInto || m_javaScriptPauseSc heduled || debugger().isPaused() || !debugger().breakpointsActivated()) 603 if (!enabled() || m_scheduledDebuggerStep == StepInto || m_javaScriptPauseSc heduled || m_inspector->isPaused() || !m_inspector->breakpointsActivated())
604 return; 604 return;
605 m_breakReason = breakReason; 605 m_breakReason = breakReason;
606 m_breakAuxData = std::move(data); 606 m_breakAuxData = std::move(data);
607 m_pausingOnNativeEvent = true; 607 m_pausingOnNativeEvent = true;
608 m_skipNextDebuggerStepOut = false; 608 m_skipNextDebuggerStepOut = false;
609 debugger().setPauseOnNextStatement(true); 609 m_inspector->setPauseOnNextStatement(true);
610 } 610 }
611 611
612 void V8DebuggerAgentImpl::schedulePauseOnNextStatementIfSteppingInto() 612 void V8DebuggerAgentImpl::schedulePauseOnNextStatementIfSteppingInto()
613 { 613 {
614 DCHECK(enabled()); 614 DCHECK(enabled());
615 if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled || deb ugger().isPaused()) 615 if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled || m_i nspector->isPaused())
616 return; 616 return;
617 clearBreakDetails(); 617 clearBreakDetails();
618 m_pausingOnNativeEvent = false; 618 m_pausingOnNativeEvent = false;
619 m_skippedStepFrameCount = 0; 619 m_skippedStepFrameCount = 0;
620 m_recursionLevelForStepFrame = 0; 620 m_recursionLevelForStepFrame = 0;
621 debugger().setPauseOnNextStatement(true); 621 m_inspector->setPauseOnNextStatement(true);
622 } 622 }
623 623
624 void V8DebuggerAgentImpl::cancelPauseOnNextStatement() 624 void V8DebuggerAgentImpl::cancelPauseOnNextStatement()
625 { 625 {
626 if (m_javaScriptPauseScheduled || debugger().isPaused()) 626 if (m_javaScriptPauseScheduled || m_inspector->isPaused())
627 return; 627 return;
628 clearBreakDetails(); 628 clearBreakDetails();
629 m_pausingOnNativeEvent = false; 629 m_pausingOnNativeEvent = false;
630 debugger().setPauseOnNextStatement(false); 630 m_inspector->setPauseOnNextStatement(false);
631 } 631 }
632 632
633 void V8DebuggerAgentImpl::pause(ErrorString* errorString) 633 void V8DebuggerAgentImpl::pause(ErrorString* errorString)
634 { 634 {
635 if (!checkEnabled(errorString)) 635 if (!checkEnabled(errorString))
636 return; 636 return;
637 if (m_javaScriptPauseScheduled || debugger().isPaused()) 637 if (m_javaScriptPauseScheduled || m_inspector->isPaused())
638 return; 638 return;
639 clearBreakDetails(); 639 clearBreakDetails();
640 m_javaScriptPauseScheduled = true; 640 m_javaScriptPauseScheduled = true;
641 m_scheduledDebuggerStep = NoStep; 641 m_scheduledDebuggerStep = NoStep;
642 m_skippedStepFrameCount = 0; 642 m_skippedStepFrameCount = 0;
643 m_steppingFromFramework = false; 643 m_steppingFromFramework = false;
644 debugger().setPauseOnNextStatement(true); 644 m_inspector->setPauseOnNextStatement(true);
645 } 645 }
646 646
647 void V8DebuggerAgentImpl::resume(ErrorString* errorString) 647 void V8DebuggerAgentImpl::resume(ErrorString* errorString)
648 { 648 {
649 if (!assertPaused(errorString)) 649 if (!assertPaused(errorString))
650 return; 650 return;
651 m_scheduledDebuggerStep = NoStep; 651 m_scheduledDebuggerStep = NoStep;
652 m_steppingFromFramework = false; 652 m_steppingFromFramework = false;
653 m_session->releaseObjectGroup(backtraceObjectGroup); 653 m_session->releaseObjectGroup(backtraceObjectGroup);
654 debugger().continueProgram(); 654 m_inspector->continueProgram();
655 } 655 }
656 656
657 void V8DebuggerAgentImpl::stepOver(ErrorString* errorString) 657 void V8DebuggerAgentImpl::stepOver(ErrorString* errorString)
658 { 658 {
659 if (!assertPaused(errorString)) 659 if (!assertPaused(errorString))
660 return; 660 return;
661 // StepOver at function return point should fallback to StepInto. 661 // StepOver at function return point should fallback to StepInto.
662 JavaScriptCallFrame* frame = !m_pausedCallFrames.empty() ? m_pausedCallFrame s[0].get() : nullptr; 662 JavaScriptCallFrame* frame = !m_pausedCallFrames.empty() ? m_pausedCallFrame s[0].get() : nullptr;
663 if (frame && frame->isAtReturn()) { 663 if (frame && frame->isAtReturn()) {
664 stepInto(errorString); 664 stepInto(errorString);
665 return; 665 return;
666 } 666 }
667 m_scheduledDebuggerStep = StepOver; 667 m_scheduledDebuggerStep = StepOver;
668 m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); 668 m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
669 m_session->releaseObjectGroup(backtraceObjectGroup); 669 m_session->releaseObjectGroup(backtraceObjectGroup);
670 debugger().stepOverStatement(); 670 m_inspector->stepOverStatement();
671 } 671 }
672 672
673 void V8DebuggerAgentImpl::stepInto(ErrorString* errorString) 673 void V8DebuggerAgentImpl::stepInto(ErrorString* errorString)
674 { 674 {
675 if (!assertPaused(errorString)) 675 if (!assertPaused(errorString))
676 return; 676 return;
677 m_scheduledDebuggerStep = StepInto; 677 m_scheduledDebuggerStep = StepInto;
678 m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); 678 m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
679 m_session->releaseObjectGroup(backtraceObjectGroup); 679 m_session->releaseObjectGroup(backtraceObjectGroup);
680 debugger().stepIntoStatement(); 680 m_inspector->stepIntoStatement();
681 } 681 }
682 682
683 void V8DebuggerAgentImpl::stepOut(ErrorString* errorString) 683 void V8DebuggerAgentImpl::stepOut(ErrorString* errorString)
684 { 684 {
685 if (!assertPaused(errorString)) 685 if (!assertPaused(errorString))
686 return; 686 return;
687 m_scheduledDebuggerStep = StepOut; 687 m_scheduledDebuggerStep = StepOut;
688 m_skipNextDebuggerStepOut = false; 688 m_skipNextDebuggerStepOut = false;
689 m_recursionLevelForStepOut = 1; 689 m_recursionLevelForStepOut = 1;
690 m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); 690 m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
691 m_session->releaseObjectGroup(backtraceObjectGroup); 691 m_session->releaseObjectGroup(backtraceObjectGroup);
692 debugger().stepOutOfFunction(); 692 m_inspector->stepOutOfFunction();
693 } 693 }
694 694
695 void V8DebuggerAgentImpl::setPauseOnExceptions(ErrorString* errorString, const S tring16& stringPauseState) 695 void V8DebuggerAgentImpl::setPauseOnExceptions(ErrorString* errorString, const S tring16& stringPauseState)
696 { 696 {
697 if (!checkEnabled(errorString)) 697 if (!checkEnabled(errorString))
698 return; 698 return;
699 V8DebuggerImpl::PauseOnExceptionsState pauseState; 699 V8InspectorImpl::PauseOnExceptionsState pauseState;
700 if (stringPauseState == "none") { 700 if (stringPauseState == "none") {
701 pauseState = V8DebuggerImpl::DontPauseOnExceptions; 701 pauseState = V8InspectorImpl::DontPauseOnExceptions;
702 } else if (stringPauseState == "all") { 702 } else if (stringPauseState == "all") {
703 pauseState = V8DebuggerImpl::PauseOnAllExceptions; 703 pauseState = V8InspectorImpl::PauseOnAllExceptions;
704 } else if (stringPauseState == "uncaught") { 704 } else if (stringPauseState == "uncaught") {
705 pauseState = V8DebuggerImpl::PauseOnUncaughtExceptions; 705 pauseState = V8InspectorImpl::PauseOnUncaughtExceptions;
706 } else { 706 } else {
707 *errorString = "Unknown pause on exceptions mode: " + stringPauseState; 707 *errorString = "Unknown pause on exceptions mode: " + stringPauseState;
708 return; 708 return;
709 } 709 }
710 setPauseOnExceptionsImpl(errorString, pauseState); 710 setPauseOnExceptionsImpl(errorString, pauseState);
711 } 711 }
712 712
713 void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(ErrorString* errorString, int pauseState) 713 void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(ErrorString* errorString, int pauseState)
714 { 714 {
715 debugger().setPauseOnExceptionsState(static_cast<V8DebuggerImpl::PauseOnExce ptionsState>(pauseState)); 715 m_inspector->setPauseOnExceptionsState(static_cast<V8InspectorImpl::PauseOnE xceptionsState>(pauseState));
716 if (debugger().getPauseOnExceptionsState() != pauseState) 716 if (m_inspector->getPauseOnExceptionsState() != pauseState)
717 *errorString = "Internal error. Could not change pause on exceptions sta te"; 717 *errorString = "Internal error. Could not change pause on exceptions sta te";
718 else 718 else
719 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseSta te); 719 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseSta te);
720 } 720 }
721 721
722 void V8DebuggerAgentImpl::evaluateOnCallFrame(ErrorString* errorString, 722 void V8DebuggerAgentImpl::evaluateOnCallFrame(ErrorString* errorString,
723 const String16& callFrameId, 723 const String16& callFrameId,
724 const String16& expression, 724 const String16& expression,
725 const Maybe<String16>& objectGroup, 725 const Maybe<String16>& objectGroup,
726 const Maybe<bool>& includeCommandLineAPI, 726 const Maybe<bool>& includeCommandLineAPI,
727 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole, 727 const Maybe<bool>& doNotPauseOnExceptionsAndMuteConsole,
728 const Maybe<bool>& returnByValue, 728 const Maybe<bool>& returnByValue,
729 const Maybe<bool>& generatePreview, 729 const Maybe<bool>& generatePreview,
730 std::unique_ptr<RemoteObject>* result, 730 std::unique_ptr<RemoteObject>* result,
731 Maybe<bool>* wasThrown, 731 Maybe<bool>* wasThrown,
732 Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) 732 Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails)
733 { 733 {
734 if (!assertPaused(errorString)) 734 if (!assertPaused(errorString))
735 return; 735 return;
736 InjectedScript::CallFrameScope scope(errorString, m_debugger, m_session->con textGroupId(), callFrameId); 736 InjectedScript::CallFrameScope scope(errorString, m_inspector, m_session->co ntextGroupId(), callFrameId);
737 if (!scope.initialize()) 737 if (!scope.initialize())
738 return; 738 return;
739 if (scope.frameOrdinal() >= m_pausedCallFrames.size()) { 739 if (scope.frameOrdinal() >= m_pausedCallFrames.size()) {
740 *errorString = "Could not find call frame with given id"; 740 *errorString = "Could not find call frame with given id";
741 return; 741 return;
742 } 742 }
743 743
744 if (includeCommandLineAPI.fromMaybe(false) && !scope.installCommandLineAPI() ) 744 if (includeCommandLineAPI.fromMaybe(false) && !scope.installCommandLineAPI() )
745 return; 745 return;
746 if (doNotPauseOnExceptionsAndMuteConsole.fromMaybe(false)) 746 if (doNotPauseOnExceptionsAndMuteConsole.fromMaybe(false))
(...skipping 18 matching lines...) Expand all
765 void V8DebuggerAgentImpl::setVariableValue(ErrorString* errorString, 765 void V8DebuggerAgentImpl::setVariableValue(ErrorString* errorString,
766 int scopeNumber, 766 int scopeNumber,
767 const String16& variableName, 767 const String16& variableName,
768 std::unique_ptr<protocol::Runtime::CallArgument> newValueArgument, 768 std::unique_ptr<protocol::Runtime::CallArgument> newValueArgument,
769 const String16& callFrameId) 769 const String16& callFrameId)
770 { 770 {
771 if (!checkEnabled(errorString)) 771 if (!checkEnabled(errorString))
772 return; 772 return;
773 if (!assertPaused(errorString)) 773 if (!assertPaused(errorString))
774 return; 774 return;
775 InjectedScript::CallFrameScope scope(errorString, m_debugger, m_session->con textGroupId(), callFrameId); 775 InjectedScript::CallFrameScope scope(errorString, m_inspector, m_session->co ntextGroupId(), callFrameId);
776 if (!scope.initialize()) 776 if (!scope.initialize())
777 return; 777 return;
778 778
779 v8::Local<v8::Value> newValue; 779 v8::Local<v8::Value> newValue;
780 if (!scope.injectedScript()->resolveCallArgument(errorString, newValueArgume nt.get()).ToLocal(&newValue)) 780 if (!scope.injectedScript()->resolveCallArgument(errorString, newValueArgume nt.get()).ToLocal(&newValue))
781 return; 781 return;
782 782
783 if (scope.frameOrdinal() >= m_pausedCallFrames.size()) { 783 if (scope.frameOrdinal() >= m_pausedCallFrames.size()) {
784 *errorString = "Could not find call frame with given id"; 784 *errorString = "Could not find call frame with given id";
785 return; 785 return;
786 } 786 }
787 v8::MaybeLocal<v8::Value> result = m_pausedCallFrames[scope.frameOrdinal()]- >setVariableValue(scopeNumber, toV8String(m_isolate, variableName), newValue); 787 v8::MaybeLocal<v8::Value> result = m_pausedCallFrames[scope.frameOrdinal()]- >setVariableValue(scopeNumber, toV8String(m_isolate, variableName), newValue);
788 if (scope.tryCatch().HasCaught() || result.IsEmpty()) { 788 if (scope.tryCatch().HasCaught() || result.IsEmpty()) {
789 *errorString = "Internal error"; 789 *errorString = "Internal error";
790 return; 790 return;
791 } 791 }
792 } 792 }
793 793
794 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth) 794 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth)
795 { 795 {
796 if (!checkEnabled(errorString)) 796 if (!checkEnabled(errorString))
797 return; 797 return;
798 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, depth); 798 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, depth);
799 m_debugger->setAsyncCallStackDepth(this, depth); 799 m_inspector->setAsyncCallStackDepth(this, depth);
800 } 800 }
801 801
802 void V8DebuggerAgentImpl::setBlackboxPatterns(ErrorString* errorString, std::uni que_ptr<protocol::Array<String16>> patterns) 802 void V8DebuggerAgentImpl::setBlackboxPatterns(ErrorString* errorString, std::uni que_ptr<protocol::Array<String16>> patterns)
803 { 803 {
804 if (!patterns->length()) { 804 if (!patterns->length()) {
805 m_blackboxPattern = nullptr; 805 m_blackboxPattern = nullptr;
806 m_state->remove(DebuggerAgentState::blackboxPattern); 806 m_state->remove(DebuggerAgentState::blackboxPattern);
807 return; 807 return;
808 } 808 }
809 809
810 String16Builder patternBuilder; 810 String16Builder patternBuilder;
811 patternBuilder.append('('); 811 patternBuilder.append('(');
812 for (size_t i = 0; i < patterns->length() - 1; ++i) { 812 for (size_t i = 0; i < patterns->length() - 1; ++i) {
813 patternBuilder.append(patterns->get(i)); 813 patternBuilder.append(patterns->get(i));
814 patternBuilder.append("|"); 814 patternBuilder.append("|");
815 } 815 }
816 patternBuilder.append(patterns->get(patterns->length() - 1)); 816 patternBuilder.append(patterns->get(patterns->length() - 1));
817 patternBuilder.append(')'); 817 patternBuilder.append(')');
818 String16 pattern = patternBuilder.toString(); 818 String16 pattern = patternBuilder.toString();
819 if (!setBlackboxPattern(errorString, pattern)) 819 if (!setBlackboxPattern(errorString, pattern))
820 return; 820 return;
821 m_state->setString(DebuggerAgentState::blackboxPattern, pattern); 821 m_state->setString(DebuggerAgentState::blackboxPattern, pattern);
822 } 822 }
823 823
824 bool V8DebuggerAgentImpl::setBlackboxPattern(ErrorString* errorString, const Str ing16& pattern) 824 bool V8DebuggerAgentImpl::setBlackboxPattern(ErrorString* errorString, const Str ing16& pattern)
825 { 825 {
826 std::unique_ptr<V8Regex> regex(new V8Regex(m_debugger, pattern, true /** cas eSensitive */, false /** multiline */)); 826 std::unique_ptr<V8Regex> regex(new V8Regex(m_inspector, pattern, true /** ca seSensitive */, false /** multiline */));
827 if (!regex->isValid()) { 827 if (!regex->isValid()) {
828 *errorString = "Pattern parser error: " + regex->errorMessage(); 828 *errorString = "Pattern parser error: " + regex->errorMessage();
829 return false; 829 return false;
830 } 830 }
831 m_blackboxPattern = std::move(regex); 831 m_blackboxPattern = std::move(regex);
832 return true; 832 return true;
833 } 833 }
834 834
835 void V8DebuggerAgentImpl::setBlackboxedRanges(ErrorString* error, const String16 & scriptId, 835 void V8DebuggerAgentImpl::setBlackboxedRanges(ErrorString* error, const String16 & scriptId,
836 std::unique_ptr<protocol::Array<protocol::Debugger::ScriptPosition>> inPosit ions) 836 std::unique_ptr<protocol::Array<protocol::Debugger::ScriptPosition>> inPosit ions)
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 schedulePauseOnNextStatementIfSteppingInto(); 881 schedulePauseOnNextStatementIfSteppingInto();
882 } 882 }
883 883
884 void V8DebuggerAgentImpl::didExecuteScript() 884 void V8DebuggerAgentImpl::didExecuteScript()
885 { 885 {
886 changeJavaScriptRecursionLevel(-1); 886 changeJavaScriptRecursionLevel(-1);
887 } 887 }
888 888
889 void V8DebuggerAgentImpl::changeJavaScriptRecursionLevel(int step) 889 void V8DebuggerAgentImpl::changeJavaScriptRecursionLevel(int step)
890 { 890 {
891 if (m_javaScriptPauseScheduled && !m_skipAllPauses && !debugger().isPaused() ) { 891 if (m_javaScriptPauseScheduled && !m_skipAllPauses && !m_inspector->isPaused ()) {
892 // Do not ever loose user's pause request until we have actually paused. 892 // Do not ever loose user's pause request until we have actually paused.
893 debugger().setPauseOnNextStatement(true); 893 m_inspector->setPauseOnNextStatement(true);
894 } 894 }
895 if (m_scheduledDebuggerStep == StepOut) { 895 if (m_scheduledDebuggerStep == StepOut) {
896 m_recursionLevelForStepOut += step; 896 m_recursionLevelForStepOut += step;
897 if (!m_recursionLevelForStepOut) { 897 if (!m_recursionLevelForStepOut) {
898 // When StepOut crosses a task boundary (i.e. js -> blink_c++) from where it was requested, 898 // When StepOut crosses a task boundary (i.e. js -> blink_c++) from where it was requested,
899 // switch stepping to step into a next JS task, as if we exited to a blackboxed framework. 899 // switch stepping to step into a next JS task, as if we exited to a blackboxed framework.
900 m_scheduledDebuggerStep = StepInto; 900 m_scheduledDebuggerStep = StepInto;
901 m_skipNextDebuggerStepOut = false; 901 m_skipNextDebuggerStepOut = false;
902 } 902 }
903 } 903 }
904 if (m_recursionLevelForStepFrame) { 904 if (m_recursionLevelForStepFrame) {
905 m_recursionLevelForStepFrame += step; 905 m_recursionLevelForStepFrame += step;
906 if (!m_recursionLevelForStepFrame) { 906 if (!m_recursionLevelForStepFrame) {
907 // We have walked through a blackboxed framework and got back to whe re we started. 907 // We have walked through a blackboxed framework and got back to whe re we started.
908 // If there was no stepping scheduled, we should cancel the stepping explicitly, 908 // If there was no stepping scheduled, we should cancel the stepping explicitly,
909 // since there may be a scheduled StepFrame left. 909 // since there may be a scheduled StepFrame left.
910 // Otherwise, if we were stepping in/over, the StepFrame will stop a t the right location, 910 // Otherwise, if we were stepping in/over, the StepFrame will stop a t the right location,
911 // whereas if we were stepping out, we should continue doing so afte r debugger pauses 911 // whereas if we were stepping out, we should continue doing so afte r debugger pauses
912 // from the old StepFrame. 912 // from the old StepFrame.
913 m_skippedStepFrameCount = 0; 913 m_skippedStepFrameCount = 0;
914 if (m_scheduledDebuggerStep == NoStep) 914 if (m_scheduledDebuggerStep == NoStep)
915 debugger().clearStepping(); 915 m_inspector->clearStepping();
916 else if (m_scheduledDebuggerStep == StepOut) 916 else if (m_scheduledDebuggerStep == StepOut)
917 m_skipNextDebuggerStepOut = true; 917 m_skipNextDebuggerStepOut = true;
918 } 918 }
919 } 919 }
920 } 920 }
921 921
922 std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(ErrorSt ring* errorString) 922 std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(ErrorSt ring* errorString)
923 { 923 {
924 if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size()) 924 if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size())
925 return Array<CallFrame>::create(); 925 return Array<CallFrame>::create();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 std::unique_ptr<Array<CallFrame>> callFrames = Array<CallFrame>::parse(toPro tocolValue(debuggerContext, objects).get(), &errorSupport); 977 std::unique_ptr<Array<CallFrame>> callFrames = Array<CallFrame>::parse(toPro tocolValue(debuggerContext, objects).get(), &errorSupport);
978 if (hasInternalError(errorString, !callFrames)) 978 if (hasInternalError(errorString, !callFrames))
979 return Array<CallFrame>::create(); 979 return Array<CallFrame>::create();
980 return callFrames; 980 return callFrames;
981 } 981 }
982 982
983 std::unique_ptr<StackTrace> V8DebuggerAgentImpl::currentAsyncStackTrace() 983 std::unique_ptr<StackTrace> V8DebuggerAgentImpl::currentAsyncStackTrace()
984 { 984 {
985 if (m_pausedContext.IsEmpty()) 985 if (m_pausedContext.IsEmpty())
986 return nullptr; 986 return nullptr;
987 V8StackTraceImpl* stackTrace = m_debugger->currentAsyncCallChain(); 987 V8StackTraceImpl* stackTrace = m_inspector->currentAsyncCallChain();
988 return stackTrace ? stackTrace->buildInspectorObjectForTail(m_debugger) : nu llptr; 988 return stackTrace ? stackTrace->buildInspectorObjectForTail(m_inspector) : n ullptr;
989 } 989 }
990 990
991 void V8DebuggerAgentImpl::didParseSource(std::unique_ptr<V8DebuggerScript> scrip t, bool success) 991 void V8DebuggerAgentImpl::didParseSource(std::unique_ptr<V8DebuggerScript> scrip t, bool success)
992 { 992 {
993 v8::HandleScope handles(m_isolate); 993 v8::HandleScope handles(m_isolate);
994 String16 scriptSource = toProtocolString(script->source(m_isolate)); 994 String16 scriptSource = toProtocolString(script->source(m_isolate));
995 bool isDeprecatedSourceURL = false; 995 bool isDeprecatedSourceURL = false;
996 if (!success) 996 if (!success)
997 script->setSourceURL(findSourceURL(scriptSource, false, &isDeprecatedSou rceURL)); 997 script->setSourceURL(findSourceURL(scriptSource, false, &isDeprecatedSou rceURL));
998 else if (script->hasSourceURL()) 998 else if (script->hasSourceURL())
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 if (!breakpointsCookie) 1032 if (!breakpointsCookie)
1033 return; 1033 return;
1034 1034
1035 for (size_t i = 0; i < breakpointsCookie->size(); ++i) { 1035 for (size_t i = 0; i < breakpointsCookie->size(); ++i) {
1036 auto cookie = breakpointsCookie->at(i); 1036 auto cookie = breakpointsCookie->at(i);
1037 protocol::DictionaryValue* breakpointObject = protocol::DictionaryValue: :cast(cookie.second); 1037 protocol::DictionaryValue* breakpointObject = protocol::DictionaryValue: :cast(cookie.second);
1038 bool isRegex; 1038 bool isRegex;
1039 breakpointObject->getBoolean(DebuggerAgentState::isRegex, &isRegex); 1039 breakpointObject->getBoolean(DebuggerAgentState::isRegex, &isRegex);
1040 String16 url; 1040 String16 url;
1041 breakpointObject->getString(DebuggerAgentState::url, &url); 1041 breakpointObject->getString(DebuggerAgentState::url, &url);
1042 if (!matches(m_debugger, scriptURL, url, isRegex)) 1042 if (!matches(m_inspector, scriptURL, url, isRegex))
1043 continue; 1043 continue;
1044 ScriptBreakpoint breakpoint; 1044 ScriptBreakpoint breakpoint;
1045 breakpointObject->getInteger(DebuggerAgentState::lineNumber, &breakpoint .lineNumber); 1045 breakpointObject->getInteger(DebuggerAgentState::lineNumber, &breakpoint .lineNumber);
1046 breakpointObject->getInteger(DebuggerAgentState::columnNumber, &breakpoi nt.columnNumber); 1046 breakpointObject->getInteger(DebuggerAgentState::columnNumber, &breakpoi nt.columnNumber);
1047 breakpointObject->getString(DebuggerAgentState::condition, &breakpoint.c ondition); 1047 breakpointObject->getString(DebuggerAgentState::condition, &breakpoint.c ondition);
1048 std::unique_ptr<protocol::Debugger::Location> location = resolveBreakpoi nt(cookie.first, scriptId, breakpoint, UserBreakpointSource); 1048 std::unique_ptr<protocol::Debugger::Location> location = resolveBreakpoi nt(cookie.first, scriptId, breakpoint, UserBreakpointSource);
1049 if (location) 1049 if (location)
1050 m_frontend.breakpointResolved(cookie.first, std::move(location)); 1050 m_frontend.breakpointResolved(cookie.first, std::move(location));
1051 } 1051 }
1052 } 1052 }
1053 1053
1054 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause(v8::Local<v8 ::Context> context, v8::Local<v8::Value> exception, const std::vector<String16>& hitBreakpoints, bool isPromiseRejection) 1054 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause(v8::Local<v8 ::Context> context, v8::Local<v8::Value> exception, const std::vector<String16>& hitBreakpoints, bool isPromiseRejection)
1055 { 1055 {
1056 JavaScriptCallFrames callFrames = debugger().currentCallFrames(1); 1056 JavaScriptCallFrames callFrames = m_inspector->currentCallFrames(1);
1057 JavaScriptCallFrame* topCallFrame = !callFrames.empty() ? callFrames.begin() ->get() : nullptr; 1057 JavaScriptCallFrame* topCallFrame = !callFrames.empty() ? callFrames.begin() ->get() : nullptr;
1058 1058
1059 // Skip pause in internal scripts (e.g. InjectedScriptSource.js). 1059 // Skip pause in internal scripts (e.g. InjectedScriptSource.js).
1060 if (topCallFrame) { 1060 if (topCallFrame) {
1061 ScriptsMap::iterator it = m_scripts.find(String16::fromInteger(topCallFr ame->sourceID())); 1061 ScriptsMap::iterator it = m_scripts.find(String16::fromInteger(topCallFr ame->sourceID()));
1062 if (it != m_scripts.end() && it->second->isInternalScript()) 1062 if (it != m_scripts.end() && it->second->isInternalScript())
1063 return RequestStepFrame; 1063 return RequestStepFrame;
1064 } 1064 }
1065 1065
1066 V8DebuggerAgentImpl::SkipPauseRequest result; 1066 V8DebuggerAgentImpl::SkipPauseRequest result;
1067 if (m_skipAllPauses) 1067 if (m_skipAllPauses)
1068 result = RequestContinue; 1068 result = RequestContinue;
1069 else if (!hitBreakpoints.empty()) 1069 else if (!hitBreakpoints.empty())
1070 result = RequestNoSkip; // Don't skip explicit breakpoints even if set i n frameworks. 1070 result = RequestNoSkip; // Don't skip explicit breakpoints even if set i n frameworks.
1071 else if (!exception.IsEmpty()) 1071 else if (!exception.IsEmpty())
1072 result = shouldSkipExceptionPause(topCallFrame); 1072 result = shouldSkipExceptionPause(topCallFrame);
1073 else if (m_scheduledDebuggerStep != NoStep || m_javaScriptPauseScheduled || m_pausingOnNativeEvent) 1073 else if (m_scheduledDebuggerStep != NoStep || m_javaScriptPauseScheduled || m_pausingOnNativeEvent)
1074 result = shouldSkipStepPause(topCallFrame); 1074 result = shouldSkipStepPause(topCallFrame);
1075 else 1075 else
1076 result = RequestNoSkip; 1076 result = RequestNoSkip;
1077 1077
1078 m_skipNextDebuggerStepOut = false; 1078 m_skipNextDebuggerStepOut = false;
1079 if (result != RequestNoSkip) 1079 if (result != RequestNoSkip)
1080 return result; 1080 return result;
1081 // Skip pauses inside V8 internal scripts and on syntax errors. 1081 // Skip pauses inside V8 internal scripts and on syntax errors.
1082 if (!topCallFrame) 1082 if (!topCallFrame)
1083 return RequestContinue; 1083 return RequestContinue;
1084 1084
1085 DCHECK(m_pausedContext.IsEmpty()); 1085 DCHECK(m_pausedContext.IsEmpty());
1086 JavaScriptCallFrames frames = debugger().currentCallFrames(); 1086 JavaScriptCallFrames frames = m_inspector->currentCallFrames();
1087 m_pausedCallFrames.swap(frames); 1087 m_pausedCallFrames.swap(frames);
1088 m_pausedContext.Reset(m_isolate, context); 1088 m_pausedContext.Reset(m_isolate, context);
1089 v8::HandleScope handles(m_isolate); 1089 v8::HandleScope handles(m_isolate);
1090 1090
1091 if (!exception.IsEmpty()) { 1091 if (!exception.IsEmpty()) {
1092 ErrorString ignored; 1092 ErrorString ignored;
1093 InjectedScript* injectedScript = m_session->findInjectedScript(&ignored, V8DebuggerImpl::contextId(context)); 1093 InjectedScript* injectedScript = m_session->findInjectedScript(&ignored, V8InspectorImpl::contextId(context));
1094 if (injectedScript) { 1094 if (injectedScript) {
1095 m_breakReason = isPromiseRejection ? protocol::Debugger::Paused::Rea sonEnum::PromiseRejection : protocol::Debugger::Paused::ReasonEnum::Exception; 1095 m_breakReason = isPromiseRejection ? protocol::Debugger::Paused::Rea sonEnum::PromiseRejection : protocol::Debugger::Paused::ReasonEnum::Exception;
1096 ErrorString errorString; 1096 ErrorString errorString;
1097 auto obj = injectedScript->wrapObject(&errorString, exception, backt raceObjectGroup); 1097 auto obj = injectedScript->wrapObject(&errorString, exception, backt raceObjectGroup);
1098 m_breakAuxData = obj ? obj->serialize() : nullptr; 1098 m_breakAuxData = obj ? obj->serialize() : nullptr;
1099 // m_breakAuxData might be null after this. 1099 // m_breakAuxData might be null after this.
1100 } 1100 }
1101 } 1101 }
1102 1102
1103 std::unique_ptr<Array<String16>> hitBreakpointIds = Array<String16>::create( ); 1103 std::unique_ptr<Array<String16>> hitBreakpointIds = Array<String16>::create( );
(...skipping 13 matching lines...) Expand all
1117 ErrorString errorString; 1117 ErrorString errorString;
1118 m_frontend.paused(currentCallFrames(&errorString), m_breakReason, std::move( m_breakAuxData), std::move(hitBreakpointIds), currentAsyncStackTrace()); 1118 m_frontend.paused(currentCallFrames(&errorString), m_breakReason, std::move( m_breakAuxData), std::move(hitBreakpointIds), currentAsyncStackTrace());
1119 m_scheduledDebuggerStep = NoStep; 1119 m_scheduledDebuggerStep = NoStep;
1120 m_javaScriptPauseScheduled = false; 1120 m_javaScriptPauseScheduled = false;
1121 m_steppingFromFramework = false; 1121 m_steppingFromFramework = false;
1122 m_pausingOnNativeEvent = false; 1122 m_pausingOnNativeEvent = false;
1123 m_skippedStepFrameCount = 0; 1123 m_skippedStepFrameCount = 0;
1124 m_recursionLevelForStepFrame = 0; 1124 m_recursionLevelForStepFrame = 0;
1125 1125
1126 if (!m_continueToLocationBreakpointId.isEmpty()) { 1126 if (!m_continueToLocationBreakpointId.isEmpty()) {
1127 debugger().removeBreakpoint(m_continueToLocationBreakpointId); 1127 m_inspector->removeBreakpoint(m_continueToLocationBreakpointId);
1128 m_continueToLocationBreakpointId = ""; 1128 m_continueToLocationBreakpointId = "";
1129 } 1129 }
1130 return result; 1130 return result;
1131 } 1131 }
1132 1132
1133 void V8DebuggerAgentImpl::didContinue() 1133 void V8DebuggerAgentImpl::didContinue()
1134 { 1134 {
1135 m_pausedContext.Reset(); 1135 m_pausedContext.Reset();
1136 JavaScriptCallFrames emptyCallFrames; 1136 JavaScriptCallFrames emptyCallFrames;
1137 m_pausedCallFrames.swap(emptyCallFrames); 1137 m_pausedCallFrames.swap(emptyCallFrames);
1138 clearBreakDetails(); 1138 clearBreakDetails();
1139 m_frontend.resumed(); 1139 m_frontend.resumed();
1140 } 1140 }
1141 1141
1142 void V8DebuggerAgentImpl::breakProgram(const String16& breakReason, std::unique_ ptr<protocol::DictionaryValue> data) 1142 void V8DebuggerAgentImpl::breakProgram(const String16& breakReason, std::unique_ ptr<protocol::DictionaryValue> data)
1143 { 1143 {
1144 if (!enabled() || m_skipAllPauses || !m_pausedContext.IsEmpty() || isCurrent CallStackEmptyOrBlackboxed() || !debugger().breakpointsActivated()) 1144 if (!enabled() || m_skipAllPauses || !m_pausedContext.IsEmpty() || isCurrent CallStackEmptyOrBlackboxed() || !m_inspector->breakpointsActivated())
1145 return; 1145 return;
1146 m_breakReason = breakReason; 1146 m_breakReason = breakReason;
1147 m_breakAuxData = std::move(data); 1147 m_breakAuxData = std::move(data);
1148 m_scheduledDebuggerStep = NoStep; 1148 m_scheduledDebuggerStep = NoStep;
1149 m_steppingFromFramework = false; 1149 m_steppingFromFramework = false;
1150 m_pausingOnNativeEvent = false; 1150 m_pausingOnNativeEvent = false;
1151 debugger().breakProgram(); 1151 m_inspector->breakProgram();
1152 } 1152 }
1153 1153
1154 void V8DebuggerAgentImpl::breakProgramOnException(const String16& breakReason, s td::unique_ptr<protocol::DictionaryValue> data) 1154 void V8DebuggerAgentImpl::breakProgramOnException(const String16& breakReason, s td::unique_ptr<protocol::DictionaryValue> data)
1155 { 1155 {
1156 if (!enabled() || m_debugger->getPauseOnExceptionsState() == V8DebuggerImpl: :DontPauseOnExceptions) 1156 if (!enabled() || m_inspector->getPauseOnExceptionsState() == V8InspectorImp l::DontPauseOnExceptions)
1157 return; 1157 return;
1158 breakProgram(breakReason, std::move(data)); 1158 breakProgram(breakReason, std::move(data));
1159 } 1159 }
1160 1160
1161 bool V8DebuggerAgentImpl::assertPaused(ErrorString* errorString) 1161 bool V8DebuggerAgentImpl::assertPaused(ErrorString* errorString)
1162 { 1162 {
1163 if (m_pausedContext.IsEmpty()) { 1163 if (m_pausedContext.IsEmpty()) {
1164 *errorString = "Can only perform operation while paused."; 1164 *errorString = "Can only perform operation while paused.";
1165 return false; 1165 return false;
1166 } 1166 }
(...skipping 22 matching lines...) Expand all
1189 { 1189 {
1190 if (!enabled()) 1190 if (!enabled())
1191 return; 1191 return;
1192 m_scheduledDebuggerStep = NoStep; 1192 m_scheduledDebuggerStep = NoStep;
1193 m_scripts.clear(); 1193 m_scripts.clear();
1194 m_blackboxedPositions.clear(); 1194 m_blackboxedPositions.clear();
1195 m_breakpointIdToDebuggerBreakpointIds.clear(); 1195 m_breakpointIdToDebuggerBreakpointIds.clear();
1196 } 1196 }
1197 1197
1198 } // namespace blink 1198 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698