Changeset 94762 in webkit


Ignore:
Timestamp:
Sep 8, 2011 9:38:22 AM (13 years ago)
Author:
podivilov@chromium.org
Message:

Web Inspector: get rid of RawSourceCode.createSourceMappingIfNeeded.
https://bugs.webkit.org/show_bug.cgi?id=67717

Source/WebCore:

Listen to SourceMappingUpdated event instead of using createSourceMappingIfNeeded.

Reviewed by Yury Semikhatsky.

  • inspector/front-end/DebuggerPresentationModel.js:

(WebInspector.DebuggerPresentationModel):
(WebInspector.DebuggerPresentationModel.prototype.linkifyLocation.updateAnchor):
(WebInspector.DebuggerPresentationModel.prototype.linkifyLocation):
(WebInspector.DebuggerPresentationModel.prototype._updateSourceMapping):
(WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
(WebInspector.DebuggerPresentationModel.prototype._restoreConsoleMessages):
(WebInspector.DebuggerPresentationModel.prototype.setFormatSource):
(WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
(WebInspector.DebuggerPresentationModel.prototype._createPresentationMessage):
(WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
(WebInspector.DebuggerPresentationModel.prototype.continueToLine):
(WebInspector.DebuggerPresentationModel.prototype.messagesForUISourceCode):
(WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
(WebInspector.PresentationCallFrame.prototype.sourceLine.sourceMappingUpdated):
(WebInspector.PresentationCallFrame.prototype.sourceLine):

  • inspector/front-end/SourceFile.js:

LayoutTests:

Merge source-file.html into raw-source-code.html.

Reviewed by Yury Semikhatsky.

  • inspector/debugger/raw-source-code.html:
  • inspector/debugger/source-file.html: Removed.
Location:
trunk
Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r94761 r94762  
     12011-09-07  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Web Inspector: get rid of RawSourceCode.createSourceMappingIfNeeded.
     4        https://bugs.webkit.org/show_bug.cgi?id=67717
     5
     6        Merge source-file.html into raw-source-code.html.
     7
     8        Reviewed by Yury Semikhatsky.
     9
     10        * inspector/debugger/raw-source-code.html:
     11        * inspector/debugger/source-file.html: Removed.
     12
    1132011-09-08  Cary Clark  <caryclark@google.com>
    214
  • trunk/LayoutTests/inspector/debugger/raw-source-code.html

    r94760 r94762  
    8181    }
    8282
     83    function createRawLocation(lineNumber, columnNumber)
     84    {
     85        return { lineNumber: lineNumber, columnNumber: columnNumber };
     86    }
     87
     88    function checkRawLocation(script, lineNumber, columnNumber, location)
     89    {
     90        InspectorTest.assertEquals(script.scriptId, location.scriptId);
     91        InspectorTest.assertEquals(lineNumber, location.lineNumber);
     92        InspectorTest.assertEquals(columnNumber, location.columnNumber);
     93    }
     94
     95    function checkUILocation(uiSourceCode, lineNumber, columnNumber, location)
     96    {
     97        InspectorTest.assertEquals(uiSourceCode, location.uiSourceCode);
     98        InspectorTest.assertEquals(lineNumber, location.lineNumber);
     99        InspectorTest.assertEquals(columnNumber, location.columnNumber);
     100    }
     101
    83102    InspectorTest.runTestSuite([
    84103        function testScriptWithoutResource(next)
     
    92111            InspectorTest.assertEquals(true, uiSourceCode.isContentScript);
    93112            InspectorTest.assertEquals(rawSourceCode, uiSourceCode.rawSourceCode);
     113            checkUILocation(uiSourceCode, 0, 5, rawSourceCode.rawLocationToUILocation(createRawLocation(0, 5)));
     114            checkRawLocation(script, 0, 10, rawSourceCode.uiLocationToRawLocation(0, 10));
    94115            uiSourceCode.requestContent(didRequestContent);
    95116
     
    135156        function testHTMLWithFinishedResource(next)
    136157        {
    137             var script1 = createScriptMock("index.html", 0, 10, false, "<script source 1>");
    138             var script2 = createScriptMock("index.html", 0, 45, false, "<script source 2>");
     158            var script1 = createScriptMock("index.html", 1, 10, false, "<script source 1>");
     159            var script2 = createScriptMock("index.html", 5, 45, false, "<script\nsource\n2>");
    139160            var resource = createFinishedResourceMock("document", "<resource content>");
    140161            var rawSourceCode = createRawSourceCode(script1, resource);
     
    153174                rawSourceCode.addScript(script2);
    154175                rawSourceCode.forceUpdateSourceMapping();
     176                checkUILocation(uiSourceCode, 1, 20, rawSourceCode.rawLocationToUILocation(createRawLocation(1, 20)));
     177                checkRawLocation(script1, 1, 20, rawSourceCode.uiLocationToRawLocation(1, 20));
     178                checkRawLocation(script2, 6, 2, rawSourceCode.uiLocationToRawLocation(6, 2));
     179
    155180                next();
    156181            }
     
    257282            InspectorTest.assertTrue(!!rawSourceCode.uiSourceCode);
    258283            var uiSourceCode = rawSourceCode.uiSourceCode;
    259             var uiLocation = rawSourceCode.rawLocationToUILocation({ lineNumber : 1, columnNumber: 2 });
    260             InspectorTest.assertEquals(uiSourceCode, uiLocation.uiSourceCode);
    261             InspectorTest.assertEquals(1, uiLocation.lineNumber);
    262             InspectorTest.assertEquals(2, uiLocation.columnNumber);
     284            checkUILocation(uiSourceCode, 1, 2, rawSourceCode.rawLocationToUILocation(createRawLocation(1, 2)));
     285            checkRawLocation(script, 1, 2, rawSourceCode.uiLocationToRawLocation(1, 2));
    263286            uiSourceCode.requestContent(didRequestContent);
    264287
     
    276299            {
    277300                var uiSourceCode = rawSourceCode.uiSourceCode;
    278                 var uiLocation = rawSourceCode.rawLocationToUILocation({ lineNumber : 1, columnNumber: 2 });
    279                 InspectorTest.assertEquals(uiSourceCode, uiLocation.uiSourceCode);
    280                 InspectorTest.assertEquals(2, uiLocation.lineNumber);
    281                 InspectorTest.assertEquals(4, uiLocation.columnNumber);
     301                checkUILocation(uiSourceCode, 2, 4, rawSourceCode.rawLocationToUILocation(createRawLocation(1, 2)));
     302                checkRawLocation(script, 1, 2, rawSourceCode.uiLocationToRawLocation(2, 4));
    282303                uiSourceCode.requestContent(didRequestFormattedContent);
    283304            }
     
    295316            {
    296317                var uiSourceCode = rawSourceCode.uiSourceCode;
    297                 var uiLocation = rawSourceCode.rawLocationToUILocation({ lineNumber : 1, columnNumber: 2 });
    298                 InspectorTest.assertEquals(uiSourceCode, uiLocation.uiSourceCode);
    299                 InspectorTest.assertEquals(1, uiLocation.lineNumber);
    300                 InspectorTest.assertEquals(2, uiLocation.columnNumber);
     318                checkUILocation(uiSourceCode, 1, 2, rawSourceCode.rawLocationToUILocation(createRawLocation(1, 2)));
     319                checkRawLocation(script, 1, 2, rawSourceCode.uiLocationToRawLocation(1, 2));
    301320                uiSourceCode.requestContent(didRequestNotFormattedContent);
    302321            }
     
    325344            {
    326345                var uiSourceCode = rawSourceCode.uiSourceCode;
    327                 var uiLocation = rawSourceCode.rawLocationToUILocation({ lineNumber : 1, columnNumber: 2 });
    328                 InspectorTest.assertEquals(uiSourceCode, uiLocation.uiSourceCode);
    329                 InspectorTest.assertEquals(2, uiLocation.lineNumber);
    330                 InspectorTest.assertEquals(4, uiLocation.columnNumber);
    331 
     346                checkUILocation(uiSourceCode, 2, 4, rawSourceCode.rawLocationToUILocation(createRawLocation(1, 2)));
     347                checkRawLocation(script, 1, 2, rawSourceCode.uiLocationToRawLocation(2, 4));
    332348                next();
    333349            }
  • trunk/Source/WebCore/ChangeLog

    r94760 r94762  
     12011-09-07  Pavel Podivilov  <podivilov@chromium.org>
     2
     3        Web Inspector: get rid of RawSourceCode.createSourceMappingIfNeeded.
     4        https://bugs.webkit.org/show_bug.cgi?id=67717
     5
     6        Listen to SourceMappingUpdated event instead of using createSourceMappingIfNeeded.
     7
     8        Reviewed by Yury Semikhatsky.
     9
     10        * inspector/front-end/DebuggerPresentationModel.js:
     11        (WebInspector.DebuggerPresentationModel):
     12        (WebInspector.DebuggerPresentationModel.prototype.linkifyLocation.updateAnchor):
     13        (WebInspector.DebuggerPresentationModel.prototype.linkifyLocation):
     14        (WebInspector.DebuggerPresentationModel.prototype._updateSourceMapping):
     15        (WebInspector.DebuggerPresentationModel.prototype._restoreBreakpoints):
     16        (WebInspector.DebuggerPresentationModel.prototype._restoreConsoleMessages):
     17        (WebInspector.DebuggerPresentationModel.prototype.setFormatSource):
     18        (WebInspector.DebuggerPresentationModel.prototype._consoleMessageAdded):
     19        (WebInspector.DebuggerPresentationModel.prototype._createPresentationMessage):
     20        (WebInspector.DebuggerPresentationModel.prototype._consoleCleared):
     21        (WebInspector.DebuggerPresentationModel.prototype.continueToLine):
     22        (WebInspector.DebuggerPresentationModel.prototype.messagesForUISourceCode):
     23        (WebInspector.DebuggerPresentationModel.prototype._debuggerReset):
     24        (WebInspector.PresentationCallFrame.prototype.sourceLine.sourceMappingUpdated):
     25        (WebInspector.PresentationCallFrame.prototype.sourceLine):
     26        * inspector/front-end/SourceFile.js:
     27
    1282011-09-06  Pavel Podivilov  <podivilov@chromium.org>
    229
  • trunk/Source/WebCore/inspector/front-end/BreakpointManager.js

    r94571 r94762  
    9292    _materializeBreakpoint: function(breakpoint)
    9393    {
    94         if (!breakpoint.enabled || breakpoint._debuggerId)
    95             return;
    96 
     94        if (!breakpoint.enabled || breakpoint._materialized)
     95            return;
     96
     97        breakpoint._materialized = true;
    9798        var rawLocation = breakpoint.uiSourceCode.rawSourceCode.uiLocationToRawLocation(breakpoint.lineNumber, 0);
    9899        this._setBreakpointInDebugger(breakpoint, rawLocation);
     
    216217        {
    217218            this._removeBreakpointFromDebugger(breakpoint);
     219            delete breakpoint._materialized;
    218220        }
    219221        this._forEachBreakpoint(resetBreakpoint.bind(this));
  • trunk/Source/WebCore/inspector/front-end/DebuggerPresentationModel.js

    r94760 r94762  
    3737    this._formatter = new WebInspector.ScriptFormatter();
    3838    this._rawSourceCode = {};
    39     this._messages = [];
    40 
    4139    this._presentationCallFrames = [];
    4240    this._selectedCallFrameIndex = 0;
     
    6967
    7068WebInspector.DebuggerPresentationModel.prototype = {
    71     _scriptLocationToUILocation: function(sourceURL, scriptId, lineNumber, columnNumber, callback)
    72     {
    73         var rawSourceCode = this._rawSourceCodeForScript(sourceURL, scriptId);
    74 
    75         function didCreateSourceMapping()
    76         {
    77             var uiLocation = rawSourceCode.rawLocationToUILocation({ lineNumber: lineNumber, columnNumber: columnNumber });
    78             callback(uiLocation.uiSourceCode, uiLocation.lineNumber);
    79         }
    80         // FIXME: force source formatting if needed. This will go away once formatting
    81         // is fully encapsulated in RawSourceCode class.
    82         rawSourceCode.createSourceMappingIfNeeded(didCreateSourceMapping);
    83     },
    84 
    85     _uiLocationToScriptLocation: function(uiSourceCode, lineNumber, callback)
    86     {
    87         var rawSourceCode = uiSourceCode.rawSourceCode;
    88 
    89         function didCreateSourceMapping()
    90         {
    91             var rawLocation = rawSourceCode.uiLocationToRawLocation(lineNumber, 0);
    92             callback(rawLocation);
    93         }
    94         // FIXME: force source formatting if needed. This will go away once formatting
    95         // is fully encapsulated in RawSourceCode class.
    96         rawSourceCode.createSourceMappingIfNeeded(didCreateSourceMapping);
    97     },
    98 
    9969    linkifyLocation: function(sourceURL, lineNumber, columnNumber, classes)
    10070    {
     
    11181        function updateAnchor()
    11282        {
    113             function didGetLocation(uiSourceCode, lineNumber)
    114             {
    115                 anchor.textContent = WebInspector.formatLinkText(uiSourceCode.url, lineNumber);
    116                 anchor.setAttribute("preferred_panel", "scripts");
    117                 anchor.uiSourceCode = uiSourceCode;
    118                 anchor.lineNumber = lineNumber;
    119             }
    120             this._scriptLocationToUILocation(sourceURL, null, lineNumber, columnNumber, didGetLocation.bind(this));
    121         }
    122         updateAnchor.call(this);
     83            var uiLocation = rawSourceCode.rawLocationToUILocation({ lineNumber: lineNumber, columnNumber: columnNumber });
     84            anchor.textContent = WebInspector.formatLinkText(uiLocation.uiSourceCode.url, uiLocation.lineNumber);
     85            anchor.setAttribute("preferred_panel", "scripts");
     86            anchor.uiSourceCode = uiLocation.uiSourceCode;
     87            anchor.lineNumber = uiLocation.lineNumber;
     88        }
     89        if (rawSourceCode.uiSourceCode)
     90            updateAnchor.call(this);
    12391        rawSourceCode.addEventListener(WebInspector.RawSourceCode.Events.SourceMappingUpdated, updateAnchor, this);
    12492        return anchor;
     
    165133        var uiSourceCode = rawSourceCode.uiSourceCode;
    166134
    167         if (!oldUISourceCode)
    168             this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.UISourceCodeAdded, uiSourceCode);
    169         else {
     135        if (oldUISourceCode) {
    170136            var breakpoints = this._breakpointManager.breakpointsForUISourceCode(oldUISourceCode);
    171137            for (var lineNumber in breakpoints) {
     
    174140                delete breakpoint.uiSourceCode;
    175141            }
     142        }
     143
     144        this._restoreBreakpoints(uiSourceCode);
     145        this._restoreConsoleMessages(uiSourceCode);
     146
     147        if (!oldUISourceCode)
     148            this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.UISourceCodeAdded, uiSourceCode);
     149        else {
    176150            var eventData = { uiSourceCode: uiSourceCode, oldUISourceCode: oldUISourceCode };
    177151            this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.UISourceCodeReplaced, eventData);
    178152        }
    179 
     153    },
     154
     155    _restoreBreakpoints: function(uiSourceCode)
     156    {
    180157        this._breakpointManager.uiSourceCodeAdded(uiSourceCode);
    181158        var breakpoints = this._breakpointManager.breakpointsForUISourceCode(uiSourceCode);
    182159        for (var lineNumber in breakpoints)
    183160            this._breakpointAdded(breakpoints[lineNumber]);
     161    },
     162
     163    _restoreConsoleMessages: function(uiSourceCode)
     164    {
     165        var messages = uiSourceCode.rawSourceCode.messages;
     166        for (var i = 0; i < messages.length; ++i)
     167            messages[i]._presentationMessage = this._createPresentationMessage(messages[i], uiSourceCode);
    184168    },
    185169
     
    252236
    253237        this._formatSource = formatSource;
    254 
    255238        this._breakpointManager.reset();
    256 
    257         for (var id in this._rawSourceCode) {
    258             this._rawSourceCode[id].messages = [];
     239        for (var id in this._rawSourceCode)
    259240            this._rawSourceCode[id].setFormatted(this._formatSource);
    260         }
    261 
    262         var messages = this._messages;
    263         this._messages = [];
    264         for (var i = 0; i < messages.length; ++i)
    265             this._addConsoleMessage(messages[i]);
    266241
    267242        if (WebInspector.debuggerModel.callFrames)
     
    272247    {
    273248        var message = event.data;
    274         if (message.url && message.isErrorOrWarning() && message.message)
    275             this._addConsoleMessage(message);
    276     },
    277 
    278     _addConsoleMessage: function(message)
    279     {
    280         this._messages.push(message);
     249        if (!message.url || !message.isErrorOrWarning() || !message.message)
     250            return;
    281251
    282252        var rawSourceCode = this._rawSourceCodeForScript(message.url);
     
    284254            return;
    285255
    286         function didGetUILocation(uiSourceCode, lineNumber)
    287         {
    288             var presentationMessage = {};
    289             presentationMessage.uiSourceCode = uiSourceCode;
    290             presentationMessage.lineNumber = lineNumber;
    291             presentationMessage.originalMessage = message;
    292             rawSourceCode.messages.push(presentationMessage);
    293             this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessageAdded, presentationMessage);
    294         }
     256        rawSourceCode.messages.push(message);
     257        if (rawSourceCode.uiSourceCode) {
     258            message._presentationMessage = this._createPresentationMessage(message, rawSourceCode.uiSourceCode);
     259            this.dispatchEventToListeners(WebInspector.DebuggerPresentationModel.Events.ConsoleMessageAdded, message._presentationMessage);
     260        }
     261    },
     262
     263    _createPresentationMessage: function(message, uiSourceCode)
     264    {
    295265        // FIXME(62725): stack trace line/column numbers are one-based.
    296266        var lineNumber = message.stackTrace ? message.stackTrace[0].lineNumber - 1 : message.line - 1;
    297267        var columnNumber = message.stackTrace ? message.stackTrace[0].columnNumber - 1 : 0;
    298         this._scriptLocationToUILocation(message.url, null, lineNumber, columnNumber, didGetUILocation.bind(this));
     268        var uiLocation = uiSourceCode.rawSourceCode.rawLocationToUILocation({ lineNumber: lineNumber, columnNumber: columnNumber });
     269        var presentationMessage = {};
     270        presentationMessage.uiSourceCode = uiLocation.uiSourceCode;
     271        presentationMessage.lineNumber = uiLocation.lineNumber;
     272        presentationMessage.originalMessage = message;
     273        return presentationMessage;
    299274    },
    300275
    301276    _consoleCleared: function()
    302277    {
    303         this._messages = [];
    304278        for (var id in this._rawSourceCode)
    305279            this._rawSourceCode[id].messages = [];
     
    309283    continueToLine: function(uiSourceCode, lineNumber)
    310284    {
    311         function didGetScriptLocation(location)
    312         {
    313             WebInspector.debuggerModel.continueToLocation(location);
    314         }
    315         this._uiLocationToScriptLocation(uiSourceCode, lineNumber, didGetScriptLocation);
     285        var rawLocation = uiSourceCode.rawSourceCode.uiLocationToRawLocation(lineNumber, 0);
     286        WebInspector.debuggerModel.continueToLocation(rawLocation);
    316287    },
    317288
     
    328299    {
    329300        var rawSourceCode = uiSourceCode.rawSourceCode;
    330         return rawSourceCode.messages;
     301        var messages = [];
     302        for (var i = 0; i < rawSourceCode.messages.length; ++i)
     303            messages.push(rawSourceCode.messages[i]._presentationMessage);
     304        return messages;
    331305    },
    332306
     
    438412    {
    439413        this._rawSourceCode = {};
    440         this._messages = [];
    441414        this._presentationCallFrames = [];
    442415        this._selectedCallFrameIndex = 0;
     
    522495    sourceLine: function(callback)
    523496    {
    524         var location = this._callFrame.location;
    525         if (!this.isInternalScript)
    526             this._model._scriptLocationToUILocation(null, location.scriptId, location.lineNumber, location.columnNumber, callback);
    527         else
    528             callback(undefined, location.lineNumber);
     497        var rawLocation = this._callFrame.location;
     498        if (!this._rawSourceCode) {
     499            callback(undefined, rawLocation.lineNumber);
     500            return;
     501        }
     502
     503        if (this._rawSourceCode.uiSourceCode) {
     504            var uiLocation = this._rawSourceCode.rawLocationToUILocation(rawLocation);
     505            callback(uiLocation.uiSourceCode, uiLocation.lineNumber);
     506            return;
     507        }
     508
     509        function sourceMappingUpdated()
     510        {
     511            this._rawSourceCode.removeEventListener(WebInspector.RawSourceCode.Events.SourceMappingUpdated, sourceMappingUpdated, this);
     512            var uiLocation = this._rawSourceCode.rawLocationToUILocation(rawLocation);
     513            callback(uiLocation.uiSourceCode, uiLocation.lineNumber);
     514        }
     515        this._rawSourceCode.addEventListener(WebInspector.RawSourceCode.Events.SourceMappingUpdated, sourceMappingUpdated, this);
    529516    }
    530517}
  • trunk/Source/WebCore/inspector/front-end/SourceFile.js

    r94760 r94762  
    119119    },
    120120
    121     createSourceMappingIfNeeded: function(callback)
    122     {
    123         // FIXME: remove createSourceMappingIfNeeded, client should listen to SourceMappingUpdated event instead.
    124         if (this._uiSourceCode && !this._updatingSourceMapping) {
    125             callback();
    126             return;
    127         }
    128 
    129         function sourceMappingUpdated()
    130         {
    131             this.removeEventListener(WebInspector.RawSourceCode.Events.SourceMappingUpdated, sourceMappingUpdated, this);
    132             callback();
    133         }
    134         this.addEventListener(WebInspector.RawSourceCode.Events.SourceMappingUpdated, sourceMappingUpdated, this);
    135     },
    136 
    137121    forceUpdateSourceMapping: function(script)
    138122    {
Note: See TracChangeset for help on using the changeset viewer.