Chromium Code Reviews| Index: extensions/test/data/unit_test_environment_specific_bindings.js |
| diff --git a/extensions/test/data/unit_test_environment_specific_bindings.js b/extensions/test/data/unit_test_environment_specific_bindings.js |
| index 245d050d6325400bc5c7722c790620dc9a8d83aa..19ceb7672b4a9d90ad141afe5bb506497af561fb 100644 |
| --- a/extensions/test/data/unit_test_environment_specific_bindings.js |
| +++ b/extensions/test/data/unit_test_environment_specific_bindings.js |
| @@ -3,6 +3,7 @@ |
| // found in the LICENSE file. |
| var nativesPromise = requireAsync('testNatives'); |
| +var sendRequestNatives = requireNative('sendRequest'); |
| function registerHooks(api) { |
| var chromeTest = api.compiledApi; |
| @@ -41,10 +42,75 @@ function exportTests(tests, runTests, exports) { |
| exports[test.name] = function() { |
| runTests([test]); |
| return true; |
| - } |
| + }; |
| }); |
| } |
| +function TimeoutManager() { |
|
raymes
2014/08/29 06:07:16
Comment about what this does would be nice and wha
Sam McNally
2014/09/01 06:35:19
Done.
|
| + this.timeouts_ = {}; |
| + this.nextTimeoutId_ = 0; |
| + this.currentTime = 0; |
| + this.timeoutCreationPromise_ = null; |
| + this.timeoutCreationPromiseResolve__ = null; |
| +} |
| + |
| +TimeoutManager.prototype.setTimeout_ = function(target, timeoutMs) { |
| + var timeoutId = this.nextTimeoutId_++; |
| + this.timeouts_[timeoutId] = { |
| + target: target, |
| + timeMs: timeoutMs + this.currentTime, |
| + }; |
| + if (this.timeoutCreationPromiseResolve_) { |
| + this.timeoutCreationPromiseResolve_(); |
| + this.timeoutCreationPromiseResolve_ = null; |
| + } else { |
| + this.timeoutCreationPromise_ = Promise.resolve(); |
| + } |
| + return timeoutId; |
| +}; |
| + |
| +TimeoutManager.prototype.clearTimeout_ = function(timeoutId) { |
| + if (this.timeouts_[timeoutId]) |
| + delete this.timeouts_[timeoutId]; |
| +}; |
| + |
| +TimeoutManager.prototype.installGlobals = function() { |
| + var global = sendRequestNatives.GetGlobal({}); |
| + global.setTimeout = this.setTimeout_.bind(this); |
| + global.clearTimeout = this.clearTimeout_.bind(this); |
| +}; |
| + |
| +TimeoutManager.prototype.advanceTime = function(timeDeltaMs) { |
| + this.currentTime += timeDeltaMs; |
| + var keys = $Object.keys(this.timeouts_); |
| + for (var i = 0; i < keys.length; i++) { |
| + var timeout = this.timeouts_[keys[i]]; |
| + if (this.currentTime >= timeout.timeMs) { |
| + delete this.timeouts_[keys[i]]; |
| + try { |
| + timeout.target(); |
| + } catch (e) { |
| + console.log('error calling timeout target ' + e.stack); |
| + } |
| + } |
| + } |
| +}; |
| + |
| +TimeoutManager.prototype.timeoutCreated = function() { |
|
raymes
2014/08/29 06:07:16
Maybe we can just have a function which sets the a
Sam McNally
2014/09/01 06:35:19
Reworked as discussed.
|
| + if (!this.timeoutCreationPromise_) { |
| + this.timeoutCreationPromise_ = new Promise(function(resolve, reject) { |
| + this.timeoutCreationPromiseResolve_ = resolve; |
| + }); |
| + } |
| + return this.timeoutCreationPromise_; |
| +}; |
| + |
| +TimeoutManager.prototype.clearTimeoutCreated = function() { |
| + this.timeoutCreationPromise_ = null; |
| + this.timeoutCreationPromiseResolve_ = null; |
| +}; |
| + |
| exports.registerHooks = registerHooks; |
| exports.testDone = testDone; |
| exports.exportTests = exportTests; |
| +exports.TimeoutManager = TimeoutManager; |