Skip to content
This repository was archived by the owner on Jul 9, 2025. It is now read-only.

Commit bc785a1

Browse files
committed
Bug 1868591 - Fix PollPromise timeout warning. r=webdriver-reviewers,jdescottes
Differential Revision: https://phabricator.services.mozilla.com/D195783
1 parent 1158d63 commit bc785a1

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

remote/shared/Sync.sys.mjs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,7 @@ export function PollPromise(func, options = {}) {
267267
timeout = null,
268268
} = options;
269269
const timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
270+
let didTimeOut = false;
270271

271272
if (typeof func != "function") {
272273
throw new TypeError();
@@ -306,6 +307,7 @@ export function PollPromise(func, options = {}) {
306307
typeof end != "undefined" &&
307308
(start == end || new Date().getTime() >= end)
308309
) {
310+
didTimeOut = true;
309311
resolve(rejected);
310312
}
311313
})
@@ -319,7 +321,7 @@ export function PollPromise(func, options = {}) {
319321
timer.init(evalFn, interval, TYPE_REPEATING_SLACK);
320322
}).then(
321323
res => {
322-
if (Number.isInteger(timeout)) {
324+
if (didTimeOut) {
323325
lazy.logger.warn(`${errorMessage} after ${timeout} ms`);
324326
}
325327
timer.cancel();

remote/shared/test/xpcshell/test_Sync.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ const { setTimeout } = ChromeUtils.importESModule(
99
const { AnimationFramePromise, Deferred, EventPromise, PollPromise } =
1010
ChromeUtils.importESModule("chrome://remote/content/shared/Sync.sys.mjs");
1111

12+
const { Log } = ChromeUtils.importESModule(
13+
"resource://gre/modules/Log.sys.mjs"
14+
);
15+
1216
/**
1317
* Mimic a DOM node for listening for events.
1418
*/
@@ -63,6 +67,21 @@ class MockElement {
6367
}
6468
}
6569

70+
class MockAppender extends Log.Appender {
71+
constructor(formatter) {
72+
super(formatter);
73+
this.messages = [];
74+
}
75+
76+
append(message) {
77+
this.doAppend(message);
78+
}
79+
80+
doAppend(message) {
81+
this.messages.push(message);
82+
}
83+
}
84+
6685
add_task(async function test_AnimationFramePromise() {
6786
let called = false;
6887
let win = {
@@ -387,3 +406,31 @@ add_task(async function test_PollPromise_interval() {
387406
);
388407
equal(2, nevals);
389408
});
409+
410+
add_task(async function test_PollPromise_resolve() {
411+
const log = Log.repository.getLogger("RemoteAgent");
412+
const appender = new MockAppender(new Log.BasicFormatter());
413+
appender.level = Log.Level.Info;
414+
log.addAppender(appender);
415+
416+
const errorMessage = "PollingFailed";
417+
const timeout = 100;
418+
419+
await new PollPromise(
420+
(resolve, reject) => {
421+
resolve();
422+
},
423+
{ timeout, errorMessage }
424+
);
425+
Assert.equal(appender.messages.length, 0);
426+
427+
await new PollPromise(
428+
(resolve, reject) => {
429+
reject();
430+
},
431+
{ timeout, errorMessage: "PollingFailed" }
432+
);
433+
Assert.equal(appender.messages.length, 1);
434+
Assert.equal(appender.messages[0].level, Log.Level.Warn);
435+
Assert.equal(appender.messages[0].message, "PollingFailed after 100 ms");
436+
});

0 commit comments

Comments
 (0)