Chromium Code Reviews| Index: LayoutTests/http/tests/media/media-source/mediasource-util.js |
| diff --git a/LayoutTests/http/tests/media/media-source/mediasource-util.js b/LayoutTests/http/tests/media/media-source/mediasource-util.js |
| index 456f012f4d99dc613dbdf3ac07f224d518097e76..02bdd53b8c3f4cf16771158c4ff243734f67da53 100644 |
| --- a/LayoutTests/http/tests/media/media-source/mediasource-util.js |
| +++ b/LayoutTests/http/tests/media/media-source/mediasource-util.js |
| @@ -4,6 +4,7 @@ |
| this.test_ = test; |
| this.eventTargetList_ = []; |
| this.waitCallbacks_ = []; |
| + this.timeoutIDs_ = {}; |
| }; |
| EventExpectationsManager.prototype.expectEvent = function(object, eventName, description) |
| @@ -29,6 +30,29 @@ |
| object.addEventListener(eventName, eventHandler); |
| }; |
| + EventExpectationsManager.prototype.expectDelayedCallback = function(callback, delay) |
| + { |
| + var timeoutIDHolder = 0; |
| + var timeoutIDs = this.timeoutIDs_; |
| + // Define a wrapper function that will: |
| + // 1. To indicate that this expected callback did fire, remove this |
| + // timeoutID from the list of IDs we are maintaining. |
| + // 2. Execute the callback that has been passed-in. |
| + var callbackWrapper = this.test_.step_func(function() { |
| + delete timeoutIDs[timeoutIDHolder]; |
| + callback(); |
| + }); |
| + |
| + // Default to a wait time of 300ms. |
|
anandc
2013/08/06 18:03:31
OK to manage the delay in this manner?
|
| + delay = (typeof delay === "undefined") ? 300 : delay; |
| + // Execute the wrapper after the specified or default delay. |
| + timeoutIDHolder = setTimeout(function() { callbackWrapper(); }, delay); |
|
acolwell GONE FROM CHROMIUM
2013/08/06 18:42:37
nit: You shouldn't need to wrap callbackWrapper he
anandc
2013/08/06 21:30:51
Got it. This function has been removed now. PTAL a
anandc
2013/08/06 21:55:30
Hmm. Not removed, so fixing.
anandc
2013/08/06 21:57:39
Actually removed. :-)
|
| + |
| + // Add to list of timeoutIDs, which we'll use eventually to check that |
| + // all expected delayed callbacks did get executed. |
| + timeoutIDs[timeoutIDHolder] = timeoutIDHolder; |
| + }; |
| + |
| EventExpectationsManager.prototype.waitForExpectedEvents = function(callback) |
| { |
| this.waitCallbacks_.push(callback); |
| @@ -176,6 +200,11 @@ |
| test.eventExpectations_.expectEvent(object, eventName, description); |
| }; |
| + test.expectDelayedCallback = function(callback, delay) |
| + { |
| + test.eventExpectations_.expectDelayedCallback(callback, delay); |
| + } |
| + |
| test.waitForExpectedEvents = function(callback) |
| { |
| test.eventExpectations_.waitForExpectedEvents(callback); |
| @@ -184,8 +213,14 @@ |
| var oldTestDone = test.done.bind(test); |
| test.done = function() |
| { |
| - if (test.status == test.PASS) |
| + // loop through and clear timeoutIDs |
| + for (var i in test.eventExpectations_.timeoutIDs_) { |
| + clearTimeout(test.eventExpectations_.timeoutIDs_[i]); |
| + } |
| + if (test.status == test.PASS) { |
| assert_false(test.eventExpectations_.expectingEvents(), "No pending event expectations."); |
| + assert_equals(Object.keys(test.eventExpectations_.timeoutIDs_).length, 0); |
| + } |
| oldTestDone(); |
| }; |
| }; |