diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /dom/ipc/tests/test_blob_sliced_from_child_process.html | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'dom/ipc/tests/test_blob_sliced_from_child_process.html')
-rw-r--r-- | dom/ipc/tests/test_blob_sliced_from_child_process.html | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/dom/ipc/tests/test_blob_sliced_from_child_process.html b/dom/ipc/tests/test_blob_sliced_from_child_process.html new file mode 100644 index 000000000..0dec1d84c --- /dev/null +++ b/dom/ipc/tests/test_blob_sliced_from_child_process.html @@ -0,0 +1,185 @@ +<!DOCTYPE html> +<html> + <head> + <title>Test for slicing blobs that originated in a child process</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"> + </script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + </head> + <body onload="setup();"> + <script type="application/javascript;version=1.7"> +"use strict"; + +function childFrameScript() { + "use strict"; + + Components.utils.importGlobalProperties(["Blob"]); + + const messageName = "test:blob-slice-test"; + const blobData = ["So", " ", "many", " ", "blobs!"]; + const blobText = blobData.join(""); + const blobType = "text/plain"; + + let blob = new Blob(blobData, { type: blobType }); + + let sliceText = blobData[2][1] + blobData[2][2]; + let sliceIndex = blobText.indexOf(sliceText); + + let firstSliceStart = blobData[0].length + blobData[1].length; + let firstSliceEnd = firstSliceStart + blobData[2].length; + + let slice = blob.slice(firstSliceStart, firstSliceEnd, blobType); + + let secondSliceStart = blobData[2].indexOf("a"); + let secondSliceEnd = secondSliceStart + 2; + + slice = slice.slice(secondSliceStart, secondSliceEnd, blobType); + + sendAsyncMessage(messageName, { blob: blob }); + sendAsyncMessage(messageName, { slice: slice }); +} + +function parentFrameScript(mm) { + const messageName = "test:blob-slice-test"; + const blobData = ["So", " ", "many", " ", "blobs!"]; + const blobText = blobData.join(""); + const blobType = "text/plain"; + + const sliceText = "an"; + + let receivedBlob = false; + let receivedSlice = false; + + let finishedTestingBlob = false; + let finishedTestingSlice = false; + + mm.addMessageListener(messageName, function(message) { + if ("blob" in message.data) { + is(receivedBlob, false, "Have not yet received Blob"); + is(receivedSlice, false, "Have not yet received Slice"); + is(finishedTestingBlob, false, "Have not yet finished testing Blob"); + is(finishedTestingSlice, false, "Have not yet finished testing Slice"); + + receivedBlob = true; + + let blob = message.data.blob; + + ok(blob instanceof Blob, "Received a Blob"); + is(blob.size, blobText.length, "Blob has correct size"); + is(blob.type, blobType, "Blob has correct type"); + + let slice = blob.slice(blobText.length - + blobData[blobData.length - 1].length, + blob.size, + blobType); + + ok(slice instanceof Blob, "Slice returned a Blob"); + is(slice.size, + blobData[blobData.length - 1].length, + "Slice has correct size"); + is(slice.type, blobType, "Slice has correct type"); + + let reader = new FileReader(); + reader.onload = function() { + is(reader.result, + blobData[blobData.length - 1], + "Slice has correct data"); + + finishedTestingBlob = true; + + if (finishedTestingSlice) { + SimpleTest.finish(); + } + }; + reader.readAsText(slice); + + return; + } + + if ("slice" in message.data) { + is(receivedBlob, true, "Already received Blob"); + is(receivedSlice, false, "Have not yet received Slice"); + is(finishedTestingSlice, false, "Have not yet finished testing Slice"); + + receivedSlice = true; + + let slice = message.data.slice; + + ok(slice instanceof Blob, "Received a Blob for slice"); + is(slice.size, sliceText.length, "Slice has correct size"); + is(slice.type, blobType, "Slice has correct type"); + + let reader = new FileReader(); + reader.onload = function() { + is(reader.result, sliceText, "Slice has correct data"); + + let slice2 = slice.slice(1, 2, blobType); + + ok(slice2 instanceof Blob, "Slice returned a Blob"); + is(slice2.size, 1, "Slice has correct size"); + is(slice2.type, blobType, "Slice has correct type"); + + let reader2 = new FileReader(); + reader2.onload = function() { + is(reader2.result, sliceText[1], "Slice has correct data"); + + finishedTestingSlice = true; + + if (finishedTestingBlob) { + SimpleTest.finish(); + } + }; + reader2.readAsText(slice2); + }; + reader.readAsText(slice); + + return; + } + + ok(false, "Received a bad message: " + JSON.stringify(message.data)); + }); + + mm.loadFrameScript("data:,(" + childFrameScript.toString() + ")();", + false); +} + +function setup() { + info("Got load event"); + + SpecialPowers.pushPrefEnv( + { set: [ ["dom.ipc.browser_frames.oop_by_default", true], + ["dom.mozBrowserFramesEnabled", true], + ["network.disable.ipc.security", true], + ["browser.pagethumbnails.capturing_disabled", true] ] }, + function() { + info("Prefs set"); + + SpecialPowers.pushPermissions( + [ { type: "browser", allow: true, context: document } ], + function() { + info("Permissions set"); + + let iframe = document.createElement("iframe"); + SpecialPowers.wrap(iframe).mozbrowser = true; + iframe.id = "iframe"; + iframe.src = + "data:text/html,<!DOCTYPE HTML><html><body></body></html>"; + + iframe.addEventListener("mozbrowserloadend", function() { + info("Starting tests"); + + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe) + parentFrameScript(mm); + }); + + document.body.appendChild(iframe); + } + ); + } + ); +} + +SimpleTest.waitForExplicitFinish(); + </script> + </body> +</html> |