diff options
Diffstat (limited to 'dom/base/test/browser_inputStream_structuredClone.js')
-rw-r--r-- | dom/base/test/browser_inputStream_structuredClone.js | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/dom/base/test/browser_inputStream_structuredClone.js b/dom/base/test/browser_inputStream_structuredClone.js new file mode 100644 index 0000000000..a022563ac0 --- /dev/null +++ b/dom/base/test/browser_inputStream_structuredClone.js @@ -0,0 +1,72 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +const URIs = [ + "about:about", + "http://example.com/browser/dom/base/test/empty.html", +]; + +async function runTest(input, url) { + let tab = BrowserTestUtils.addTab(gBrowser, url); + let browser = gBrowser.getBrowserForTab(tab); + + await BrowserTestUtils.browserLoaded(browser); + + let stream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance( + Ci.nsIStringInputStream + ); + stream.setData(input, input.length); + + let data = { + inputStream: stream, + }; + + is( + data.inputStream.available(), + input.length, + "The length of the inputStream matches: " + input.length + ); + + // FIXME: SpecialPowers.spawn currently crashes when trying to return + // values containing input streams. + /* eslint-disable no-shadow */ + let dataBack = await ContentTask.spawn(browser, data, function (data) { + let dataBack = { + inputStream: data.inputStream, + check: true, + }; + + if (content.location.href.startsWith("about:")) { + dataBack.check = + data.inputStream instanceof + content.Components.interfaces.nsIInputStream; + } + + return dataBack; + }); + /* eslint-enable no-shadow */ + + ok(dataBack.check, "The inputStream is a nsIInputStream also on content."); + ok( + data.inputStream instanceof Ci.nsIInputStream, + "The original object was an inputStream" + ); + ok( + dataBack.inputStream instanceof Ci.nsIInputStream, + "We have an inputStream back from the content." + ); + + BrowserTestUtils.removeTab(tab); +} + +add_task(async function test() { + let a = "a"; + for (let i = 0; i < 25; ++i) { + a += a; + } + + for (let i = 0; i < URIs.length; ++i) { + await runTest("Hello world", URIs[i]); + await runTest(a, URIs[i]); + } +}); |