| Index: third_party/WebKit/Source/devtools/front_end/bindings/ResourceScriptMapping.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/bindings/ResourceScriptMapping.js b/third_party/WebKit/Source/devtools/front_end/bindings/ResourceScriptMapping.js
|
| index f6ca484b703ce5f9b79e9733506b3e4112d35f23..39d275c83d8c23aa2c1f95bebd174a480c92178f 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/bindings/ResourceScriptMapping.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/bindings/ResourceScriptMapping.js
|
| @@ -27,17 +27,18 @@
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
| -
|
| /**
|
| - * @constructor
|
| * @implements {WebInspector.DebuggerSourceMapping}
|
| - * @param {!WebInspector.DebuggerModel} debuggerModel
|
| - * @param {!WebInspector.Workspace} workspace
|
| - * @param {!WebInspector.NetworkMapping} networkMapping
|
| - * @param {!WebInspector.DebuggerWorkspaceBinding} debuggerWorkspaceBinding
|
| + * @unrestricted
|
| */
|
| -WebInspector.ResourceScriptMapping = function(debuggerModel, workspace, networkMapping, debuggerWorkspaceBinding)
|
| -{
|
| +WebInspector.ResourceScriptMapping = class {
|
| + /**
|
| + * @param {!WebInspector.DebuggerModel} debuggerModel
|
| + * @param {!WebInspector.Workspace} workspace
|
| + * @param {!WebInspector.NetworkMapping} networkMapping
|
| + * @param {!WebInspector.DebuggerWorkspaceBinding} debuggerWorkspaceBinding
|
| + */
|
| + constructor(debuggerModel, workspace, networkMapping, debuggerWorkspaceBinding) {
|
| this._target = debuggerModel.target();
|
| this._debuggerModel = debuggerModel;
|
| this._networkMapping = networkMapping;
|
| @@ -49,425 +50,400 @@ WebInspector.ResourceScriptMapping = function(debuggerModel, workspace, networkM
|
| this._uiSourceCodeToScriptFile = new Map();
|
|
|
| this._eventListeners = [
|
| - debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this),
|
| - workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this),
|
| - workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, this._uiSourceCodeRemoved, this)
|
| + debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.GlobalObjectCleared, this._debuggerReset, this),
|
| + workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeAdded, this._uiSourceCodeAdded, this),
|
| + workspace.addEventListener(WebInspector.Workspace.Events.UISourceCodeRemoved, this._uiSourceCodeRemoved, this)
|
| ];
|
| -};
|
| -
|
| -WebInspector.ResourceScriptMapping.prototype = {
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.DebuggerModel.Location} rawLocation
|
| - * @return {?WebInspector.UILocation}
|
| - */
|
| - rawLocationToUILocation: function(rawLocation)
|
| - {
|
| - var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (rawLocation);
|
| - var script = debuggerModelLocation.script();
|
| - if (!script)
|
| - return null;
|
| - var uiSourceCode = this._workspaceUISourceCodeForScript(script);
|
| - if (!uiSourceCode)
|
| - return null;
|
| - var scriptFile = this.scriptFile(uiSourceCode);
|
| - if (scriptFile && ((scriptFile.hasDivergedFromVM() && !scriptFile.isMergingToVM()) || scriptFile.isDivergingFromVM()))
|
| - return null;
|
| - var lineNumber = debuggerModelLocation.lineNumber - (script.isInlineScriptWithSourceURL() ? script.lineOffset : 0);
|
| - var columnNumber = debuggerModelLocation.columnNumber || 0;
|
| - if (script.isInlineScriptWithSourceURL() && !lineNumber && columnNumber)
|
| - columnNumber -= script.columnOffset;
|
| - return uiSourceCode.uiLocation(lineNumber, columnNumber);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {number} lineNumber
|
| - * @param {number} columnNumber
|
| - * @return {?WebInspector.DebuggerModel.Location}
|
| - */
|
| - uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber)
|
| - {
|
| - var scripts = this._scriptsForUISourceCode(uiSourceCode);
|
| - console.assert(scripts.length);
|
| - var script = scripts[scripts.length - 1];
|
| - if (script.isInlineScriptWithSourceURL())
|
| - return this._debuggerModel.createRawLocation(script, lineNumber + script.lineOffset, lineNumber ? columnNumber : columnNumber + script.columnOffset);
|
| - return this._debuggerModel.createRawLocation(script, lineNumber, columnNumber);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Script} script
|
| - */
|
| - addScript: function(script)
|
| - {
|
| - if (script.isAnonymousScript())
|
| - return;
|
| - this._debuggerWorkspaceBinding.pushSourceMapping(script, this);
|
| -
|
| - var uiSourceCode = this._workspaceUISourceCodeForScript(script);
|
| - if (!uiSourceCode)
|
| - return;
|
| -
|
| - this._bindUISourceCodeToScripts(uiSourceCode, [script]);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @return {boolean}
|
| - */
|
| - isIdentity: function()
|
| - {
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {number} lineNumber
|
| - * @return {boolean}
|
| - */
|
| - uiLineHasMapping: function(uiSourceCode, lineNumber)
|
| - {
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @return {?WebInspector.ResourceScriptFile}
|
| - */
|
| - scriptFile: function(uiSourceCode)
|
| - {
|
| - return this._uiSourceCodeToScriptFile.get(uiSourceCode) || null;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {?WebInspector.ResourceScriptFile} scriptFile
|
| - */
|
| - _setScriptFile: function(uiSourceCode, scriptFile)
|
| - {
|
| - if (scriptFile)
|
| - this._uiSourceCodeToScriptFile.set(uiSourceCode, scriptFile);
|
| - else
|
| - this._uiSourceCodeToScriptFile.remove(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _uiSourceCodeAdded: function(event)
|
| - {
|
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| - if (uiSourceCode.isFromServiceProject())
|
| - return;
|
| - var scripts = this._scriptsForUISourceCode(uiSourceCode);
|
| - if (!scripts.length)
|
| - return;
|
| -
|
| - this._bindUISourceCodeToScripts(uiSourceCode, scripts);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _uiSourceCodeRemoved: function(event)
|
| - {
|
| - var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| - if (uiSourceCode.isFromServiceProject() || !this._boundUISourceCodes.has(uiSourceCode))
|
| - return;
|
| -
|
| - this._unbindUISourceCode(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _updateLocations: function(uiSourceCode)
|
| - {
|
| - var scripts = this._scriptsForUISourceCode(uiSourceCode);
|
| - if (!scripts.length)
|
| - return;
|
| - for (var i = 0; i < scripts.length; ++i)
|
| - this._debuggerWorkspaceBinding.updateLocations(scripts[i]);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Script} script
|
| - * @return {?WebInspector.UISourceCode}
|
| - */
|
| - _workspaceUISourceCodeForScript: function(script)
|
| - {
|
| - if (script.isAnonymousScript())
|
| - return null;
|
| - return this._networkMapping.uiSourceCodeForScriptURL(script.sourceURL, script);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @return {!Array.<!WebInspector.Script>}
|
| - */
|
| - _scriptsForUISourceCode: function(uiSourceCode)
|
| - {
|
| - var target = WebInspector.NetworkProject.targetForUISourceCode(uiSourceCode);
|
| - if (target !== this._debuggerModel.target())
|
| - return [];
|
| - return this._debuggerModel.scriptsForSourceURL(uiSourceCode.url());
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {!Array.<!WebInspector.Script>} scripts
|
| - */
|
| - _bindUISourceCodeToScripts: function(uiSourceCode, scripts)
|
| - {
|
| - console.assert(scripts.length);
|
| - // Due to different listeners order, a script file could be created just before uiSourceCode
|
| - // for the corresponding script was created. Check that we don't create scriptFile twice.
|
| - var boundScriptFile = this.scriptFile(uiSourceCode);
|
| - if (boundScriptFile && boundScriptFile._hasScripts(scripts))
|
| - return;
|
| -
|
| - var scriptFile = new WebInspector.ResourceScriptFile(this, uiSourceCode, scripts);
|
| - this._setScriptFile(uiSourceCode, scriptFile);
|
| - for (var i = 0; i < scripts.length; ++i)
|
| - this._debuggerWorkspaceBinding.updateLocations(scripts[i]);
|
| - this._debuggerWorkspaceBinding.setSourceMapping(this._target, uiSourceCode, this);
|
| - this._boundUISourceCodes.add(uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - */
|
| - _unbindUISourceCode: function(uiSourceCode)
|
| - {
|
| - var scriptFile = this.scriptFile(uiSourceCode);
|
| - if (scriptFile) {
|
| - scriptFile.dispose();
|
| - this._setScriptFile(uiSourceCode, null);
|
| - }
|
| - this._debuggerWorkspaceBinding.setSourceMapping(this._target, uiSourceCode, null);
|
| - this._boundUISourceCodes.delete(uiSourceCode);
|
| - },
|
| -
|
| - _debuggerReset: function()
|
| - {
|
| - for (var uiSourceCode of this._boundUISourceCodes.valuesArray())
|
| - this._unbindUISourceCode(uiSourceCode);
|
| - this._boundUISourceCodes.clear();
|
| - console.assert(!this._uiSourceCodeToScriptFile.size);
|
| - },
|
| -
|
| - dispose: function()
|
| - {
|
| - WebInspector.EventTarget.removeEventListeners(this._eventListeners);
|
| - this._debuggerReset();
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.DebuggerModel.Location} rawLocation
|
| + * @return {?WebInspector.UILocation}
|
| + */
|
| + rawLocationToUILocation(rawLocation) {
|
| + var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (rawLocation);
|
| + var script = debuggerModelLocation.script();
|
| + if (!script)
|
| + return null;
|
| + var uiSourceCode = this._workspaceUISourceCodeForScript(script);
|
| + if (!uiSourceCode)
|
| + return null;
|
| + var scriptFile = this.scriptFile(uiSourceCode);
|
| + if (scriptFile &&
|
| + ((scriptFile.hasDivergedFromVM() && !scriptFile.isMergingToVM()) || scriptFile.isDivergingFromVM()))
|
| + return null;
|
| + var lineNumber = debuggerModelLocation.lineNumber - (script.isInlineScriptWithSourceURL() ? script.lineOffset : 0);
|
| + var columnNumber = debuggerModelLocation.columnNumber || 0;
|
| + if (script.isInlineScriptWithSourceURL() && !lineNumber && columnNumber)
|
| + columnNumber -= script.columnOffset;
|
| + return uiSourceCode.uiLocation(lineNumber, columnNumber);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {number} lineNumber
|
| + * @param {number} columnNumber
|
| + * @return {?WebInspector.DebuggerModel.Location}
|
| + */
|
| + uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) {
|
| + var scripts = this._scriptsForUISourceCode(uiSourceCode);
|
| + console.assert(scripts.length);
|
| + var script = scripts[scripts.length - 1];
|
| + if (script.isInlineScriptWithSourceURL())
|
| + return this._debuggerModel.createRawLocation(
|
| + script, lineNumber + script.lineOffset, lineNumber ? columnNumber : columnNumber + script.columnOffset);
|
| + return this._debuggerModel.createRawLocation(script, lineNumber, columnNumber);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Script} script
|
| + */
|
| + addScript(script) {
|
| + if (script.isAnonymousScript())
|
| + return;
|
| + this._debuggerWorkspaceBinding.pushSourceMapping(script, this);
|
| +
|
| + var uiSourceCode = this._workspaceUISourceCodeForScript(script);
|
| + if (!uiSourceCode)
|
| + return;
|
| +
|
| + this._bindUISourceCodeToScripts(uiSourceCode, [script]);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @return {boolean}
|
| + */
|
| + isIdentity() {
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {number} lineNumber
|
| + * @return {boolean}
|
| + */
|
| + uiLineHasMapping(uiSourceCode, lineNumber) {
|
| + return true;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @return {?WebInspector.ResourceScriptFile}
|
| + */
|
| + scriptFile(uiSourceCode) {
|
| + return this._uiSourceCodeToScriptFile.get(uiSourceCode) || null;
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {?WebInspector.ResourceScriptFile} scriptFile
|
| + */
|
| + _setScriptFile(uiSourceCode, scriptFile) {
|
| + if (scriptFile)
|
| + this._uiSourceCodeToScriptFile.set(uiSourceCode, scriptFile);
|
| + else
|
| + this._uiSourceCodeToScriptFile.remove(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _uiSourceCodeAdded(event) {
|
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| + if (uiSourceCode.isFromServiceProject())
|
| + return;
|
| + var scripts = this._scriptsForUISourceCode(uiSourceCode);
|
| + if (!scripts.length)
|
| + return;
|
| +
|
| + this._bindUISourceCodeToScripts(uiSourceCode, scripts);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _uiSourceCodeRemoved(event) {
|
| + var uiSourceCode = /** @type {!WebInspector.UISourceCode} */ (event.data);
|
| + if (uiSourceCode.isFromServiceProject() || !this._boundUISourceCodes.has(uiSourceCode))
|
| + return;
|
| +
|
| + this._unbindUISourceCode(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _updateLocations(uiSourceCode) {
|
| + var scripts = this._scriptsForUISourceCode(uiSourceCode);
|
| + if (!scripts.length)
|
| + return;
|
| + for (var i = 0; i < scripts.length; ++i)
|
| + this._debuggerWorkspaceBinding.updateLocations(scripts[i]);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Script} script
|
| + * @return {?WebInspector.UISourceCode}
|
| + */
|
| + _workspaceUISourceCodeForScript(script) {
|
| + if (script.isAnonymousScript())
|
| + return null;
|
| + return this._networkMapping.uiSourceCodeForScriptURL(script.sourceURL, script);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @return {!Array.<!WebInspector.Script>}
|
| + */
|
| + _scriptsForUISourceCode(uiSourceCode) {
|
| + var target = WebInspector.NetworkProject.targetForUISourceCode(uiSourceCode);
|
| + if (target !== this._debuggerModel.target())
|
| + return [];
|
| + return this._debuggerModel.scriptsForSourceURL(uiSourceCode.url());
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {!Array.<!WebInspector.Script>} scripts
|
| + */
|
| + _bindUISourceCodeToScripts(uiSourceCode, scripts) {
|
| + console.assert(scripts.length);
|
| + // Due to different listeners order, a script file could be created just before uiSourceCode
|
| + // for the corresponding script was created. Check that we don't create scriptFile twice.
|
| + var boundScriptFile = this.scriptFile(uiSourceCode);
|
| + if (boundScriptFile && boundScriptFile._hasScripts(scripts))
|
| + return;
|
| +
|
| + var scriptFile = new WebInspector.ResourceScriptFile(this, uiSourceCode, scripts);
|
| + this._setScriptFile(uiSourceCode, scriptFile);
|
| + for (var i = 0; i < scripts.length; ++i)
|
| + this._debuggerWorkspaceBinding.updateLocations(scripts[i]);
|
| + this._debuggerWorkspaceBinding.setSourceMapping(this._target, uiSourceCode, this);
|
| + this._boundUISourceCodes.add(uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + */
|
| + _unbindUISourceCode(uiSourceCode) {
|
| + var scriptFile = this.scriptFile(uiSourceCode);
|
| + if (scriptFile) {
|
| + scriptFile.dispose();
|
| + this._setScriptFile(uiSourceCode, null);
|
| }
|
| + this._debuggerWorkspaceBinding.setSourceMapping(this._target, uiSourceCode, null);
|
| + this._boundUISourceCodes.delete(uiSourceCode);
|
| + }
|
| +
|
| + _debuggerReset() {
|
| + for (var uiSourceCode of this._boundUISourceCodes.valuesArray())
|
| + this._unbindUISourceCode(uiSourceCode);
|
| + this._boundUISourceCodes.clear();
|
| + console.assert(!this._uiSourceCodeToScriptFile.size);
|
| + }
|
| +
|
| + dispose() {
|
| + WebInspector.EventTarget.removeEventListeners(this._eventListeners);
|
| + this._debuggerReset();
|
| + }
|
| };
|
|
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.Object}
|
| - * @param {!WebInspector.ResourceScriptMapping} resourceScriptMapping
|
| - * @param {!WebInspector.UISourceCode} uiSourceCode
|
| - * @param {!Array.<!WebInspector.Script>} scripts
|
| + * @unrestricted
|
| */
|
| -WebInspector.ResourceScriptFile = function(resourceScriptMapping, uiSourceCode, scripts)
|
| -{
|
| +WebInspector.ResourceScriptFile = class extends WebInspector.Object {
|
| + /**
|
| + * @param {!WebInspector.ResourceScriptMapping} resourceScriptMapping
|
| + * @param {!WebInspector.UISourceCode} uiSourceCode
|
| + * @param {!Array.<!WebInspector.Script>} scripts
|
| + */
|
| + constructor(resourceScriptMapping, uiSourceCode, scripts) {
|
| + super();
|
| console.assert(scripts.length);
|
|
|
| this._resourceScriptMapping = resourceScriptMapping;
|
| this._uiSourceCode = uiSourceCode;
|
|
|
| if (this._uiSourceCode.contentType().isScript())
|
| - this._script = scripts[scripts.length - 1];
|
| -
|
| - this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._workingCopyChanged, this);
|
| - this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this);
|
| -};
|
| -
|
| -/** @enum {symbol} */
|
| -WebInspector.ResourceScriptFile.Events = {
|
| - DidMergeToVM: Symbol("DidMergeToVM"),
|
| - DidDivergeFromVM: Symbol("DidDivergeFromVM"),
|
| -};
|
| -
|
| -WebInspector.ResourceScriptFile.prototype = {
|
| - /**
|
| - * @param {!Array.<!WebInspector.Script>} scripts
|
| - * @return {boolean}
|
| - */
|
| - _hasScripts: function(scripts)
|
| - {
|
| - return this._script && this._script === scripts[0];
|
| - },
|
| + this._script = scripts[scripts.length - 1];
|
| +
|
| + this._uiSourceCode.addEventListener(
|
| + WebInspector.UISourceCode.Events.WorkingCopyChanged, this._workingCopyChanged, this);
|
| + this._uiSourceCode.addEventListener(
|
| + WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this);
|
| + }
|
| +
|
| + /**
|
| + * @param {!Array.<!WebInspector.Script>} scripts
|
| + * @return {boolean}
|
| + */
|
| + _hasScripts(scripts) {
|
| + return this._script && this._script === scripts[0];
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + _isDiverged() {
|
| + if (this._uiSourceCode.isDirty())
|
| + return true;
|
| + if (!this._script)
|
| + return false;
|
| + if (typeof this._scriptSource === 'undefined')
|
| + return false;
|
| + var workingCopy = this._uiSourceCode.workingCopy();
|
| +
|
| + // Match ignoring sourceURL.
|
| + if (!workingCopy.startsWith(this._scriptSource.trimRight()))
|
| + return true;
|
| + var suffix = this._uiSourceCode.workingCopy().substr(this._scriptSource.length);
|
| + return !!suffix.length && !suffix.match(WebInspector.Script.sourceURLRegex);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _workingCopyChanged(event) {
|
| + this._update();
|
| + }
|
| +
|
| + _workingCopyCommitted(event) {
|
| + if (this._uiSourceCode.project().type() === WebInspector.projectTypes.Snippets)
|
| + return;
|
| + if (!this._script)
|
| + return;
|
| + var debuggerModel = this._resourceScriptMapping._debuggerModel;
|
| + var source = this._uiSourceCode.workingCopy();
|
| + debuggerModel.setScriptSource(this._script.scriptId, source, scriptSourceWasSet.bind(this));
|
|
|
| /**
|
| - * @return {boolean}
|
| + * @param {?string} error
|
| + * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
|
| + * @this {WebInspector.ResourceScriptFile}
|
| */
|
| - _isDiverged: function()
|
| - {
|
| - if (this._uiSourceCode.isDirty())
|
| - return true;
|
| - if (!this._script)
|
| - return false;
|
| - if (typeof this._scriptSource === "undefined")
|
| - return false;
|
| - var workingCopy = this._uiSourceCode.workingCopy();
|
| -
|
| - // Match ignoring sourceURL.
|
| - if (!workingCopy.startsWith(this._scriptSource.trimRight()))
|
| - return true;
|
| - var suffix = this._uiSourceCode.workingCopy().substr(this._scriptSource.length);
|
| - return !!suffix.length && !suffix.match(WebInspector.Script.sourceURLRegex);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _workingCopyChanged: function(event)
|
| - {
|
| - this._update();
|
| - },
|
| -
|
| - _workingCopyCommitted: function(event)
|
| - {
|
| - if (this._uiSourceCode.project().type() === WebInspector.projectTypes.Snippets)
|
| - return;
|
| - if (!this._script)
|
| - return;
|
| - var debuggerModel = this._resourceScriptMapping._debuggerModel;
|
| - var source = this._uiSourceCode.workingCopy();
|
| - debuggerModel.setScriptSource(this._script.scriptId, source, scriptSourceWasSet.bind(this));
|
| -
|
| - /**
|
| - * @param {?string} error
|
| - * @param {!RuntimeAgent.ExceptionDetails=} exceptionDetails
|
| - * @this {WebInspector.ResourceScriptFile}
|
| - */
|
| - function scriptSourceWasSet(error, exceptionDetails)
|
| - {
|
| - if (!error && !exceptionDetails)
|
| - this._scriptSource = source;
|
| - this._update();
|
| -
|
| - if (!error && !exceptionDetails)
|
| - return;
|
| - if (!exceptionDetails) {
|
| - WebInspector.console.addMessage(WebInspector.UIString("LiveEdit failed: %s", error), WebInspector.Console.MessageLevel.Warning);
|
| - return;
|
| - }
|
| - var messageText = WebInspector.UIString("LiveEdit compile failed: %s", exceptionDetails.text);
|
| - this._uiSourceCode.addLineMessage(WebInspector.UISourceCode.Message.Level.Error, messageText, exceptionDetails.lineNumber, exceptionDetails.columnNumber);
|
| - }
|
| - },
|
| -
|
| - _update: function()
|
| - {
|
| - if (this._isDiverged() && !this._hasDivergedFromVM)
|
| - this._divergeFromVM();
|
| - else if (!this._isDiverged() && this._hasDivergedFromVM)
|
| - this._mergeToVM();
|
| - },
|
| -
|
| - _divergeFromVM: function()
|
| - {
|
| - this._isDivergingFromVM = true;
|
| - this._resourceScriptMapping._updateLocations(this._uiSourceCode);
|
| - delete this._isDivergingFromVM;
|
| - this._hasDivergedFromVM = true;
|
| - this.dispatchEventToListeners(WebInspector.ResourceScriptFile.Events.DidDivergeFromVM, this._uiSourceCode);
|
| - },
|
| -
|
| - _mergeToVM: function()
|
| - {
|
| - delete this._hasDivergedFromVM;
|
| - this._isMergingToVM = true;
|
| - this._resourceScriptMapping._updateLocations(this._uiSourceCode);
|
| - delete this._isMergingToVM;
|
| - this.dispatchEventToListeners(WebInspector.ResourceScriptFile.Events.DidMergeToVM, this._uiSourceCode);
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - hasDivergedFromVM: function()
|
| - {
|
| - return this._hasDivergedFromVM;
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - isDivergingFromVM: function()
|
| - {
|
| - return this._isDivergingFromVM;
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - isMergingToVM: function()
|
| - {
|
| - return this._isMergingToVM;
|
| - },
|
| -
|
| - checkMapping: function()
|
| - {
|
| - if (!this._script || typeof this._scriptSource !== "undefined") {
|
| - this._mappingCheckedForTest();
|
| - return;
|
| - }
|
| - this._script.requestContent().then(callback.bind(this));
|
| -
|
| - /**
|
| - * @param {?string} source
|
| - * @this {WebInspector.ResourceScriptFile}
|
| - */
|
| - function callback(source)
|
| - {
|
| - this._scriptSource = source;
|
| - this._update();
|
| - this._mappingCheckedForTest();
|
| - }
|
| - },
|
| -
|
| - _mappingCheckedForTest: function() { },
|
| -
|
| - /**
|
| - * @return {?WebInspector.Target}
|
| - */
|
| - target: function()
|
| - {
|
| - if (!this._script)
|
| - return null;
|
| - return this._script.target();
|
| - },
|
| -
|
| - dispose: function()
|
| - {
|
| - this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyChanged, this._workingCopyChanged, this);
|
| - this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this);
|
| - },
|
| -
|
| - /**
|
| - * @param {string} sourceMapURL
|
| - */
|
| - addSourceMapURL: function(sourceMapURL)
|
| - {
|
| - if (!this._script)
|
| - return;
|
| - this._script.addSourceMapURL(sourceMapURL);
|
| - },
|
| + function scriptSourceWasSet(error, exceptionDetails) {
|
| + if (!error && !exceptionDetails)
|
| + this._scriptSource = source;
|
| + this._update();
|
| +
|
| + if (!error && !exceptionDetails)
|
| + return;
|
| + if (!exceptionDetails) {
|
| + WebInspector.console.addMessage(
|
| + WebInspector.UIString('LiveEdit failed: %s', error), WebInspector.Console.MessageLevel.Warning);
|
| + return;
|
| + }
|
| + var messageText = WebInspector.UIString('LiveEdit compile failed: %s', exceptionDetails.text);
|
| + this._uiSourceCode.addLineMessage(
|
| + WebInspector.UISourceCode.Message.Level.Error, messageText, exceptionDetails.lineNumber,
|
| + exceptionDetails.columnNumber);
|
| + }
|
| + }
|
| +
|
| + _update() {
|
| + if (this._isDiverged() && !this._hasDivergedFromVM)
|
| + this._divergeFromVM();
|
| + else if (!this._isDiverged() && this._hasDivergedFromVM)
|
| + this._mergeToVM();
|
| + }
|
| +
|
| + _divergeFromVM() {
|
| + this._isDivergingFromVM = true;
|
| + this._resourceScriptMapping._updateLocations(this._uiSourceCode);
|
| + delete this._isDivergingFromVM;
|
| + this._hasDivergedFromVM = true;
|
| + this.dispatchEventToListeners(WebInspector.ResourceScriptFile.Events.DidDivergeFromVM, this._uiSourceCode);
|
| + }
|
| +
|
| + _mergeToVM() {
|
| + delete this._hasDivergedFromVM;
|
| + this._isMergingToVM = true;
|
| + this._resourceScriptMapping._updateLocations(this._uiSourceCode);
|
| + delete this._isMergingToVM;
|
| + this.dispatchEventToListeners(WebInspector.ResourceScriptFile.Events.DidMergeToVM, this._uiSourceCode);
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + hasDivergedFromVM() {
|
| + return this._hasDivergedFromVM;
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + isDivergingFromVM() {
|
| + return this._isDivergingFromVM;
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + isMergingToVM() {
|
| + return this._isMergingToVM;
|
| + }
|
| +
|
| + checkMapping() {
|
| + if (!this._script || typeof this._scriptSource !== 'undefined') {
|
| + this._mappingCheckedForTest();
|
| + return;
|
| + }
|
| + this._script.requestContent().then(callback.bind(this));
|
|
|
| /**
|
| - * @return {boolean}
|
| + * @param {?string} source
|
| + * @this {WebInspector.ResourceScriptFile}
|
| */
|
| - hasSourceMapURL: function()
|
| - {
|
| - return this._script && !!this._script.sourceMapURL;
|
| - },
|
| + function callback(source) {
|
| + this._scriptSource = source;
|
| + this._update();
|
| + this._mappingCheckedForTest();
|
| + }
|
| + }
|
| +
|
| + _mappingCheckedForTest() {
|
| + }
|
| +
|
| + /**
|
| + * @return {?WebInspector.Target}
|
| + */
|
| + target() {
|
| + if (!this._script)
|
| + return null;
|
| + return this._script.target();
|
| + }
|
| +
|
| + dispose() {
|
| + this._uiSourceCode.removeEventListener(
|
| + WebInspector.UISourceCode.Events.WorkingCopyChanged, this._workingCopyChanged, this);
|
| + this._uiSourceCode.removeEventListener(
|
| + WebInspector.UISourceCode.Events.WorkingCopyCommitted, this._workingCopyCommitted, this);
|
| + }
|
| +
|
| + /**
|
| + * @param {string} sourceMapURL
|
| + */
|
| + addSourceMapURL(sourceMapURL) {
|
| + if (!this._script)
|
| + return;
|
| + this._script.addSourceMapURL(sourceMapURL);
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + hasSourceMapURL() {
|
| + return this._script && !!this._script.sourceMapURL;
|
| + }
|
| +};
|
|
|
| - __proto__: WebInspector.Object.prototype
|
| +/** @enum {symbol} */
|
| +WebInspector.ResourceScriptFile.Events = {
|
| + DidMergeToVM: Symbol('DidMergeToVM'),
|
| + DidDivergeFromVM: Symbol('DidDivergeFromVM'),
|
| };
|
|
|