// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function(testRunner) {
const {page, session, dp} = await testRunner.startBlank(
`Tests that VT advances in lockstep between worker and host page.`);
const WorkerVirtualTimeHelper = await testRunner.loadScript(
'../helpers/worker-virtual-time-helper.js');
const workerVirtualTimeHelper =
new WorkerVirtualTimeHelper(testRunner, session);
const { wp } = await workerVirtualTimeHelper.loadWorker(`
setInterval(() => {
self.postMessage('Time in worker: ' + Date.now());
}, 100);
`);
dp.Runtime.enable();
dp.Runtime.onConsoleAPICalled(({params}) => {
testRunner.log(params.args[0].value);
});
await session.evaluate(`(async function() {
await new Promise(resolve => setTimeout(resolve, 50));
worker.addEventListener('message',
event => {console.log('[WORKER] ' + event.data)}, false);
setInterval(() => { console.log('Time in page: ' + Date.now()); }, 100);
})()`);
wp.Emulation.setVirtualTimePolicy({
policy: 'pauseIfNetworkFetchesPending',
budget: 1000});
dp.Emulation.onVirtualTimeBudgetExpired(() => {
dp.Emulation.setVirtualTimePolicy({
policy: 'pauseIfNetworkFetchesPending',
budget: 1000});
});
wp.Runtime.runIfWaitingForDebugger();
await wp.Emulation.onceVirtualTimeBudgetExpired();
wp.Emulation.setVirtualTimePolicy({
policy: 'pauseIfNetworkFetchesPending',
budget: 1000});
await wp.Emulation.onceVirtualTimeBudgetExpired();
testRunner.completeTest();
})