browser_temporary_permissions_tabs.js (3985B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 // Test that temp permissions are persisted through moving tabs to new windows. 7 add_task(async function testTempPermissionOnTabMove() { 8 let origin = "https://example.com/"; 9 let principal = 10 Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin); 11 let id = "geo"; 12 13 let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin); 14 15 SitePermissions.setForPrincipal( 16 principal, 17 id, 18 SitePermissions.BLOCK, 19 SitePermissions.SCOPE_TEMPORARY, 20 tab.linkedBrowser 21 ); 22 23 Assert.deepEqual( 24 SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser), 25 { 26 state: SitePermissions.BLOCK, 27 scope: SitePermissions.SCOPE_TEMPORARY, 28 } 29 ); 30 31 let promiseWin = BrowserTestUtils.waitForNewWindow(); 32 gBrowser.replaceTabWithWindow(tab); 33 let win = await promiseWin; 34 tab = win.gBrowser.selectedTab; 35 36 Assert.deepEqual( 37 SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser), 38 { 39 state: SitePermissions.BLOCK, 40 scope: SitePermissions.SCOPE_TEMPORARY, 41 } 42 ); 43 44 SitePermissions.removeFromPrincipal(principal, id, tab.linkedBrowser); 45 await BrowserTestUtils.closeWindow(win); 46 }); 47 48 // Test that temp permissions don't affect other tabs of the same URI. 49 add_task(async function testTempPermissionMultipleTabs() { 50 let origin = "https://example.com/"; 51 let principal = 52 Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin); 53 let id = "geo"; 54 55 let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin); 56 let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin); 57 58 SitePermissions.setForPrincipal( 59 principal, 60 id, 61 SitePermissions.BLOCK, 62 SitePermissions.SCOPE_TEMPORARY, 63 tab2.linkedBrowser 64 ); 65 66 Assert.deepEqual( 67 SitePermissions.getForPrincipal(principal, id, tab2.linkedBrowser), 68 { 69 state: SitePermissions.BLOCK, 70 scope: SitePermissions.SCOPE_TEMPORARY, 71 } 72 ); 73 74 Assert.deepEqual( 75 SitePermissions.getForPrincipal(principal, id, tab1.linkedBrowser), 76 { 77 state: SitePermissions.UNKNOWN, 78 scope: SitePermissions.SCOPE_PERSISTENT, 79 } 80 ); 81 82 let geoIcon = document.querySelector( 83 ".blocked-permission-icon[data-permission-id=geo]" 84 ); 85 86 Assert.notEqual( 87 geoIcon.getBoundingClientRect().width, 88 0, 89 "geo anchor should be visible" 90 ); 91 92 await BrowserTestUtils.switchTab(gBrowser, tab1); 93 94 Assert.equal( 95 geoIcon.getBoundingClientRect().width, 96 0, 97 "geo anchor should not be visible" 98 ); 99 100 SitePermissions.removeFromPrincipal(principal, id, tab2.linkedBrowser); 101 BrowserTestUtils.removeTab(tab1); 102 BrowserTestUtils.removeTab(tab2); 103 }); 104 105 // Test that temp permissions are cleared when closing tabs. 106 add_task(async function testTempPermissionOnTabClose() { 107 let origin = "https://example.com/"; 108 let principal = 109 Services.scriptSecurityManager.createContentPrincipalFromOrigin(origin); 110 let id = "geo"; 111 112 ok( 113 !SitePermissions._temporaryPermissions._stateByBrowser.size, 114 "Temporary permission map should be empty initially." 115 ); 116 117 let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, origin); 118 119 SitePermissions.setForPrincipal( 120 principal, 121 id, 122 SitePermissions.BLOCK, 123 SitePermissions.SCOPE_TEMPORARY, 124 tab.linkedBrowser 125 ); 126 127 Assert.deepEqual( 128 SitePermissions.getForPrincipal(principal, id, tab.linkedBrowser), 129 { 130 state: SitePermissions.BLOCK, 131 scope: SitePermissions.SCOPE_TEMPORARY, 132 } 133 ); 134 135 ok( 136 SitePermissions._temporaryPermissions._stateByBrowser.has( 137 tab.linkedBrowser 138 ), 139 "Temporary permission map should have an entry for the browser." 140 ); 141 142 BrowserTestUtils.removeTab(tab); 143 144 ok( 145 !SitePermissions._temporaryPermissions._stateByBrowser.size, 146 "Temporary permission map should be empty after closing the tab." 147 ); 148 });