|  | <!DOCTYPE html> | 
|  | <meta charset="utf-8"> | 
|  | <title>Blob methods from detached frame work as expected</title> | 
|  | <script src="/resources/testharness.js"></script> | 
|  | <script src="/resources/testharnessreport.js"></script> | 
|  |  | 
|  | <iframe id="emptyDocumentIframe" src="../support/empty-document.html"></iframe> | 
|  |  | 
|  | <script> | 
|  | const BlobPrototypeFromDetachedFramePromise = new Promise(resolve => { | 
|  | emptyDocumentIframe.onload = () => { | 
|  | const BlobPrototype = emptyDocumentIframe.contentWindow.Blob.prototype; | 
|  | emptyDocumentIframe.remove(); | 
|  | resolve(BlobPrototype); | 
|  | }; | 
|  | }); | 
|  |  | 
|  | const charCodeArrayToString = charCodeArray => Array.from(charCodeArray, c => String.fromCharCode(c)).join(""); | 
|  | const charCodeBufferToString = charCodeBuffer => charCodeArrayToString(new Uint8Array(charCodeBuffer)); | 
|  |  | 
|  | promise_test(async () => { | 
|  | const { slice } = await BlobPrototypeFromDetachedFramePromise; | 
|  | const blob = new Blob(["foobar"]); | 
|  |  | 
|  | const slicedBlob = slice.call(blob, 1, 3); | 
|  | assert_true(slicedBlob instanceof Blob); | 
|  |  | 
|  | assert_equals(await slicedBlob.text(), "oo"); | 
|  | assert_equals(charCodeBufferToString(await slicedBlob.arrayBuffer()), "oo"); | 
|  |  | 
|  | const reader = slicedBlob.stream().getReader(); | 
|  | const { value } = await reader.read(); | 
|  | assert_equals(charCodeArrayToString(value), "oo"); | 
|  | }, "slice()"); | 
|  |  | 
|  | promise_test(async () => { | 
|  | const { text } = await BlobPrototypeFromDetachedFramePromise; | 
|  | const blob = new Blob(["foo"]); | 
|  |  | 
|  | assert_equals(await text.call(blob), "foo"); | 
|  | }, "text()"); | 
|  |  | 
|  | promise_test(async () => { | 
|  | const { arrayBuffer } = await BlobPrototypeFromDetachedFramePromise; | 
|  | const blob = new Blob(["bar"]); | 
|  |  | 
|  | const charCodeBuffer = await arrayBuffer.call(blob); | 
|  | assert_equals(charCodeBufferToString(charCodeBuffer), "bar"); | 
|  | }, "arrayBuffer()"); | 
|  |  | 
|  | promise_test(async () => { | 
|  | const { stream } = await BlobPrototypeFromDetachedFramePromise; | 
|  | const blob = new Blob(["baz"]); | 
|  |  | 
|  | const reader = stream.call(blob).getReader(); | 
|  | const { value } = await reader.read(); | 
|  | assert_equals(charCodeArrayToString(value), "baz"); | 
|  | }, "stream()"); | 
|  | </script> |