OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 var nativesPromise = requireAsync('testNatives'); | 5 var nativesPromise = requireAsync('testNatives'); |
6 var sendRequestNatives = requireNative('sendRequest'); | |
6 | 7 |
7 function registerHooks(api) { | 8 function registerHooks(api) { |
8 var chromeTest = api.compiledApi; | 9 var chromeTest = api.compiledApi; |
9 var apiFunctions = api.apiFunctions; | 10 var apiFunctions = api.apiFunctions; |
10 | 11 |
11 apiFunctions.setHandleRequest('notifyPass', function() { | 12 apiFunctions.setHandleRequest('notifyPass', function() { |
12 nativesPromise.then(function(natives) { | 13 nativesPromise.then(function(natives) { |
13 natives.NotifyPass(); | 14 natives.NotifyPass(); |
14 }); | 15 }); |
15 }); | 16 }); |
(...skipping 18 matching lines...) Expand all Loading... | |
34 Promise.resolve().then(function() { | 35 Promise.resolve().then(function() { |
35 runNextTest(); | 36 runNextTest(); |
36 }); | 37 }); |
37 } | 38 } |
38 | 39 |
39 function exportTests(tests, runTests, exports) { | 40 function exportTests(tests, runTests, exports) { |
40 $Array.forEach(tests, function(test) { | 41 $Array.forEach(tests, function(test) { |
41 exports[test.name] = function() { | 42 exports[test.name] = function() { |
42 runTests([test]); | 43 runTests([test]); |
43 return true; | 44 return true; |
44 } | 45 }; |
45 }); | 46 }); |
46 } | 47 } |
47 | 48 |
49 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.
| |
50 this.timeouts_ = {}; | |
51 this.nextTimeoutId_ = 0; | |
52 this.currentTime = 0; | |
53 this.timeoutCreationPromise_ = null; | |
54 this.timeoutCreationPromiseResolve__ = null; | |
55 } | |
56 | |
57 TimeoutManager.prototype.setTimeout_ = function(target, timeoutMs) { | |
58 var timeoutId = this.nextTimeoutId_++; | |
59 this.timeouts_[timeoutId] = { | |
60 target: target, | |
61 timeMs: timeoutMs + this.currentTime, | |
62 }; | |
63 if (this.timeoutCreationPromiseResolve_) { | |
64 this.timeoutCreationPromiseResolve_(); | |
65 this.timeoutCreationPromiseResolve_ = null; | |
66 } else { | |
67 this.timeoutCreationPromise_ = Promise.resolve(); | |
68 } | |
69 return timeoutId; | |
70 }; | |
71 | |
72 TimeoutManager.prototype.clearTimeout_ = function(timeoutId) { | |
73 if (this.timeouts_[timeoutId]) | |
74 delete this.timeouts_[timeoutId]; | |
75 }; | |
76 | |
77 TimeoutManager.prototype.installGlobals = function() { | |
78 var global = sendRequestNatives.GetGlobal({}); | |
79 global.setTimeout = this.setTimeout_.bind(this); | |
80 global.clearTimeout = this.clearTimeout_.bind(this); | |
81 }; | |
82 | |
83 TimeoutManager.prototype.advanceTime = function(timeDeltaMs) { | |
84 this.currentTime += timeDeltaMs; | |
85 var keys = $Object.keys(this.timeouts_); | |
86 for (var i = 0; i < keys.length; i++) { | |
87 var timeout = this.timeouts_[keys[i]]; | |
88 if (this.currentTime >= timeout.timeMs) { | |
89 delete this.timeouts_[keys[i]]; | |
90 try { | |
91 timeout.target(); | |
92 } catch (e) { | |
93 console.log('error calling timeout target ' + e.stack); | |
94 } | |
95 } | |
96 } | |
97 }; | |
98 | |
99 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.
| |
100 if (!this.timeoutCreationPromise_) { | |
101 this.timeoutCreationPromise_ = new Promise(function(resolve, reject) { | |
102 this.timeoutCreationPromiseResolve_ = resolve; | |
103 }); | |
104 } | |
105 return this.timeoutCreationPromise_; | |
106 }; | |
107 | |
108 TimeoutManager.prototype.clearTimeoutCreated = function() { | |
109 this.timeoutCreationPromise_ = null; | |
110 this.timeoutCreationPromiseResolve_ = null; | |
111 }; | |
112 | |
48 exports.registerHooks = registerHooks; | 113 exports.registerHooks = registerHooks; |
49 exports.testDone = testDone; | 114 exports.testDone = testDone; |
50 exports.exportTests = exportTests; | 115 exports.exportTests = exportTests; |
116 exports.TimeoutManager = TimeoutManager; | |
OLD | NEW |