| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 this._breakpointManager.addEventListener(WebInspector.BreakpointManager.Even
ts.BreakpointAdded, this._breakpointAdded, this); | 53 this._breakpointManager.addEventListener(WebInspector.BreakpointManager.Even
ts.BreakpointAdded, this._breakpointAdded, this); |
| 54 this._breakpointManager.addEventListener(WebInspector.BreakpointManager.Even
ts.BreakpointRemoved, this._breakpointRemoved, this); | 54 this._breakpointManager.addEventListener(WebInspector.BreakpointManager.Even
ts.BreakpointRemoved, this._breakpointRemoved, this); |
| 55 | 55 |
| 56 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.Source
MappingChanged, this._onSourceMappingChanged, this); | 56 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.Source
MappingChanged, this._onSourceMappingChanged, this); |
| 57 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.Workin
gCopyChanged, this._workingCopyChanged, this); | 57 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.Workin
gCopyChanged, this._workingCopyChanged, this); |
| 58 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.Workin
gCopyCommitted, this._workingCopyCommitted, this); | 58 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.Workin
gCopyCommitted, this._workingCopyCommitted, this); |
| 59 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.TitleC
hanged, this._showBlackboxInfobarIfNeeded, this); | 59 this.uiSourceCode().addEventListener(WebInspector.UISourceCode.Events.TitleC
hanged, this._showBlackboxInfobarIfNeeded, this); |
| 60 | 60 |
| 61 /** @type {!Map.<!WebInspector.Target, !WebInspector.ResourceScriptFile>}*/ | 61 /** @type {!Map.<!WebInspector.Target, !WebInspector.ResourceScriptFile>}*/ |
| 62 this._scriptFileForTarget = new Map(); | 62 this._scriptFileForTarget = new Map(); |
| 63 this._registerShortcuts(); | |
| 64 var targets = WebInspector.targetManager.targets(); | 63 var targets = WebInspector.targetManager.targets(); |
| 65 for (var i = 0; i < targets.length; ++i) { | 64 for (var i = 0; i < targets.length; ++i) { |
| 66 var scriptFile = WebInspector.debuggerWorkspaceBinding.scriptFile(uiSour
ceCode, targets[i]); | 65 var scriptFile = WebInspector.debuggerWorkspaceBinding.scriptFile(uiSour
ceCode, targets[i]); |
| 67 if (scriptFile) | 66 if (scriptFile) |
| 68 this._updateScriptFile(targets[i]); | 67 this._updateScriptFile(targets[i]); |
| 69 } | 68 } |
| 70 | 69 |
| 71 if (this._scriptFileForTarget.size || uiSourceCode.extension() === "js" || u
iSourceCode.project().type() === WebInspector.projectTypes.Snippets) | 70 if (this._scriptFileForTarget.size || uiSourceCode.extension() === "js" || u
iSourceCode.project().type() === WebInspector.projectTypes.Snippets) |
| 72 this._compiler = new WebInspector.JavaScriptCompiler(this); | 71 this._compiler = new WebInspector.JavaScriptCompiler(this); |
| 73 | 72 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 }, | 183 }, |
| 185 | 184 |
| 186 _hideBlackboxInfobar: function() | 185 _hideBlackboxInfobar: function() |
| 187 { | 186 { |
| 188 if (!this._blackboxInfobar) | 187 if (!this._blackboxInfobar) |
| 189 return; | 188 return; |
| 190 this._blackboxInfobar.dispose(); | 189 this._blackboxInfobar.dispose(); |
| 191 delete this._blackboxInfobar; | 190 delete this._blackboxInfobar; |
| 192 }, | 191 }, |
| 193 | 192 |
| 194 _registerShortcuts: function() | |
| 195 { | |
| 196 var shortcutKeys = WebInspector.ShortcutsScreen.SourcesPanelShortcuts; | |
| 197 for (var i = 0; i < shortcutKeys.EvaluateSelectionInConsole.length; ++i)
{ | |
| 198 var keyDescriptor = shortcutKeys.EvaluateSelectionInConsole[i]; | |
| 199 this.addShortcut(keyDescriptor.key, this._evaluateSelectionInConsole
.bind(this)); | |
| 200 } | |
| 201 for (var i = 0; i < shortcutKeys.AddSelectionToWatch.length; ++i) { | |
| 202 var keyDescriptor = shortcutKeys.AddSelectionToWatch[i]; | |
| 203 this.addShortcut(keyDescriptor.key, this._addCurrentSelectionToWatch
.bind(this)); | |
| 204 } | |
| 205 }, | |
| 206 | |
| 207 _addCurrentSelectionToWatch: function() | |
| 208 { | |
| 209 var textSelection = this.textEditor.selection(); | |
| 210 if (textSelection && !textSelection.isEmpty()) | |
| 211 this._innerAddToWatch(this.textEditor.copyRange(textSelection)); | |
| 212 return true; | |
| 213 }, | |
| 214 | |
| 215 /** | |
| 216 * @param {string} expression | |
| 217 */ | |
| 218 _innerAddToWatch: function(expression) | |
| 219 { | |
| 220 this._scriptsPanel.addToWatch(expression); | |
| 221 }, | |
| 222 | |
| 223 /** | |
| 224 * @return {boolean} | |
| 225 */ | |
| 226 _evaluateSelectionInConsole: function() | |
| 227 { | |
| 228 var selection = this.textEditor.selection(); | |
| 229 if (!selection || selection.isEmpty()) | |
| 230 return true; | |
| 231 this._evaluateInConsole(this.textEditor.copyRange(selection)); | |
| 232 return true; | |
| 233 }, | |
| 234 | |
| 235 /** | |
| 236 * @param {string} expression | |
| 237 */ | |
| 238 _evaluateInConsole: function(expression) | |
| 239 { | |
| 240 var currentExecutionContext = WebInspector.context.flavor(WebInspector.E
xecutionContext); | |
| 241 if (currentExecutionContext) | |
| 242 WebInspector.ConsoleModel.evaluateCommandInConsole(currentExecutionC
ontext, expression); | |
| 243 }, | |
| 244 | |
| 245 /** | 193 /** |
| 246 * @override | 194 * @override |
| 247 */ | 195 */ |
| 248 wasShown: function() | 196 wasShown: function() |
| 249 { | 197 { |
| 250 WebInspector.UISourceCodeFrame.prototype.wasShown.call(this); | 198 WebInspector.UISourceCodeFrame.prototype.wasShown.call(this); |
| 251 if (this._executionLocation && this.loaded) { | 199 if (this._executionLocation && this.loaded) { |
| 252 // We need CodeMirrorTextEditor to be initialized prior to this call
. @see crbug.com/499889 | 200 // We need CodeMirrorTextEditor to be initialized prior to this call
. @see crbug.com/499889 |
| 253 setImmediate(this._generateValuesInSource.bind(this)); | 201 setImmediate(this._generateValuesInSource.bind(this)); |
| 254 } | 202 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 } | 257 } |
| 310 return new Promise(populate.bind(this)); | 258 return new Promise(populate.bind(this)); |
| 311 }, | 259 }, |
| 312 | 260 |
| 313 /** | 261 /** |
| 314 * @override | 262 * @override |
| 315 * @return {!Promise} | 263 * @return {!Promise} |
| 316 */ | 264 */ |
| 317 populateTextAreaContextMenu: function(contextMenu, lineNumber, columnNumber) | 265 populateTextAreaContextMenu: function(contextMenu, lineNumber, columnNumber) |
| 318 { | 266 { |
| 319 var textSelection = this.textEditor.selection(); | |
| 320 if (textSelection && !textSelection.isEmpty()) { | |
| 321 var selection = this.textEditor.copyRange(textSelection); | |
| 322 var addToWatchLabel = WebInspector.UIString.capitalize("Add to ^watc
h"); | |
| 323 contextMenu.appendItem(addToWatchLabel, this._innerAddToWatch.bind(t
his, selection)); | |
| 324 var evaluateLabel = WebInspector.UIString.capitalize("Evaluate in ^c
onsole"); | |
| 325 contextMenu.appendItem(evaluateLabel, this._evaluateInConsole.bind(t
his, selection)); | |
| 326 contextMenu.appendSeparator(); | |
| 327 } | |
| 328 | |
| 329 /** | 267 /** |
| 330 * @param {!WebInspector.ResourceScriptFile} scriptFile | 268 * @param {!WebInspector.ResourceScriptFile} scriptFile |
| 331 */ | 269 */ |
| 332 function addSourceMapURL(scriptFile) | 270 function addSourceMapURL(scriptFile) |
| 333 { | 271 { |
| 334 WebInspector.AddSourceMapURLDialog.show(addSourceMapURLDialogCallbac
k.bind(null, scriptFile)); | 272 WebInspector.AddSourceMapURLDialog.show(addSourceMapURLDialogCallbac
k.bind(null, scriptFile)); |
| 335 } | 273 } |
| 336 | 274 |
| 337 /** | 275 /** |
| 338 * @param {!WebInspector.ResourceScriptFile} scriptFile | 276 * @param {!WebInspector.ResourceScriptFile} scriptFile |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 startColumn: token.startColumn, | 479 startColumn: token.startColumn, |
| 542 endColumn: token.endColumn - 1 | 480 endColumn: token.endColumn - 1 |
| 543 }; | 481 }; |
| 544 | 482 |
| 545 return anchorBox; | 483 return anchorBox; |
| 546 }, | 484 }, |
| 547 | 485 |
| 548 _resolveObjectForPopover: function(anchorBox, showCallback, objectGroupName) | 486 _resolveObjectForPopover: function(anchorBox, showCallback, objectGroupName) |
| 549 { | 487 { |
| 550 var target = WebInspector.context.flavor(WebInspector.Target); | 488 var target = WebInspector.context.flavor(WebInspector.Target); |
| 551 var debuggerModel = WebInspector.DebuggerModel.fromTarget(target); | 489 var selectedCallFrame = WebInspector.context.flavor(WebInspector.Debugge
rModel.CallFrame); |
| 552 if (!debuggerModel || !debuggerModel.isPaused()) { | 490 if (!selectedCallFrame) { |
| 553 this._popoverHelper.hidePopover(); | 491 this._popoverHelper.hidePopover(); |
| 554 return; | 492 return; |
| 555 } | 493 } |
| 556 var lineNumber = anchorBox.highlight.lineNumber; | 494 var lineNumber = anchorBox.highlight.lineNumber; |
| 557 var startHighlight = anchorBox.highlight.startColumn; | 495 var startHighlight = anchorBox.highlight.startColumn; |
| 558 var endHighlight = anchorBox.highlight.endColumn; | 496 var endHighlight = anchorBox.highlight.endColumn; |
| 559 var line = this.textEditor.line(lineNumber); | 497 var line = this.textEditor.line(lineNumber); |
| 560 if (!anchorBox.forSelection) { | 498 if (!anchorBox.forSelection) { |
| 561 while (startHighlight > 1 && line.charAt(startHighlight - 1) === "."
) { | 499 while (startHighlight > 1 && line.charAt(startHighlight - 1) === "."
) { |
| 562 var token = this.textEditor.tokenAtTextPosition(lineNumber, star
tHighlight - 2); | 500 var token = this.textEditor.tokenAtTextPosition(lineNumber, star
tHighlight - 2); |
| 563 if (!token || !token.type) { | 501 if (!token || !token.type) { |
| 564 this._popoverHelper.hidePopover(); | 502 this._popoverHelper.hidePopover(); |
| 565 return; | 503 return; |
| 566 } | 504 } |
| 567 startHighlight = token.startColumn; | 505 startHighlight = token.startColumn; |
| 568 } | 506 } |
| 569 } | 507 } |
| 570 var evaluationText = line.substring(startHighlight, endHighlight + 1); | 508 var evaluationText = line.substring(startHighlight, endHighlight + 1); |
| 571 var selectedCallFrame = /** @type {!WebInspector.DebuggerModel.CallFrame
}*/ (debuggerModel.selectedCallFrame()); | |
| 572 | |
| 573 WebInspector.SourceMapNamesResolver.resolveExpression(selectedCallFrame,
evaluationText, this.uiSourceCode(), lineNumber, startHighlight, endHighlight).
then(onResolve.bind(this)); | 509 WebInspector.SourceMapNamesResolver.resolveExpression(selectedCallFrame,
evaluationText, this.uiSourceCode(), lineNumber, startHighlight, endHighlight).
then(onResolve.bind(this)); |
| 574 | 510 |
| 575 /** | 511 /** |
| 576 * @param {?string=} text | 512 * @param {?string=} text |
| 577 * @this {WebInspector.JavaScriptSourceFrame} | 513 * @this {WebInspector.JavaScriptSourceFrame} |
| 578 */ | 514 */ |
| 579 function onResolve(text) | 515 function onResolve(text) |
| 580 { | 516 { |
| 581 selectedCallFrame.evaluate(text || evaluationText, objectGroupName,
false, true, false, false, showObjectPopover.bind(this)); | 517 selectedCallFrame.evaluate(text || evaluationText, objectGroupName,
false, true, false, false, showObjectPopover.bind(this)); |
| 582 } | 518 } |
| 583 | 519 |
| 584 /** | 520 /** |
| 585 * @param {?RuntimeAgent.RemoteObject} result | 521 * @param {?RuntimeAgent.RemoteObject} result |
| 586 * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails | 522 * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails |
| 587 * @this {WebInspector.JavaScriptSourceFrame} | 523 * @this {WebInspector.JavaScriptSourceFrame} |
| 588 */ | 524 */ |
| 589 function showObjectPopover(result, exceptionDetails) | 525 function showObjectPopover(result, exceptionDetails) |
| 590 { | 526 { |
| 591 var target = WebInspector.context.flavor(WebInspector.Target); | 527 var target = WebInspector.context.flavor(WebInspector.Target); |
| 592 if (selectedCallFrame.target() !== target || !debuggerModel.isPaused
() || !result) { | 528 var potentiallyUpdatedCallFrame = WebInspector.context.flavor(WebIns
pector.DebuggerModel.CallFrame); |
| 529 if (selectedCallFrame !== potentiallyUpdatedCallFrame || !result) { |
| 593 this._popoverHelper.hidePopover(); | 530 this._popoverHelper.hidePopover(); |
| 594 return; | 531 return; |
| 595 } | 532 } |
| 596 this._popoverAnchorBox = anchorBox; | 533 this._popoverAnchorBox = anchorBox; |
| 597 showCallback(target.runtimeModel.createRemoteObject(result), !!excep
tionDetails, this._popoverAnchorBox); | 534 showCallback(target.runtimeModel.createRemoteObject(result), !!excep
tionDetails, this._popoverAnchorBox); |
| 598 // Popover may have been removed by showCallback(). | 535 // Popover may have been removed by showCallback(). |
| 599 if (this._popoverAnchorBox) { | 536 if (this._popoverAnchorBox) { |
| 600 var highlightRange = new WebInspector.TextRange(lineNumber, star
tHighlight, lineNumber, endHighlight); | 537 var highlightRange = new WebInspector.TextRange(lineNumber, star
tHighlight, lineNumber, endHighlight); |
| 601 this._popoverAnchorBox._highlightDescriptor = this.textEditor.hi
ghlightRange(highlightRange, "source-frame-eval-expression"); | 538 this._popoverAnchorBox._highlightDescriptor = this.textEditor.hi
ghlightRange(highlightRange, "source-frame-eval-expression"); |
| 602 } | 539 } |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 } | 650 } |
| 714 }, | 651 }, |
| 715 | 652 |
| 716 _generateValuesInSource: function() | 653 _generateValuesInSource: function() |
| 717 { | 654 { |
| 718 if (!WebInspector.moduleSetting("inlineVariableValues").get()) | 655 if (!WebInspector.moduleSetting("inlineVariableValues").get()) |
| 719 return; | 656 return; |
| 720 var executionContext = WebInspector.context.flavor(WebInspector.Executio
nContext); | 657 var executionContext = WebInspector.context.flavor(WebInspector.Executio
nContext); |
| 721 if (!executionContext) | 658 if (!executionContext) |
| 722 return; | 659 return; |
| 723 var callFrame = executionContext.debuggerModel.selectedCallFrame(); | 660 var callFrame = WebInspector.context.flavor(WebInspector.DebuggerModel.C
allFrame); |
| 724 if (!callFrame) | 661 if (!callFrame) |
| 725 return; | 662 return; |
| 726 | 663 |
| 727 var localScope = callFrame.localScope(); | 664 var localScope = callFrame.localScope(); |
| 728 var functionLocation = callFrame.functionLocation(); | 665 var functionLocation = callFrame.functionLocation(); |
| 729 if (localScope && functionLocation) | 666 if (localScope && functionLocation) |
| 730 WebInspector.SourceMapNamesResolver.resolveScopeInObject(localScope)
.getAllProperties(false, this._prepareScopeVariables.bind(this, callFrame)); | 667 WebInspector.SourceMapNamesResolver.resolveScopeInObject(localScope)
.getAllProperties(false, this._prepareScopeVariables.bind(this, callFrame)); |
| 731 | 668 |
| 732 if (this._clearValueWidgetsTimer) { | 669 if (this._clearValueWidgetsTimer) { |
| 733 clearTimeout(this._clearValueWidgetsTimer); | 670 clearTimeout(this._clearValueWidgetsTimer); |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 this.uiSourceCode().removeEventListener(WebInspector.UISourceCode.Events
.WorkingCopyChanged, this._workingCopyChanged, this); | 1067 this.uiSourceCode().removeEventListener(WebInspector.UISourceCode.Events
.WorkingCopyChanged, this._workingCopyChanged, this); |
| 1131 this.uiSourceCode().removeEventListener(WebInspector.UISourceCode.Events
.WorkingCopyCommitted, this._workingCopyCommitted, this); | 1068 this.uiSourceCode().removeEventListener(WebInspector.UISourceCode.Events
.WorkingCopyCommitted, this._workingCopyCommitted, this); |
| 1132 this.uiSourceCode().removeEventListener(WebInspector.UISourceCode.Events
.TitleChanged, this._showBlackboxInfobarIfNeeded, this); | 1069 this.uiSourceCode().removeEventListener(WebInspector.UISourceCode.Events
.TitleChanged, this._showBlackboxInfobarIfNeeded, this); |
| 1133 WebInspector.moduleSetting("skipStackFramesPattern").removeChangeListene
r(this._showBlackboxInfobarIfNeeded, this); | 1070 WebInspector.moduleSetting("skipStackFramesPattern").removeChangeListene
r(this._showBlackboxInfobarIfNeeded, this); |
| 1134 WebInspector.moduleSetting("skipContentScripts").removeChangeListener(th
is._showBlackboxInfobarIfNeeded, this); | 1071 WebInspector.moduleSetting("skipContentScripts").removeChangeListener(th
is._showBlackboxInfobarIfNeeded, this); |
| 1135 WebInspector.UISourceCodeFrame.prototype.dispose.call(this); | 1072 WebInspector.UISourceCodeFrame.prototype.dispose.call(this); |
| 1136 }, | 1073 }, |
| 1137 | 1074 |
| 1138 __proto__: WebInspector.UISourceCodeFrame.prototype | 1075 __proto__: WebInspector.UISourceCodeFrame.prototype |
| 1139 } | 1076 } |
| OLD | NEW |