Skip to content

Commit

Permalink
FSA: Add WPTs testing FileSystemObserver creation
Browse files Browse the repository at this point in the history
Bug: 1019297
Change-Id: Ie735d376b760aa78859b1e8c5a1fed1dee90f959
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5200909
Commit-Queue: Austin Sullivan <[email protected]>
Reviewed-by: Daseul Lee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1250956}
  • Loading branch information
a-sully authored and chromium-wpt-export-bot committed Jan 23, 2024
1 parent 13a239b commit bedfcbc
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 0 deletions.
3 changes: 3 additions & 0 deletions fs/FileSystemObserver.https.tentative.window.js
Original file line number Diff line number Diff line change
@@ -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
20 changes: 20 additions & 0 deletions fs/resources/message-target.js
Original file line number Diff line number Diff line change
Expand Up @@ -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}'`;
}
Expand Down
57 changes: 57 additions & 0 deletions fs/script-tests/FileSystemObserver.js
Original file line number Diff line number Diff line change
@@ -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');

0 comments on commit bedfcbc

Please sign in to comment.