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

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

Issue 1754483002: [DevTools] Added setBlackboxPatterns method to protocol (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@provide-hash-for-anonymous-scripts
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // 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/Values.h" 7 #include "platform/inspector_protocol/Values.h"
8 #include "platform/v8_inspector/AsyncCallChain.h" 8 #include "platform/v8_inspector/AsyncCallChain.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"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 using blink::protocol::Runtime::RemoteObject; 42 using blink::protocol::Runtime::RemoteObject;
43 43
44 namespace blink { 44 namespace blink {
45 45
46 namespace DebuggerAgentState { 46 namespace DebuggerAgentState {
47 static const char javaScriptBreakpoints[] = "javaScriptBreakopints"; 47 static const char javaScriptBreakpoints[] = "javaScriptBreakopints";
48 static const char pauseOnExceptionsState[] = "pauseOnExceptionsState"; 48 static const char pauseOnExceptionsState[] = "pauseOnExceptionsState";
49 static const char asyncCallStackDepth[] = "asyncCallStackDepth"; 49 static const char asyncCallStackDepth[] = "asyncCallStackDepth";
50 static const char promiseTrackerEnabled[] = "promiseTrackerEnabled"; 50 static const char promiseTrackerEnabled[] = "promiseTrackerEnabled";
51 static const char promiseTrackerCaptureStacks[] = "promiseTrackerCaptureStacks"; 51 static const char promiseTrackerCaptureStacks[] = "promiseTrackerCaptureStacks";
52 static const char blackboxPatterns[] = "blackboxPatterns";
53 static const char blackboxHashes[] = "blackboxHashes";
52 54
53 // Breakpoint properties. 55 // Breakpoint properties.
54 static const char url[] = "url"; 56 static const char url[] = "url";
55 static const char isRegex[] = "isRegex"; 57 static const char isRegex[] = "isRegex";
56 static const char lineNumber[] = "lineNumber"; 58 static const char lineNumber[] = "lineNumber";
57 static const char columnNumber[] = "columnNumber"; 59 static const char columnNumber[] = "columnNumber";
58 static const char condition[] = "condition"; 60 static const char condition[] = "condition";
59 static const char skipAllPauses[] = "skipAllPauses"; 61 static const char skipAllPauses[] = "skipAllPauses";
60 62
63 // Blackbox hash object properties.
64 static const char hashValue[] = "hashValue";
65 static const char hashPositions[] = "hashPositions";
66
61 } // namespace DebuggerAgentState; 67 } // namespace DebuggerAgentState;
62 68
63 static const int maxSkipStepFrameCount = 128; 69 static const int maxSkipStepFrameCount = 128;
64 70
65 const char V8DebuggerAgent::backtraceObjectGroup[] = "backtrace"; 71 const char V8DebuggerAgent::backtraceObjectGroup[] = "backtrace";
66 72
67 const int V8DebuggerAgent::unknownAsyncOperationId = 0; 73 const int V8DebuggerAgent::unknownAsyncOperationId = 0;
68 74
69 static String breakpointIdSuffix(V8DebuggerAgentImpl::BreakpointSource source) 75 static String breakpointIdSuffix(V8DebuggerAgentImpl::BreakpointSource source)
70 { 76 {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 return V8JavaScriptCallFrame::unwrap(context, value); 112 return V8JavaScriptCallFrame::unwrap(context, value);
107 } 113 }
108 114
109 static bool positionComparator(const std::pair<int, int>& a, const std::pair<int , int>& b) 115 static bool positionComparator(const std::pair<int, int>& a, const std::pair<int , int>& b)
110 { 116 {
111 if (a.first != b.first) 117 if (a.first != b.first)
112 return a.first < b.first; 118 return a.first < b.first;
113 return a.second < b.second; 119 return a.second < b.second;
114 } 120 }
115 121
122 static bool parseBlackboxPositions(ErrorString* error, protocol::Array<protocol: :Debugger::ScriptPosition>* inPositions, Vector<std::pair<int, int>>* outPositio ns)
123 {
124 if (!inPositions) {
125 Vector<std::pair<int, int>> blackboxed(1);
126 outPositions->swap(blackboxed);
127 return true;
128 }
129 Vector<std::pair<int, int>> positions(inPositions->length());
130 for (size_t i = 0; i < positions.size(); ++i) {
131 protocol::Debugger::ScriptPosition* position = inPositions->get(i);
132 if (position->getLine() < 0) {
133 if (error)
134 *error = "Position missing 'line' or 'line' < 0.";
135 return false;
136 }
137 if (position->getColumn() < 0) {
138 if (error)
139 *error = "Position missing 'column' or 'column' < 0.";
140 return false;
141 }
142 positions[i] = std::make_pair(position->getLine(), position->getColumn() );
143 }
144
145 for (size_t i = 1; i < positions.size(); ++i) {
146 if (positions[i - 1].first < positions[i].first)
147 continue;
148 if (positions[i - 1].first == positions[i].first && positions[i - 1].sec ond < positions[i].second)
149 continue;
150 if (error)
151 *error = "Input positions array is not sorted or contains duplicate values.";
152 return false;
153 }
154
155 outPositions->swap(positions);
156 return true;
157 }
158
116 // Hash algorithm for substrings is described in "Über die Komplexität der Multi plikation in 159 // Hash algorithm for substrings is described in "Über die Komplexität der Multi plikation in
117 // eingeschränkten Branchingprogrammmodellen" by Woelfe. 160 // eingeschränkten Branchingprogrammmodellen" by Woelfe.
118 // http://opendatastructures.org/versions/edition-0.1d/ods-java/node33.html#SECT ION00832000000000000000 161 // http://opendatastructures.org/versions/edition-0.1d/ods-java/node33.html#SECT ION00832000000000000000
119 static String calculateHash(const String& str) 162 static String calculateHash(const String& str)
120 { 163 {
121 static uint64_t prime[] = { 0x3FB75161, 0xAB1F4E4F, 0x82675BC5, 0xCD924D35, 0x81ABE279 }; 164 static uint64_t prime[] = { 0x3FB75161, 0xAB1F4E4F, 0x82675BC5, 0xCD924D35, 0x81ABE279 };
122 static uint64_t random[] = { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 }; 165 static uint64_t random[] = { 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0 };
123 static uint32_t randomOdd[] = { 0xB4663807, 0xCC322BF5, 0xD4F91BBD, 0xA7BEA1 1D, 0x8F462907 }; 166 static uint32_t randomOdd[] = { 0xB4663807, 0xCC322BF5, 0xD4F91BBD, 0xA7BEA1 1D, 0x8F462907 };
124 167
125 uint64_t hashes[] = { 0, 0, 0, 0, 0 }; 168 uint64_t hashes[] = { 0, 0, 0, 0, 0 };
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create()); 291 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create());
249 m_state->setNumber(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerImp l::DontPauseOnExceptions); 292 m_state->setNumber(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerImp l::DontPauseOnExceptions);
250 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, 0); 293 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, 0);
251 m_state->setBoolean(DebuggerAgentState::promiseTrackerEnabled, false); 294 m_state->setBoolean(DebuggerAgentState::promiseTrackerEnabled, false);
252 m_state->setBoolean(DebuggerAgentState::promiseTrackerCaptureStacks, false); 295 m_state->setBoolean(DebuggerAgentState::promiseTrackerCaptureStacks, false);
253 296
254 debugger().removeAgent(m_contextGroupId); 297 debugger().removeAgent(m_contextGroupId);
255 m_pausedContext.Reset(); 298 m_pausedContext.Reset();
256 m_currentCallStack.Reset(); 299 m_currentCallStack.Reset();
257 m_scripts.clear(); 300 m_scripts.clear();
258 m_blackboxedPositions.clear(); 301 m_loadedScriptHashes.clear();
302
303 m_hashToBlackboxPositions.clear();
304 m_blackboxPattern = String();
305
259 m_breakpointIdToDebuggerBreakpointIds.clear(); 306 m_breakpointIdToDebuggerBreakpointIds.clear();
260 internalSetAsyncCallStackDepth(0); 307 internalSetAsyncCallStackDepth(0);
261 m_promiseTracker->setEnabled(false, false); 308 m_promiseTracker->setEnabled(false, false);
262 m_continueToLocationBreakpointId = String(); 309 m_continueToLocationBreakpointId = String();
263 clearBreakDetails(); 310 clearBreakDetails();
264 m_scheduledDebuggerStep = NoStep; 311 m_scheduledDebuggerStep = NoStep;
265 m_skipNextDebuggerStepOut = false; 312 m_skipNextDebuggerStepOut = false;
266 m_javaScriptPauseScheduled = false; 313 m_javaScriptPauseScheduled = false;
267 m_steppingFromFramework = false; 314 m_steppingFromFramework = false;
268 m_pausingOnNativeEvent = false; 315 m_pausingOnNativeEvent = false;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 m_state->getNumber(DebuggerAgentState::pauseOnExceptionsState, &pauseState); 356 m_state->getNumber(DebuggerAgentState::pauseOnExceptionsState, &pauseState);
310 setPauseOnExceptionsImpl(&error, pauseState); 357 setPauseOnExceptionsImpl(&error, pauseState);
311 358
312 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false); 359 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false);
313 360
314 int asyncCallStackDepth = 0; 361 int asyncCallStackDepth = 0;
315 m_state->getNumber(DebuggerAgentState::asyncCallStackDepth, &asyncCallStackD epth); 362 m_state->getNumber(DebuggerAgentState::asyncCallStackDepth, &asyncCallStackD epth);
316 internalSetAsyncCallStackDepth(asyncCallStackDepth); 363 internalSetAsyncCallStackDepth(asyncCallStackDepth);
317 364
318 m_promiseTracker->setEnabled(m_state->booleanProperty(DebuggerAgentState::pr omiseTrackerEnabled, false), m_state->booleanProperty(DebuggerAgentState::promis eTrackerCaptureStacks, false)); 365 m_promiseTracker->setEnabled(m_state->booleanProperty(DebuggerAgentState::pr omiseTrackerEnabled, false), m_state->booleanProperty(DebuggerAgentState::promis eTrackerCaptureStacks, false));
366
367 restoreBlackboxState();
368 }
369
370 void V8DebuggerAgentImpl::restoreBlackboxState()
371 {
372 String error;
373 protocol::ErrorSupport errors;
374
375 protocol::ListValue* savedPatterns = m_state->getArray(DebuggerAgentState::b lackboxPatterns);
376 if (savedPatterns) {
377 OwnPtr<protocol::Array<protocol::Debugger::BlackboxPattern>> patterns = protocol::Array<protocol::Debugger::BlackboxPattern>::parse(savedPatterns, &erro rs);
378 ASSERT(!errors.hasErrors());
379 setBlackboxPatterns(&error, patterns.release());
380 ASSERT(!error.length());
381 }
382
383 protocol::ListValue* savedHashes = m_state->getArray(DebuggerAgentState::bla ckboxHashes);
384 if (!savedHashes)
385 return;
386 for (size_t i = 0; i < savedHashes->length(); ++i) {
387 protocol::DictionaryValue* savedHash = protocol::DictionaryValue::cast(s avedHashes->get(i));
388
389 String hash;
390 OwnPtr<protocol::Array<protocol::Debugger::ScriptPosition>> positions;
391
392 bool hadError = savedHash->getString(DebuggerAgentState::hashValue, &has h);
393 ASSERT_UNUSED(hadError, !hadError);
394 positions = protocol::Array<protocol::Debugger::ScriptPosition>::parse(s avedHash->getArray(DebuggerAgentState::hashPositions), &errors);
395 ASSERT(!errors.hasErrors());
396 setBlackboxRanges(&error, hash, positions.release());
397 ASSERT(!error.length());
398 }
319 } 399 }
320 400
321 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive) 401 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive)
322 { 402 {
323 if (!checkEnabled(errorString)) 403 if (!checkEnabled(errorString))
324 return; 404 return;
325 debugger().setBreakpointsActivated(active); 405 debugger().setBreakpointsActivated(active);
326 } 406 }
327 407
328 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped) 408 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped)
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 { 621 {
542 ASSERT(enabled()); 622 ASSERT(enabled());
543 return isCallFrameWithUnknownScriptOrBlackboxed(debugger().callFrameNoScopes (0)); 623 return isCallFrameWithUnknownScriptOrBlackboxed(debugger().callFrameNoScopes (0));
544 } 624 }
545 625
546 bool V8DebuggerAgentImpl::isCallFrameWithUnknownScriptOrBlackboxed(PassRefPtr<Ja vaScriptCallFrame> pFrame) 626 bool V8DebuggerAgentImpl::isCallFrameWithUnknownScriptOrBlackboxed(PassRefPtr<Ja vaScriptCallFrame> pFrame)
547 { 627 {
548 RefPtr<JavaScriptCallFrame> frame = pFrame; 628 RefPtr<JavaScriptCallFrame> frame = pFrame;
549 if (!frame) 629 if (!frame)
550 return true; 630 return true;
551 ScriptsMap::iterator it = m_scripts.find(String::number(frame->sourceID())); 631 String scriptId = String::number(frame->sourceID());
632 ScriptsMap::iterator it = m_scripts.find(scriptId);
552 if (it == m_scripts.end()) { 633 if (it == m_scripts.end()) {
553 // Unknown scripts are blackboxed. 634 // Unknown scripts are blackboxed.
554 return true; 635 return true;
555 } 636 }
556 auto itBlackboxedPositions = m_blackboxedPositions.find(String::number(frame ->sourceID())); 637
557 if (itBlackboxedPositions == m_blackboxedPositions.end()) 638 Vector<std::pair<int, int>> emptyPositions;
639 const Vector<std::pair<int, int>>* ranges = nullptr;
640
641 V8DebuggerScript& script = it->value;
642 auto itBlackboxHash = m_hashToBlackboxPositions.find(script.hash());
643 if (itBlackboxHash != m_hashToBlackboxPositions.end()) {
644 ranges = &itBlackboxHash->value;
645 } else {
646 if (!m_blackboxPattern.isEmpty() && matches(m_debugger, script.sourceURL (), m_blackboxPattern, true)) {
647 Vector<std::pair<int, int>> positions(1);
648 positions[0].first = 0;
649 positions[0].second = 0;
650 m_hashToBlackboxPositions.set(script.hash(), positions);
651 return true;
652 }
558 return false; 653 return false;
654 }
559 655
560 const Vector<std::pair<int, int>>& ranges = itBlackboxedPositions->value; 656 auto itRange = std::lower_bound(ranges->begin(), ranges->end(), std::make_pa ir(frame->line(), frame->column()), positionComparator);
561 auto itRange = std::lower_bound(ranges.begin(), ranges.end(), std::make_pair (frame->line(), frame->column()), positionComparator);
562 // Ranges array contains positions in script where blackbox state is changed . 657 // Ranges array contains positions in script where blackbox state is changed .
563 // [(0,0) ... ranges[0]) isn't blackboxed, [ranges[0] ... ranges[1]) is blac kboxed... 658 // [(0,0) ... ranges[0]) isn't blackboxed, [ranges[0] ... ranges[1]) is blac kboxed...
564 return std::distance(ranges.begin(), itRange) % 2; 659 return std::distance(ranges->begin(), itRange) % 2;
565 } 660 }
566 661
567 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::shouldSkipExceptionPa use() 662 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::shouldSkipExceptionPa use()
568 { 663 {
569 if (m_steppingFromFramework) 664 if (m_steppingFromFramework)
570 return RequestNoSkip; 665 return RequestNoSkip;
571 if (isTopCallFrameBlackboxed()) 666 if (isTopCallFrameBlackboxed())
572 return RequestContinue; 667 return RequestContinue;
573 return RequestNoSkip; 668 return RequestNoSkip;
574 } 669 }
(...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 *errorString = "Can only perform operation while tracking async call sta cks."; 1367 *errorString = "Can only perform operation while tracking async call sta cks.";
1273 return; 1368 return;
1274 } 1369 }
1275 if (operationId <= 0) { 1370 if (operationId <= 0) {
1276 *errorString = "Wrong async operation id."; 1371 *errorString = "Wrong async operation id.";
1277 return; 1372 return;
1278 } 1373 }
1279 m_asyncOperationBreakpoints.remove(operationId); 1374 m_asyncOperationBreakpoints.remove(operationId);
1280 } 1375 }
1281 1376
1282 void V8DebuggerAgentImpl::setBlackboxedRanges(ErrorString* error, const String& scriptId, PassOwnPtr<protocol::Array<protocol::Debugger::ScriptPosition>> inPosi tions) 1377 void V8DebuggerAgentImpl::setBlackboxRanges(ErrorString* error, const String& ha sh, PassOwnPtr<protocol::Array<protocol::Debugger::ScriptPosition>> inPositions)
1283 { 1378 {
1284 ScriptsMap::iterator it = m_scripts.find(scriptId); 1379 if (!m_loadedScriptHashes.contains(hash)) {
1285 if (it == m_scripts.end()) { 1380 *error = "No script with passed hash.";
1286 *error = "No script with passed id.";
1287 return; 1381 return;
1288 } 1382 }
1289 1383
1290 if (!inPositions->length()) { 1384 if (!inPositions->length()) {
1291 m_blackboxedPositions.remove(scriptId); 1385 m_hashToBlackboxPositions.remove(hash);
1292 return; 1386 return;
1293 } 1387 }
1294 1388
1295 Vector<std::pair<int, int>> positions(inPositions->length()); 1389 Vector<std::pair<int, int>> positions;
1296 for (size_t i = 0; i < positions.size(); ++i) { 1390 if (parseBlackboxPositions(error, inPositions.get(), &positions))
1297 protocol::Debugger::ScriptPosition* position = inPositions->get(i); 1391 m_hashToBlackboxPositions.set(hash, positions);
1298 if (position->getLine() < 0) { 1392
1299 *error = "Position missing 'line' or 'line' < 0."; 1393 if (!m_state->getArray(DebuggerAgentState::blackboxHashes))
1394 m_state->setArray(DebuggerAgentState::blackboxHashes, protocol::ListValu e::create());
1395 protocol::ListValue* hashes = m_state->getArray(DebuggerAgentState::blackbox Hashes);
1396 OwnPtr<protocol::DictionaryValue> value = protocol::DictionaryValue::create( );
1397 value->setString(DebuggerAgentState::hashValue, hash);
1398 value->setArray(DebuggerAgentState::hashPositions, inPositions->serialize()) ;
1399 hashes->pushValue(value.release());
1400 }
1401
1402 void V8DebuggerAgentImpl::setBlackboxPatterns(ErrorString* error, PassOwnPtr<pro tocol::Array<protocol::Debugger::BlackboxPattern>> patterns)
1403 {
1404 HashSet<String> hashes;
1405 String blackboxPattern;
1406
1407 for (size_t i = 0; i < patterns->length(); ++i) {
1408 protocol::Debugger::BlackboxPattern* pattern = patterns->get(i);
1409 String type = pattern->getType();
1410 if (type == protocol::Debugger::BlackboxPatternTypeEnum::RegExp) {
1411 blackboxPattern = blackboxPattern.isEmpty() ? pattern->getValue() : (blackboxPattern + "|" + pattern->getValue());
1412 } else if (type== protocol::Debugger::BlackboxPatternTypeEnum::Hash) {
1413 hashes.add(pattern->getValue());
1414 } else {
1415 *error = "Unknown blackbox pattern type.";
1300 return; 1416 return;
1301 } 1417 }
1302 if (position->getColumn() < 0) {
1303 *error = "Position missing 'column' or 'column' < 0.";
1304 return;
1305 }
1306 positions[i] = std::make_pair(position->getLine(), position->getColumn() );
1307 } 1418 }
1308 1419
1309 for (size_t i = 1; i < positions.size(); ++i) { 1420 m_state->setArray(DebuggerAgentState::blackboxPatterns, patterns->serialize( ));
1310 if (positions[i - 1].first < positions[i].first)
1311 continue;
1312 if (positions[i - 1].first == positions[i].first && positions[i - 1].sec ond < positions[i].second)
1313 continue;
1314 *error = "Input positions array is not sorted or contains duplicate valu es.";
1315 return;
1316 }
1317 1421
1318 m_blackboxedPositions.set(scriptId, positions); 1422 Vector<std::pair<int, int>> positions(1);
1423 for (auto& hash : hashes)
1424 m_hashToBlackboxPositions.set(hash, positions);
1425 m_blackboxPattern = blackboxPattern;
1319 } 1426 }
1320 1427
1321 void V8DebuggerAgentImpl::willExecuteScript(int scriptId) 1428 void V8DebuggerAgentImpl::willExecuteScript(int scriptId)
1322 { 1429 {
1323 changeJavaScriptRecursionLevel(+1); 1430 changeJavaScriptRecursionLevel(+1);
1324 // Fast return. 1431 // Fast return.
1325 if (m_scheduledDebuggerStep != StepInto) 1432 if (m_scheduledDebuggerStep != StepInto)
1326 return; 1433 return;
1327 // Skip unknown scripts (e.g. InjectedScript). 1434 // Skip unknown scripts (e.g. InjectedScript).
1328 if (!m_scripts.contains(String::number(scriptId))) 1435 if (!m_scripts.contains(String::number(scriptId)))
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
1468 const bool* isInternalScriptParam = isInternalScript ? &isInternalScript : n ullptr; 1575 const bool* isInternalScriptParam = isInternalScript ? &isInternalScript : n ullptr;
1469 const bool* isLiveEditParam = isLiveEdit ? &isLiveEdit : nullptr; 1576 const bool* isLiveEditParam = isLiveEdit ? &isLiveEdit : nullptr;
1470 const bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : nullptr; 1577 const bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : nullptr;
1471 const bool* deprecatedCommentWasUsedParam = deprecatedCommentWasUsed ? &depr ecatedCommentWasUsed : nullptr; 1578 const bool* deprecatedCommentWasUsedParam = deprecatedCommentWasUsed ? &depr ecatedCommentWasUsed : nullptr;
1472 if (parsedScript.success) 1579 if (parsedScript.success)
1473 m_frontend->scriptParsed(parsedScript.scriptId, scriptURL, script.startL ine(), script.startColumn(), script.endLine(), script.endColumn(), executionCont extId, script.hash(), isContentScriptParam, isInternalScriptParam, isLiveEditPar am, sourceMapURLParam, hasSourceURLParam, deprecatedCommentWasUsedParam); 1580 m_frontend->scriptParsed(parsedScript.scriptId, scriptURL, script.startL ine(), script.startColumn(), script.endLine(), script.endColumn(), executionCont extId, script.hash(), isContentScriptParam, isInternalScriptParam, isLiveEditPar am, sourceMapURLParam, hasSourceURLParam, deprecatedCommentWasUsedParam);
1474 else 1581 else
1475 m_frontend->scriptFailedToParse(parsedScript.scriptId, scriptURL, script .startLine(), script.startColumn(), script.endLine(), script.endColumn(), execut ionContextId, script.hash(), isContentScriptParam, isInternalScriptParam, source MapURLParam, hasSourceURLParam, deprecatedCommentWasUsedParam); 1582 m_frontend->scriptFailedToParse(parsedScript.scriptId, scriptURL, script .startLine(), script.startColumn(), script.endLine(), script.endColumn(), execut ionContextId, script.hash(), isContentScriptParam, isInternalScriptParam, source MapURLParam, hasSourceURLParam, deprecatedCommentWasUsedParam);
1476 1583
1477 m_scripts.set(parsedScript.scriptId, script); 1584 m_scripts.set(parsedScript.scriptId, script);
1585 m_loadedScriptHashes.add(script.hash());
1478 1586
1479 if (scriptURL.isEmpty() || !parsedScript.success) 1587 if (scriptURL.isEmpty() || !parsedScript.success)
1480 return; 1588 return;
1481 1589
1482 protocol::DictionaryValue* breakpointsCookie = m_state->getObject(DebuggerAg entState::javaScriptBreakpoints); 1590 protocol::DictionaryValue* breakpointsCookie = m_state->getObject(DebuggerAg entState::javaScriptBreakpoints);
1483 if (!breakpointsCookie) 1591 if (!breakpointsCookie)
1484 return; 1592 return;
1485 1593
1486 for (auto& cookie : *breakpointsCookie) { 1594 for (auto& cookie : *breakpointsCookie) {
1487 protocol::DictionaryValue* breakpointObject = protocol::DictionaryValue: :cast(cookie.value.get()); 1595 protocol::DictionaryValue* breakpointObject = protocol::DictionaryValue: :cast(cookie.value.get());
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
1643 1751
1644 void V8DebuggerAgentImpl::removeBreakpointAt(const String& scriptId, int lineNum ber, int columnNumber, BreakpointSource source) 1752 void V8DebuggerAgentImpl::removeBreakpointAt(const String& scriptId, int lineNum ber, int columnNumber, BreakpointSource source)
1645 { 1753 {
1646 removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, so urce)); 1754 removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, so urce));
1647 } 1755 }
1648 1756
1649 void V8DebuggerAgentImpl::reset() 1757 void V8DebuggerAgentImpl::reset()
1650 { 1758 {
1651 m_scheduledDebuggerStep = NoStep; 1759 m_scheduledDebuggerStep = NoStep;
1652 m_scripts.clear(); 1760 m_scripts.clear();
1653 m_blackboxedPositions.clear(); 1761 m_loadedScriptHashes.clear();
1762
1763 m_hashToBlackboxPositions.clear();
1764
1654 m_breakpointIdToDebuggerBreakpointIds.clear(); 1765 m_breakpointIdToDebuggerBreakpointIds.clear();
1655 resetAsyncCallTracker(); 1766 resetAsyncCallTracker();
1656 m_promiseTracker->clear(); 1767 m_promiseTracker->clear();
1657 if (m_frontend) 1768 if (m_frontend)
1658 m_frontend->globalObjectCleared(); 1769 m_frontend->globalObjectCleared();
1659 } 1770 }
1660 1771
1661 } // namespace blink 1772 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698