Changeset 110681 in webkit


Ignore:
Timestamp:
Mar 14, 2012 2:59:50 AM (12 years ago)
Author:
vsevik@chromium.org
Message:

Web Inspector: Introduce SnippetsScriptMapping.
https://bugs.webkit.org/show_bug.cgi?id=80890

Reviewed by Pavel Feldman.

  • inspector/front-end/ScriptMapping.js:

(WebInspector.MainScriptMapping):
(WebInspector.MainScriptMapping.prototype.addScript):
(WebInspector.MainScriptMapping.prototype._mappingForScript):

  • inspector/front-end/SnippetsModel.js:

(WebInspector.SnippetsModel.prototype.snippetForId):
(WebInspector.SnippetsModel.prototype.snippetForSourceURL):
(WebInspector.SnippetsScriptMapping):
(WebInspector.SnippetsScriptMapping.prototype.uiSourceCodeList):
(WebInspector.SnippetsScriptMapping.prototype.addScript):
(WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
(WebInspector.SnippetsScriptMapping.prototype._releaseSnippetScript.get if):
(WebInspector.SnippetsScriptMapping.prototype._releaseSnippetScript):
(WebInspector.SnippetsScriptMapping.prototype._snippetDeleted.get this):
(WebInspector.SnippetsScriptMapping.prototype._snippetDeleted):
(WebInspector.SnippetsScriptMapping.prototype.reset):
(WebInspector.SnippetContentProvider):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r110678 r110681  
     12012-03-12  Vsevolod Vlasov  <vsevik@chromium.org>
     2
     3        Web Inspector: Introduce SnippetsScriptMapping.
     4        https://bugs.webkit.org/show_bug.cgi?id=80890
     5
     6        Reviewed by Pavel Feldman.
     7
     8        * inspector/front-end/ScriptMapping.js:
     9        (WebInspector.MainScriptMapping):
     10        (WebInspector.MainScriptMapping.prototype.addScript):
     11        (WebInspector.MainScriptMapping.prototype._mappingForScript):
     12        * inspector/front-end/SnippetsModel.js:
     13        (WebInspector.SnippetsModel.prototype.snippetForId):
     14        (WebInspector.SnippetsModel.prototype.snippetForSourceURL):
     15        (WebInspector.SnippetsScriptMapping):
     16        (WebInspector.SnippetsScriptMapping.prototype.uiSourceCodeList):
     17        (WebInspector.SnippetsScriptMapping.prototype.addScript):
     18        (WebInspector.SnippetsScriptMapping.prototype._snippetAdded):
     19        (WebInspector.SnippetsScriptMapping.prototype._releaseSnippetScript.get if):
     20        (WebInspector.SnippetsScriptMapping.prototype._releaseSnippetScript):
     21        (WebInspector.SnippetsScriptMapping.prototype._snippetDeleted.get this):
     22        (WebInspector.SnippetsScriptMapping.prototype._snippetDeleted):
     23        (WebInspector.SnippetsScriptMapping.prototype.reset):
     24        (WebInspector.SnippetContentProvider):
     25
    1262012-03-14  Sheriff Bot  <webkit.review.bot@gmail.com>
    227
  • trunk/Source/WebCore/inspector/front-end/ScriptMapping.js

    r110549 r110681  
    7171{
    7272    this._mappings = [];
     73   
    7374    this._resourceMapping = new WebInspector.ResourceScriptMapping();
    74     this._resourceMapping.addEventListener(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, this._handleUISourceCodeListChanged, this);
    7575    this._mappings.push(this._resourceMapping);
    7676
     77    if (WebInspector.experimentsSettings.snippetsSupport.isEnabled()) {
     78        this._snippetsMapping = new WebInspector.SnippetsScriptMapping();
     79        this._mappings.push(this._snippetsMapping);
     80    }
     81
     82    for (var i = 0; i < this._mappings.length; ++i)
     83        this._mappings[i].addEventListener(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, this._handleUISourceCodeListChanged, this);
     84   
    7785    this._mappingForScriptId = {};
    7886    this._mappingForUISourceCode = new Map();
     
    156164        this._liveLocationsForScriptId[script.scriptId] = [];
    157165
    158         var mapping = this._resourceMapping;
    159 
     166        var mapping = this._mappingForScript(script);
    160167        this._mappingForScriptId[script.scriptId] = mapping;
    161168        mapping.addScript(script);
     169    },
     170
     171    /**
     172     * @param {WebInspector.Script} script
     173     * @return {WebInspector.ScriptMapping}
     174     */
     175    _mappingForScript: function(script)
     176    {
     177        if (WebInspector.experimentsSettings.snippetsSupport.isEnabled()) {
     178            if (WebInspector.snippetsModel.snippetIdForSourceURL(script.sourceURL))
     179                return this._snippetsMapping;
     180        }
     181           
     182        return this._resourceMapping;
    162183    },
    163184
  • trunk/Source/WebCore/inspector/front-end/SnippetsModel.js

    r110576 r110681  
    4444    SnippetAdded: "SnippetAdded",
    4545    SnippetRenamed: "SnippetRenamed",
    46     SnippetDeleted: "SnippetDeleted",
     46    SnippetRemoved: "SnippetRemoved",
    4747}
    4848
     
    8282                this._snippets.splice(i, 1);
    8383                this._saveSettings();
    84                 this.dispatchEventToListeners(WebInspector.SnippetsModel.EventTypes.SnippetDeleted, snippet);
     84                this.dispatchEventToListeners(WebInspector.SnippetsModel.EventTypes.SnippetRemoved, snippet);
    8585                break;
    8686            }
     
    135135    {
    136136        return this._snippets[snippetId];
     137    },
     138
     139    /**
     140     * @param {string} sourceURL
     141     * @return {string}
     142     */
     143    snippetIdForSourceURL: function(sourceURL)
     144    {
     145        // FIXME: to be implemented.
     146        return null;
     147    },
     148
     149    /**
     150     * @param {string} sourceURL
     151     * @return {WebInspector.Snippet}
     152     */
     153    snippetForSourceURL: function(sourceURL)
     154    {
     155        // FIXME: to be implemented.
     156        return null;
    137157    }
    138158}
     
    156176}
    157177
     178WebInspector.Snippet.evaluatedSnippetExtraLinesCount = 2;
     179
    158180/**
    159181 * @param {Object} serializedSnippet
     
    222244
    223245WebInspector.Snippet.prototype.__proto__ = WebInspector.Object.prototype;
     246
     247/**
     248 * @constructor
     249 * @extends {WebInspector.ScriptMapping}
     250 */
     251WebInspector.SnippetsScriptMapping = function()
     252{
     253    this._snippetForScriptId = {};
     254    this._uiSourceCodeForScriptId = {};
     255    this._scriptForUISourceCode = new Map();
     256    this._snippetForUISourceCode = new Map();
     257    this._uiSourceCodeForSnippet = new Map();
     258   
     259    WebInspector.snippetsModel.addEventListener(WebInspector.SnippetsModel.EventTypes.SnippetAdded, this._snippetAdded.bind(this));
     260    WebInspector.snippetsModel.addEventListener(WebInspector.SnippetsModel.EventTypes.SnippetRemoved, this._snippetRemoved.bind(this));
     261}
     262
     263WebInspector.SnippetsScriptMapping.prototype = {
     264    /**
     265     * @param {DebuggerAgent.Location} rawLocation
     266     * @return {WebInspector.UILocation}
     267     */
     268    rawLocationToUILocation: function(rawLocation)
     269    {
     270        var uiSourceCode = this._uiSourceCodeForScriptId[rawLocation.scriptId];
     271
     272        var snippet = this._snippetForScriptId[rawLocation.scriptId];
     273        if (snippet) {
     274            var uiLineNumber = rawLocation.lineNumber - WebInspector.Snippet.evaluatedSnippetExtraLinesCount;
     275            return new WebInspector.UILocation(uiSourceCode, uiLineNumber, rawLocation.columnNumber || 0);
     276        }
     277
     278        return new WebInspector.UILocation(uiSourceCode, rawLocation.lineNumber, rawLocation.columnNumber || 0);
     279    },
     280
     281    /**
     282     * @param {WebInspector.UISourceCode} uiSourceCode
     283     * @param {number} lineNumber
     284     * @param {number} columnNumber
     285     * @return {DebuggerAgent.Location}
     286     */
     287    uiLocationToRawLocation: function(uiSourceCode, lineNumber, columnNumber)
     288    {
     289        var script = this._scriptForUISourceCode.get(uiSourceCode);
     290        if (!script)
     291            return null;
     292
     293        var snippet = this._snippetForUISourceCode.get(uiSourceCode);
     294        if (snippet) {
     295            var rawLineNumber = lineNumber + WebInspector.Snippet.evaluatedSnippetExtraLinesCount;
     296            return WebInspector.debuggerModel.createRawLocation(script, rawLineNumber, columnNumber);
     297        }
     298
     299        return WebInspector.debuggerModel.createRawLocation(script, lineNumber, columnNumber);
     300    },
     301
     302    /**
     303     * @return {Array.<WebInspector.UISourceCode>}
     304     */
     305    uiSourceCodeList: function()
     306    {
     307        var result = [];
     308        for (var uiSourceCode in this._uiSourceCodeForSnippet.values())
     309            result.push(uiSourceCode);
     310        result = result.concat(this._releasedUISourceCodes());
     311        return result;
     312    },
     313
     314    /**
     315     * @return {Array.<WebInspector.UISourceCode>}
     316     */
     317    _releasedUISourceCodes: function()
     318    {
     319        var result = [];
     320        for (var scriptId in this._uiSourceCodeForScriptId) {
     321            var uiSourceCode = this._uiSourceCodeForScriptId[scriptId];
     322            if (this._snippetForUISourceCode.get(uiSourceCode))
     323                continue;
     324            result.push(uiSourceCode);
     325        }
     326        return result;
     327    },
     328
     329    /**
     330     * @param {WebInspector.Script} script
     331     */
     332    addScript: function(script)
     333    {
     334        var snippet = WebInspector.snippetsModel.snippetForSourceURL(script.sourceURL);
     335        if (!snippet) {
     336            this._createUISourceCodeForScript(script);
     337            return;
     338        }
     339        this._releaseSnippetScript(snippet);       
     340        var uiSourceCode = this._uiSourceCodeForSnippet.get(snippet);
     341        this._uiSourceCodeForScriptId[script.scriptId] = uiSourceCode;
     342        this._snippetForScriptId[script.scriptId] = snippet;
     343        this._scriptForUISourceCode.put(uiSourceCode, script);
     344        var data = { removedItems: [], addedItems: [], scriptIds: [script.scriptId] };
     345        this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data);       
     346    },
     347
     348    /**
     349     * @param {WebInspector.Event} event
     350     */
     351    _snippetAdded: function(event)
     352    {
     353        var snippet = /** @type {WebInspector.Snippet} */ event.data;
     354        var uiSourceCodeId = ""; // FIXME: to be implemented.
     355        var uiSourceCodeURL = ""; // FIXME: to be implemented.
     356        var uiSourceCode = new WebInspector.UISourceCode(uiSourceCodeId, uiSourceCodeURL, new WebInspector.SnippetContentProvider(snippet));
     357        uiSourceCode.isSnippet = true;
     358        uiSourceCode.isEditable = true;
     359        this._uiSourceCodeForSnippet.put(snippet, uiSourceCode);
     360        this._snippetForUISourceCode.put(uiSourceCode, snippet);
     361        var data = { removedItems: [], addedItems: [uiSourceCode], scriptIds: [] };
     362        this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data);
     363    },
     364
     365    /**
     366     * @param {WebInspector.Script} script
     367     */
     368    _createUISourceCodeForScript: function(script)
     369    {
     370        var uiSourceCode = new WebInspector.UISourceCode(script.sourceURL, script.sourceURL, new WebInspector.ScriptContentProvider(script));
     371        uiSourceCode.isSnippetEvaluation = true;
     372        this._uiSourceCodeForScriptId[script.scriptId] = uiSourceCode;
     373        this._scriptForUISourceCode.put(uiSourceCode, script);
     374        var data = { removedItems: [], addedItems: [uiSourceCode], scriptIds: [script.scriptId] };
     375        this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data);
     376    },
     377
     378    /**
     379     * @param {WebInspector.Snippet} snippet
     380     */
     381    _releaseSnippetScript: function(snippet)
     382    {
     383        var uiSourceCode = this._uiSourceCodeForSnippet.get(snippet);
     384        var script = this._scriptForUISourceCode.get(uiSourceCode);
     385        if (!script)
     386            return;
     387
     388        delete this._uiSourceCodeForScriptId[script.scriptId];
     389        delete this._snippetForScriptId[script.scriptId];
     390        this._scriptForUISourceCode.remove(uiSourceCode);
     391
     392        this._createUISourceCodeForScript(script);
     393    },
     394
     395    /**
     396     * @param {WebInspector.Event} event
     397     */
     398    _snippetRemoved: function(event)
     399    {
     400        var snippet = /** @type {WebInspector.Snippet} */ event.data;
     401        var uiSourceCode = this._uiSourceCodeForSnippet.get(snippet);
     402        this._releaseSnippetScript(snippet);
     403        this._uiSourceCodeForSnippet.remove(snippet);
     404        this._snippetForUISourceCode.remove(uiSourceCode);
     405        var data = { removedItems: [uiSourceCode], addedItems: [], scriptIds: [] };
     406        this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data);
     407    },
     408
     409    reset: function()
     410    {
     411        var removedUISourceCodes = this._releasedUISourceCodes();
     412        this._snippetForScriptId = {};
     413        this._uiSourceCodeForScriptId = {};
     414        this._scriptForUISourceCode = new Map();
     415        var data = { removedItems: removedUISourceCodes, addedItems: [], scriptIds: [] };
     416        this.dispatchEventToListeners(WebInspector.ScriptMapping.Events.UISourceCodeListChanged, data);
     417    }
     418}
     419
     420WebInspector.SnippetsScriptMapping.prototype.__proto__ = WebInspector.ScriptMapping.prototype;
     421
     422/**
     423 * @constructor
     424 * @extends {WebInspector.StaticContentProvider}
     425 * @param {WebInspector.Snippet} snippet
     426 */
     427WebInspector.SnippetContentProvider = function(snippet)
     428{
     429    WebInspector.StaticContentProvider.call(this, "text/javascript", snippet.content);
     430}
     431
     432WebInspector.SnippetContentProvider.prototype.__proto__ = WebInspector.StaticContentProvider.prototype;
     433
     434/**
     435 * @type {?WebInspector.SnippetsModel}
     436 */
     437WebInspector.snippetsModel = null;
Note: See TracChangeset for help on using the changeset viewer.