Changeset 110864 in webkit
- Timestamp:
- Mar 15, 2012 11:26:11 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r110860 r110864 1 2012-03-15 Vsevolod Vlasov <vsevik@chromium.org> 2 3 Web Inspector: MainScriptMapping should detect snippet scripts by means of sourceURL set before evaluation. 4 https://bugs.webkit.org/show_bug.cgi?id=81031 5 6 Reviewed by Pavel Feldman. 7 8 * inspector/debugger/snippets-model-expected.txt: 9 * inspector/debugger/snippets-model.html: 10 1 11 2012-03-15 Elliot Poger <epoger@google.com> 2 12 -
trunk/LayoutTests/inspector/debugger/snippets-model-expected.txt
r110576 r110864 1 Tests how snippets model stores, saves and loads snippets1 Tests snippets model. 2 2 3 4 Running: testCreateRenameEditDelete 3 5 Dumping saved snippets: 4 6 Dumping model snippets: … … 34 36 Dumping model snippets: 35 37 38 Running: testEvaluate 39 Last evaluation source url for snippet: snippets://1_1 40 Last evaluation source url for snippet: snippets://2_2 41 Last evaluation source url for snippet: snippets://1_3 42 -
trunk/LayoutTests/inspector/debugger/snippets-model.html
r110576 r110864 5 5 function test() 6 6 { 7 function dumpSnippets(snippets)7 function resetSnippetsSettings() 8 8 { 9 for (var i = 0; i < snippets.length; ++i) { 10 var snippet = snippets[i]; 11 InspectorTest.addResult(" Snippet: id = " + snippet.id + ", name = '" + snippet.name + "', content = '" + snippet.content + "'."); 12 } 13 } 14 15 function dumpSavedSnippets() 16 { 17 InspectorTest.addResult("Dumping saved snippets:"); 18 dumpSnippets(WebInspector.snippetsModel._snippetsSetting.get()); 19 } 20 21 function dumpModelSnippets() 22 { 23 InspectorTest.addResult("Dumping model snippets:"); 24 dumpSnippets(WebInspector.snippetsModel.snippets); 9 WebInspector.snippetsModel._lastSnippetIdentifierSetting.set(0); 10 WebInspector.snippetsModel._snippetsSetting.set([]); 11 WebInspector.snippetsModel._lastSnippetEvaluationIndexSetting.set(0); 25 12 } 26 13 … … 29 16 WebInspector.snippetsModel = new WebInspector.SnippetsModel(); 30 17 31 dumpSavedSnippets(); 32 dumpModelSnippets(); 33 var snippet = WebInspector.snippetsModel.createSnippet(); 34 InspectorTest.addResult("Snippet created."); 35 dumpSavedSnippets(); 36 dumpModelSnippets(); 37 snippet.name = "New snippet name"; 38 InspectorTest.addResult("Snippet renamed."); 39 dumpSavedSnippets(); 40 dumpModelSnippets(); 41 snippet.content = "New snippet content"; 42 InspectorTest.addResult("Snippet content changed."); 43 dumpSavedSnippets(); 44 dumpModelSnippets(); 45 var anotherSnippet = WebInspector.snippetsModel.createSnippet(); 46 InspectorTest.addResult("Another snippet created."); 47 dumpSavedSnippets(); 48 dumpModelSnippets(); 49 WebInspector.snippetsModel.deleteSnippet(snippet); 50 InspectorTest.addResult("Snippet deleted."); 51 dumpSavedSnippets(); 52 dumpModelSnippets(); 53 WebInspector.snippetsModel.deleteSnippet(anotherSnippet); 54 InspectorTest.addResult("Another snippet deleted."); 55 dumpSavedSnippets(); 56 dumpModelSnippets(); 18 InspectorTest.runTestSuite([ 19 function testCreateRenameEditDelete(next) 20 { 21 function dumpSnippets(snippets) 22 { 23 for (var i = 0; i < snippets.length; ++i) { 24 var snippet = snippets[i]; 25 InspectorTest.addResult(" Snippet: id = " + snippet.id + ", name = '" + snippet.name + "', content = '" + snippet.content + "'."); 26 } 27 } 57 28 58 InspectorTest.completeTest(); 29 function dumpSavedSnippets() 30 { 31 InspectorTest.addResult("Dumping saved snippets:"); 32 dumpSnippets(WebInspector.snippetsModel._snippetsSetting.get()); 33 } 34 35 function dumpModelSnippets() 36 { 37 InspectorTest.addResult("Dumping model snippets:"); 38 var snippets = []; 39 for (var id in WebInspector.snippetsModel._snippets) 40 snippets.push(WebInspector.snippetsModel._snippets[id]); 41 dumpSnippets(snippets); 42 } 43 44 resetSnippetsSettings(); 45 46 dumpSavedSnippets(); 47 dumpModelSnippets(); 48 var snippet = WebInspector.snippetsModel.createSnippet(); 49 InspectorTest.addResult("Snippet created."); 50 dumpSavedSnippets(); 51 dumpModelSnippets(); 52 snippet.name = "New snippet name"; 53 InspectorTest.addResult("Snippet renamed."); 54 dumpSavedSnippets(); 55 dumpModelSnippets(); 56 snippet.content = "New snippet content"; 57 InspectorTest.addResult("Snippet content changed."); 58 dumpSavedSnippets(); 59 dumpModelSnippets(); 60 var anotherSnippet = WebInspector.snippetsModel.createSnippet(); 61 InspectorTest.addResult("Another snippet created."); 62 dumpSavedSnippets(); 63 dumpModelSnippets(); 64 WebInspector.snippetsModel.deleteSnippet(snippet); 65 InspectorTest.addResult("Snippet deleted."); 66 dumpSavedSnippets(); 67 dumpModelSnippets(); 68 WebInspector.snippetsModel.deleteSnippet(anotherSnippet); 69 InspectorTest.addResult("Another snippet deleted."); 70 dumpSavedSnippets(); 71 dumpModelSnippets(); 72 73 next(); 74 }, 75 76 function testEvaluate(next) 77 { 78 resetSnippetsSettings(); 79 80 var snippet1 = WebInspector.snippetsModel.createSnippet(); 81 snippet1.name = "Snippet1"; 82 snippet1.content = ""; 83 snippet1.content += "// This snippet does nothing.\n"; 84 snippet1.content += "var i = 2+2;\n"; 85 var snippet2 = WebInspector.snippetsModel.createSnippet(); 86 snippet2.name = "Snippet2"; 87 snippet2.content = ""; 88 snippet2.content += "// This snippet creates a function that does nothing.\n"; 89 snippet2.content += "function doesNothing()\n"; 90 snippet2.content += "{\n"; 91 snippet2.content += " var i = 2+2;\n"; 92 snippet2.content += "}\n"; 93 94 function evaluateSnippetAndDumpEvaluationDetails(snippet, callback) 95 { 96 InspectorTest.addSniffer(WebInspector.SnippetsScriptMapping.prototype, "addScript", dumpScript); 97 snippet.evaluate(); 98 InspectorTest.addResult("Last evaluation source url for snippet: " + snippet._lastEvaluationSourceURL); 99 InspectorTest.assertEquals(snippet, WebInspector.snippetsModel.snippetForSourceURL(snippet._lastEvaluationSourceURL), "Snippet can not be identified by its evaluation sourceURL."); 100 101 function dumpScript(script) 102 { 103 InspectorTest.addResult("Snippet script added, sourceURL = " + script.sourceURL); 104 callback(); 105 } 106 107 // FIXME: This should be removed once snippets evaluation itself is implemented. 108 callback(); 109 } 110 111 evaluateSnippetAndDumpEvaluationDetails(snippet1, step2); 112 113 function step2() 114 { 115 evaluateSnippetAndDumpEvaluationDetails(snippet2, step3); 116 } 117 118 function step3() 119 { 120 evaluateSnippetAndDumpEvaluationDetails(snippet1, next); 121 } 122 } 123 ]); 59 124 }; 60 125 </script> 61 126 </head> 62 127 <body onload="runTest()"> 63 <p>Tests how snippets model stores, saves and loads snippets</p>128 <p>Tests snippets model.</p> 64 129 </body> 65 130 </html> -
trunk/Source/WebCore/ChangeLog
r110857 r110864 1 2012-03-15 Vsevolod Vlasov <vsevik@chromium.org> 2 3 Web Inspector: MainScriptMapping should detect snippet scripts by means of sourceURL set before evaluation. 4 https://bugs.webkit.org/show_bug.cgi?id=81031 5 6 Reviewed by Pavel Feldman. 7 8 * inspector/front-end/SnippetsModel.js: 9 (WebInspector.SnippetsModel): 10 (WebInspector.SnippetsModel.prototype._saveSettings): 11 (WebInspector.SnippetsModel.prototype.deleteSnippet): 12 (WebInspector.SnippetsModel.prototype._snippetAdded): 13 (WebInspector.SnippetsModel.prototype._sourceURLForSnippet): 14 (WebInspector.SnippetsModel.prototype.snippetIdForSourceURL): 15 (WebInspector.SnippetsModel.prototype.snippetForSourceURL): 16 (WebInspector.Snippet.prototype.evaluate): 17 (WebInspector.SnippetsScriptMapping): 18 (WebInspector.SnippetsScriptMapping.prototype.uiLocationToRawLocation.get if): 19 (WebInspector.SnippetsScriptMapping.prototype.uiLocationToRawLocation): 20 (WebInspector.SnippetsScriptMapping.prototype._releasedUISourceCodes): 21 (WebInspector.SnippetsScriptMapping.prototype._snippetAdded): 22 (WebInspector.SnippetsScriptMapping.prototype._snippetWillBeEvaluated): 23 (WebInspector.SnippetsScriptMapping.prototype._snippetRemoved.get this): 24 (WebInspector.SnippetsScriptMapping.prototype._snippetRemoved): 25 1 26 2012-03-15 Kevin Ollivier <kevino@theolliviers.com> 2 27 -
trunk/Source/WebCore/inspector/front-end/SnippetsModel.js
r110694 r110864 33 33 WebInspector.SnippetsModel = function() 34 34 { 35 /** @type {Array.<WebInspector.Snippet>} */ this._snippets;35 this._snippets = {}; 36 36 37 37 this._lastSnippetIdentifierSetting = WebInspector.settings.createSetting("lastSnippetIdentifier", 0); 38 38 this._snippetsSetting = WebInspector.settings.createSetting("snippets", []); 39 this._lastSnippetEvaluationIndexSetting = WebInspector.settings.createSetting("lastSnippetEvaluationIndex", 0); 39 40 40 41 this._loadSettings(); 41 42 } 43 44 WebInspector.SnippetsModel.snippetsSourceURLPrefix = "snippets://"; 42 45 43 46 WebInspector.SnippetsModel.EventTypes = { 44 47 SnippetAdded: "SnippetAdded", 48 SnippetWillBeEvaluated: "SnippetWillBeEvaluated", 45 49 SnippetRenamed: "SnippetRenamed", 46 50 SnippetRemoved: "SnippetRemoved", … … 48 52 49 53 WebInspector.SnippetsModel.prototype = { 50 /**51 * @return {Array.<WebInspector.Snippet>}52 */53 get snippets()54 {55 return this._snippets.slice();56 },57 58 54 _saveSettings: function() 59 55 { 60 56 var savedSnippets = []; 61 for (var i = 0; i < this._snippets.length; ++i) 62 savedSnippets.push(this._snippets[i].serializeToObject()); 63 57 for (var id in this._snippets) 58 savedSnippets.push(this._snippets[id].serializeToObject()); 64 59 this._snippetsSetting.set(savedSnippets); 65 60 }, … … 67 62 _loadSettings: function() 68 63 { 69 this._snippets = [];70 64 var savedSnippets = this._snippetsSetting.get(); 71 65 for (var i = 0; i < savedSnippets.length; ++i) … … 78 72 deleteSnippet: function(snippet) 79 73 { 80 for (var i = 0; i < this._snippets.length; ++i) { 81 if (snippet.id === this._snippets[i].id) { 82 this._snippets.splice(i, 1); 83 this._saveSettings(); 84 this.dispatchEventToListeners(WebInspector.SnippetsModel.EventTypes.SnippetRemoved, snippet); 85 break; 86 } 87 } 74 delete this._snippets[snippet.id]; 75 this._saveSettings(); 76 this.dispatchEventToListeners(WebInspector.SnippetsModel.EventTypes.SnippetRemoved, snippet); 88 77 }, 89 78 … … 93 82 createSnippet: function() 94 83 { 95 var snippetId = this._lastSnippetIdentifierSetting.get() + 1; 96 this._lastSnippetIdentifierSetting.set(snippetId); 84 var nextId = this._lastSnippetIdentifierSetting.get() + 1; 85 var snippetId = String(nextId); 86 this._lastSnippetIdentifierSetting.set(nextId); 97 87 var snippet = new WebInspector.Snippet(this, snippetId); 98 88 this._snippetAdded(snippet); … … 107 97 _snippetAdded: function(snippet) 108 98 { 109 this._snippets .push(snippet);99 this._snippets[snippet.id] = snippet; 110 100 this.dispatchEventToListeners(WebInspector.SnippetsModel.EventTypes.SnippetAdded, snippet); 111 101 }, 112 102 113 103 /** 114 * @param { number} snippetId104 * @param {string} snippetId 115 105 */ 116 106 _snippetContentUpdated: function(snippetId) … … 129 119 130 120 /** 131 * @param {number} snippetId 132 * @return {WebInspector.Snippet|undefined} 133 */ 134 snippetForId: function(snippetId) 135 { 136 return this._snippets[snippetId]; 121 * @param {WebInspector.Snippet} snippet 122 */ 123 _evaluateSnippet: function(snippet) 124 { 125 this.dispatchEventToListeners(WebInspector.SnippetsModel.EventTypes.SnippetWillBeEvaluated, snippet); 126 var evaluationIndex = this._lastSnippetEvaluationIndexSetting.get() + 1; 127 this._lastSnippetEvaluationIndexSetting.set(evaluationIndex); 128 129 var sourceURL = this._sourceURLForSnippet(snippet, evaluationIndex); 130 snippet._lastEvaluationSourceURL = sourceURL; 131 var expression = "\n//@ sourceURL=" + sourceURL + "\n" + snippet.content; 132 // FIXME: evaluate snippet here. 133 }, 134 135 /** 136 * @param {WebInspector.Snippet} snippet 137 * @param {string} evaluationIndex 138 * @return {string} 139 */ 140 _sourceURLForSnippet: function(snippet, evaluationIndex) 141 { 142 var snippetsPrefix = WebInspector.SnippetsModel.snippetsSourceURLPrefix; 143 var evaluationSuffix = evaluationIndex ? "_" + evaluationIndex : ""; 144 return snippetsPrefix + snippet.id + evaluationSuffix; 137 145 }, 138 146 … … 143 151 snippetIdForSourceURL: function(sourceURL) 144 152 { 145 // FIXME: to be implemented. 146 return null; 153 var snippetsPrefix = WebInspector.SnippetsModel.snippetsSourceURLPrefix; 154 if (sourceURL.indexOf(snippetsPrefix) !== 0) 155 return null; 156 var splittedURL = sourceURL.substring(snippetsPrefix.length).split("_"); 157 var snippetId = splittedURL[0]; 158 return snippetId; 147 159 }, 148 160 … … 153 165 snippetForSourceURL: function(sourceURL) 154 166 { 155 // FIXME: to be implemented. 156 return null; 167 var snippetId = this.snippetIdForSourceURL(sourceURL); 168 if (!snippetId) 169 return null; 170 var snippet = this._snippets[snippetId]; 171 if (!snippet || snippet._lastEvaluationSourceURL !== sourceURL) 172 return null; 173 return snippet; 157 174 } 158 175 } … … 164 181 * @extends {WebInspector.Object} 165 182 * @param {WebInspector.SnippetsModel} model 166 * @param { number} id183 * @param {string} id 167 184 * @param {string=} name 168 185 * @param {string=} content … … 230 247 }, 231 248 249 evaluate: function() 250 { 251 this._model._evaluateSnippet(this); 252 }, 253 232 254 /** 233 255 * @return {Object} … … 254 276 this._uiSourceCodeForScriptId = {}; 255 277 this._scriptForUISourceCode = new Map(); 256 this._snippetForUISourceCode = new Map();257 278 this._uiSourceCodeForSnippet = new Map(); 258 279 259 280 WebInspector.snippetsModel.addEventListener(WebInspector.SnippetsModel.EventTypes.SnippetAdded, this._snippetAdded.bind(this)); 281 WebInspector.snippetsModel.addEventListener(WebInspector.SnippetsModel.EventTypes.SnippetWillBeEvaluated, this._snippetWillBeEvaluated.bind(this)); 260 282 WebInspector.snippetsModel.addEventListener(WebInspector.SnippetsModel.EventTypes.SnippetRemoved, this._snippetRemoved.bind(this)); 261 283 } … … 291 313 return null; 292 314 293 var snippet = this._snippetForUISourceCode.get(uiSourceCode); 294 if (snippet) { 315 if (uiSourceCode.isSnippet) { 295 316 var rawLineNumber = lineNumber + WebInspector.Snippet.evaluatedSnippetExtraLinesCount; 296 317 return WebInspector.debuggerModel.createRawLocation(script, rawLineNumber, columnNumber); … … 320 341 for (var scriptId in this._uiSourceCodeForScriptId) { 321 342 var uiSourceCode = this._uiSourceCodeForScriptId[scriptId]; 322 if ( this._snippetForUISourceCode.get(uiSourceCode))343 if (uiSourceCode.isSnippet) 323 344 continue; 324 345 result.push(uiSourceCode); … … 337 358 return; 338 359 } 339 this._releaseSnippetScript(snippet);340 360 var uiSourceCode = this._uiSourceCodeForSnippet.get(snippet); 361 console.assert(!this._scriptForUISourceCode.get(uiSourceCode)); 362 341 363 this._uiSourceCodeForScriptId[script.scriptId] = uiSourceCode; 342 364 this._snippetForScriptId[script.scriptId] = snippet; … … 358 380 uiSourceCode.isEditable = true; 359 381 this._uiSourceCodeForSnippet.put(snippet, uiSourceCode); 360 this._snippetForUISourceCode.put(uiSourceCode, snippet);382 uiSourceCode.snippet = snippet; 361 383 var data = { removedItems: [], addedItems: [uiSourceCode], scriptIds: [] }; 362 384 this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data); 385 }, 386 387 /** 388 * @param {WebInspector.Event} event 389 */ 390 _snippetWillBeEvaluated: function(event) 391 { 392 var snippet = /** @type {WebInspector.Snippet} */ event.data; 393 this._releaseSnippetScript(snippet); 363 394 }, 364 395 … … 402 433 this._releaseSnippetScript(snippet); 403 434 this._uiSourceCodeForSnippet.remove(snippet); 404 this._snippetForUISourceCode.remove(uiSourceCode);405 435 var data = { removedItems: [uiSourceCode], addedItems: [], scriptIds: [] }; 406 436 this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data);
Note: See TracChangeset
for help on using the changeset viewer.