Changeset 172412 in webkit


Ignore:
Timestamp:
Aug 11, 2014 2:25:34 PM (10 years ago)
Author:
Brian Burg
Message:

Web Inspector: DebuggerManager commands should return promises
https://bugs.webkit.org/show_bug.cgi?id=135690

Reviewed by Timothy Hatcher.

Convert the existing debugger commands to return promises. This
requires separately waiting for protocol command's promise to be
fulfilled, as well as waiting for the appropriate DebuggerManager
event. If the protocol command promise is rejected, tear down the
single-fire event listener.

  • UserInterface/Controllers/DebuggerManager.js:

(WebInspector.DebuggerManager.prototype.pause):
(WebInspector.DebuggerManager.prototype.resume):
(WebInspector.DebuggerManager.prototype.stepOver):
(WebInspector.DebuggerManager.prototype.stepInto):
(WebInspector.DebuggerManager.prototype.stepOut):

  • UserInterface/Controllers/ReplayManager.js: Use the promise-based API.

(WebInspector.ReplayManager.prototype._suppressBreakpointsAndResumeIfNeeded):

Location:
trunk/Source/WebInspectorUI
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r172403 r172412  
     12014-08-08  Brian J. Burg  <burg@cs.washington.edu>
     2
     3        Web Inspector: DebuggerManager commands should return promises
     4        https://bugs.webkit.org/show_bug.cgi?id=135690
     5
     6        Reviewed by Timothy Hatcher.
     7
     8        Convert the existing debugger commands to return promises. This
     9        requires separately waiting for protocol command's promise to be
     10        fulfilled, as well as waiting for the appropriate DebuggerManager
     11        event. If the protocol command promise is rejected, tear down the
     12        single-fire event listener.
     13
     14        * UserInterface/Controllers/DebuggerManager.js:
     15        (WebInspector.DebuggerManager.prototype.pause):
     16        (WebInspector.DebuggerManager.prototype.resume):
     17        (WebInspector.DebuggerManager.prototype.stepOver):
     18        (WebInspector.DebuggerManager.prototype.stepInto):
     19        (WebInspector.DebuggerManager.prototype.stepOut):
     20        * UserInterface/Controllers/ReplayManager.js: Use the promise-based API.
     21        (WebInspector.ReplayManager.prototype._suppressBreakpointsAndResumeIfNeeded):
     22
    1232014-08-11  Timothy Hatcher  <timothy@apple.com>
    224
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js

    r172333 r172412  
    143143    pause: function()
    144144    {
    145         DebuggerAgent.pause();
     145        if (this._paused)
     146            return Promise.resolve();
     147
     148        var listener = new WebInspector.EventListener(this, true);
     149
     150        var managerResult = new Promise(function(resolve, reject) {
     151            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.Paused, resolve);
     152        });
     153
     154        var protocolResult = DebuggerAgent.pause()
     155            .catch(function(error) {
     156                listener.disconnect();
     157                console.error("DebuggerManager.pause failed: ", error);
     158                throw error;
     159            });
     160
     161        return Promise.all([managerResult, protocolResult]);
    146162    },
    147163
    148164    resume: function()
    149165    {
    150         DebuggerAgent.resume();
     166        if (!this._paused)
     167            return Promise.resolve();
     168
     169        var listener = new WebInspector.EventListener(this, true);
     170
     171        var managerResult = new Promise(function(resolve, reject) {
     172            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.Resumed, resolve);
     173        });
     174
     175        var protocolResult = DebuggerAgent.resume()
     176            .catch(function(error) {
     177                listener.disconnect();
     178                console.error("DebuggerManager.resume failed: ", error);
     179                throw error;
     180            });
     181
     182        return Promise.all([managerResult, protocolResult]);
    151183    },
    152184
    153185    stepOver: function()
    154186    {
    155         DebuggerAgent.stepOver();
     187        if (!this._paused)
     188            return Promise.reject(new Error("Cannot step over because debugger is not paused."));
     189
     190        var listener = new WebInspector.EventListener(this, true);
     191
     192        var managerResult = new Promise(function(resolve, reject) {
     193            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.ActiveCallFrameDidChange, resolve);
     194        });
     195
     196        var protocolResult = DebuggerAgent.stepOver()
     197            .catch(function(error) {
     198                listener.disconnect();
     199                console.error("DebuggerManager.stepOver failed: ", error);
     200                throw error;
     201            });
     202
     203        return Promise.all([managerResult, protocolResult]);
    156204    },
    157205
    158206    stepInto: function()
    159207    {
    160         DebuggerAgent.stepInto();
     208        if (!this._paused)
     209            return Promise.reject(new Error("Cannot step into because debugger is not paused."));
     210
     211        var listener = new WebInspector.EventListener(this, true);
     212
     213        var managerResult = new Promise(function(resolve, reject) {
     214            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.ActiveCallFrameDidChange, resolve);
     215        });
     216
     217        var protocolResult = DebuggerAgent.stepInto()
     218            .catch(function(error) {
     219                listener.disconnect();
     220                console.error("DebuggerManager.stepInto failed: ", error);
     221                throw error;
     222            });
     223
     224        return Promise.all([managerResult, protocolResult]);
    161225    },
    162226
    163227    stepOut: function()
    164228    {
    165         DebuggerAgent.stepOut();
     229        if (!this._paused)
     230            return Promise.reject(new Error("Cannot step out because debugger is not paused."));
     231
     232        var listener = new WebInspector.EventListener(this, true);
     233
     234        var managerResult = new Promise(function(resolve, reject) {
     235            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.ActiveCallFrameDidChange, resolve);
     236        });
     237
     238        var protocolResult = DebuggerAgent.stepOut()
     239            .catch(function(error) {
     240                listener.disconnect();
     241                console.error("DebuggerManager.stepOut failed: ", error);
     242                throw error;
     243            });
     244
     245        return Promise.all([managerResult, protocolResult]);
    166246    },
    167247
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js

    r172203 r172412  
    676676            manager._breakpointsWereSuppressed = WebInspector.debuggerManager.breakpointsEnabled;
    677677            WebInspector.debuggerManager.breakpointsEnabled = false;
    678             if (!WebInspector.debuggerManager.paused)
    679                 return resolve();
    680 
    681             WebInspector.debuggerManager.resume();
    682             WebInspector.debuggerManager.addSingleFireEventListener(WebInspector.DebuggerManager.Event.Resumed, resolve);
     678
     679            return WebInspector.debuggerManager.resume();
    683680        });
    684681    }
Note: See TracChangeset for help on using the changeset viewer.