1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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);
}
|