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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
// Tests that the discovery view can install add-ons correctly
const MAIN_URL = "https://example.com/" + RELATIVE_DIR + "discovery_install.html";
const GOOD_FRAMED_URL = "https://example.com/" + RELATIVE_DIR + "discovery_frame.html";
const BAD_FRAMED_URL = "https://example.org/" + RELATIVE_DIR + "discovery_frame.html";
const PREF_INSTALL_REQUIREBUILTINCERTS = "extensions.install.requireBuiltInCerts";
// Temporarily enable caching
Services.prefs.setBoolPref(PREF_GETADDONS_CACHE_ENABLED, true);
// Allow SSL from non-built-in certs
Services.prefs.setBoolPref(PREF_INSTALL_REQUIREBUILTINCERTS, false);
// Allow installs from the test site
Services.perms.add(NetUtil.newURI("https://example.com/"), "install",
Ci.nsIPermissionManager.ALLOW_ACTION);
Services.perms.add(NetUtil.newURI("https://example.org/"), "install",
Ci.nsIPermissionManager.ALLOW_ACTION);
registerCleanupFunction(() => {
Services.perms.remove(NetUtil.newURI("https://example.com/"), "install");
Services.perms.remove(NetUtil.newURI("https://example.org/"), "install");
Services.prefs.clearUserPref(PREF_INSTALL_REQUIREBUILTINCERTS);
});
function clickLink(frameLoader, id) {
let link = frameLoader.contentDocument.getElementById(id);
EventUtils.sendMouseEvent({type: "click"}, link);
}
function waitForInstall() {
return new Promise(resolve => {
wait_for_window_open((window) => {
is(window.location, "chrome://mozapps/content/xpinstall/xpinstallConfirm.xul",
"Should have seen the install window");
window.document.documentElement.cancelDialog();
resolve();
});
});
}
function waitForFail() {
return new Promise(resolve => {
let listener = (subject, topic, data) => {
Services.obs.removeObserver(listener, topic);
resolve();
}
Services.obs.addObserver(listener, "addon-install-origin-blocked", false);
});
}
// Tests that navigating to an XPI attempts to install correctly
add_task(function* test_install_direct() {
Services.prefs.setCharPref(PREF_DISCOVERURL, MAIN_URL);
let managerWindow = yield open_manager("addons://discover/");
let browser = managerWindow.document.getElementById("discover-browser");
clickLink(browser, "install-direct");
yield waitForInstall();
yield close_manager(managerWindow);
});
// Tests that installing via JS works correctly
add_task(function* test_install_js() {
Services.prefs.setCharPref(PREF_DISCOVERURL, MAIN_URL);
let managerWindow = yield open_manager("addons://discover/");
let browser = managerWindow.document.getElementById("discover-browser");
clickLink(browser, "install-js");
yield waitForInstall();
yield close_manager(managerWindow);
});
// Installing from an inner-frame of the same origin should work
add_task(function* test_install_inner_direct() {
Services.prefs.setCharPref(PREF_DISCOVERURL, GOOD_FRAMED_URL);
let managerWindow = yield open_manager("addons://discover/");
let browser = managerWindow.document.getElementById("discover-browser");
let frame = browser.contentDocument.getElementById("frame");
clickLink(frame, "install-direct");
yield waitForInstall();
yield close_manager(managerWindow);
});
add_task(function* test_install_inner_js() {
Services.prefs.setCharPref(PREF_DISCOVERURL, GOOD_FRAMED_URL);
let managerWindow = yield open_manager("addons://discover/");
let browser = managerWindow.document.getElementById("discover-browser");
let frame = browser.contentDocument.getElementById("frame");
clickLink(frame, "install-js");
yield waitForInstall();
yield close_manager(managerWindow);
});
// Installing from an inner-frame of a different origin should fail
add_task(function* test_install_xorigin_direct() {
Services.prefs.setCharPref(PREF_DISCOVERURL, BAD_FRAMED_URL);
let managerWindow = yield open_manager("addons://discover/");
let browser = managerWindow.document.getElementById("discover-browser");
let frame = browser.contentDocument.getElementById("frame");
clickLink(frame, "install-direct");
yield waitForFail();
yield close_manager(managerWindow);
});
add_task(function* test_install_xorigin_js() {
Services.prefs.setCharPref(PREF_DISCOVERURL, BAD_FRAMED_URL);
let managerWindow = yield open_manager("addons://discover/");
let browser = managerWindow.document.getElementById("discover-browser");
let frame = browser.contentDocument.getElementById("frame");
clickLink(frame, "install-js");
yield waitForFail();
yield close_manager(managerWindow);
});
|