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 +} +) +; +} +) +;