diff options
Diffstat (limited to 'toolkit/components/webextensions/test/mochitest/test_ext_webrequest_upload.html')
-rw-r--r-- | toolkit/components/webextensions/test/mochitest/test_ext_webrequest_upload.html | 199 |
1 files changed, 0 insertions, 199 deletions
diff --git a/toolkit/components/webextensions/test/mochitest/test_ext_webrequest_upload.html b/toolkit/components/webextensions/test/mochitest/test_ext_webrequest_upload.html deleted file mode 100644 index 998ab9800..000000000 --- a/toolkit/components/webextensions/test/mochitest/test_ext_webrequest_upload.html +++ /dev/null @@ -1,199 +0,0 @@ -<!DOCTYPE HTML> - -<html> -<head> -<meta charset="utf-8"> - <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> - <script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script> - <script type="text/javascript" src="head.js"></script> - <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> -</head> -<body> - -<form method="post" - action="file_WebRequest_page3.html?trigger=form" - target="_blank" - enctype="multipart/form-data" - > -<input type="text" name=""special" chrs" value="spŪcial"> -<input type="file" name="testFile"> -<input type="file" name="emptyFile"> -<input type="text" name="textInput1" value="value1"> -</form> - -<form method="post" - action="file_WebRequest_page3.html?trigger=form" - target="_blank" - enctype="multipart/form-data" - > -<input type="text" name="textInput2" value="value2"> -<input type="file" name="testFile"> -<input type="file" name="emptyFile"> -</form> - -</form> -<form method="post" - action="file_WebRequest_page3.html?trigger=form" - target="_blank" - > -<input type="text" name="textInput" value="value1"> -<input type="text" name="textInput" value="value2"> -</form> -<script> -"use strict"; - -let files, testFile, blob, file, uploads; -add_task(function* test_setup() { - files = yield new Promise(resolve => { - SpecialPowers.createFiles([{name: "testFile.pdf", data: "Not really a PDF file :)", "type": "application/x-pdf"}], (result) => { - resolve(result); - }); - }); - testFile = files[0]; - blob = { - name: "blobAsFile", - content: new Blob(["A blob sent as a file"], {type: "text/csv"}), - fileName: "blobAsFile.csv", - }; - file = { - name: "testFile", - fileName: testFile.name, - }; - uploads = { - [blob.name]: blob, - [file.name]: file, - }; -}); - -function background() { - const FILTERS = {urls: ["<all_urls>"]}; - - let requestBodySupported = true; - - function onUpload(details) { - let url = new URL(details.url); - let upload = url.searchParams.get("upload"); - if (!upload || !requestBodySupported) { - return; - } - let requestBody = details.requestBody; - browser.test.log(`onBeforeRequest upload: ${details.url} ${JSON.stringify(details.requestBody)}`); - browser.test.assertTrue(!!requestBody, `Intercepted upload ${details.url} #${details.requestId} ${upload} have a requestBody`); - if (!requestBody) { - return; - } - let byteLength = parseInt(upload, 10); - if (byteLength) { - browser.test.assertTrue(!!requestBody.raw, `Binary upload ${details.url} #${details.requestId} ${upload} have a raw attribute`); - browser.test.assertEq(byteLength, requestBody.raw && requestBody.raw.map(r => r.bytes && r.bytes.byteLength || 0).reduce((a, b) => a + b), `Binary upload size matches`); - return; - } - if ("raw" in requestBody) { - browser.test.assertEq(upload, JSON.stringify(requestBody.raw).replace(/(\bfile: ")[^"]+/, "$1<file>"), `Upload ${details.url} #${details.requestId} matches raw data`); - } else { - browser.test.assertEq(upload, JSON.stringify(requestBody.formData), `Upload ${details.url} #${details.requestId} matches form data.`); - } - } - - browser.webRequest.onCompleted.addListener( - details => { - browser.test.log(`onCompleted ${details.requestId} ${details.url}`); - - browser.test.sendMessage("done"); - }, - FILTERS); - - let onBeforeRequest = details => { - browser.test.log(`${name} ${details.requestId} ${details.url}`); - - onUpload(details); - }; - - try { - browser.webRequest.onBeforeRequest.addListener( - onBeforeRequest, FILTERS, ["requestBody"]); - } catch (e) { - browser.test.assertTrue(/\brequestBody\b/.test(e.message), - "Request body is unsupported"); - - // requestBody is disabled in release builds - if (!/\brequestBody\b/.test(e.message)) { - throw e; - } - - browser.webRequest.onBeforeRequest.addListener( - onBeforeRequest, FILTERS); - } -} - -add_task(function* test_xhr_forms() { - let extension = ExtensionTestUtils.loadExtension({ - manifest: { - permissions: [ - "webRequest", - "webRequestBlocking", - "<all_urls>", - ], - }, - background, - }); - - yield extension.startup(); - - for (let form of document.forms) { - if (file.name in form.elements) { - SpecialPowers.wrap(form.elements[file.name]).mozSetFileArray(files); - } - let action = new URL(form.action); - let formData = new FormData(form); - let webRequestFD = {}; - - let updateActionURL = () => { - for (let name of formData.keys()) { - webRequestFD[name] = name in uploads ? [uploads[name].fileName] : formData.getAll(name); - } - action.searchParams.set("upload", JSON.stringify(webRequestFD)); - action.searchParams.set("enctype", form.enctype); - }; - - updateActionURL(); - - form.action = action; - form.submit(); - yield extension.awaitMessage("done"); - - if (form.enctype !== "multipart/form-data") { - continue; - } - - let post = (data) => { - let xhr = new XMLHttpRequest(); - action.searchParams.set("xhr", "1"); - xhr.open("POST", action.href); - xhr.send(data); - action.searchParams.delete("xhr"); - return extension.awaitMessage("done"); - }; - - formData.append(blob.name, blob.content, blob.fileName); - formData.append("formDataField", "some value"); - updateActionURL(); - yield post(formData); - - action.searchParams.set("upload", JSON.stringify([{file: "<file>"}])); - yield post(testFile); - - action.searchParams.set("upload", `${blob.content.size} bytes`); - yield post(blob.content); - - let byteLength = 16; - action.searchParams.set("upload", `${byteLength} bytes`); - yield post(new ArrayBuffer(byteLength)); - } - - yield extension.unload(); -}); -</script> -</body> -</html> |