Bug 1413780 - Change permission name from canvas/extractData to canvas. draft
authorChung-Sheng Fu <cfu@mozilla.com>
Thu, 14 Dec 2017 15:59:57 -0600
changeset 714051 667fa5042ac9dffeed70387055ec35a9e4b5fa39
parent 714050 f17943712e32e8a4b9a0703e550f67a4d3f57cde
child 744501 8f424cc751ce2a385f628f2f1889541c1ea26194
push id93827
push userbmo:cfu@mozilla.com
push dateThu, 21 Dec 2017 16:43:05 +0000
bugs1413780
milestone59.0a1
Bug 1413780 - Change permission name from canvas/extractData to canvas. MozReview-Commit-ID: 40mesFLeRWU
browser/base/content/browser.js
browser/base/content/browser.xul
browser/base/content/test/permissions/browser_canvas_fingerprinting_resistance.js
browser/modules/SitePermissions.jsm
browser/modules/test/unit/test_SitePermissions.js
browser/themes/shared/notification-icons.inc.css
dom/canvas/CanvasUtils.cpp
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6602,17 +6602,17 @@ var CanvasPermissionPromptHelper = {
     if (gBrowser.selectedBrowser !== browser) {
       // Must belong to some other window.
       return;
     }
 
     let message = gNavigatorBundle.getFormattedString("canvas.siteprompt", [ uri.asciiHost ]);
 
     function setCanvasPermission(aURI, aPerm, aPersistent) {
-      Services.perms.add(aURI, "canvas/extractData", aPerm,
+      Services.perms.add(aURI, "canvas", aPerm,
                           aPersistent ? Ci.nsIPermissionManager.EXPIRE_NEVER
                                       : Ci.nsIPermissionManager.EXPIRE_SESSION);
     }
 
     let mainAction = {
       label: gNavigatorBundle.getString("canvas.allow"),
       accessKey: gNavigatorBundle.getString("canvas.allow.accesskey"),
       callback(state) {
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -810,17 +810,17 @@
                   <image data-permission-id="microphone" class="blocked-permission-icon microphone-icon" role="button"
                          tooltiptext="&urlbar.microphoneBlocked.tooltip;"/>
                   <image data-permission-id="screen" class="blocked-permission-icon screen-icon" role="button"
                          tooltiptext="&urlbar.screenBlocked.tooltip;"/>
                   <image data-permission-id="persistent-storage" class="blocked-permission-icon persistent-storage-icon" role="button"
                          tooltiptext="&urlbar.persistentStorageBlocked.tooltip;"/>
                   <image data-permission-id="popup" class="blocked-permission-icon popup-icon" role="button"
                          tooltiptext="&urlbar.popupBlocked.tooltip;"/>
-                  <image data-permission-id="canvas/extractData" class="blocked-permission-icon canvas/extractData-icon" role="button"
+                  <image data-permission-id="canvas" class="blocked-permission-icon canvas-icon" role="button"
                          tooltiptext="&urlbar.canvasBlocked.tooltip;"/>
                 </box>
                 <box id="notification-popup-box"
                      hidden="true"
                      onmouseover="document.getElementById('identity-box').classList.add('no-hover');"
                      onmouseout="document.getElementById('identity-box').classList.remove('no-hover');"
                      align="center">
                   <image id="default-notification-icon" class="notification-anchor-icon" role="button"
--- a/browser/base/content/test/permissions/browser_canvas_fingerprinting_resistance.js
+++ b/browser/base/content/test/permissions/browser_canvas_fingerprinting_resistance.js
@@ -3,17 +3,17 @@
  * required for canvas data extraction.
  * This tests whether the site permission prompt for canvas data extraction
  * works properly.
  */
 "use strict";
 
 const kUrl = "https://example.com/";
 const kPrincipal = Services.scriptSecurityManager.createCodebasePrincipal(Services.io.newURI(kUrl), {});
-const kPermission = "canvas/extractData";
+const kPermission = "canvas";
 
 function initTab() {
   let contentWindow = content.wrappedJSObject;
 
   let drawCanvas = (fillStyle, id) => {
     let contentDocument = contentWindow.document;
     let width = 64, height = 64;
     let canvas = contentDocument.createElement("canvas");
--- a/browser/modules/SitePermissions.jsm
+++ b/browser/modules/SitePermissions.jsm
@@ -175,17 +175,17 @@ this.SitePermissions = {
       // 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") &&
+        if ((permission.type == "canvas") &&
             !Services.prefs.getBoolPref("privacy.resistFingerprinting")) {
           continue;
         }
 
         let scope = this.SCOPE_PERSISTENT;
         if (permission.expireType == Services.perms.EXPIRE_SESSION) {
           scope = this.SCOPE_SESSION;
         }
@@ -270,17 +270,17 @@ this.SitePermissions = {
    *
    * @return {Array<String>} an array of all permission IDs.
    */
   listPermissions() {
     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");
+      permissions = permissions.filter(permission => permission !== "canvas");
     }
 
     return permissions;
   },
 
   /**
    * Returns an array of permission states to be exposed to the user for a
    * permission with the given ID.
@@ -641,18 +641,17 @@ var gPermissionObject = {
   "persistent-storage": {
     exactHostMatch: true
   },
 
   "shortcuts": {
     states: [ SitePermissions.ALLOW, SitePermissions.BLOCK ],
   },
 
-  "canvas/extractData": {
-    labelID: "canvas"
+  "canvas": {
   },
 };
 
 // Delete this entry while being pre-off
 // or the persistent-storage permission would appear in Page info's Permission section
 if (!Services.prefs.getBoolPref("browser.storageManager.enabled")) {
   delete gPermissionObject["persistent-storage"];
 }
--- a/browser/modules/test/unit/test_SitePermissions.js
+++ b/browser/modules/test/unit/test_SitePermissions.js
@@ -16,17 +16,17 @@ add_task(async function testPermissionsL
     // The persistent-storage permission is still only pref-on on Nightly
     // so we add it only when it's pref-on.
     // Should remove this checking and add it as default after it is fully pref-on.
     expectedPermissions.push("persistent-storage");
   }
   if (RESIST_FINGERPRINTING_ENABLED) {
     // Canvas permission should be hidden unless privacy.resistFingerprinting
     // is true.
-    expectedPermissions.push("canvas/extractData");
+    expectedPermissions.push("canvas");
   }
   Assert.deepEqual(SitePermissions.listPermissions().sort(), expectedPermissions.sort(),
     "Correct list of all permissions");
 });
 
 add_task(async function testGetAllByURI() {
   // check that it returns an empty array on an invalid URI
   // like a file URI, which doesn't support site permissions
@@ -112,17 +112,17 @@ add_task(async function testExactHostMat
     // The persistent-storage permission is still only pref-on on Nightly
     // so we add it only when it's pref-on.
     // Should remove this checking and add it as default after it is fully pref-on.
     exactHostMatched.push("persistent-storage");
   }
   if (RESIST_FINGERPRINTING_ENABLED) {
     // Canvas permission should be hidden unless privacy.resistFingerprinting
     // is true.
-    exactHostMatched.push("canvas/extractData");
+    exactHostMatched.push("canvas");
   }
   let nonExactHostMatched = ["image", "cookie", "popup", "install", "shortcuts"];
 
   let permissions = SitePermissions.listPermissions();
   for (let permission of permissions) {
     SitePermissions.set(uri, permission, SitePermissions.ALLOW);
 
     if (exactHostMatched.includes(permission)) {
@@ -198,24 +198,24 @@ add_task(function* testDefaultPrefs() {
     scope: SitePermissions.SCOPE_PERSISTENT,
   });
 });
 
 add_task(async function testCanvasPermission() {
   let resistFingerprinting = Services.prefs.getBoolPref("privacy.resistFingerprinting", false);
   let uri = Services.io.newURI("https://example.com");
 
-  SitePermissions.set(uri, "canvas/extractData", SitePermissions.ALLOW);
+  SitePermissions.set(uri, "canvas", SitePermissions.ALLOW);
 
   // Canvas permission is hidden when privacy.resistFingerprinting is false.
   Services.prefs.setBoolPref("privacy.resistFingerprinting", false);
-  Assert.equal(SitePermissions.listPermissions().indexOf("canvas/extractData"), -1);
-  Assert.equal(SitePermissions.getAllByURI(uri).filter(permission => permission.id === "canvas/extractData").length, 0);
+  Assert.equal(SitePermissions.listPermissions().indexOf("canvas"), -1);
+  Assert.equal(SitePermissions.getAllByURI(uri).filter(permission => permission.id === "canvas").length, 0);
 
   // Canvas permission is visible when privacy.resistFingerprinting is true.
   Services.prefs.setBoolPref("privacy.resistFingerprinting", true);
-  Assert.notEqual(SitePermissions.listPermissions().indexOf("canvas/extractData"), -1);
-  Assert.notEqual(SitePermissions.getAllByURI(uri).filter(permission => permission.id === "canvas/extractData").length, 0);
+  Assert.notEqual(SitePermissions.listPermissions().indexOf("canvas"), -1);
+  Assert.notEqual(SitePermissions.getAllByURI(uri).filter(permission => permission.id === "canvas").length, 0);
 
-  SitePermissions.remove(uri, "canvas/extractData");
+  SitePermissions.remove(uri, "canvas");
   Services.prefs.setBoolPref("privacy.resistFingerprinting", resistFingerprinting);
 });
 
--- a/browser/themes/shared/notification-icons.inc.css
+++ b/browser/themes/shared/notification-icons.inc.css
@@ -110,21 +110,21 @@
 }
 
 .screen-icon.blocked-permission-icon {
   list-style-image: url(chrome://browser/skin/notification-icons/screen-blocked.svg);
 }
 
 #canvas-notification-icon,
 .popup-notification-icon[popupid="canvas-permissions-prompt"],
-.canvas\/extractData-icon {
+.canvas-icon {
   list-style-image: url(chrome://browser/skin/notification-icons/canvas.svg);
 }
 
-.canvas\/extractData-icon.blocked-permission-icon {
+.canvas-icon.blocked-permission-icon {
   list-style-image: url(chrome://browser/skin/notification-icons/canvas-blocked.svg);
 }
 
 #webRTC-preview:not([hidden]) {
   display: -moz-stack;
   border-radius: 4px;
   border: 1px solid GrayText;
   overflow: hidden;
--- a/dom/canvas/CanvasUtils.cpp
+++ b/dom/canvas/CanvasUtils.cpp
@@ -31,17 +31,17 @@
 #include "mozIThirdPartyUtil.h"
 #include "nsContentUtils.h"
 #include "nsUnicharUtils.h"
 #include "nsPrintfCString.h"
 #include "nsIConsoleService.h"
 #include "jsapi.h"
 
 #define TOPIC_CANVAS_PERMISSIONS_PROMPT "canvas-permissions-prompt"
-#define PERMISSION_CANVAS_EXTRACT_DATA "canvas/extractData"
+#define PERMISSION_CANVAS_EXTRACT_DATA "canvas"
 
 using namespace mozilla::gfx;
 
 namespace mozilla {
 namespace CanvasUtils {
 
 bool IsImageExtractionAllowed(nsIDocument *aDocument, JSContext *aCx)
 {