From 6f9514f776bfcfbaf2127f2884f11d9391c767c9 Mon Sep 17 00:00:00 2001 From: Austin Sullivan Date: Thu, 25 Jan 2024 09:40:03 +0000 Subject: [PATCH] Bug 1874991 [wpt PR 44029] - FSA: Add WPTs testing FileSystemObserver creation, a=testonly Automatic update from web-platform-tests FSA: Add WPTs testing FileSystemObserver creation Bug: 1019297 Change-Id: Ie735d376b760aa78859b1e8c5a1fed1dee90f959 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5200909 Commit-Queue: Austin Sullivan Reviewed-by: Daseul Lee Cr-Commit-Position: refs/heads/main@{#1250956} -- wpt-commits: bedfcbc55b3bdccedf81556f6374354baca2c848 wpt-pr: 44029 --- .../FileSystemObserver.https.tentative.window.js | 3 ++ .../tests/fs/resources/message-target.js | 20 ++++++++ .../tests/fs/script-tests/FileSystemObserver.js | 57 ++++++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 testing/web-platform/tests/fs/FileSystemObserver.https.tentative.window.js create mode 100644 testing/web-platform/tests/fs/script-tests/FileSystemObserver.js diff --git a/testing/web-platform/tests/fs/FileSystemObserver.https.tentative.window.js b/testing/web-platform/tests/fs/FileSystemObserver.https.tentative.window.js new file mode 100644 index 000000000000..2b9f7ca7c784 --- /dev/null +++ b/testing/web-platform/tests/fs/FileSystemObserver.https.tentative.window.js @@ -0,0 +1,3 @@ +// META: script=/service-workers/service-worker/resources/test-helpers.sub.js +// META: script=resources/messaging-helpers.js +// META: script=script-tests/FileSystemObserver.js diff --git a/testing/web-platform/tests/fs/resources/message-target.js b/testing/web-platform/tests/fs/resources/message-target.js index ac5fa63e1372..a59fa6bec2b4 100644 --- a/testing/web-platform/tests/fs/resources/message-target.js +++ b/testing/web-platform/tests/fs/resources/message-target.js @@ -120,6 +120,26 @@ function add_message_event_handlers(receiver, target, target_origin) { { targetOrigin: target_origin }); break; + case 'create-file-system-observer': + // Attempt to create a file system observer with a dummy callback. + // Respond with whether creating the observer succeeded. + function dummyCallback(records, observer) {}; + + let createObserverSuccess = true; + try { + const observer = new FileSystemObserver(dummyCallback); + } catch (error) { + createObserverSuccess = false; + } + + message_source.postMessage( + { + type: 'receive-create-file-system-observer-result', + createObserverSuccess + }, + {targetOrigin: target_origin}); + break; + default: throw `Unknown message type: '${message_data.type}'`; } diff --git a/testing/web-platform/tests/fs/script-tests/FileSystemObserver.js b/testing/web-platform/tests/fs/script-tests/FileSystemObserver.js new file mode 100644 index 000000000000..2c8fd57f7c95 --- /dev/null +++ b/testing/web-platform/tests/fs/script-tests/FileSystemObserver.js @@ -0,0 +1,57 @@ +'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'); -- 2.11.4.GIT