author | Prathiksha <prathikshaprasadsuman@gmail.com> |
Sun, 09 Apr 2017 11:45:01 +0530 | |
changeset 559277 | 0809a8b45da8bd1f1aa6bee5b62c3cd895576e13 |
parent 559154 | 2a3ecdb7d1ea814708021fee6735b3aedcf03e48 |
child 623343 | 26780c9960aadb5b1ea5c6aeeebd63465e1bbad0 |
push id | 53037 |
push user | bmo:prathikshaprasadsuman@gmail.com |
push date | Sun, 09 Apr 2017 10:56:53 +0000 |
reviewers | johannh |
bugs | 1224137 |
milestone | 55.0a1 |
--- a/browser/base/content/test/tabPrompts/browser_openPromptInBackgroundTab.js +++ b/browser/base/content/test/tabPrompts/browser_openPromptInBackgroundTab.js @@ -45,16 +45,30 @@ add_task(function*() { yield new Promise(function(resolve) { Services.tm.mainThread.dispatch(resolve, Ci.nsIThread.DISPATCH_NORMAL); }); // check permission is set let ps = Services.perms; is(ps.ALLOW_ACTION, ps.testPermission(makeURI(pageWithAlert), "focus-tab-by-prompt"), "Tab switching should now be allowed"); + // Check if the control center shows the correct permission. + let shown = BrowserTestUtils.waitForEvent(gIdentityHandler._identityPopup, "popupshown"); + gIdentityHandler._identityBox.click(); + yield shown; + let labelText = SitePermissions.getPermissionLabel("focus-tab-by-prompt"); + let permissionsList = document.getElementById("identity-popup-permission-list"); + let label = permissionsList.querySelector(".identity-popup-permission-label"); + is(label.textContent, labelText); + gIdentityHandler._identityPopup.hidePopup() + + // Check if the identity icon signals granted permission. + ok(gIdentityHandler._identityBox.classList.contains("grantedPermissions"), + "identity-box signals granted permissions"); + let openedTabSelectedPromise = BrowserTestUtils.waitForAttribute("selected", openedTab, "true"); // switch to other tab again yield BrowserTestUtils.switchTab(gBrowser, firstTab); // This is sync in non-e10s, but in e10s we need to wait for this, so yield anyway. // Note that the switchTab promise doesn't actually guarantee anything about *which* // tab ends up as selected when its event fires, so using that here wouldn't work. yield openedTabSelectedPromise;
--- a/browser/locales/en-US/chrome/browser/sitePermissions.properties +++ b/browser/locales/en-US/chrome/browser/sitePermissions.properties @@ -30,8 +30,9 @@ permission.desktop-notification2.label = permission.image.label = Load Images permission.camera.label = Use the Camera permission.microphone.label = Use the Microphone permission.screen.label = Share the Screen permission.install.label = Install Add-ons permission.popup.label = Open Pop-up Windows permission.geo.label = Access Your Location permission.indexedDB.label = Maintain Offline Storage +permission.focus-tab-by-prompt.label = Switch to this Tab
--- a/browser/modules/SitePermissions.jsm +++ b/browser/modules/SitePermissions.jsm @@ -603,14 +603,19 @@ var gPermissionObject = { SitePermissions.BLOCK : SitePermissions.ALLOW; } }, "geo": { exactHostMatch: true }, - "indexedDB": {} + "indexedDB": {}, + + "focus-tab-by-prompt": { + exactHostMatch: true, + states: [ SitePermissions.UNKNOWN, SitePermissions.ALLOW ], + }, }; XPCOMUtils.defineLazyPreferenceGetter(SitePermissions, "temporaryPermissionExpireTime", "privacy.temporary_permission_expire_time_ms", 3600 * 1000);
--- a/browser/modules/test/unit/test_SitePermissions.js +++ b/browser/modules/test/unit/test_SitePermissions.js @@ -3,17 +3,17 @@ */ "use strict"; Components.utils.import("resource:///modules/SitePermissions.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); add_task(function* testPermissionsListing() { Assert.deepEqual(SitePermissions.listPermissions().sort(), - ["camera", "cookie", "desktop-notification", "geo", "image", + ["camera", "cookie", "desktop-notification", "focus-tab-by-prompt", "geo", "image", "indexedDB", "install", "microphone", "popup", "screen"], "Correct list of all permissions"); }); add_task(function* testGetAllByURI() { // check that it returns an empty array on an invalid URI // like a file URI, which doesn't support site permissions let wrongURI = Services.io.newURI("file:///example.js") @@ -67,17 +67,17 @@ add_task(function* testGetAvailableState [ SitePermissions.ALLOW, SitePermissions.BLOCK ]); }); add_task(function* testExactHostMatch() { let uri = Services.io.newURI("https://example.com"); let subUri = Services.io.newURI("https://test1.example.com"); - let exactHostMatched = ["desktop-notification", "camera", "microphone", "screen", "geo"]; + let exactHostMatched = ["desktop-notification", "focus-tab-by-prompt", "camera", "microphone", "screen", "geo"]; let nonExactHostMatched = ["image", "cookie", "popup", "install", "indexedDB"]; let permissions = SitePermissions.listPermissions(); for (let permission of permissions) { SitePermissions.set(uri, permission, SitePermissions.ALLOW); if (exactHostMatched.includes(permission)) { // Check that the sub-origin does not inherit the permission from its parent.
--- a/browser/themes/shared/notification-icons.inc.css +++ b/browser/themes/shared/notification-icons.inc.css @@ -28,16 +28,20 @@ .notification-anchor-icon:not(.plugin-blocked):-moz-lwtheme, #blocked-permissions-container > .blocked-permission-icon:-moz-lwtheme { filter: url(chrome://global/skin/filters.svg#fill); fill: currentColor; } /* INDIVIDUAL NOTIFICATIONS */ +.focus-tab-by-prompt-icon { + list-style-image: url(chrome://browser/skin/notification-icons.svg#focus-tab-by-prompt); +} + .popup-notification-icon[popupid="web-notifications"], .desktop-notification-icon { list-style-image: url(chrome://browser/skin/notification-icons.svg#desktop-notification); } .desktop-notification-icon.blocked-permission-icon { list-style-image: url(chrome://browser/skin/notification-icons.svg#desktop-notification-blocked); }
--- a/browser/themes/shared/notification-icons.svg +++ b/browser/themes/shared/notification-icons.svg @@ -50,16 +50,17 @@ stroke-width: 3px; stroke-linecap: round; } </style> <defs> <path id="camera-icon" d="m 2,23 a 3,3 0 0 0 3,3 l 14,0 a 3,3 0 0 0 3,-3 l 0,-4 6,5.5 c 0.5,0.5 1,0.7 2,0.5 l 0,-18 c -1,-0.2 -1.5,0 -2,0.5 l -6,5.5 0,-4 a 3,3 0 0 0 -3,-3 l -14,0 a 3,3 0 0 0 -3,3 z" /> <path id="desktop-notification-icon" d="m 2,20 a 4,4 0 0 0 4,4 l 13,0 7,7 0,-7 a 4,4 0 0 0 4,-4 l 0,-12 a 4,4 0 0 0 -4,-4 l -20,0 a 4,4 0 0 0 -4,4 z m 5,-2 a 1,1 0 1 1 0,-2 l 10,0 a 1,1 0 1 1 0,2 z m 0,-4 a 1,1 0 1 1 0,-2 l 14,0 a 1,1 0 1 1 0,2 z m 0,-4 a 1,1 0 1 1 0,-2 l 18,0 a 1,1 0 1 1 0,2 z" /> + <path id="focus-tab-by-prompt-icon" d="M29.43,25,18.57,3.8A2.92,2.92,0,0,0,16,2a2.92,2.92,0,0,0-2.57,1.8L2.57,25a3.47,3.47,0,0,0,0,3.4A3.15,3.15,0,0,0,5.33,30H26.66a3.15,3.15,0,0,0,2.77-1.6A3.47,3.47,0,0,0,29.43,25ZM16,7.2a2.3,2.3,0,0,1,2.37,2.4L18,18a1.88,1.88,0,0,1-2,2,1.88,1.88,0,0,1-2-2l-.4-8.4A2.3,2.3,0,0,1,16,7.2ZM16,28a3,3,0,0,1,0-6,3,3,0,0,1,0,6Z"/> <path id="geo-linux-icon" d="m 2,15.9 a 14,14 0 1 1 0,0.2 z m 4,2.1 a 10,10 0 0 0 8,8 l 0,-4 4,0 0,4 a 10,10 0 0 0 8,-8 l -4,0 0,-4 4,0 a 10,10 0 0 0 -8,-8 l 0,4 -4,0 0,-4 a 10,10 0 0 0 -8,8 l 4,0 0,4 z" /> <path id="geo-linux-detailed-icon" d="m 2,15.9 a 14,14 0 1 1 0,0.2 z m 3,2.1 a 11,11 0 0 0 9,9 l 1,-5 2,0 1,5 a 11,11 0 0 0 9,-9 l -5,-1 0,-2 5,-1 a 11,11 0 0 0 -9,-9 l -1,5 -2,0 -1,-5 a 11,11 0 0 0 -9,9 l 5,1 0,2 z" /> <path id="geo-osx-icon" d="m 0,16 16,0 0,16 12,-28 z" /> <path id="geo-windows-icon" d="m 2,14 0,4 2,0 a 12,12 0 0 0 10,10 l 0,2 4,0 0,-2 a 12,12 0 0 0 10,-10 l 2,0 0,-4 -2,0 a 12,12 0 0 0 -10,-10 l 0,-2 -4,0 0,2 a 12,12 0 0 0 -10,10 z m 4,1.9 a 10,10 0 1 1 0,0.2 z m 4,0 a 6,6 0 1 1 0,0.2 z" /> <path id="geo-windows-detailed-icon" d="m 2,14.5 0,3 2,0.5 a 12,12 0 0 0 10,10 l 0.5,2 3,0 0.5,-2 a 12,12 0 0 0 10,-10 l 2,-0.5 0,-3 -2,-0.5 a 12,12 0 0 0 -10,-10 l -0.5,-2 -3,0 -0.5,2 a 12,12 0 0 0 -10,10 z m 4,1.4 a 10,10 0 1 1 0,0.2 z m 3,0 a 7,7 0 1 1 0,0.2 z" /> <path id="indexedDB-icon" d="m 2,24 a 4,4 0 0 0 4,4 l 2,0 0,-4 -2,0 0,-16 20,0 0,16 -2,0 0,4 2,0 a 4,4 0 0 0 4,-4 l 0,-16 a 4,4 0 0 0 -4,-4 l -20,0 a 4,4 0 0 0 -4,4 z m 8,-2 6,7 6,-7 -4,0 0,-8 -4,0 0,8 z" /> <path id="login-icon" d="m 2,26 0,4 6,0 0,-2 2,0 0,-2 1,0 0,-1 2,0 0,-3 2,0 2.5,-2.5 1.5,1.5 3,-3 a 8,8 0 1 0 -8,-8 l -3,3 2,2 z m 20,-18.1 a 2,2 0 1 1 0,0.2 z" /> <path id="login-detailed-icon" d="m 1,27 0,3.5 a 0.5,0.5 0 0 0 0.5,0.5 l 5,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-1.5 1.5,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-1.5 1,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-1 1,0 a 0.5,0.5 0 0 0 0.5,-0.5 l 0,-2 2,0 2.5,-2.5 q 0.5,-0.5 1,0 l 1,1 c 0.5,0.5 1,0.5 1.5,-0.5 l 1,-2 a 9,9 0 1 0 -8,-8 l -2,1 c -1,0.5 -1,1 -0.5,1.5 l 1.5,1.5 q 0.5,0.5 0,1 z m 21,-19.1 a 2,2 0 1 1 0,0.2 z" /> @@ -86,16 +87,17 @@ </g> <use id="camera" xlink:href="#camera-icon" /> <use id="camera-sharing" xlink:href="#camera-icon"/> <use id="camera-indicator" xlink:href="#camera-icon" /> <use id="camera-blocked" class="blocked" xlink:href="#camera-icon" /> <use id="desktop-notification" xlink:href="#desktop-notification-icon" /> <use id="desktop-notification-blocked" class="blocked" xlink:href="#desktop-notification-icon" /> + <use id="focus-tab-by-prompt" xlink:href="#focus-tab-by-prompt-icon" /> <use id="geo-osx" xlink:href="#geo-osx-icon" /> <use id="geo-osx-blocked" class="blocked" xlink:href="#geo-osx-icon" /> <use id="geo-linux" xlink:href="#geo-linux-icon" /> <use id="geo-linux-blocked" class="blocked" xlink:href="#geo-linux-icon" /> <use id="geo-linux-detailed" xlink:href="#geo-linux-detailed-icon" /> <use id="geo-windows" xlink:href="#geo-windows-icon" /> <use id="geo-windows-blocked" class="blocked" xlink:href="#geo-windows-icon" /> <use id="geo-windows-detailed" xlink:href="#geo-windows-detailed-icon" />