Title: [205319] trunk
Revision
205319
Author
[email protected]
Date
2016-09-01 15:03:10 -0700 (Thu, 01 Sep 2016)

Log Message

Web Inspector: add Object.awaitEvent which is like singleFireEventListener but returns a promise
https://bugs.webkit.org/show_bug.cgi?id=161451

Patch by Devin Rousso <[email protected]> on 2016-09-01
Reviewed by Brian Burg.

Source/WebInspectorUI:

* UserInterface/Base/Object.js:
(WebInspector.Object.awaitEvent):
(WebInspector.Object.prototype.awaitEvent):

LayoutTests:

* inspector/unit-tests/object-expected.txt:
* inspector/unit-tests/object.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (205318 => 205319)


--- trunk/LayoutTests/ChangeLog	2016-09-01 21:50:32 UTC (rev 205318)
+++ trunk/LayoutTests/ChangeLog	2016-09-01 22:03:10 UTC (rev 205319)
@@ -1,3 +1,13 @@
+2016-09-01  Devin Rousso  <[email protected]>
+
+        Web Inspector: add Object.awaitEvent which is like singleFireEventListener but returns a promise
+        https://bugs.webkit.org/show_bug.cgi?id=161451
+
+        Reviewed by Brian Burg.
+
+        * inspector/unit-tests/object-expected.txt:
+        * inspector/unit-tests/object.html:
+
 2016-09-01  Ryosuke Niwa  <[email protected]>
 
         Fix a typo in the previous commit. I didn't mean to comment out this test case I added per a review comment.

Modified: trunk/LayoutTests/inspector/unit-tests/object-expected.txt (205318 => 205319)


--- trunk/LayoutTests/inspector/unit-tests/object-expected.txt	2016-09-01 21:50:32 UTC (rev 205318)
+++ trunk/LayoutTests/inspector/unit-tests/object-expected.txt	2016-09-01 22:03:10 UTC (rev 205319)
@@ -2,6 +2,10 @@
 
 
 == Running test suite: Object
--- Running test case: Events propagation
+-- Running test case: WebInspector.Object.prototype.dispatchEventToListeners
 Dispatch count: 1
 
+-- Running test case: WebInspector.Object.prototype.awaitEvent
+PASS: Await event handler should be dispatched just once.
+Dispatch count: 1
+

Modified: trunk/LayoutTests/inspector/unit-tests/object.html (205318 => 205319)


--- trunk/LayoutTests/inspector/unit-tests/object.html	2016-09-01 21:50:32 UTC (rev 205318)
+++ trunk/LayoutTests/inspector/unit-tests/object.html	2016-09-01 22:03:10 UTC (rev 205319)
@@ -5,12 +5,12 @@
 <script>
 function test()
 {
-    let suite = InspectorTest.createSyncSuite("Object");
+    let suite = InspectorTest.createAsyncSuite("Object");
 
     suite.addTestCase({
-        name: "Events propagation",
+        name: "WebInspector.Object.prototype.dispatchEventToListeners",
         description: "WebInspector.Object shouldn't dispatch constructor-level events multiple times",
-        test: function() {
+        test(resolve, reject) {
             class Parent extends WebInspector.Object {}
             class Child extends Parent {}
 
@@ -23,9 +23,38 @@
             child.dispatchEventToListeners(eventName);
 
             InspectorTest.log("Dispatch count: " + dispatchCount);
+
+            resolve();
         }
     });
 
+    suite.addTestCase({
+        name: "WebInspector.Object.prototype.awaitEvent",
+        description: "awaitEvent should only trigger once",
+        test(resolve, reject) {
+            const eventName = "test";
+            let dispatchCount = 0;
+
+            let object = new WebInspector.Object;
+
+            object.awaitEvent(eventName).then(() => {
+                dispatchCount++;
+
+                InspectorTest.expectThat(dispatchCount === 1, "Await event handler should be dispatched just once.");
+                InspectorTest.log("Dispatch count: " + dispatchCount);
+
+                // Resolve test on second event dispatch.
+                object.awaitEvent(eventName).then(() => {
+                    resolve();
+                });
+
+                object.dispatchEventToListeners(eventName);
+            });
+
+            object.dispatchEventToListeners(eventName);
+        }
+    });
+
     suite.runTestCasesAndFinish();
 }
 </script>

Modified: trunk/Source/WebInspectorUI/ChangeLog (205318 => 205319)


--- trunk/Source/WebInspectorUI/ChangeLog	2016-09-01 21:50:32 UTC (rev 205318)
+++ trunk/Source/WebInspectorUI/ChangeLog	2016-09-01 22:03:10 UTC (rev 205319)
@@ -1,3 +1,14 @@
+2016-09-01  Devin Rousso  <[email protected]>
+
+        Web Inspector: add Object.awaitEvent which is like singleFireEventListener but returns a promise
+        https://bugs.webkit.org/show_bug.cgi?id=161451
+
+        Reviewed by Brian Burg.
+
+        * UserInterface/Base/Object.js:
+        (WebInspector.Object.awaitEvent):
+        (WebInspector.Object.prototype.awaitEvent):
+
 2016-09-01  Nikita Vasilyev  <[email protected]>
 
         Web Inspector: Minification detection produces false positives for small resources

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Object.js (205318 => 205319)


--- trunk/Source/WebInspectorUI/UserInterface/Base/Object.js	2016-09-01 21:50:32 UTC (rev 205318)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Object.js	2016-09-01 22:03:10 UTC (rev 205319)
@@ -98,6 +98,13 @@
         console.assert(didDelete, "removeEventListener cannot remove " + eventType.toString() + " because it doesn't exist.");
     }
 
+    static awaitEvent(eventType)
+    {
+        return new Promise((resolve, reject) => {
+            this.singleFireEventListener(eventType, (event) => resolve(event), null);
+        });
+    }
+
     // Only used by tests.
     static hasEventListeners(eventType)
     {
@@ -131,6 +138,7 @@
     addEventListener() { return WebInspector.Object.addEventListener.apply(this, arguments); }
     singleFireEventListener() { return WebInspector.Object.singleFireEventListener.apply(this, arguments); }
     removeEventListener() { return WebInspector.Object.removeEventListener.apply(this, arguments); }
+    awaitEvent() { return WebInspector.Object.awaitEvent.apply(this, arguments); }
     hasEventListeners() { return WebInspector.Object.hasEventListeners.apply(this, arguments); }
     retainedObjectsWithPrototype() { return WebInspector.Object.retainedObjectsWithPrototype.apply(this, arguments); }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to