/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const DOC = toDataURL("
Hello world
"); add_task(async function transferModes({ client }) { const { IO, Page } = client; await loadURL(DOC); // as base64 encoded data const base64 = await Page.printToPDF({ transferMode: "ReturnAsBase64" }); is(base64.stream, null, "No stream handle is returned"); ok(!!base64.data, "Base64 encoded data is returned"); verifyPDF(atob(base64.data).trimEnd()); // defaults to base64 encoded data const defaults = await Page.printToPDF(); is(defaults.stream, null, "By default no stream handle is returned"); ok(!!defaults.data, "By default base64 encoded data is returned"); verifyPDF(atob(defaults.data).trimEnd()); // unknown transfer modes default to base64 const fallback = await Page.printToPDF({ transferMode: "ReturnAsFoo" }); is(fallback.stream, null, "Unknown mode doesn't return a stream"); ok(!!fallback.data, "Unknown mode defaults to base64 encoded data"); verifyPDF(atob(fallback.data).trimEnd()); // as stream handle const stream = await Page.printToPDF({ transferMode: "ReturnAsStream" }); ok(!!stream.stream, "Stream handle is returned"); is(stream.data, null, "No base64 encoded data is returned"); let streamData = ""; while (true) { const { data, base64Encoded, eof } = await IO.read({ handle: stream.stream, }); streamData += base64Encoded ? atob(data) : data; if (eof) { await IO.close({ handle: stream.stream }); break; } } verifyPDF(streamData.trimEnd()); }); function verifyPDF(data) { is(data.slice(0, 5), "%PDF-", "Decoded data starts with the PDF signature"); is(data.slice(-5), "%%EOF", "Decoded data ends with the EOF flag"); }