forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| const INSTALL_PAGE = `${BASE}/file_install_extensions.html`;
 | |
| const INSTALL_XPI = `${BASE}/browser_webext_permissions.xpi`;
 | |
| 
 | |
| add_setup(async function() {
 | |
|   await SpecialPowers.pushPrefEnv({
 | |
|     set: [
 | |
|       ["extensions.webapi.testing", true],
 | |
|       ["extensions.install.requireBuiltInCerts", false],
 | |
|     ],
 | |
|   });
 | |
| 
 | |
|   registerCleanupFunction(async () => {
 | |
|     await SpecialPowers.popPrefEnv();
 | |
|   });
 | |
| });
 | |
| 
 | |
| add_task(async function test_tab_switch_dismiss() {
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, INSTALL_PAGE);
 | |
| 
 | |
|   let installCanceled = new Promise(resolve => {
 | |
|     let listener = {
 | |
|       onInstallCancelled() {
 | |
|         AddonManager.removeInstallListener(listener);
 | |
|         resolve();
 | |
|       },
 | |
|     };
 | |
|     AddonManager.addInstallListener(listener);
 | |
|   });
 | |
| 
 | |
|   SpecialPowers.spawn(gBrowser.selectedBrowser, [INSTALL_XPI], function(url) {
 | |
|     content.wrappedJSObject.installMozAM(url);
 | |
|   });
 | |
| 
 | |
|   await promisePopupNotificationShown("addon-webext-permissions");
 | |
|   let permsUL = document.getElementById("addon-webext-perm-list");
 | |
|   is(permsUL.childElementCount, 5, `Permissions list has 5 entries`);
 | |
| 
 | |
|   let permsLearnMore = document.getElementById("addon-webext-perm-info");
 | |
|   ok(
 | |
|     BrowserTestUtils.is_visible(permsLearnMore),
 | |
|     "Learn more link is shown on Permission popup"
 | |
|   );
 | |
|   is(
 | |
|     permsLearnMore.href,
 | |
|     Services.urlFormatter.formatURLPref("app.support.baseURL") +
 | |
|       "extension-permissions",
 | |
|     "Learn more link has desired URL"
 | |
|   );
 | |
| 
 | |
|   // Switching tabs dismisses the notification and cancels the install.
 | |
|   let switchTo = await BrowserTestUtils.openNewForegroundTab(gBrowser);
 | |
|   BrowserTestUtils.removeTab(switchTo);
 | |
|   await installCanceled;
 | |
| 
 | |
|   let addon = await AddonManager.getAddonByID("permissions@test.mozilla.org");
 | |
|   is(addon, null, "Extension is not installed");
 | |
| 
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
| });
 | |
| 
 | |
| add_task(async function test_add_tab_by_user_and_switch() {
 | |
|   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, INSTALL_PAGE);
 | |
| 
 | |
|   let listener = {
 | |
|     onInstallCancelled() {
 | |
|       this.canceledPromise = Promise.resolve();
 | |
|     },
 | |
|   };
 | |
|   AddonManager.addInstallListener(listener);
 | |
| 
 | |
|   SpecialPowers.spawn(gBrowser.selectedBrowser, [INSTALL_XPI], function(url) {
 | |
|     content.wrappedJSObject.installMozAM(url);
 | |
|   });
 | |
| 
 | |
|   // Show addon permission notification.
 | |
|   await promisePopupNotificationShown("addon-webext-permissions");
 | |
|   is(
 | |
|     document.getElementById("addon-webext-perm-list").childElementCount,
 | |
|     5,
 | |
|     "Permissions list has 5 entries"
 | |
|   );
 | |
| 
 | |
|   // Open about:newtab page in a new tab.
 | |
|   let newTab = await BrowserTestUtils.openNewForegroundTab(
 | |
|     gBrowser,
 | |
|     "about:newtab",
 | |
|     false
 | |
|   );
 | |
| 
 | |
|   // Switch to tab that is opening addon permission notification.
 | |
|   gBrowser.selectedTab = tab;
 | |
|   is(
 | |
|     document.getElementById("addon-webext-perm-list").childElementCount,
 | |
|     5,
 | |
|     "Permission notification is shown again"
 | |
|   );
 | |
|   ok(!listener.canceledPromise, "Extension installation is not canceled");
 | |
| 
 | |
|   // Cancel installation.
 | |
|   document.querySelector(".popup-notification-secondary-button").click();
 | |
|   await listener.canceledPromise;
 | |
|   info("Extension installation is canceled");
 | |
| 
 | |
|   let addon = await AddonManager.getAddonByID("permissions@test.mozilla.org");
 | |
|   is(addon, null, "Extension is not installed");
 | |
| 
 | |
|   AddonManager.removeInstallListener(listener);
 | |
|   BrowserTestUtils.removeTab(tab);
 | |
|   BrowserTestUtils.removeTab(newTab);
 | |
| });
 | 
