/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const TESTROOT = getRootDirectory(gTestPath).replace( "chrome://mochitests/content/", "https://example.com/" ); // Get a ref to the pdf we want to open. const PDF_URL = TESTROOT + "file_pdfjs_object_stream.pdf"; var gMIMEService = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService); /** * Check that if we open a PDF with octet-stream mimetype, it can load * PDF.js . */ add_task(async function test_octet_stream_opens_pdfjs() { await SpecialPowers.pushPrefEnv({ set: [["pdfjs.handleOctetStream", true]] }); let handlerInfo = gMIMEService.getFromTypeAndExtension( "application/pdf", "pdf" ); // Make sure pdf.js is the default handler. is( handlerInfo.alwaysAskBeforeHandling, false, "pdf handler defaults to always-ask is false" ); is( handlerInfo.preferredAction, Ci.nsIHandlerInfo.handleInternally, "pdf handler defaults to internal" ); await BrowserTestUtils.withNewTab( { gBrowser, url: "about:blank" }, async function (newTabBrowser) { await waitForPdfJS(newTabBrowser, PDF_URL); is(newTabBrowser.currentURI.spec, PDF_URL, "Should load pdfjs"); } ); }); /** * Check that if the octet-stream thing is in a frame, we don't load it inside PDF.js */ add_task(async function test_octet_stream_in_frame() { await SpecialPowers.pushPrefEnv({ set: [["pdfjs.handleOctetStream", true]], }); let handlerInfo = gMIMEService.getFromTypeAndExtension( "application/pdf", "pdf" ); // Make sure pdf.js is the default handler. is( handlerInfo.alwaysAskBeforeHandling, false, "pdf handler defaults to always-ask is false" ); is( handlerInfo.preferredAction, Ci.nsIHandlerInfo.handleInternally, "pdf handler defaults to internal" ); let downloadsPanelPromise = BrowserTestUtils.waitForEvent( DownloadsPanel.panel, "popupshown" ); // Once downloaded, the PDF will be opened as a file:// URI in a new tab let previewTabPromise = BrowserTestUtils.waitForNewTab( gBrowser, url => { let uri = NetUtil.newURI(url); return uri.scheme == "file" && uri.spec.endsWith(".pdf"); }, false, // dont wait for load true // any tab, not just the next one ); await BrowserTestUtils.withNewTab( { gBrowser, url: `data:text/html,