diff --git a/dom/console/tests/test_timer.html b/dom/console/tests/test_timer.html index 688c5aed8b20..9a36fd042a70 100644 --- a/dom/console/tests/test_timer.html +++ b/dom/console/tests/test_timer.html @@ -11,34 +11,58 @@ SimpleTest.waitForExplicitFinish(); -function consoleListener(cb) { - return new Promise(resolve => { - let observer = { - observe: function listener(aSubject, aTopic, aData) { - var obj = aSubject.wrappedJSObject; - if (obj.arguments[0] == 'test' && cb(obj)) { - SpecialPowers.removeObserver(observer, "console-api-log-event"); - resolve(); - } - } - }; - SpecialPowers.addObserver(observer, "console-api-log-event"); - }); +function ConsoleListener() { + SpecialPowers.addObserver(this, "console-api-log-event"); } +ConsoleListener.prototype = { + observe(aSubject, aTopic, aData) { + let obj = aSubject.wrappedJSObject; + if (obj.arguments[0] != 'test') { + return; + } + + if (!this._cb) { + ok(false, "Callback not set!"); + return; + } + + if (!this._cb(obj)) { + return; + } + + this._cb = null; + this._resolve(); + }, + + shutdown() { + SpecialPowers.removeObserver(this, "console-api-log-event"); + }, + + waitFor(cb) { + return new Promise(resolve => { + this._cb = cb; + this._resolve = resolve; + }); + }, +}; + +let listener = new ConsoleListener(); + // Timer creation: async function runTest() { - var cl = consoleListener(function(obj) { + let cl = listener.waitFor(obj => { return ("timer" in obj) && ("name" in obj.timer) && obj.timer.name == 'test'; }); + console.time('test'); await cl; ok(true, "Console.time received!"); // Timer check: - cl = consoleListener(obj => { + cl = listener.waitFor(obj => { return ("timer" in obj) && ("name" in obj.timer) && obj.timer.name == 'test' && @@ -54,7 +78,7 @@ async function runTest() { ok(true, "Console.timeLog received!"); // Time deleted: - cl = consoleListener(obj => { + cl = listener.waitFor(obj => { return ("timer" in obj) && ("name" in obj.timer) && obj.timer.name == 'test' && @@ -66,7 +90,7 @@ async function runTest() { ok(true, "Console.timeEnd received!"); // Here an error: - cl = consoleListener(obj => { + cl = listener.waitFor(obj => { return ("timer" in obj) && ("name" in obj.timer) && obj.timer.name == 'test' && @@ -74,10 +98,13 @@ async function runTest() { }); console.timeLog('test'); await cl; - ok(true, "Console.timeLog with error received!"); + ok(true, "Console.time with error received!"); } -runTest().then(SimpleTest.finish); +runTest().then(() => { + listener.shutdown(); + SimpleTest.finish(); +});