summaryrefslogtreecommitdiffstats
path: root/toolkit/components/pdfjs/test/browser_pdfjs_force_opening_files.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/pdfjs/test/browser_pdfjs_force_opening_files.js')
-rw-r--r--toolkit/components/pdfjs/test/browser_pdfjs_force_opening_files.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/toolkit/components/pdfjs/test/browser_pdfjs_force_opening_files.js b/toolkit/components/pdfjs/test/browser_pdfjs_force_opening_files.js
new file mode 100644
index 0000000000..0490a6eec3
--- /dev/null
+++ b/toolkit/components/pdfjs/test/browser_pdfjs_force_opening_files.js
@@ -0,0 +1,89 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(async function test_file_opening() {
+ // Get a ref to the pdf we want to open.
+ let dirFileObj = getChromeDir(getResolvedURI(gTestPath));
+ dirFileObj.append("file_pdfjs_test.pdf");
+
+ // Change the defaults.
+ var oldAction = changeMimeHandler(Ci.nsIHandlerInfo.useSystemDefault, true);
+
+ // Test: "Open with" dialog should not come up, despite pdf.js not being
+ // the default - because files from disk should always use pdfjs, unless
+ // it is forcibly disabled.
+ let openedWindow = false;
+ let windowOpenedPromise = new Promise((resolve, reject) => {
+ addWindowListener(
+ "chrome://mozapps/content/downloads/unknownContentType.xhtml",
+ () => {
+ openedWindow = true;
+ resolve();
+ }
+ );
+ });
+
+ // Open the tab with a system principal:
+ var tab = BrowserTestUtils.addTab(gBrowser, dirFileObj.path);
+
+ let pdfjsLoadedPromise = TestUtils.waitForCondition(() => {
+ let { contentPrincipal } = tab.linkedBrowser;
+ return (contentPrincipal?.URI?.spec || "").endsWith("viewer.html");
+ });
+ await Promise.race([pdfjsLoadedPromise, windowOpenedPromise]);
+ ok(!openedWindow, "Shouldn't open an unknownContentType window!");
+
+ BrowserTestUtils.removeTab(tab);
+
+ // Now try opening it from the file directory:
+ tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ dirFileObj.parent.path
+ );
+ pdfjsLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ false,
+ url => url.endsWith("test.pdf")
+ );
+ await SpecialPowers.spawn(tab.linkedBrowser, [], () => {
+ content.document.querySelector("a[href$='test.pdf']").click();
+ });
+ await Promise.race([pdfjsLoadedPromise, windowOpenedPromise]);
+ ok(
+ !openedWindow,
+ "Shouldn't open an unknownContentType window for PDFs from file: links!"
+ );
+
+ registerCleanupFunction(function () {
+ if (listenerCleanup) {
+ listenerCleanup();
+ }
+ changeMimeHandler(oldAction[0], oldAction[1]);
+ gBrowser.removeTab(tab);
+ });
+});
+
+let listenerCleanup;
+function addWindowListener(aURL, aCallback) {
+ let listener = {
+ onOpenWindow(aXULWindow) {
+ info("window opened, waiting for focus");
+ listenerCleanup();
+ listenerCleanup = null;
+
+ var domwindow = aXULWindow.docShell.domWindow;
+ waitForFocus(function () {
+ is(
+ domwindow.document.location.href,
+ aURL,
+ "should have seen the right window open"
+ );
+ domwindow.close();
+ aCallback();
+ }, domwindow);
+ },
+ onCloseWindow(aXULWindow) {},
+ };
+ Services.wm.addListener(listener);
+ listenerCleanup = () => Services.wm.removeListener(listener);
+}