Bug 1413780 - Hide canvas permission from site information panel when privacy.resistFingerprinting is false. draft
authorChung-Sheng Fu <cfu@mozilla.com>
Wed, 22 Nov 2017 17:42:35 +0800
changeset 714048 191eb82bc8e169ca1f9cc99623376b7081e15afd
parent 714047 c7fb60750317924ef59c9c18a2cce27d36d287ea
child 714049 22f1456ecd1c4c7380193429aaa886fca2e8cc97
push id93827
push userbmo:cfu@mozilla.com
push dateThu, 21 Dec 2017 16:43:05 +0000
bugs1413780
milestone59.0a1
Bug 1413780 - Hide canvas permission from site information panel when privacy.resistFingerprinting is false. MozReview-Commit-ID: JlCICwM4dVA
browser/modules/SitePermissions.jsm
--- a/browser/modules/SitePermissions.jsm
+++ b/browser/modules/SitePermissions.jsm
@@ -173,16 +173,23 @@ this.SitePermissions = {
       let permission = permissions.getNext();
 
       // filter out unknown permissions
       if (gPermissionObject[permission.type]) {
         // XXX Bug 1303108 - Control Center should only show non-default permissions
         if (permission.type == "install") {
           continue;
         }
+
+        // Hide canvas permission when privacy.resistFingerprinting is false.
+        if ((permission.type == "canvas/extractData") &&
+            !Services.prefs.getBoolPref("privacy.resistFingerprinting")) {
+          continue;
+        }
+
         let scope = this.SCOPE_PERSISTENT;
         if (permission.expireType == Services.perms.EXPIRE_SESSION) {
           scope = this.SCOPE_SESSION;
         }
         result.push({
           id: permission.type,
           scope,
           state: permission.capability,
@@ -259,17 +266,24 @@ this.SitePermissions = {
   },
 
   /**
    * Gets an array of all permission IDs.
    *
    * @return {Array<String>} an array of all permission IDs.
    */
   listPermissions() {
-    return Object.keys(gPermissionObject);
+    let permissions = Object.keys(gPermissionObject);
+
+    // Hide canvas permission when privacy.resistFingerprinting is false.
+    if (!Services.prefs.getBoolPref("privacy.resistFingerprinting")) {
+      permissions = permissions.filter(permission => permission !== "canvas/extractData");
+    }
+
+    return permissions;
   },
 
   /**
    * Returns an array of permission states to be exposed to the user for a
    * permission with the given ID.
    *
    * @param {string} permissionID
    *        The ID to get permission states for.