summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/appmanifest/file_handlers-member
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/appmanifest/file_handlers-member')
-rw-r--r--testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-manual.tentative.html42
-rw-r--r--testing/web-platform/tests/appmanifest/file_handlers-member/file_handlers-member-service-worker.js52
-rw-r--r--testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.js39
-rw-r--r--testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-member.webmanifest21
-rw-r--r--testing/web-platform/tests/appmanifest/file_handlers-member/resources/file_handlers-sample-file.txt1
-rw-r--r--testing/web-platform/tests/appmanifest/file_handlers-member/resources/icon.pngbin0 -> 3799 bytes
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> &gt; <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
new file mode 100644
index 0000000000..c177ad8dbd
--- /dev/null
+++ b/testing/web-platform/tests/appmanifest/file_handlers-member/resources/icon.png
Binary files differ