diff options
Diffstat (limited to 'testing/web-platform/tests/appmanifest/file_handlers-member')
6 files changed, 155 insertions, 0 deletions
diff --git a/testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-manual.tentative.html b/testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-manual.tentative.html new file mode 100644 index 0000000000..f6384b6dda --- /dev/null +++ b/testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-manual.tentative.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <link rel="manifest" href="resources/file_handlers-member.webmanifest" /> + <title>File Handling Web Platform Test</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="resources/file_handlers-member.js" type="module"></script> + <style> + body { + margin: 2em; + } + + ol { + line-height: 200%; + } + </style> + </head> + <body> + <h1> + File Handling Test + </h1> + <div class="section"> + <h2> + Instructions (details may be OS-dependent) + </h2> + <ol> + <li>Install this site as a PWA</li> + <li>Download <a href="resources/file_handlers-sample-file.txt" download>this file</a></li> + <li> + In your file browser, right click the downloaded file (<code>file_handlers-sample-file.txt</code>) + </li> + <li>Select <b>"Open with"</b> > <b>"File Handling WPT"</b></li> + <li> + If your browser prompts you to allow <b>File Handling WPT</b> to open + the file, choose allow + </li> + <li>The app window that opens should indicate success of this test.</li> + </ol> + </div> + </body> +</html> diff --git a/testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-service-worker.js b/testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-service-worker.js new file mode 100644 index 0000000000..972b65304b --- /dev/null +++ b/testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-service-worker.js @@ -0,0 +1,52 @@ +// Some user agents only offer app installation if there is a SW and it handles +// offline requests. + +const cacheVersion = "1.1"; +const CACHE_NAME = `cache-v${cacheVersion}`; + +// The resources cached by this service worker. +const resources = [ + "file_handlers-member-service-worker.js", + "file_handlers-member-manual.tentative.html", + "resources/file_handlers-member.js", + "resources/icon.png", +]; + +// Load all resources for this service worker. +const precache = async () => { + const cache = await caches.open(CACHE_NAME); + await cache.addAll(resources); +}; + +// Get a resource from the cache. +const fromCache = async request => { + const cache = await caches.open(CACHE_NAME); + return await cache.match(request.url); +}; + +// Attempt to get resources from the network first, fallback to the cache if we're +// offline. +const networkFallbackToCache = async request => { + try { + const response = await fetch(request); + if (response.ok) return response; + } catch (err) {} + return await fromCache(request); +}; + +// When we have a new service worker, update the caches and swap immediately. +self.addEventListener("install", e => { + e.waitUntil(precache().then(() => self.skipWaiting())); +}); + +// Claim existing clients. +self.addEventListener("activate", e => { + e.waitUntil(self.clients.claim()); +}); + +// When a resource need to be fetched, check whether it is +// contained in the cache and return the cached version, otherwise +// get it from the network. +self.addEventListener("fetch", e => { + e.respondWith(networkFallbackToCache(e.request)); +}); diff --git a/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.js b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.js new file mode 100644 index 0000000000..87ec82ef9a --- /dev/null +++ b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.js @@ -0,0 +1,39 @@ +// Since this is a manual test, disable the automatic timeout. +setup({explicit_timeout: true}); + +// Redirect to https if using http, because File System Access API (previously +// Native FileSystem API) isn't supported in http. +if (location.protocol !== 'https:') { + location.replace( + `https:${location.href.substring(location.protocol.length)}` + ); +} + +test(function() { + assert_true('serviceWorker' in navigator); +}, 'serviceWorker exists') + +navigator.serviceWorker.register( + 'file_handlers-member-service-worker.js'); + +test(function() { + assert_true('launchQueue' in window); +}, 'File Handling API enabled'); + +test(function() { + assert_true('showOpenFilePicker' in window); +}, 'File System Access API enabled'); + +promise_test(async t => { + const launchParams = await new Promise(resolve => { + window.launchQueue.setConsumer(resolve); + }); + + assert_equals(launchParams.files.length, 1, 'Wrong number of files found'); + + const readHandle = await launchParams.files[0].getFile(); + assert_equals(readHandle.name, 'file_handlers-sample-file.txt'); + + const fileContents = await readHandle.text(); + assert_equals(fileContents, 'File handling WPT - Hello world!\n'); +}, 'launchQueue works as expected'); diff --git a/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.webmanifest b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.webmanifest new file mode 100644 index 0000000000..1cc5bf4aa9 --- /dev/null +++ b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.webmanifest @@ -0,0 +1,21 @@ +{ + "name": "File Handling WPT", + "icons": [ + { + "src": "icon.png", + "sizes": "144x144" + } + ], + "start_url": "../file_handlers-member-manual.tentative.html", + "display": "standalone", + "scope": "../../file_handlers-member/", + "file_handlers": [ + { + "action": "../file_handlers-member-manual.tentative.html", + "name": "Plain Text", + "accept": { + "text/plain": [".txt"] + } + } + ] +} diff --git a/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-sample-file.txt b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-sample-file.txt new file mode 100644 index 0000000000..5c8a71969c --- /dev/null +++ b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-sample-file.txt @@ -0,0 +1 @@ +File handling WPT - Hello world! diff --git a/testing/web-platform/tests/appmanifest/file_handlers-member/resources/icon.png b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/icon.png Binary files differnew file mode 100644 index 0000000000..c177ad8dbd --- /dev/null +++ b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/icon.png |