test_file_upload.html (2065B)
1 <!-- 2 Any copyright is dedicated to the Public Domain. 3 http://creativecommons.org/publicdomain/zero/1.0/ 4 --> 5 <!DOCTYPE HTML> 6 <html> 7 <head> 8 <title>Bug 1424701 - Test for service worker + file upload</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <script type="text/javascript" src="utils.js"></script> 11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 12 </head> 13 <body> 14 <input id="input" type="file"> 15 <script class="testbody" type="text/javascript"> 16 17 function GetFormData(file) { 18 const formData = new FormData(); 19 formData.append('file', file); 20 return formData; 21 } 22 23 async function onOpened(message) { 24 let input = document.getElementById("input"); 25 SpecialPowers.wrap(input).mozSetFileArray([message.file]); 26 script.destroy(); 27 28 let reg = await navigator.serviceWorker.register('sw_file_upload.js', 29 {scope: "." }); 30 let serviceWorker = reg.installing || reg.waiting || reg.active; 31 await waitForState(serviceWorker, 'activated'); 32 33 let res = await fetch('server_file_upload.sjs?clone=0', { 34 method: 'POST', 35 body: input.files[0], 36 }); 37 38 let data = await res.clone().text(); 39 ok(data.length, "We have data for an uncloned request!"); 40 41 res = await fetch('server_file_upload.sjs?clone=1', { 42 method: 'POST', 43 // Make sure the underlying stream is a file stream 44 body: GetFormData(input.files[0]), 45 }); 46 47 data = await res.clone().text(); 48 ok(data.length, "We have data for a file-stream-backed cloned request!"); 49 50 await reg.unregister(); 51 SimpleTest.finish(); 52 } 53 54 let url = SimpleTest.getTestFileURL("script_file_upload.js"); 55 let script = SpecialPowers.loadChromeScript(url); 56 57 SimpleTest.waitForExplicitFinish(); 58 SpecialPowers.pushPrefEnv({"set": [ 59 ["dom.serviceWorkers.exemptFromPerDomainMax", true], 60 ["dom.serviceWorkers.enabled", true], 61 ["dom.serviceWorkers.testing.enabled", true] 62 ]}).then(() => { 63 script.addMessageListener("file.opened", onOpened); 64 script.sendAsyncMessage("file.open"); 65 }); 66 </script> 67 </body> 68 </html>