'use strict'; // This script depends on the following scripts: // /fs/resources/messaging-helpers.js // /service-worker/resources/test-helpers.sub.js promise_test(async t => { function dummyCallback(records, observer) {}; let success = true; try { const observer = new FileSystemObserver(dummyCallback); } catch (error) { success = false; } assert_true(success); }, 'Creating a FileSystemObserver from a window succeeds'); promise_test(async t => { const dedicated_worker = create_dedicated_worker(t, kDedicatedWorkerMessageTarget); dedicated_worker.postMessage({type: 'create-file-system-observer'}); const event_watcher = new EventWatcher(t, dedicated_worker, 'message'); const message_event = await event_watcher.wait_for('message'); const response = message_event.data; assert_true(response.createObserverSuccess); }, 'Creating a FileSystemObserver from a dedicated worker succeeds'); if (self.SharedWorker !== undefined) { promise_test(async t => { const shared_worker = new SharedWorker(kSharedWorkerMessageTarget); shared_worker.port.start(); shared_worker.port.postMessage({type: 'create-file-system-observer'}); const event_watcher = new EventWatcher(t, shared_worker.port, 'message'); const message_event = await event_watcher.wait_for('message'); const response = message_event.data; assert_true(response.createObserverSuccess); }, 'Creating a FileSystemObserver from a shared worker succeeds'); } promise_test(async t => { const scope = `${kServiceWorkerMessageTarget}?create-observer`; const registration = await create_service_worker(t, kServiceWorkerMessageTarget, scope); await wait_for_state(t, registration.installing, 'activated'); registration.active.postMessage({type: 'create-file-system-observer'}); const event_watcher = new EventWatcher(t, navigator.serviceWorker, 'message'); const message_event = await event_watcher.wait_for('message'); const response = message_event.data; assert_false(response.createObserverSuccess); }, 'Creating a FileSystemObserver from a service worker fails');