From 81cbb6dfebc9b8c9624354966e2310458ece7260 Mon Sep 17 00:00:00 2001 From: Marco Castelluccio Date: Wed, 2 Oct 2019 01:19:24 +0000 Subject: [PATCH] Bug 1379560 - Part 2 - Add support for custom default permissions in SitePermissions.jsm. r=Paolo Part 1 added support for changing default permissions via pref. This patch adds support in the frontend code, which is required to actually make it work for most permission prompts. This patch introduces the concept of SitePermissions.PROMPT (which already exists in the permission manager) to distinguish between the default UNKNOWN state and the explicit PROMPT state. They both have the same effect (always asking the user for confirmation). MozReview-Commit-ID: 2Gg9uwigter UltraBlame original commit: 99b0d3748cdae722454c26912cccdc2fdbb60e44 --- browser/base/content/pageinfo/permissions.js | 26 +- .../components/preferences/sitePermissions.js | 30 ++ .../chrome/browser/sitePermissions.properties | 8 + browser/modules/SitePermissions.jsm | 140 +++++-- .../modules/test/unit/test_SitePermissions.js | 372 +++++++++++++++++- 5 files changed, 530 insertions(+), 46 deletions(-) diff --git a/browser/base/content/pageinfo/permissions.js b/browser/base/content/pageinfo/permissions.js index 13bc776f83c1d..9b360745af133 100644 --- a/browser/base/content/pageinfo/permissions.js +++ b/browser/base/content/pageinfo/permissions.js @@ -475,14 +475,22 @@ gPermURI aPartId ) ; +let +defaultState += +SitePermissions +. +getDefault +( +aPartId +) +; if ( state ! = -SitePermissions -. -UNKNOWN +defaultState ) { checkbox @@ -521,15 +529,6 @@ true " ) ; -state -= -SitePermissions -. -getDefault -( -aPartId -) -; } setRadioState ( @@ -1221,6 +1220,8 @@ id var permission = +parseInt +( id . split @@ -1232,6 +1233,7 @@ split [ 1 ] +) ; SitePermissions . diff --git a/browser/components/preferences/sitePermissions.js b/browser/components/preferences/sitePermissions.js index 2b3c9eff2aee9..0f38e34dcac10 100644 --- a/browser/components/preferences/sitePermissions.js +++ b/browser/components/preferences/sitePermissions.js @@ -1094,9 +1094,39 @@ state SitePermissions . UNKNOWN +& +& +permission +. +capability += += +SitePermissions +. +PROMPT +) +{ +state += +SitePermissions +. +PROMPT +; +} +else +if +( +state += += +SitePermissions +. +UNKNOWN ) +{ continue ; +} let m = diff --git a/browser/locales/en-US/chrome/browser/sitePermissions.properties b/browser/locales/en-US/chrome/browser/sitePermissions.properties index 97bd728618733..63b3ebd08bc36 100644 --- a/browser/locales/en-US/chrome/browser/sitePermissions.properties +++ b/browser/locales/en-US/chrome/browser/sitePermissions.properties @@ -155,6 +155,14 @@ current blocked = Blocked +state +. +current +. +prompt += +Always +Ask # LOCALIZATION NOTE diff --git a/browser/modules/SitePermissions.jsm b/browser/modules/SitePermissions.jsm index b82a91f5765e8..eb05c22986fc6 100644 --- a/browser/modules/SitePermissions.jsm +++ b/browser/modules/SitePermissions.jsm @@ -567,6 +567,13 @@ Services perms . DENY_ACTION +PROMPT +: +Services +. +perms +. +PROMPT_ACTION ALLOW_COOKIES_FOR_SESSION : Components @@ -612,6 +619,21 @@ SitePermissions SCOPE_PERSISTENT } " +_defaultPrefBranch +: +Services +. +prefs +. +getBranch +( +" +permissions +. +default +. +" +) getAllByURI ( uri @@ -966,6 +988,9 @@ return [ SitePermissions . +PROMPT +SitePermissions +. ALLOW SitePermissions . @@ -1005,7 +1030,15 @@ getDefault return this . +_defaultPrefBranch +. +getIntPref +( +permissionID +this +. UNKNOWN +) ; } get @@ -1016,14 +1049,22 @@ browser ) { let +defaultState += +this +. +getDefault +( +permissionID +) +; +let result = { state : -this -. -UNKNOWN +defaultState scope : this @@ -1131,10 +1172,12 @@ SCOPE_SESSION } if ( -! result . state += += +defaultState ) { let @@ -1198,6 +1241,17 @@ state this . UNKNOWN +| +| +state += += +this +. +getDefault +( +permissionID +) ) { this @@ -1524,6 +1578,11 @@ this . UNKNOWN : +case +this +. +PROMPT +: return gStringBundle . @@ -1618,6 +1677,25 @@ state case this . +PROMPT +: +return +gStringBundle +. +GetStringFromName +( +" +state +. +current +. +prompt +" +) +; +case +this +. ALLOW : if @@ -1742,38 +1820,16 @@ image " : { -getDefault -( -) -{ -return -Services -. -prefs -. -getIntPref -( -" -permissions -. -default -. -image -" -) -= -= -2 -? -SitePermissions -. -BLOCK +states : +[ SitePermissions . ALLOW -; -} +SitePermissions +. +BLOCK +] } " cookie @@ -1941,6 +1997,16 @@ SitePermissions ALLOW ; } +states +: +[ +SitePermissions +. +ALLOW +SitePermissions +. +BLOCK +] } " install @@ -1976,6 +2042,16 @@ SitePermissions ALLOW ; } +states +: +[ +SitePermissions +. +ALLOW +SitePermissions +. +BLOCK +] } " geo diff --git a/browser/modules/test/unit/test_SitePermissions.js b/browser/modules/test/unit/test_SitePermissions.js index 3aa1156184ed6..4d1a6bac5e9f3 100644 --- a/browser/modules/test/unit/test_SitePermissions.js +++ b/browser/modules/test/unit/test_SitePermissions.js @@ -552,6 +552,64 @@ BLOCK ] ) ; +Services +. +prefs +. +setIntPref +( +" +permissions +. +default +. +camera +" +SitePermissions +. +ALLOW +) +; +Assert +. +deepEqual +( +SitePermissions +. +getAvailableStates +( +" +camera +" +) +[ +SitePermissions +. +PROMPT +SitePermissions +. +ALLOW +SitePermissions +. +BLOCK +] +) +; +Services +. +prefs +. +clearUserPref +( +" +permissions +. +default +. +camera +" +) +; Assert . deepEqual @@ -776,6 +834,14 @@ state SitePermissions . UNKNOWN +{ +permission +} +should +exact +- +host +match ) ; } @@ -806,6 +872,15 @@ state SitePermissions . ALLOW +{ +permission +} +should +not +exact +- +host +match ) ; } @@ -855,7 +930,7 @@ subUri permission SitePermissions . -BLOCK +PROMPT ) ; Assert @@ -873,7 +948,7 @@ permission state SitePermissions . -BLOCK +PROMPT ) ; Assert @@ -914,3 +989,296 @@ permission } ) ; +add_task +( +function +* +testDefaultPrefs +( +) +{ +let +uri += +Services +. +io +. +newURI +( +" +https +: +/ +/ +example +. +com +" +) +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +camera +" +) +{ +state +: +SitePermissions +. +UNKNOWN +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +Services +. +prefs +. +setIntPref +( +" +permissions +. +default +. +camera +" +SitePermissions +. +BLOCK +) +; +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +camera +" +) +{ +state +: +SitePermissions +. +BLOCK +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +microphone +" +) +{ +state +: +SitePermissions +. +UNKNOWN +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +Services +. +prefs +. +setIntPref +( +" +permissions +. +default +. +camera +" +SitePermissions +. +ALLOW +) +; +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +camera +" +) +{ +state +: +SitePermissions +. +ALLOW +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +SitePermissions +. +set +( +uri +" +camera +" +SitePermissions +. +BLOCK +) +; +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +camera +" +) +{ +state +: +SitePermissions +. +BLOCK +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +SitePermissions +. +remove +( +uri +" +camera +" +) +; +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +camera +" +) +{ +state +: +SitePermissions +. +ALLOW +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +Services +. +prefs +. +clearUserPref +( +" +permissions +. +default +. +camera +" +) +; +Assert +. +deepEqual +( +SitePermissions +. +get +( +uri +" +camera +" +) +{ +state +: +SitePermissions +. +UNKNOWN +scope +: +SitePermissions +. +SCOPE_PERSISTENT +} +) +; +} +) +;