Title: [172412] trunk/Source/WebInspectorUI
Revision
172412
Author
[email protected]
Date
2014-08-11 14:25:34 -0700 (Mon, 11 Aug 2014)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (172411 => 172412)


--- trunk/Source/WebInspectorUI/ChangeLog	2014-08-11 21:16:27 UTC (rev 172411)
+++ trunk/Source/WebInspectorUI/ChangeLog	2014-08-11 21:25:34 UTC (rev 172412)
@@ -1,3 +1,25 @@
+2014-08-08  Brian J. Burg  <[email protected]>
+
+        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):
+
 2014-08-11  Timothy Hatcher  <[email protected]>
 
         Web Inspector: Update folder icons

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js (172411 => 172412)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js	2014-08-11 21:16:27 UTC (rev 172411)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js	2014-08-11 21:25:34 UTC (rev 172412)
@@ -142,27 +142,107 @@
 
     pause: function()
     {
-        DebuggerAgent.pause();
+        if (this._paused)
+            return Promise.resolve();
+
+        var listener = new WebInspector.EventListener(this, true);
+
+        var managerResult = new Promise(function(resolve, reject) {
+            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.Paused, resolve);
+        });
+
+        var protocolResult = DebuggerAgent.pause()
+            .catch(function(error) {
+                listener.disconnect();
+                console.error("DebuggerManager.pause failed: ", error);
+                throw error;
+            });
+
+        return Promise.all([managerResult, protocolResult]);
     },
 
     resume: function()
     {
-        DebuggerAgent.resume();
+        if (!this._paused)
+            return Promise.resolve();
+
+        var listener = new WebInspector.EventListener(this, true);
+
+        var managerResult = new Promise(function(resolve, reject) {
+            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.Resumed, resolve);
+        });
+
+        var protocolResult = DebuggerAgent.resume()
+            .catch(function(error) {
+                listener.disconnect();
+                console.error("DebuggerManager.resume failed: ", error);
+                throw error;
+            });
+
+        return Promise.all([managerResult, protocolResult]);
     },
 
     stepOver: function()
     {
-        DebuggerAgent.stepOver();
+        if (!this._paused)
+            return Promise.reject(new Error("Cannot step over because debugger is not paused."));
+
+        var listener = new WebInspector.EventListener(this, true);
+
+        var managerResult = new Promise(function(resolve, reject) {
+            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.ActiveCallFrameDidChange, resolve);
+        });
+
+        var protocolResult = DebuggerAgent.stepOver()
+            .catch(function(error) {
+                listener.disconnect();
+                console.error("DebuggerManager.stepOver failed: ", error);
+                throw error;
+            });
+
+        return Promise.all([managerResult, protocolResult]);
     },
 
     stepInto: function()
     {
-        DebuggerAgent.stepInto();
+        if (!this._paused)
+            return Promise.reject(new Error("Cannot step into because debugger is not paused."));
+
+        var listener = new WebInspector.EventListener(this, true);
+
+        var managerResult = new Promise(function(resolve, reject) {
+            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.ActiveCallFrameDidChange, resolve);
+        });
+
+        var protocolResult = DebuggerAgent.stepInto()
+            .catch(function(error) {
+                listener.disconnect();
+                console.error("DebuggerManager.stepInto failed: ", error);
+                throw error;
+            });
+
+        return Promise.all([managerResult, protocolResult]);
     },
 
     stepOut: function()
     {
-        DebuggerAgent.stepOut();
+        if (!this._paused)
+            return Promise.reject(new Error("Cannot step out because debugger is not paused."));
+
+        var listener = new WebInspector.EventListener(this, true);
+
+        var managerResult = new Promise(function(resolve, reject) {
+            listener.connect(WebInspector.debuggerManager, WebInspector.DebuggerManager.Event.ActiveCallFrameDidChange, resolve);
+        });
+
+        var protocolResult = DebuggerAgent.stepOut()
+            .catch(function(error) {
+                listener.disconnect();
+                console.error("DebuggerManager.stepOut failed: ", error);
+                throw error;
+            });
+
+        return Promise.all([managerResult, protocolResult]);
     },
 
     get allExceptionsBreakpoint()

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js (172411 => 172412)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js	2014-08-11 21:16:27 UTC (rev 172411)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js	2014-08-11 21:25:34 UTC (rev 172412)
@@ -675,11 +675,8 @@
         return new Promise(function(resolve, reject) {
             manager._breakpointsWereSuppressed = WebInspector.debuggerManager.breakpointsEnabled;
             WebInspector.debuggerManager.breakpointsEnabled = false;
-            if (!WebInspector.debuggerManager.paused)
-                return resolve();
 
-            WebInspector.debuggerManager.resume();
-            WebInspector.debuggerManager.addSingleFireEventListener(WebInspector.DebuggerManager.Event.Resumed, resolve);
+            return WebInspector.debuggerManager.resume();
         });
     }
 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to