/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
const RELATIVE_DIR =
"toolkit/components/pdfjs/test/";
const TESTROOT =
"http://example.com/browser/" + RELATIVE_DIR;
// Test js in pdf file.
add_task(async
function test_js_sandbox() {
await BrowserTestUtils.withNewTab(
{ gBrowser, url:
"about:blank" },
async
function (browser) {
await SpecialPowers.pushPrefEnv({
set: [[
"pdfjs.enableScripting",
true]],
});
await Promise.all([
waitForPdfJSAnnotationLayer(browser, TESTROOT +
"file_pdfjs_js.pdf"),
waitForPdfJSSandbox(browser),
]);
await SpecialPowers.spawn(browser, [], async () => {
const { PdfSandbox } = ChromeUtils.importESModule(
"resource://pdf.js/PdfSandbox.sys.mjs"
);
let sandboxDestroyCount = 0;
const originalDestroy = PdfSandbox.prototype.destroy;
PdfSandbox.prototype.destroy =
function () {
const obj =
this.sandbox.eval(
"({})");
originalDestroy.apply(
this, arguments);
sandboxDestroyCount++;
ok(Cu.isDeadWrapper(obj),
"Sandbox must have been nuked");
};
const document = content.document;
const button = document.querySelector(
"[data-annotation-id='16R'] a");
button.dispatchEvent(
new content.Event(
"click"));
const text = document.querySelector(`[data-element-id=
"15R"]`);
is(text.value,
"test",
"Text field must containt 'test' string");
content.addEventListener(
"unload", () => {
is(sandboxDestroyCount, 1,
"Sandbox must have been destroyed");
});
});
await waitForPdfJSClose(browser);
await SpecialPowers.popPrefEnv();
}
);
});