Title: [117299] trunk
Revision
117299
Author
[email protected]
Date
2012-05-16 09:11:43 -0700 (Wed, 16 May 2012)

Log Message

Web Inspector: Support script snippets saving.
https://bugs.webkit.org/show_bug.cgi?id=86632

Reviewed by Pavel Feldman.

Source/WebCore:

Added SnippetJavaScriptSource extending _javascript_Source and overriding isEditable() and commitWorkingCopy() methods.
ScriptSnippetModel now creates instances of this new class for snippets.
Also maps in ScriptSnippetModel simplified.

* inspector/front-end/_javascript_Source.js:
(WebInspector._javascript_Source.prototype.commitWorkingCopy):
(WebInspector):
* inspector/front-end/_javascript_SourceFrame.js:
(WebInspector._javascript_SourceFrame.prototype.commitEditing):
* inspector/front-end/ScriptSnippetModel.js:
(WebInspector.ScriptSnippetModel):
(WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
(WebInspector.ScriptSnippetModel.prototype.deleteScriptSnippet):
(WebInspector.ScriptSnippetModel.prototype.renameScriptSnippet):
(WebInspector.ScriptSnippetModel.prototype.setScriptSnippetContent):
(WebInspector.ScriptSnippetModel.prototype._uiSourceCodeList):
(WebInspector.ScriptSnippetModel.prototype._releasedUISourceCodes):
(WebInspector.SnippetJavaScriptSource):
(WebInspector.SnippetJavaScriptSource.prototype.isEditable):
(WebInspector.SnippetJavaScriptSource.prototype.commitWorkingCopy):
(WebInspector.SnippetJavaScriptSource.prototype.get snippetId):
* inspector/front-end/ScriptsPanel.js:
(WebInspector.ScriptsPanel.prototype.set _fileRenamed):
(WebInspector.ScriptsPanel.prototype._snippetCreationRequested.callback):
(WebInspector.ScriptsPanel.prototype._snippetCreationRequested):

LayoutTests:

* inspector/debugger/script-snippet-model.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (117298 => 117299)


--- trunk/LayoutTests/ChangeLog	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/LayoutTests/ChangeLog	2012-05-16 16:11:43 UTC (rev 117299)
@@ -1,3 +1,12 @@
+2012-05-16  Vsevolod Vlasov  <[email protected]>
+
+        Web Inspector: Support script snippets saving.
+        https://bugs.webkit.org/show_bug.cgi?id=86632
+
+        Reviewed by Pavel Feldman.
+
+        * inspector/debugger/script-snippet-model.html:
+
 2012-05-16  Csaba Osztrogonác  <[email protected]>
 
         [Qt] New failing and flakey tests with newer Qt 5

Modified: trunk/LayoutTests/inspector/debugger/script-snippet-model.html (117298 => 117299)


--- trunk/LayoutTests/inspector/debugger/script-snippet-model.html	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/LayoutTests/inspector/debugger/script-snippet-model.html	2012-05-16 16:11:43 UTC (rev 117299)
@@ -21,28 +21,28 @@
         {
             resetSnippetsSettings();
 
-            var uiSourceCode1 = WebInspector.scriptSnippetModel.createScriptSnippet();
-            WebInspector.scriptSnippetModel.renameScriptSnippet(uiSourceCode1, "Snippet1");
+            var snippetJavaScriptSource1 = WebInspector.scriptSnippetModel.createScriptSnippet();
+            WebInspector.scriptSnippetModel.renameScriptSnippet(snippetJavaScriptSource1, "Snippet1");
             var content = "";
             content += "// This snippet does nothing.\n";
             content += "var i = 2+2;\n";
-            WebInspector.scriptSnippetModel.setScriptSnippetContent(uiSourceCode1, content);
+            WebInspector.scriptSnippetModel.setScriptSnippetContent(snippetJavaScriptSource1, content);
 
-            var uiSourceCode2 = WebInspector.scriptSnippetModel.createScriptSnippet();
-            WebInspector.scriptSnippetModel.renameScriptSnippet(uiSourceCode1, "Snippet2");
+            var snippetJavaScriptSource2 = WebInspector.scriptSnippetModel.createScriptSnippet();
+            WebInspector.scriptSnippetModel.renameScriptSnippet(snippetJavaScriptSource2, "Snippet2");
             content = "";
             content += "// This snippet creates a function that does nothing.\n";
             content += "function doesNothing()\n";
             content += "{\n";
             content += "    var  i = 2+2;\n";
             content += "}\n";
-            WebInspector.scriptSnippetModel.setScriptSnippetContent(uiSourceCode2, content);
+            WebInspector.scriptSnippetModel.setScriptSnippetContent(snippetJavaScriptSource2, content);
 
-            function evaluateSnippetAndDumpEvaluationDetails(uiSourceCode, callback)
+            function evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource, callback)
             {
                 InspectorTest.addSniffer(WebInspector.SnippetScriptMapping.prototype, "addScript", dumpScript);
-                WebInspector.scriptSnippetModel.evaluateScriptSnippet(uiSourceCode);
-                var snippet = WebInspector.scriptSnippetModel._snippetForUISourceCode.get(uiSourceCode);
+                WebInspector.scriptSnippetModel.evaluateScriptSnippet(snippetJavaScriptSource);
+                var snippet = WebInspector.scriptSnippetModel._snippetStorage.snippetForId(snippetJavaScriptSource.snippetId);
                 InspectorTest.addResult("Last evaluation source url for snippet: " + snippet._lastEvaluationSourceURL);
                 InspectorTest.assertEquals(snippet, WebInspector.scriptSnippetModel._snippetForSourceURL(snippet._lastEvaluationSourceURL), "Snippet can not be identified by its evaluation sourceURL.");
 
@@ -53,16 +53,16 @@
                 }
             }
 
-            evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, step2);
+            evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource1, step2);
 
             function step2()
             {
-                evaluateSnippetAndDumpEvaluationDetails(uiSourceCode2, step3);
+                evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource2, step3);
             }
 
             function step3()
             {
-                evaluateSnippetAndDumpEvaluationDetails(uiSourceCode1, next);
+                evaluateSnippetAndDumpEvaluationDetails(snippetJavaScriptSource1, next);
             }
         }
     ]);

Modified: trunk/Source/WebCore/ChangeLog (117298 => 117299)


--- trunk/Source/WebCore/ChangeLog	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/Source/WebCore/ChangeLog	2012-05-16 16:11:43 UTC (rev 117299)
@@ -1,3 +1,36 @@
+2012-05-16  Vsevolod Vlasov  <[email protected]>
+
+        Web Inspector: Support script snippets saving.
+        https://bugs.webkit.org/show_bug.cgi?id=86632
+
+        Reviewed by Pavel Feldman.
+
+        Added SnippetJavaScriptSource extending _javascript_Source and overriding isEditable() and commitWorkingCopy() methods.
+        ScriptSnippetModel now creates instances of this new class for snippets.
+        Also maps in ScriptSnippetModel simplified.
+
+        * inspector/front-end/_javascript_Source.js:
+        (WebInspector._javascript_Source.prototype.commitWorkingCopy):
+        (WebInspector):
+        * inspector/front-end/_javascript_SourceFrame.js:
+        (WebInspector._javascript_SourceFrame.prototype.commitEditing):
+        * inspector/front-end/ScriptSnippetModel.js:
+        (WebInspector.ScriptSnippetModel):
+        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
+        (WebInspector.ScriptSnippetModel.prototype.deleteScriptSnippet):
+        (WebInspector.ScriptSnippetModel.prototype.renameScriptSnippet):
+        (WebInspector.ScriptSnippetModel.prototype.setScriptSnippetContent):
+        (WebInspector.ScriptSnippetModel.prototype._uiSourceCodeList):
+        (WebInspector.ScriptSnippetModel.prototype._releasedUISourceCodes):
+        (WebInspector.SnippetJavaScriptSource):
+        (WebInspector.SnippetJavaScriptSource.prototype.isEditable):
+        (WebInspector.SnippetJavaScriptSource.prototype.commitWorkingCopy):
+        (WebInspector.SnippetJavaScriptSource.prototype.get snippetId):
+        * inspector/front-end/ScriptsPanel.js:
+        (WebInspector.ScriptsPanel.prototype.set _fileRenamed):
+        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested.callback):
+        (WebInspector.ScriptsPanel.prototype._snippetCreationRequested):
+
 2012-05-16  Sudarsana Nagineni  <[email protected]>
 
         [EFL] Memory leak in RenderThemeEfl

Modified: trunk/Source/WebCore/inspector/front-end/_javascript_Source.js (117298 => 117299)


--- trunk/Source/WebCore/inspector/front-end/_javascript_Source.js	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/Source/WebCore/inspector/front-end/_javascript_Source.js	2012-05-16 16:11:43 UTC (rev 117299)
@@ -174,8 +174,7 @@
 
     commitWorkingCopy: function(callback)
     {  
-        if (this.isDirty())
-            WebInspector.DebuggerResourceBinding.setScriptSource(this, this.workingCopy(), callback);
+        WebInspector.DebuggerResourceBinding.setScriptSource(this, this.workingCopy(), callback);
     }
 }
 

Modified: trunk/Source/WebCore/inspector/front-end/_javascript_SourceFrame.js (117298 => 117299)


--- trunk/Source/WebCore/inspector/front-end/_javascript_SourceFrame.js	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/Source/WebCore/inspector/front-end/_javascript_SourceFrame.js	2012-05-16 16:11:43 UTC (rev 117299)
@@ -111,6 +111,8 @@
     commitEditing: function(text)
     {
         this._editingContent = true;
+        if (!this._uiSourceCode.isDirty())
+            return;
         this._uiSourceCode.commitWorkingCopy(this._didEditContent.bind(this, text));
     },
 

Modified: trunk/Source/WebCore/inspector/front-end/ScriptSnippetModel.js (117298 => 117299)


--- trunk/Source/WebCore/inspector/front-end/ScriptSnippetModel.js	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/Source/WebCore/inspector/front-end/ScriptSnippetModel.js	2012-05-16 16:11:43 UTC (rev 117299)
@@ -36,8 +36,7 @@
 {
     this._uiSourceCodeForScriptId = {};
     this._scriptForUISourceCode = new Map();
-    this._uiSourceCodeForSnippet = new Map();
-    this._snippetForUISourceCode = new Map();
+    this._snippetJavaScriptSourceForSnippetId = {};
     
     this._snippetStorage = new WebInspector.SnippetStorage("script", "Script snippet #");
     this._lastSnippetEvaluationIndexSetting = WebInspector.settings.createSetting("lastSnippetEvaluationIndex", 0);
@@ -61,7 +60,7 @@
     },
 
     /**
-     * @return {WebInspector.UISourceCode}
+     * @return {WebInspector.SnippetJavaScriptSource}
      */
     createScriptSnippet: function()
     {
@@ -71,63 +70,62 @@
 
     /**
      * @param {WebInspector.Snippet} snippet
-     * @return {WebInspector.UISourceCode}
+     * @return {WebInspector.SnippetJavaScriptSource}
      */
     _addScriptSnippet: function(snippet)
     {
-        var uiSourceCode = new WebInspector._javascript_Source(snippet.name, new WebInspector.SnippetContentProvider(snippet), this._snippetScriptMapping, true);
-        uiSourceCode.isSnippet = true;
-        this._uiSourceCodeForSnippet.put(snippet, uiSourceCode);
-        this._snippetForUISourceCode.put(uiSourceCode, snippet);
-        this._snippetScriptMapping._fireUISourceCodeAdded(uiSourceCode);
-        return uiSourceCode;
+        var snippetJavaScriptSource = new WebInspector.SnippetJavaScriptSource(snippet.id, snippet.name, new WebInspector.SnippetContentProvider(snippet), this);
+        this._snippetJavaScriptSourceForSnippetId[snippet.id] = snippetJavaScriptSource;
+        this._snippetScriptMapping._fireUISourceCodeAdded(snippetJavaScriptSource);
+        return snippetJavaScriptSource;
     },
 
     /**
-     * @param {WebInspector.UISourceCode} uiSourceCode
+     * @param {WebInspector.SnippetJavaScriptSource} snippetJavaScriptSource
      */
-    deleteScriptSnippet: function(uiSourceCode)
+    deleteScriptSnippet: function(snippetJavaScriptSource)
     {
-        var snippet = this._snippetForUISourceCode.get(uiSourceCode);
+        var snippet = this._snippetStorage.snippetForId(snippetJavaScriptSource.snippetId);
         this._snippetStorage.deleteSnippet(snippet);
-        this._releaseSnippetScript(uiSourceCode);
-        this._uiSourceCodeForSnippet.remove(snippet);
-        this._snippetForUISourceCode.remove(uiSourceCode);
-        this._snippetScriptMapping._fireUISourceCodeRemoved(uiSourceCode);
+        this._releaseSnippetScript(snippetJavaScriptSource);
+        delete this._snippetJavaScriptSourceForSnippetId[snippet.id];
+        this._snippetScriptMapping._fireUISourceCodeRemoved(snippetJavaScriptSource);
     },
 
     /**
-     * @param {WebInspector.UISourceCode} uiSourceCode
+     * @param {WebInspector.SnippetJavaScriptSource} snippetJavaScriptSource
      * @param {string} newName
      */
-    renameScriptSnippet: function(uiSourceCode, newName)
+    renameScriptSnippet: function(snippetJavaScriptSource, newName)
     {
-        var snippet = this._snippetForUISourceCode.get(uiSourceCode)
+        var snippet = this._snippetStorage.snippetForId(snippetJavaScriptSource.snippetId);
         if (!snippet || !newName || snippet.name === newName)
             return;
         snippet.name = newName;
-        uiSourceCode.urlChanged(snippet.name);
+        snippetJavaScriptSource.urlChanged(snippet.name);
     },
 
     /**
-     * @param {WebInspector.UISourceCode} uiSourceCode
+     * @param {WebInspector.SnippetJavaScriptSource} snippetJavaScriptSource
      * @param {string} newContent
      */
-    setScriptSnippetContent: function(uiSourceCode, newContent)
+    setScriptSnippetContent: function(snippetJavaScriptSource, newContent)
     {
-        this._snippetForUISourceCode.get(uiSourceCode).content = newContent;
+        var snippet = this._snippetStorage.snippetForId(snippetJavaScriptSource.snippetId);
+        snippet.content = newContent;
+        snippetJavaScriptSource.contentChanged(newContent);
     },
 
     /**
-     * @param {WebInspector.UISourceCode} uiSourceCode
+     * @param {WebInspector.SnippetJavaScriptSource} snippetJavaScriptSource
      */
-    evaluateScriptSnippet: function(uiSourceCode)
+    evaluateScriptSnippet: function(snippetJavaScriptSource)
     {
-        this._releaseSnippetScript(uiSourceCode);
+        this._releaseSnippetScript(snippetJavaScriptSource);
         var evaluationIndex = this._lastSnippetEvaluationIndexSetting.get() + 1;
         this._lastSnippetEvaluationIndexSetting.set(evaluationIndex);
 
-        var snippet = this._snippetForUISourceCode.get(uiSourceCode);
+        var snippet = this._snippetStorage.snippetForId(snippetJavaScriptSource.snippetId);
         var sourceURL = this._sourceURLForSnippet(snippet, evaluationIndex);
         snippet._lastEvaluationSourceURL = sourceURL;
         var _expression_ = "\n//@ sourceURL=" + sourceURL + "\n" + snippet.content;
@@ -174,8 +172,9 @@
      */
     _uiSourceCodes: function()
     {
-        var result = this._uiSourceCodeForSnippet.values();
-        result = result.concat(this._releasedUISourceCodes());
+        var result = this._releasedUISourceCodes();
+        for (var snippetId in this._snippetJavaScriptSourceForSnippetId)
+            result.push(this._snippetJavaScriptSourceForSnippetId[snippetId]);
         return result;
     },
 
@@ -187,9 +186,8 @@
         var result = [];
         for (var scriptId in this._uiSourceCodeForScriptId) {
             var uiSourceCode = this._uiSourceCodeForScriptId[scriptId];
-            if (uiSourceCode.isSnippet)
-                continue;
-            result.push(uiSourceCode);
+            if (!uiSourceCode.isSnippet)
+                result.push(uiSourceCode);
         }
         return result;
     },
@@ -199,16 +197,16 @@
      */
     _addScript: function(script)
     {
-        var snippet = this._snippetForSourceURL(script.sourceURL);
-        if (!snippet) {
+        var snippetId = this._snippetIdForSourceURL(script.sourceURL);
+        var snippetJavaScriptSource = this._snippetJavaScriptSourceForSnippetId[snippetId];
+        if (!snippetJavaScriptSource) {
             this._createUISourceCodeForScript(script);
             return;
         }
-        var uiSourceCode = this._uiSourceCodeForSnippet.get(snippet);
-        console.assert(!this._scriptForUISourceCode.get(uiSourceCode));
-
-        this._uiSourceCodeForScriptId[script.scriptId] = uiSourceCode;
-        this._scriptForUISourceCode.put(uiSourceCode, script);
+        
+        console.assert(!this._scriptForUISourceCode.get(snippetJavaScriptSource));
+        this._uiSourceCodeForScriptId[script.scriptId] = snippetJavaScriptSource;
+        this._scriptForUISourceCode.put(snippetJavaScriptSource, script);
         script.setSourceMapping(this._snippetScriptMapping);
     },
 
@@ -226,16 +224,16 @@
     },
 
     /**
-     * @param {WebInspector.UISourceCode} uiSourceCode
+     * @param {WebInspector.SnippetJavaScriptSource} snippetJavaScriptSource
      */
-    _releaseSnippetScript: function(uiSourceCode)
+    _releaseSnippetScript: function(snippetJavaScriptSource)
     {
-        var script = this._scriptForUISourceCode.get(uiSourceCode);
+        var script = this._scriptForUISourceCode.get(snippetJavaScriptSource);
         if (!script)
             return;
 
         delete this._uiSourceCodeForScriptId[script.scriptId];
-        this._scriptForUISourceCode.remove(uiSourceCode);
+        this._scriptForUISourceCode.remove(snippetJavaScriptSource);
 
         this._createUISourceCodeForScript(script);
     },
@@ -295,6 +293,48 @@
 
 /**
  * @constructor
+ * @extends {WebInspector._javascript_Source}
+ * @param {string} snippetId
+ * @param {string} snippetName
+ * @param {WebInspector.ContentProvider} contentProvider
+ * @param {WebInspector.ScriptSnippetModel} scriptSnippetModel
+ */
+WebInspector.SnippetJavaScriptSource = function(snippetId, snippetName, contentProvider, scriptSnippetModel)
+{
+    WebInspector._javascript_Source.call(this, snippetName, contentProvider, scriptSnippetModel.scriptMapping, true);
+    this._snippetId = snippetId;
+    this._scriptSnippetModel = scriptSnippetModel;
+    this.isSnippet = true;
+}
+
+WebInspector.SnippetJavaScriptSource.prototype = {
+    /**
+     * @return {boolean}
+     */
+    isEditable: function()
+    {
+        return true;
+    },
+
+    commitWorkingCopy: function(callback)
+    {
+        this._scriptSnippetModel.setScriptSnippetContent(this, this.workingCopy());
+        callback();
+    },
+
+    /**
+     * @return {string}
+     */
+    get snippetId()
+    {
+        return this._snippetId;
+    }
+}
+
+WebInspector.SnippetJavaScriptSource.prototype.__proto__ = WebInspector._javascript_Source.prototype;
+
+/**
+ * @constructor
  * @extends {WebInspector.Object}
  * @implements {WebInspector.SourceMapping}
  * @implements {WebInspector.UISourceCodeProvider}

Modified: trunk/Source/WebCore/inspector/front-end/ScriptsPanel.js (117298 => 117299)


--- trunk/Source/WebCore/inspector/front-end/ScriptsPanel.js	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/Source/WebCore/inspector/front-end/ScriptsPanel.js	2012-05-16 16:11:43 UTC (rev 117299)
@@ -970,28 +970,29 @@
 
     _fileRenamed: function(event)
     {
-       var uiSourceCode = /** @type {WebInspector.UISourceCode} */ event.data.uiSourceCode;
+        var uiSourceCode = /** @type {WebInspector.UISourceCode} */ event.data.uiSourceCode;
         var name = /** @type {string} */ event.data.name;
         if (!uiSourceCode.isSnippet)
             return;
-        WebInspector.scriptSnippetModel.renameScriptSnippet(uiSourceCode, name);
+        var snippetJavaScriptSource = /** @type {WebInspector.SnippetJavaScriptSource} */ uiSourceCode;
+        WebInspector.scriptSnippetModel.renameScriptSnippet(snippetJavaScriptSource, name);
     },
         
     _snippetCreationRequested: function()
     {
-        var uiSourceCode = WebInspector.scriptSnippetModel.createScriptSnippet();
-        this._showSourceLine(uiSourceCode);
+        var snippetJavaScriptSource = WebInspector.scriptSnippetModel.createScriptSnippet();
+        this._showSourceLine(snippetJavaScriptSource);
         
         var shouldHideNavigator = !this._navigatorController.isNavigatorPinned();
         if (this._navigatorController.isNavigatorHidden())
             this._navigatorController.showNavigatorOverlay();
-        this._navigator.rename(uiSourceCode, callback.bind(this));
+        this._navigator.rename(snippetJavaScriptSource, callback.bind(this));
     
         function callback()
         {
             if (shouldHideNavigator)
                 this._navigatorController.hideNavigatorOverlay();
-            this._showSourceLine(uiSourceCode);
+            this._showSourceLine(snippetJavaScriptSource);
         }
     }
 }

Modified: trunk/Source/WebCore/inspector/front-end/StylesPanel.js (117298 => 117299)


--- trunk/Source/WebCore/inspector/front-end/StylesPanel.js	2012-05-16 16:09:41 UTC (rev 117298)
+++ trunk/Source/WebCore/inspector/front-end/StylesPanel.js	2012-05-16 16:11:43 UTC (rev 117299)
@@ -143,18 +143,11 @@
         var sourceFrame = this._sourceFramesForResource.get(uiSourceCode);
         if (!sourceFrame) {
             sourceFrame = new WebInspector.EditableResourceSourceFrame(uiSourceCode);
-            sourceFrame.addEventListener(WebInspector.EditableResourceSourceFrame.Events.TextEdited, this._textEdited, this);
             this._sourceFramesForResource.put(uiSourceCode, sourceFrame);
         }
         return sourceFrame;
     },
 
-    _textEdited: function(event)
-    {
-        var sourceFrame = /** @type {WebInspector.EditableResourceSourceFrame} */ event.data;
-        this._editorContainer.setFileIsDirty(sourceFrame.resource, sourceFrame.isDirty());
-    },
-
     _itemSelected: function(event)
     {
         var uiSourceCode = /** @type {WebInspector.UISourceCode} */ event.data.uiSourceCode;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to