summaryrefslogtreecommitdiffstats
path: root/dom/serviceworkers/test/test_file_upload.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/serviceworkers/test/test_file_upload.html')
-rw-r--r--dom/serviceworkers/test/test_file_upload.html68
1 files changed, 68 insertions, 0 deletions
diff --git a/dom/serviceworkers/test/test_file_upload.html b/dom/serviceworkers/test/test_file_upload.html
new file mode 100644
index 0000000000..0c502686af
--- /dev/null
+++ b/dom/serviceworkers/test/test_file_upload.html
@@ -0,0 +1,68 @@
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Bug 1424701 - Test for service worker + file upload</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="text/javascript" src="utils.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<input id="input" type="file">
+<script class="testbody" type="text/javascript">
+
+function GetFormData(file) {
+ const formData = new FormData();
+ formData.append('file', file);
+ return formData;
+}
+
+async function onOpened(message) {
+ let input = document.getElementById("input");
+ SpecialPowers.wrap(input).mozSetFileArray([message.file]);
+ script.destroy();
+
+ let reg = await navigator.serviceWorker.register('sw_file_upload.js',
+ {scope: "." });
+ let serviceWorker = reg.installing || reg.waiting || reg.active;
+ await waitForState(serviceWorker, 'activated');
+
+ let res = await fetch('server_file_upload.sjs?clone=0', {
+ method: 'POST',
+ body: input.files[0],
+ });
+
+ let data = await res.clone().text();
+ ok(data.length, "We have data for an uncloned request!");
+
+ res = await fetch('server_file_upload.sjs?clone=1', {
+ method: 'POST',
+ // Make sure the underlying stream is a file stream
+ body: GetFormData(input.files[0]),
+ });
+
+ data = await res.clone().text();
+ ok(data.length, "We have data for a file-stream-backed cloned request!");
+
+ await reg.unregister();
+ SimpleTest.finish();
+}
+
+let url = SimpleTest.getTestFileURL("script_file_upload.js");
+let script = SpecialPowers.loadChromeScript(url);
+
+SimpleTest.waitForExplicitFinish();
+SpecialPowers.pushPrefEnv({"set": [
+ ["dom.serviceWorkers.exemptFromPerDomainMax", true],
+ ["dom.serviceWorkers.enabled", true],
+ ["dom.serviceWorkers.testing.enabled", true]
+]}).then(() => {
+ script.addMessageListener("file.opened", onOpened);
+ script.sendAsyncMessage("file.open");
+});
+</script>
+</body>
+</html>