15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Apple Inc. All Rights Reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 28aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @extends {WebInspector.TargetAwareObject} 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @implements {WebInspector.ContentProvider} 30aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch * @param {!WebInspector.Target} target 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} scriptId 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} sourceURL 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} startLine 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} startColumn 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} endLine 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} endColumn 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} isContentScript 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string=} sourceMapURL 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean=} hasSourceURL 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 41aafa69cb17c9d6606c07663ade5f81388a2c5986Ben MurdochWebInspector.Script = function(target, scriptId, sourceURL, startLine, startColumn, endLine, endColumn, isContentScript, sourceMapURL, hasSourceURL) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 43aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebInspector.TargetAwareObject.call(this, target); 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.scriptId = scriptId; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.sourceURL = sourceURL; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.lineOffset = startLine; 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.columnOffset = startColumn; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.endLine = endLine; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.endColumn = endColumn; 5010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch this._isContentScript = isContentScript; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.sourceMapURL = sourceMapURL; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.hasSourceURL = hasSourceURL; 537757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** @type {!Set.<!WebInspector.Script.Location>} */ 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._locations = new Set(); 557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** @type {!Array.<!WebInspector.SourceMapping>} */ 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._sourceMappings = []; 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.Script.Events = { 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ScriptEdited: "ScriptEdited", 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Script.snippetSourceURLPrefix = "snippets:///"; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo LiuWebInspector.Script.sourceURLRegex = /\n[\040\t]*\/\/[@#]\ssourceURL=\s*(\S*?)\s*$/mg; 66f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/** 6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} source 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {string} 7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebInspector.Script._trimSourceURLComment = function(source) 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return source.replace(WebInspector.Script.sourceURLRegex, ""); 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}, 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Script.prototype = { 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 7910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch * @return {boolean} 8010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch */ 8110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch isContentScript: function() 8210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch { 8310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return this._isContentScript; 8410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch }, 8510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 8610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch /** 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {string} 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contentURL: function() 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.sourceURL; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 95a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.ResourceType} 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) contentType: function() 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.resourceTypes.Script; 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) * @param {function(?string)} callback 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) requestContent: function(callback) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this._source) { 1081e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) callback(this._source); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @this {WebInspector.Script} 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?Protocol.Error} error 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} source 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function didGetScriptSource(error, source) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) this._source = WebInspector.Script._trimSourceURLComment(error ? "" : source); 1201e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) callback(this._source); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.scriptId) { 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Script failed to parse. 124d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) this.target().debuggerAgent().getScriptSource(this.scriptId, didGetScriptSource.bind(this)); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) callback(""); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} query 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} caseSensitive 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} isRegex 133a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!Array.<!PageAgent.SearchMatch>)} callback 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) searchInContent: function(query, caseSensitive, isRegex, callback) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?Protocol.Error} error 139a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!PageAgent.SearchMatch>} searchMatches 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function innerCallback(error, searchMatches) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (error) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) console.error(error); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var result = []; 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < searchMatches.length; ++i) { 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var searchMatch = new WebInspector.ContentProvider.SearchMatch(searchMatches[i].lineNumber, searchMatches[i].lineContent); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result.push(searchMatch); 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(result || []); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (this.scriptId) { 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Script failed to parse. 155d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) this.target().debuggerAgent().searchInContent(this.scriptId, query, caseSensitive, isRegex, innerCallback); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback([]); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 16109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @param {string} source 16209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {string} 16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) _appendSourceURLCommentIfNeeded: function(source) 16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) { 16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!this.hasSourceURL) 16709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return source; 16809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return source + "\n //# sourceURL=" + this.sourceURL; 16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) }, 17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) /** 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} newSource 173a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(?Protocol.Error, !DebuggerAgent.SetScriptSourceError=, !Array.<!DebuggerAgent.CallFrame>=, !DebuggerAgent.StackTrace=, boolean=)} callback 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) editSource: function(newSource, callback) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @this {WebInspector.Script} 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?Protocol.Error} error 180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DebuggerAgent.SetScriptSourceError=} errorData 181a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!DebuggerAgent.CallFrame>=} callFrames 182a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Object=} debugData 183a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!DebuggerAgent.StackTrace=} asyncStackTrace 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 185a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) function didEditScriptSource(error, errorData, callFrames, debugData, asyncStackTrace) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: support debugData.stack_update_needs_step_in flag by calling WebInspector.debugger_model.callStackModified 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!error) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._source = newSource; 190e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var needsStepIn = !!debugData && debugData["stack_update_needs_step_in"] === true; 191a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) callback(error, errorData, callFrames, asyncStackTrace, needsStepIn); 192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!error) 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.Script.Events.ScriptEdited, newSource); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 195a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) newSource = WebInspector.Script._trimSourceURLComment(newSource); 19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // We append correct sourceURL to script for consistency only. It's not actually needed for things to work correctly. 19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) newSource = this._appendSourceURLCommentIfNeeded(newSource); 19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 200a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (this.scriptId) 201d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) this.target().debuggerAgent().setScriptSource(this.scriptId, newSource, undefined, didEditScriptSource.bind(this)); 202a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) else 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback("Script failed to parse"); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isInlineScript: function() 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var startsAtZero = !this.lineOffset && !this.columnOffset; 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!this.sourceURL && !startsAtZero; 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isAnonymousScript: function() 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !this.sourceURL; 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @return {boolean} 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) isSnippet: function() 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 228e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return !!this.sourceURL && this.sourceURL.startsWith(WebInspector.Script.snippetSourceURLPrefix); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 232f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu * @return {boolean} 233f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu */ 234f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu isFramework: function() 235f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu { 236f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (!WebInspector.experimentsSettings.frameworksDebuggingSupport.isEnabled()) 237f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return false; 238f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (!WebInspector.settings.skipStackFramesSwitch.get()) 239f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return false; 240f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu var regex = WebInspector.settings.skipStackFramesPattern.asRegExp(); 241f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu return regex ? regex.test(this.sourceURL) : false; 242f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu }, 243f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu 244f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu /** 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} lineNumber 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number=} columnNumber 247a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.UILocation} 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rawLocationToUILocation: function(lineNumber, columnNumber) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var uiLocation; 252aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch var rawLocation = new WebInspector.DebuggerModel.Location(this.target(), this.scriptId, lineNumber, columnNumber || 0); 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = this._sourceMappings.length - 1; !uiLocation && i >= 0; --i) 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) uiLocation = this._sourceMappings[i].rawLocationToUILocation(rawLocation); 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.assert(uiLocation, "Script raw location can not be mapped to any ui location."); 256d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return /** @type {!WebInspector.UILocation} */ (uiLocation); 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch * @param {!WebInspector.SourceMapping} sourceMapping 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) pushSourceMapping: function(sourceMapping) 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._sourceMappings.push(sourceMapping); 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.updateLocations(); 266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 268d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) /** 269d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) * @return {!WebInspector.SourceMapping} 270d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) */ 271d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) popSourceMapping: function() 272d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) { 273d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) var sourceMapping = this._sourceMappings.pop(); 274d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) this.updateLocations(); 275d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return sourceMapping; 276d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) }, 277d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) updateLocations: function() 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 280d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) var items = this._locations.values(); 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < items.length; ++i) 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) items[i].update(); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 286a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DebuggerModel.Location} rawLocation 287a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.UILocation):(boolean|undefined)} updateDelegate 288a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.Script.Location} 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) createLiveLocation: function(rawLocation, updateDelegate) 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) console.assert(rawLocation.scriptId === this.scriptId); 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var location = new WebInspector.Script.Location(this, rawLocation, updateDelegate); 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._locations.add(location); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) location.update(); 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return location; 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 299aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch __proto__: WebInspector.TargetAwareObject.prototype 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @extends {WebInspector.LiveLocation} 305a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Script} script 306a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.DebuggerModel.Location} rawLocation 307a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!WebInspector.UILocation):(boolean|undefined)} updateDelegate 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Script.Location = function(script, rawLocation, updateDelegate) 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.LiveLocation.call(this, rawLocation, updateDelegate); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._script = script; 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.Script.Location.prototype = { 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 317a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @return {!WebInspector.UILocation} 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) uiLocation: function() 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 321a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var debuggerModelLocation = /** @type {!WebInspector.DebuggerModel.Location} */ (this.rawLocation()); 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this._script.rawLocationToUILocation(debuggerModelLocation.lineNumber, debuggerModelLocation.columnNumber); 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dispose: function() 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebInspector.LiveLocation.prototype.dispose.call(this); 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._script._locations.remove(this); 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) __proto__: WebInspector.LiveLocation.prototype 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 333