/* 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");
}