diff options
Diffstat (limited to 'testing/web-platform/tests/file-system-access/local_FileSystemDirectoryHandle-partitioned-manual.https.tentative.html')
-rw-r--r-- | testing/web-platform/tests/file-system-access/local_FileSystemDirectoryHandle-partitioned-manual.https.tentative.html | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/testing/web-platform/tests/file-system-access/local_FileSystemDirectoryHandle-partitioned-manual.https.tentative.html b/testing/web-platform/tests/file-system-access/local_FileSystemDirectoryHandle-partitioned-manual.https.tentative.html new file mode 100644 index 0000000000..3422914e23 --- /dev/null +++ b/testing/web-platform/tests/file-system-access/local_FileSystemDirectoryHandle-partitioned-manual.https.tentative.html @@ -0,0 +1,116 @@ +<!doctype html> +<head> + <meta charset=utf-8> + <script src="/common/dispatcher/dispatcher.js"></script> + <script src="/common/get-host-info.sub.js"></script> + <script src="/common/utils.js"></script> + <script src="/html/cross-origin-embedder-policy/credentialless/resources/common.js"></script> + <script src="/html/anonymous-iframe/resources/common.js"></script> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="/resources/testdriver.js"></script> + <script src="/resources/testdriver-vendor.js"></script> + <script src="resources/test-helpers.js"></script> + <script src="resources/local-fs-test-helpers.js"></script> +</head> +<body> +<script> + +const setUpChildFrame = (done) => ` + const importScript = ${importScript}; + await importScript("/resources/testharness.js"); + await importScript("/resources/testdriver.js"); + await importScript("/resources/testdriver-vendor.js"); + await importScript("/file-system-access/resources/local-fs-test-helpers.js"); + await importScript("/file-system-access/resources/test-helpers.js"); + await window.test_driver.bless( + 'show a file picker.<br />Please select an empty directory'); + await send("${done}", "done"); +`; + +const createTestDir = (name) => (done) => ` + self.showDirectoryPicker().then(async (dir) => { + await dir.getDirectoryHandle("${name}", {create: true}); + return send("${done}", "done"); + }); +`; + +const removeTestDir = (name) => (done) => ` + self.showDirectoryPicker().then(async (dir) => { + await dir.removeEntry("${name}", {recursive: true}); + return send("${done}", "done"); + }); +`; + +const assertNumEntries = (numFiles) => (done) => ` + self.showDirectoryPicker().then(async (dir) => { + assert_equals(${numFiles}, await getDirectoryEntryCount(dir)); + return send("${done}", "done"); + }); +`; + +const assertNoAccess = (done) => ` + try { + await self.showDirectoryPicker(); + await send("${done}", "unexpected"); + } catch (e) { + await send("${done}", "done"); + } +`; + +// To be resilient against tests not cleaning up properly, cleanup before +// every test. +function clearDirectories() { + const directory = await directory_promise; + for await (let entry of directory.values()) { + await directory.removeEntry( + entry.name, {recursive: entry.kind === 'directory'}); + } +} + +// The following tests make use of helper framed_test to define promise tests +// that send assertion scripts to multiple executor subframes. + +framed_test(async (t, sendTo) => { + clearDirectories(); + // Ensure we have directory picker access in all child contexts. + await sendTo(childContexts, setUpChildFrame); + await sendTo(sameSiteContexts, assertNumEntries(0)); + + // Create directory in anonymous same-site context. + await sendTo([FRAME_CONTEXT.anonymousFrameSameSite], createTestDir("test")); + + // Assert we can see the directory from all same-site contexts. + await sendTo(sameSiteContexts, assertNumEntries(1)); +}, 'getDirectoryHandle can access handles across same-site contexts.'); + +framed_test(async (t, sendTo) => { + clearDirectories(); + // Ensure we have directory picker access in all child contexts. + await sendTo(childContexts, setUpChildFrame); + await sendTo(sameSiteContexts, assertNumEntries(0)); + + // Create a test directory in a third-party same-site context. + await sendTo([FRAME_CONTEXT.thirdPartySameSite], createTestDir("file")); + await sendTo([FRAME_CONTEXT.thirdPartySameSite], assertNumEntries(1)); + + // Remove directory from an anonymous same-site context. + await sendTo([FRAME_CONTEXT.anonymousFrameSameSite], removeTestDir("file")); + // Assert third-party same-site context can no longer access directory. + await sendTo([FRAME_CONTEXT.thirdPartySameSite], assertNumEntries(0)); +}, 'Directory handles can be removed from other same-site contexts.'); + +framed_test(async (t, sendTo) => { + clearDirectories(); + // Ensure we have directory picker access in all child contexts. + await sendTo(childContexts, setUpChildFrame); + // Assert that an error is raised when attempting to access + // getDirectoryHandle. + await sendTo(crossSiteContexts, assertNoAccess); +}, 'Cross-site sub-frames can not access getDirectoryHandle.'); + +// TODO(crbug.com/1322897): Add tests for ancestor bit frames. +// TODO(crbug.com/1099413): Add tests for non-default buckets. + +</script> +</body> |