OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 * @implements {SDK.TargetManager.Observer} | 5 * @implements {SDK.TargetManager.Observer} |
6 * @unrestricted | 6 * @unrestricted |
7 */ | 7 */ |
8 Bindings.DebuggerWorkspaceBinding = class { | 8 Bindings.DebuggerWorkspaceBinding = class { |
9 /** | 9 /** |
10 * @param {!SDK.TargetManager} targetManager | 10 * @param {!SDK.TargetManager} targetManager |
11 * @param {!Workspace.Workspace} workspace | 11 * @param {!Workspace.Workspace} workspace |
12 */ | 12 */ |
13 constructor(targetManager, workspace) { | 13 constructor(targetManager, workspace) { |
14 this._workspace = workspace; | 14 this._workspace = workspace; |
15 | 15 |
16 // FIXME: Migrate from _targetToData to _debuggerModelToData. | 16 // FIXME: Migrate from _targetToData to _debuggerModelToData. |
17 /** @type {!Map.<!SDK.Target, !Bindings.DebuggerWorkspaceBinding.TargetData>
} */ | 17 /** @type {!Map.<!SDK.Target, !Bindings.DebuggerWorkspaceBinding.TargetData>
} */ |
18 this._targetToData = new Map(); | 18 this._targetToData = new Map(); |
19 targetManager.observeTargets(this); | 19 targetManager.observeTargets(this); |
20 | 20 |
21 targetManager.addModelListener( | 21 targetManager.addModelListener( |
22 SDK.DebuggerModel, SDK.DebuggerModel.Events.GlobalObjectCleared, this._g
lobalObjectCleared, this); | 22 SDK.DebuggerModel, SDK.DebuggerModel.Events.GlobalObjectCleared, this._g
lobalObjectCleared, this); |
23 targetManager.addModelListener( | 23 targetManager.addModelListener( |
24 SDK.DebuggerModel, SDK.DebuggerModel.Events.BeforeDebuggerPaused, this._
beforeDebuggerPaused, this); | |
25 targetManager.addModelListener( | |
26 SDK.DebuggerModel, SDK.DebuggerModel.Events.DebuggerResumed, this._debug
gerResumed, this); | 24 SDK.DebuggerModel, SDK.DebuggerModel.Events.DebuggerResumed, this._debug
gerResumed, this); |
27 workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, t
his._uiSourceCodeRemoved, this); | 25 workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved, t
his._uiSourceCodeRemoved, this); |
28 workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved, this._
projectRemoved, this); | 26 workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved, this._
projectRemoved, this); |
29 } | 27 } |
30 | 28 |
31 /** | 29 /** |
32 * @override | 30 * @override |
33 * @param {!SDK.Target} target | 31 * @param {!SDK.Target} target |
34 */ | 32 */ |
35 targetAdded(target) { | 33 targetAdded(target) { |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 info._removeLocation(location); | 318 info._removeLocation(location); |
321 } | 319 } |
322 | 320 |
323 /** | 321 /** |
324 * @param {!Common.Event} event | 322 * @param {!Common.Event} event |
325 */ | 323 */ |
326 _debuggerResumed(event) { | 324 _debuggerResumed(event) { |
327 var debuggerModel = /** @type {!SDK.DebuggerModel} */ (event.target); | 325 var debuggerModel = /** @type {!SDK.DebuggerModel} */ (event.target); |
328 this._reset(debuggerModel.target()); | 326 this._reset(debuggerModel.target()); |
329 } | 327 } |
330 | |
331 /** | |
332 * @param {!Common.Event} event | |
333 */ | |
334 _beforeDebuggerPaused(event) { | |
335 var rawLocation = event.data.callFrames[0].location(); | |
336 var targetData = this._targetToData.get(rawLocation.target()); | |
337 if (!targetData._compilerMapping.mapsToSourceCode(rawLocation)) { | |
338 event.stopPropagation(); | |
339 event.preventDefault(); | |
340 } | |
341 } | |
342 }; | 328 }; |
343 | 329 |
344 /** | 330 /** |
345 * @unrestricted | 331 * @unrestricted |
346 */ | 332 */ |
347 Bindings.DebuggerWorkspaceBinding.TargetData = class { | 333 Bindings.DebuggerWorkspaceBinding.TargetData = class { |
348 /** | 334 /** |
349 * @param {!SDK.DebuggerModel} debuggerModel | 335 * @param {!SDK.DebuggerModel} debuggerModel |
350 * @param {!Bindings.DebuggerWorkspaceBinding} debuggerWorkspaceBinding | 336 * @param {!Bindings.DebuggerWorkspaceBinding} debuggerWorkspaceBinding |
351 */ | 337 */ |
352 constructor(debuggerModel, debuggerWorkspaceBinding) { | 338 constructor(debuggerModel, debuggerWorkspaceBinding) { |
353 this._target = debuggerModel.target(); | 339 this._debuggerModel = debuggerModel; |
354 | 340 |
355 /** @type {!Map.<string, !Bindings.DebuggerWorkspaceBinding.ScriptInfo>} */ | 341 /** @type {!Map.<string, !Bindings.DebuggerWorkspaceBinding.ScriptInfo>} */ |
356 this.scriptDataMap = new Map(); | 342 this.scriptDataMap = new Map(); |
357 | 343 |
358 /** @type {!Set.<!Bindings.DebuggerWorkspaceBinding.Location>} */ | 344 /** @type {!Set.<!Bindings.DebuggerWorkspaceBinding.Location>} */ |
359 this.callFrameLocations = new Set(); | 345 this.callFrameLocations = new Set(); |
360 | 346 |
361 var workspace = debuggerWorkspaceBinding._workspace; | 347 var workspace = debuggerWorkspaceBinding._workspace; |
362 | 348 |
363 this._defaultMapping = new Bindings.DefaultScriptMapping(debuggerModel, work
space, debuggerWorkspaceBinding); | 349 this._defaultMapping = new Bindings.DefaultScriptMapping(debuggerModel, work
space, debuggerWorkspaceBinding); |
364 this._resourceMapping = new Bindings.ResourceScriptMapping(debuggerModel, wo
rkspace, debuggerWorkspaceBinding); | 350 this._resourceMapping = new Bindings.ResourceScriptMapping(debuggerModel, wo
rkspace, debuggerWorkspaceBinding); |
365 this._compilerMapping = new Bindings.CompilerScriptMapping( | 351 this._compilerMapping = new Bindings.CompilerScriptMapping( |
366 debuggerModel, workspace, Bindings.NetworkProject.forTarget(this._target
), debuggerWorkspaceBinding); | 352 debuggerModel, workspace, Bindings.NetworkProject.forTarget(this._debugg
erModel.target()), |
| 353 debuggerWorkspaceBinding); |
367 | 354 |
368 /** @type {!Map.<!Workspace.UISourceCode, !Bindings.DebuggerSourceMapping>}
*/ | 355 /** @type {!Map.<!Workspace.UISourceCode, !Bindings.DebuggerSourceMapping>}
*/ |
369 this._uiSourceCodeToSourceMapping = new Map(); | 356 this._uiSourceCodeToSourceMapping = new Map(); |
370 | 357 |
| 358 debuggerModel.setBeforePausedCallback(this._beforePaused.bind(this)); |
371 this._eventListeners = [ | 359 this._eventListeners = [ |
372 debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource
, this._parsedScriptSource, this), | 360 debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource
, this._parsedScriptSource, this), |
373 debuggerModel.addEventListener(SDK.DebuggerModel.Events.FailedToParseScrip
tSource, this._parsedScriptSource, this) | 361 debuggerModel.addEventListener(SDK.DebuggerModel.Events.FailedToParseScrip
tSource, this._parsedScriptSource, this) |
374 ]; | 362 ]; |
375 } | 363 } |
376 | 364 |
377 /** | 365 /** |
| 366 * @param {!SDK.DebuggerPausedDetails} debuggerPausedDetails |
| 367 * @return {boolean} |
| 368 */ |
| 369 _beforePaused(debuggerPausedDetails) { |
| 370 return !!this._compilerMapping.mapsToSourceCode(debuggerPausedDetails.callFr
ames[0].location()); |
| 371 } |
| 372 |
| 373 /** |
378 * @param {!Common.Event} event | 374 * @param {!Common.Event} event |
379 */ | 375 */ |
380 _parsedScriptSource(event) { | 376 _parsedScriptSource(event) { |
381 var script = /** @type {!SDK.Script} */ (event.data); | 377 var script = /** @type {!SDK.Script} */ (event.data); |
382 this._defaultMapping.addScript(script); | 378 this._defaultMapping.addScript(script); |
383 this._resourceMapping.addScript(script); | 379 this._resourceMapping.addScript(script); |
384 | 380 |
385 if (Common.moduleSetting('jsSourceMapsEnabled').get()) | 381 if (Common.moduleSetting('jsSourceMapsEnabled').get()) |
386 this._compilerMapping.addScript(script); | 382 this._compilerMapping.addScript(script); |
387 } | 383 } |
388 | 384 |
389 /** | 385 /** |
390 * @param {!Workspace.UISourceCode} uiSourceCode | 386 * @param {!Workspace.UISourceCode} uiSourceCode |
391 * @param {?Bindings.DebuggerSourceMapping} sourceMapping | 387 * @param {?Bindings.DebuggerSourceMapping} sourceMapping |
392 */ | 388 */ |
393 _setSourceMapping(uiSourceCode, sourceMapping) { | 389 _setSourceMapping(uiSourceCode, sourceMapping) { |
394 if (this._uiSourceCodeToSourceMapping.get(uiSourceCode) === sourceMapping) | 390 if (this._uiSourceCodeToSourceMapping.get(uiSourceCode) === sourceMapping) |
395 return; | 391 return; |
396 | 392 |
397 if (sourceMapping) | 393 if (sourceMapping) |
398 this._uiSourceCodeToSourceMapping.set(uiSourceCode, sourceMapping); | 394 this._uiSourceCodeToSourceMapping.set(uiSourceCode, sourceMapping); |
399 else | 395 else |
400 this._uiSourceCodeToSourceMapping.remove(uiSourceCode); | 396 this._uiSourceCodeToSourceMapping.remove(uiSourceCode); |
401 | 397 |
402 uiSourceCode.dispatchEventToListeners( | 398 uiSourceCode.dispatchEventToListeners( |
403 Workspace.UISourceCode.Events.SourceMappingChanged, | 399 Workspace.UISourceCode.Events.SourceMappingChanged, |
404 {target: this._target, isIdentity: sourceMapping ? sourceMapping.isIdent
ity() : false}); | 400 {target: this._debuggerModel.target(), isIdentity: sourceMapping ? sourc
eMapping.isIdentity() : false}); |
405 } | 401 } |
406 | 402 |
407 /** | 403 /** |
408 * @param {!Workspace.UISourceCode} uiSourceCode | 404 * @param {!Workspace.UISourceCode} uiSourceCode |
409 * @param {number} lineNumber | 405 * @param {number} lineNumber |
410 * @param {number} columnNumber | 406 * @param {number} columnNumber |
411 * @return {?SDK.DebuggerModel.Location} | 407 * @return {?SDK.DebuggerModel.Location} |
412 */ | 408 */ |
413 _uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) { | 409 _uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) { |
414 var sourceMapping = this._uiSourceCodeToSourceMapping.get(uiSourceCode); | 410 var sourceMapping = this._uiSourceCodeToSourceMapping.get(uiSourceCode); |
(...skipping 11 matching lines...) Expand all Loading... |
426 } | 422 } |
427 | 423 |
428 /** | 424 /** |
429 * @param {!Workspace.UISourceCode} uiSourceCode | 425 * @param {!Workspace.UISourceCode} uiSourceCode |
430 */ | 426 */ |
431 _uiSourceCodeRemoved(uiSourceCode) { | 427 _uiSourceCodeRemoved(uiSourceCode) { |
432 this._uiSourceCodeToSourceMapping.remove(uiSourceCode); | 428 this._uiSourceCodeToSourceMapping.remove(uiSourceCode); |
433 } | 429 } |
434 | 430 |
435 _dispose() { | 431 _dispose() { |
| 432 this._debuggerModel.setBeforePausedCallback(null); |
436 Common.EventTarget.removeEventListeners(this._eventListeners); | 433 Common.EventTarget.removeEventListeners(this._eventListeners); |
437 this._compilerMapping.dispose(); | 434 this._compilerMapping.dispose(); |
438 this._resourceMapping.dispose(); | 435 this._resourceMapping.dispose(); |
439 this._defaultMapping.dispose(); | 436 this._defaultMapping.dispose(); |
440 this._uiSourceCodeToSourceMapping.clear(); | 437 this._uiSourceCodeToSourceMapping.clear(); |
441 } | 438 } |
442 }; | 439 }; |
443 | 440 |
444 /** | 441 /** |
445 * @unrestricted | 442 * @unrestricted |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 * @param {number} lineNumber | 645 * @param {number} lineNumber |
649 * @return {boolean} | 646 * @return {boolean} |
650 */ | 647 */ |
651 uiLineHasMapping(uiSourceCode, lineNumber) {} | 648 uiLineHasMapping(uiSourceCode, lineNumber) {} |
652 }; | 649 }; |
653 | 650 |
654 /** | 651 /** |
655 * @type {!Bindings.DebuggerWorkspaceBinding} | 652 * @type {!Bindings.DebuggerWorkspaceBinding} |
656 */ | 653 */ |
657 Bindings.debuggerWorkspaceBinding; | 654 Bindings.debuggerWorkspaceBinding; |
OLD | NEW |