| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 |
| 11 * copyright notice, this list of conditions and the following disclaimer | 11 * copyright notice, this list of conditions and the following disclaimer |
| 12 * in the documentation and/or other materials provided with the | 12 * in the documentation and/or other materials provided with the |
| 13 * distribution. | 13 * distribution. |
| 14 * * Neither the name of Google Inc. nor the names of its | 14 * * Neither the name of Google Inc. nor the names of its |
| 15 * contributors may be used to endorse or promote products derived from | 15 * contributors may be used to endorse or promote products derived from |
| 16 * this software without specific prior written permission. | 16 * this software without specific prior written permission. |
| 17 * | 17 * |
| 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | |
| 31 /** | 30 /** |
| 32 * @constructor | |
| 33 * @implements {WebInspector.DebuggerSourceMapping} | 31 * @implements {WebInspector.DebuggerSourceMapping} |
| 34 * @param {!WebInspector.DebuggerModel} debuggerModel | 32 * @unrestricted |
| 35 * @param {!WebInspector.Workspace} workspace | |
| 36 * @param {!WebInspector.DebuggerWorkspaceBinding} debuggerWorkspaceBinding | |
| 37 */ | 33 */ |
| 38 WebInspector.DefaultScriptMapping = function(debuggerModel, workspace, debuggerW
orkspaceBinding) | 34 WebInspector.DefaultScriptMapping = class { |
| 39 { | 35 /** |
| 36 * @param {!WebInspector.DebuggerModel} debuggerModel |
| 37 * @param {!WebInspector.Workspace} workspace |
| 38 * @param {!WebInspector.DebuggerWorkspaceBinding} debuggerWorkspaceBinding |
| 39 */ |
| 40 constructor(debuggerModel, workspace, debuggerWorkspaceBinding) { |
| 40 this._debuggerModel = debuggerModel; | 41 this._debuggerModel = debuggerModel; |
| 41 this._debuggerWorkspaceBinding = debuggerWorkspaceBinding; | 42 this._debuggerWorkspaceBinding = debuggerWorkspaceBinding; |
| 42 var projectId = WebInspector.DefaultScriptMapping.projectIdForTarget(debugge
rModel.target()); | 43 var projectId = WebInspector.DefaultScriptMapping.projectIdForTarget(debugge
rModel.target()); |
| 43 this._project = new WebInspector.ContentProviderBasedProject(workspace, proj
ectId, WebInspector.projectTypes.Debugger, ""); | 44 this._project = |
| 45 new WebInspector.ContentProviderBasedProject(workspace, projectId, WebIn
spector.projectTypes.Debugger, ''); |
| 44 /** @type {!Map.<string, !WebInspector.UISourceCode>} */ | 46 /** @type {!Map.<string, !WebInspector.UISourceCode>} */ |
| 45 this._uiSourceCodeForScriptId = new Map(); | 47 this._uiSourceCodeForScriptId = new Map(); |
| 46 /** @type {!Map.<!WebInspector.UISourceCode, string>} */ | 48 /** @type {!Map.<!WebInspector.UISourceCode, string>} */ |
| 47 this._scriptIdForUISourceCode = new Map(); | 49 this._scriptIdForUISourceCode = new Map(); |
| 48 this._eventListeners = [ | 50 this._eventListeners = [debuggerModel.addEventListener( |
| 49 debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalO
bjectCleared, this._debuggerReset, this) | 51 WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerRes
et, this)]; |
| 50 ]; | 52 } |
| 53 |
| 54 /** |
| 55 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 56 * @return {?WebInspector.Script} |
| 57 */ |
| 58 static scriptForUISourceCode(uiSourceCode) { |
| 59 return uiSourceCode[WebInspector.DefaultScriptMapping._scriptSymbol] || null
; |
| 60 } |
| 61 |
| 62 /** |
| 63 * @param {!WebInspector.Target} target |
| 64 * @return {string} |
| 65 */ |
| 66 static projectIdForTarget(target) { |
| 67 return 'debugger:' + target.id(); |
| 68 } |
| 69 |
| 70 /** |
| 71 * @override |
| 72 * @param {!WebInspector.DebuggerModel.Location} rawLocation |
| 73 * @return {!WebInspector.UILocation} |
| 74 */ |
| 75 rawLocationToUILocation(rawLocation) { |
| 76 var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location}
*/ (rawLocation); |
| 77 var script = debuggerModelLocation.script(); |
| 78 var uiSourceCode = this._uiSourceCodeForScriptId.get(script.scriptId); |
| 79 var lineNumber = debuggerModelLocation.lineNumber - (script.isInlineScriptWi
thSourceURL() ? script.lineOffset : 0); |
| 80 var columnNumber = debuggerModelLocation.columnNumber || 0; |
| 81 if (script.isInlineScriptWithSourceURL() && !lineNumber && columnNumber) |
| 82 columnNumber -= script.columnOffset; |
| 83 return uiSourceCode.uiLocation(lineNumber, columnNumber); |
| 84 } |
| 85 |
| 86 /** |
| 87 * @override |
| 88 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 89 * @param {number} lineNumber |
| 90 * @param {number} columnNumber |
| 91 * @return {?WebInspector.DebuggerModel.Location} |
| 92 */ |
| 93 uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) { |
| 94 var scriptId = this._scriptIdForUISourceCode.get(uiSourceCode); |
| 95 var script = this._debuggerModel.scriptForId(scriptId); |
| 96 if (script.isInlineScriptWithSourceURL()) |
| 97 return this._debuggerModel.createRawLocation( |
| 98 script, lineNumber + script.lineOffset, lineNumber ? columnNumber : co
lumnNumber + script.columnOffset); |
| 99 return this._debuggerModel.createRawLocation(script, lineNumber, columnNumbe
r); |
| 100 } |
| 101 |
| 102 /** |
| 103 * @param {!WebInspector.Script} script |
| 104 */ |
| 105 addScript(script) { |
| 106 var name = WebInspector.ParsedURL.extractName(script.sourceURL); |
| 107 var url = 'debugger:///VM' + script.scriptId + (name ? ' ' + name : ''); |
| 108 |
| 109 var uiSourceCode = this._project.createUISourceCode(url, WebInspector.resour
ceTypes.Script); |
| 110 uiSourceCode[WebInspector.DefaultScriptMapping._scriptSymbol] = script; |
| 111 this._uiSourceCodeForScriptId.set(script.scriptId, uiSourceCode); |
| 112 this._scriptIdForUISourceCode.set(uiSourceCode, script.scriptId); |
| 113 this._project.addUISourceCodeWithProvider(uiSourceCode, script, null); |
| 114 |
| 115 this._debuggerWorkspaceBinding.setSourceMapping(this._debuggerModel.target()
, uiSourceCode, this); |
| 116 this._debuggerWorkspaceBinding.pushSourceMapping(script, this); |
| 117 } |
| 118 |
| 119 /** |
| 120 * @override |
| 121 * @return {boolean} |
| 122 */ |
| 123 isIdentity() { |
| 124 return true; |
| 125 } |
| 126 |
| 127 /** |
| 128 * @override |
| 129 * @param {!WebInspector.UISourceCode} uiSourceCode |
| 130 * @param {number} lineNumber |
| 131 * @return {boolean} |
| 132 */ |
| 133 uiLineHasMapping(uiSourceCode, lineNumber) { |
| 134 return true; |
| 135 } |
| 136 |
| 137 _debuggerReset() { |
| 138 this._uiSourceCodeForScriptId.clear(); |
| 139 this._scriptIdForUISourceCode.clear(); |
| 140 this._project.reset(); |
| 141 } |
| 142 |
| 143 dispose() { |
| 144 WebInspector.EventTarget.removeEventListeners(this._eventListeners); |
| 145 this._debuggerReset(); |
| 146 this._project.dispose(); |
| 147 } |
| 51 }; | 148 }; |
| 52 | 149 |
| 53 WebInspector.DefaultScriptMapping._scriptSymbol = Symbol("symbol"); | 150 WebInspector.DefaultScriptMapping._scriptSymbol = Symbol('symbol'); |
| 54 | 151 |
| 55 /** | |
| 56 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 57 * @return {?WebInspector.Script} | |
| 58 */ | |
| 59 WebInspector.DefaultScriptMapping.scriptForUISourceCode = function(uiSourceCode) | |
| 60 { | |
| 61 return uiSourceCode[WebInspector.DefaultScriptMapping._scriptSymbol] || null
; | |
| 62 }; | |
| 63 | 152 |
| 64 WebInspector.DefaultScriptMapping.prototype = { | |
| 65 /** | |
| 66 * @override | |
| 67 * @param {!WebInspector.DebuggerModel.Location} rawLocation | |
| 68 * @return {!WebInspector.UILocation} | |
| 69 */ | |
| 70 rawLocationToUILocation: function(rawLocation) | |
| 71 { | |
| 72 var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Locat
ion} */ (rawLocation); | |
| 73 var script = debuggerModelLocation.script(); | |
| 74 var uiSourceCode = this._uiSourceCodeForScriptId.get(script.scriptId); | |
| 75 var lineNumber = debuggerModelLocation.lineNumber - (script.isInlineScri
ptWithSourceURL() ? script.lineOffset : 0); | |
| 76 var columnNumber = debuggerModelLocation.columnNumber || 0; | |
| 77 if (script.isInlineScriptWithSourceURL() && !lineNumber && columnNumber) | |
| 78 columnNumber -= script.columnOffset; | |
| 79 return uiSourceCode.uiLocation(lineNumber, columnNumber); | |
| 80 }, | |
| 81 | |
| 82 /** | |
| 83 * @override | |
| 84 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 85 * @param {number} lineNumber | |
| 86 * @param {number} columnNumber | |
| 87 * @return {?WebInspector.DebuggerModel.Location} | |
| 88 */ | |
| 89 uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber) | |
| 90 { | |
| 91 var scriptId = this._scriptIdForUISourceCode.get(uiSourceCode); | |
| 92 var script = this._debuggerModel.scriptForId(scriptId); | |
| 93 if (script.isInlineScriptWithSourceURL()) | |
| 94 return this._debuggerModel.createRawLocation(script, lineNumber + sc
ript.lineOffset, lineNumber ? columnNumber : columnNumber + script.columnOffset)
; | |
| 95 return this._debuggerModel.createRawLocation(script, lineNumber, columnN
umber); | |
| 96 }, | |
| 97 | |
| 98 /** | |
| 99 * @param {!WebInspector.Script} script | |
| 100 */ | |
| 101 addScript: function(script) | |
| 102 { | |
| 103 var name = WebInspector.ParsedURL.extractName(script.sourceURL); | |
| 104 var url = "debugger:///VM" + script.scriptId + (name ? " " + name : ""); | |
| 105 | |
| 106 var uiSourceCode = this._project.createUISourceCode(url, WebInspector.re
sourceTypes.Script); | |
| 107 uiSourceCode[WebInspector.DefaultScriptMapping._scriptSymbol] = script; | |
| 108 this._uiSourceCodeForScriptId.set(script.scriptId, uiSourceCode); | |
| 109 this._scriptIdForUISourceCode.set(uiSourceCode, script.scriptId); | |
| 110 this._project.addUISourceCodeWithProvider(uiSourceCode, script, null); | |
| 111 | |
| 112 this._debuggerWorkspaceBinding.setSourceMapping(this._debuggerModel.targ
et(), uiSourceCode, this); | |
| 113 this._debuggerWorkspaceBinding.pushSourceMapping(script, this); | |
| 114 }, | |
| 115 | |
| 116 /** | |
| 117 * @override | |
| 118 * @return {boolean} | |
| 119 */ | |
| 120 isIdentity: function() | |
| 121 { | |
| 122 return true; | |
| 123 }, | |
| 124 | |
| 125 /** | |
| 126 * @override | |
| 127 * @param {!WebInspector.UISourceCode} uiSourceCode | |
| 128 * @param {number} lineNumber | |
| 129 * @return {boolean} | |
| 130 */ | |
| 131 uiLineHasMapping: function(uiSourceCode, lineNumber) | |
| 132 { | |
| 133 return true; | |
| 134 }, | |
| 135 | |
| 136 _debuggerReset: function() | |
| 137 { | |
| 138 this._uiSourceCodeForScriptId.clear(); | |
| 139 this._scriptIdForUISourceCode.clear(); | |
| 140 this._project.reset(); | |
| 141 }, | |
| 142 | |
| 143 dispose: function() | |
| 144 { | |
| 145 WebInspector.EventTarget.removeEventListeners(this._eventListeners); | |
| 146 this._debuggerReset(); | |
| 147 this._project.dispose(); | |
| 148 } | |
| 149 }; | |
| 150 | |
| 151 /** | |
| 152 * @param {!WebInspector.Target} target | |
| 153 * @return {string} | |
| 154 */ | |
| 155 WebInspector.DefaultScriptMapping.projectIdForTarget = function(target) | |
| 156 { | |
| 157 return "debugger:" + target.id(); | |
| 158 }; | |
| OLD | NEW |