Bug 1179718 - Rename CheckPermissions to CheckAnyPermissions. r=bz
authorKan-Ru Chen <kanru@kanru.info>
Tue, 14 Jul 2015 10:25:26 +0800
changeset 272410 4dd71c32a6cb0e4dbf10350bf65d63bda844cb3b
parent 272409 009f8711fd6c454bb7e9e5c80bd1bd728e462b6a
child 272411 9e203617e1e7ed4914133928570942650b97fcde
push id5067
push userraliiev@mozilla.com
push dateMon, 21 Sep 2015 14:04:52 +0000
treeherdermozilla-esr52@14221ffe5b2f [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersbz
bugs1179718
milestone42.0a1
Bug 1179718 - Rename CheckPermissions to CheckAnyPermissions. r=bz
dom/bindings/BindingUtils.cpp
dom/bindings/BindingUtils.h
dom/bindings/Codegen.py
dom/bindings/Configuration.py
dom/bindings/DOMJSClass.h
dom/bindings/parser/WebIDL.py
dom/webidl/AVInputPort.webidl
dom/webidl/AlarmsManager.webidl
dom/webidl/Apps.webidl
dom/webidl/BeforeAfterKeyboardEvent.webidl
dom/webidl/BluetoothAdapter.webidl
dom/webidl/BluetoothAdapter2.webidl
dom/webidl/BluetoothAdapterEvent.webidl
dom/webidl/BluetoothAttributeEvent.webidl
dom/webidl/BluetoothClassOfDevice.webidl
dom/webidl/BluetoothDevice.webidl
dom/webidl/BluetoothDevice2.webidl
dom/webidl/BluetoothDeviceEvent.webidl
dom/webidl/BluetoothDiscoveryHandle.webidl
dom/webidl/BluetoothDiscoveryStateChangedEvent.webidl
dom/webidl/BluetoothGatt.webidl
dom/webidl/BluetoothGattCharacteristic.webidl
dom/webidl/BluetoothGattCharacteristicEvent.webidl
dom/webidl/BluetoothGattDescriptor.webidl
dom/webidl/BluetoothGattService.webidl
dom/webidl/BluetoothLeDeviceEvent.webidl
dom/webidl/BluetoothManager.webidl
dom/webidl/BluetoothManager2.webidl
dom/webidl/BluetoothPairingEvent.webidl
dom/webidl/BluetoothPairingHandle.webidl
dom/webidl/BluetoothPairingListener.webidl
dom/webidl/BluetoothStatusChangedEvent.webidl
dom/webidl/BrowserElement.webidl
dom/webidl/BrowserElementAudioChannel.webidl
dom/webidl/DOMMobileMessageError.webidl
dom/webidl/DisplayPortInputPort.webidl
dom/webidl/DownloadEvent.webidl
dom/webidl/Downloads.webidl
dom/webidl/EngineeringMode.webidl
dom/webidl/ExternalAppEvent.webidl
dom/webidl/HDMIInputPort.webidl
dom/webidl/HTMLExtAppElement.webidl
dom/webidl/IccCardLockError.webidl
dom/webidl/IccChangeEvent.webidl
dom/webidl/InputPort.webidl
dom/webidl/InputPortManager.webidl
dom/webidl/MMICall.webidl
dom/webidl/MozCellBroadcast.webidl
dom/webidl/MozCellBroadcastEvent.webidl
dom/webidl/MozCellBroadcastMessage.webidl
dom/webidl/MozIcc.webidl
dom/webidl/MozIccInfo.webidl
dom/webidl/MozIccManager.webidl
dom/webidl/MozMessageDeletedEvent.webidl
dom/webidl/MozMmsEvent.webidl
dom/webidl/MozMobileConnection.webidl
dom/webidl/MozMobileMessageManager.webidl
dom/webidl/MozNFC.webidl
dom/webidl/MozNFCPeer.webidl
dom/webidl/MozNFCPeerEvent.webidl
dom/webidl/MozNFCTagEvent.webidl
dom/webidl/MozNetworkStats.webidl
dom/webidl/MozNetworkStatsAlarm.webidl
dom/webidl/MozNetworkStatsData.webidl
dom/webidl/MozNetworkStatsInterface.webidl
dom/webidl/MozSettingsTransactionEvent.webidl
dom/webidl/MozSmsEvent.webidl
dom/webidl/MozStkCommandEvent.webidl
dom/webidl/MozVoicemail.webidl
dom/webidl/MozVoicemailEvent.webidl
dom/webidl/MozVoicemailStatus.webidl
dom/webidl/Navigator.webidl
dom/webidl/PermissionSettings.webidl
dom/webidl/PhoneNumberService.webidl
dom/webidl/PresentationDeviceInfoManager.webidl
dom/webidl/RequestSyncManager.webidl
dom/webidl/ResourceStats.webidl
dom/webidl/ResourceStatsManager.webidl
dom/webidl/SecureElement.webidl
dom/webidl/SecureElementManager.webidl
dom/webidl/SimplePushManager.webidl
dom/webidl/SystemUpdate.webidl
dom/webidl/TVChannel.webidl
dom/webidl/TVCurrentChannelChangedEvent.webidl
dom/webidl/TVCurrentSourceChangedEvent.webidl
dom/webidl/TVEITBroadcastedEvent.webidl
dom/webidl/TVManager.webidl
dom/webidl/TVProgram.webidl
dom/webidl/TVScanningStateChangedEvent.webidl
dom/webidl/TVSource.webidl
dom/webidl/TVTuner.webidl
dom/webidl/UDPMessageEvent.webidl
dom/webidl/UDPSocket.webidl
dom/webidl/USSDReceivedEvent.webidl
dom/webidl/USSDSession.webidl
--- a/dom/bindings/BindingUtils.cpp
+++ b/dom/bindings/BindingUtils.cpp
@@ -2410,17 +2410,17 @@ EnumerateGlobal(JSContext* aCx, JS::Hand
   MOZ_ASSERT(JS_IsGlobalObject(aObj),
              "Should have a global here, since we plan to enumerate standard "
              "classes!");
 
   return JS_EnumerateStandardClasses(aCx, aObj);
 }
 
 bool
-CheckPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[])
+CheckAnyPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[])
 {
   JS::Rooted<JSObject*> rootedObj(aCx, aObj);
   nsPIDOMWindow* window = xpc::WindowGlobalOrNull(rootedObj);
   if (!window) {
     return false;
   }
 
   nsCOMPtr<nsIPermissionManager> permMgr = services::GetPermissionManager();
--- a/dom/bindings/BindingUtils.h
+++ b/dom/bindings/BindingUtils.h
@@ -3089,17 +3089,17 @@ GlobalPropertiesAreOwn()
 void
 AssertReturnTypeMatchesJitinfo(const JSJitInfo* aJitinfo,
                                JS::Handle<JS::Value> aValue);
 #endif
 
 // Returns true if aObj's global has any of the permissions named in aPermissions
 // set to nsIPermissionManager::ALLOW_ACTION. aPermissions must be null-terminated.
 bool
-CheckPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[]);
+CheckAnyPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[]);
 
 // Returns true if aObj's global has all of the permissions named in aPermissions
 // set to nsIPermissionManager::ALLOW_ACTION. aPermissions must be null-terminated.
 bool
 CheckAllPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[]);
 
 // This function is called by the bindings layer for methods/getters/setters
 // that are not safe to be called in prerendering mode.  It checks to make sure
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -1890,43 +1890,43 @@ def getAvailableInTestFunc(obj):
 
 class MemberCondition:
     """
     An object representing the condition for a member to actually be
     exposed.  Any of pref, func, and available can be None.  If not
     None, they should be strings that have the pref name (for "pref")
     or function name (for "func" and "available").
     """
-    def __init__(self, pref, func, available=None, checkPermissions=None, checkAllPermissions=None):
+    def __init__(self, pref, func, available=None, checkAnyPermissions=None, checkAllPermissions=None):
         assert pref is None or isinstance(pref, str)
         assert func is None or isinstance(func, str)
         assert available is None or isinstance(available, str)
-        assert checkPermissions is None or isinstance(checkPermissions, int)
+        assert checkAnyPermissions is None or isinstance(checkAnyPermissions, int)
         assert checkAllPermissions is None or isinstance(checkAllPermissions, int)
         self.pref = pref
 
         def toFuncPtr(val):
             if val is None:
                 return "nullptr"
             return "&" + val
         self.func = toFuncPtr(func)
         self.available = toFuncPtr(available)
-        if checkPermissions is None:
-            self.checkPermissions = "nullptr"
-        else:
-            self.checkPermissions = "permissions_%i" % checkPermissions
+        if checkAnyPermissions is None:
+            self.checkAnyPermissions = "nullptr"
+        else:
+            self.checkAnyPermissions = "anypermissions_%i" % checkAnyPermissions
         if checkAllPermissions is None:
             self.checkAllPermissions = "nullptr"
         else:
             self.checkAllPermissions = "allpermissions_%i" % checkAllPermissions
 
     def __eq__(self, other):
         return (self.pref == other.pref and self.func == other.func and
                 self.available == other.available and
-                self.checkPermissions == other.checkPermissions and
+                self.checkAnyPermissions == other.checkAnyPermissions and
                 self.checkAllPermissions == other.checkAllPermissions)
 
     def __ne__(self, other):
         return not self.__eq__(other)
 
 
 class PropertyDefiner:
     """
@@ -1985,17 +1985,17 @@ class PropertyDefiner:
 
     @staticmethod
     def getControllingCondition(interfaceMember, descriptor):
         return MemberCondition(PropertyDefiner.getStringAttr(interfaceMember,
                                                              "Pref"),
                                PropertyDefiner.getStringAttr(interfaceMember,
                                                              "Func"),
                                getAvailableInTestFunc(interfaceMember),
-                               descriptor.checkPermissionsIndicesForMembers.get(interfaceMember.identifier.name),
+                               descriptor.checkAnyPermissionsIndicesForMembers.get(interfaceMember.identifier.name),
                                descriptor.checkAllPermissionsIndicesForMembers.get(interfaceMember.identifier.name))
 
     def generatePrefableArray(self, array, name, specFormatter, specTerminator,
                               specType, getCondition, getDataTuple, doIdArrays):
         """
         This method generates our various arrays.
 
         array is an array of interface members as passed to generateArray
@@ -2038,17 +2038,17 @@ class PropertyDefiner:
             if condition.pref is not None:
                 props.prefCacheData.append(
                     (condition.pref,
                      prefCacheTemplate % (name, len(prefableSpecs))))
             # Set up pointers to the new sets of specs inside prefableSpecs
             prefableSpecs.append(prefableTemplate %
                                  (condition.func,
                                   condition.available,
-                                  condition.checkPermissions,
+                                  condition.checkAnyPermissions,
                                   condition.checkAllPermissions,
                                   name + "_specs", len(specs)))
 
         switchToCondition(self, lastCondition)
 
         for member in array:
             curCondition = getCondition(member, self.descriptor)
             if lastCondition != curCondition:
@@ -3170,19 +3170,19 @@ class CGConstructorEnabled(CGAbstractMet
             conditions.append("nsContentUtils::ThreadsafeIsCallerChrome()")
         func = iface.getExtendedAttribute("Func")
         if func:
             assert isinstance(func, list) and len(func) == 1
             conditions.append("%s(aCx, aObj)" % func[0])
         availableIn = getAvailableInTestFunc(iface)
         if availableIn:
             conditions.append("%s(aCx, aObj)" % availableIn)
-        checkPermissions = self.descriptor.checkPermissionsIndex
-        if checkPermissions is not None:
-            conditions.append("CheckPermissions(aCx, aObj, permissions_%i)" % checkPermissions)
+        checkAnyPermissions = self.descriptor.checkAnyPermissionsIndex
+        if checkAnyPermissions is not None:
+            conditions.append("CheckAnyPermissions(aCx, aObj, anypermissions_%i)" % checkAnyPermissions)
         checkAllPermissions = self.descriptor.checkAllPermissionsIndex
         if checkAllPermissions is not None:
             conditions.append("CheckAllPermissions(aCx, aObj, allpermissions_%i)" % checkAllPermissions)
         # We should really have some conditions
         assert len(body) or len(conditions)
 
         conditionsWrapper = ""
         if len(conditions):
@@ -11442,17 +11442,17 @@ class CGDescriptor(CGThing):
 
             # Always have a finalize hook, regardless of whether the class
             # wants a custom hook.
             cgThings.append(CGClassFinalizeHook(descriptor))
 
         if descriptor.concrete and descriptor.wrapperCache:
             cgThings.append(CGClassObjectMovedHook(descriptor))
 
-        for name in ["permissions", "allpermissions"]:
+        for name in ["anypermissions", "allpermissions"]:
             permissions = getattr(descriptor, name)
             if len(permissions):
                 for (k, v) in sorted(permissions.items()):
                     perms = CGList((CGGeneric('"%s",' % p) for p in k), joiner="\n")
                     perms.append(CGGeneric("nullptr"))
                     cgThings.append(CGWrapper(CGIndenter(perms),
                                               pre="static const char* const %s_%i[] = {\n" % (name, v),
                                               post="\n};\n",
--- a/dom/bindings/Configuration.py
+++ b/dom/bindings/Configuration.py
@@ -541,73 +541,73 @@ class Descriptor(DescriptorProvider):
             for attribute in ['implicitJSContext']:
                 addExtendedAttribute(attribute, desc.get(attribute, {}))
 
         self._binaryNames = desc.get('binaryNames', {})
         self._binaryNames.setdefault('__legacycaller', 'LegacyCall')
         self._binaryNames.setdefault('__stringifier', 'Stringify')
 
         if not self.interface.isExternal():
-            self.permissions = dict()
+            self.anypermissions = dict()
             self.allpermissions = dict()
 
             # Adds a permission list to this descriptor and returns the index to use.
             def addPermissions(ifaceOrMember, attribute):
                 if attribute == "CheckAllPermissions":
                     permissions = self.allpermissions
                 else:
-                    permissions = self.permissions
+                    permissions = self.anypermissions
 
                 checkPermissions = ifaceOrMember.getExtendedAttribute(attribute)
                 if checkPermissions is None:
                     return None
 
                 # It's a list of whitespace-separated strings
                 assert(len(checkPermissions) is 1)
                 assert(checkPermissions[0] is not None)
                 checkPermissions = checkPermissions[0]
                 permissionsList = checkPermissions.split()
                 if len(permissionsList) == 0:
                     raise TypeError("Need at least one permission name for %s" % attribute)
 
                 permissionsList = tuple(sorted(set(permissionsList)))
                 return permissions.setdefault(permissionsList, len(permissions))
 
-            self.checkPermissionsIndex = addPermissions(self.interface, "CheckPermissions")
-            self.checkPermissionsIndicesForMembers = dict()
+            self.checkAnyPermissionsIndex = addPermissions(self.interface, "CheckAnyPermissions")
+            self.checkAnyPermissionsIndicesForMembers = dict()
             self.checkAllPermissionsIndex = addPermissions(self.interface, "CheckAllPermissions")
             self.checkAllPermissionsIndicesForMembers = dict()
             for m in self.interface.members:
-                permissionsIndex = addPermissions(m, "CheckPermissions")
+                permissionsIndex = addPermissions(m, "CheckAnyPermissions")
                 if permissionsIndex is not None:
-                    self.checkPermissionsIndicesForMembers[m.identifier.name] = permissionsIndex
+                    self.checkAnyPermissionsIndicesForMembers[m.identifier.name] = permissionsIndex
                 allpermissionsIndex = addPermissions(m, "CheckAllPermissions")
                 if allpermissionsIndex is not None:
                     self.checkAllPermissionsIndicesForMembers[m.identifier.name] = allpermissionsIndex
 
             def isTestInterface(iface):
                 return (iface.identifier.name in ["TestInterface",
                                                   "TestJSImplInterface",
                                                   "TestRenamedInterface"])
 
             self.featureDetectibleThings = set()
             if not isTestInterface(self.interface):
-                if (self.interface.getExtendedAttribute("CheckPermissions") or
+                if (self.interface.getExtendedAttribute("CheckAnyPermissions") or
                     self.interface.getExtendedAttribute("CheckAllPermissions") or
                     self.interface.getExtendedAttribute("AvailableIn") == "PrivilegedApps"):
                     if self.interface.getNavigatorProperty():
                         self.featureDetectibleThings.add("Navigator.%s" % self.interface.getNavigatorProperty())
                     else:
                         iface = self.interface.identifier.name
                         self.featureDetectibleThings.add(iface)
                         for m in self.interface.members:
                             self.featureDetectibleThings.add("%s.%s" % (iface, m.identifier.name))
 
                 for m in self.interface.members:
-                    if (m.getExtendedAttribute("CheckPermissions") or
+                    if (m.getExtendedAttribute("CheckAnyPermissions") or
                         m.getExtendedAttribute("CheckAllPermissions") or
                         m.getExtendedAttribute("AvailableIn") == "PrivilegedApps"):
                         self.featureDetectibleThings.add("%s.%s" % (self.interface.identifier.name, m.identifier.name))
 
             for member in self.interface.members:
                 if not member.isAttr() and not member.isMethod():
                     continue
                 binaryName = member.getExtendedAttribute("BinaryName")
--- a/dom/bindings/DOMJSClass.h
+++ b/dom/bindings/DOMJSClass.h
@@ -35,17 +35,17 @@ typedef bool
                        JS::MutableHandle<JSPropertyDescriptor> desc);
 
 typedef bool
 (* EnumerateOwnProperties)(JSContext* cx, JS::Handle<JSObject*> wrapper,
                            JS::Handle<JSObject*> obj,
                            JS::AutoIdVector& props);
 
 bool
-CheckPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[]);
+CheckAnyPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[]);
 
 bool
 CheckAllPermissions(JSContext* aCx, JSObject* aObj, const char* const aPermissions[]);
 
 struct ConstantSpec
 {
   const char* name;
   JS::Value value;
@@ -54,30 +54,30 @@ struct ConstantSpec
 typedef bool (*PropertyEnabled)(JSContext* cx, JSObject* global);
 
 template<typename T>
 struct Prefable {
   inline bool isEnabled(JSContext* cx, JS::Handle<JSObject*> obj) const {
     if (!enabled) {
       return false;
     }
-    if (!enabledFunc && !availableFunc && !checkPermissions && !checkAllPermissions) {
+    if (!enabledFunc && !availableFunc && !checkAnyPermissions && !checkAllPermissions) {
       return true;
     }
     if (enabledFunc &&
         !enabledFunc(cx, js::GetGlobalForObjectCrossCompartment(obj))) {
       return false;
     }
     if (availableFunc &&
         !availableFunc(cx, js::GetGlobalForObjectCrossCompartment(obj))) {
       return false;
     }
-    if (checkPermissions &&
-        !CheckPermissions(cx, js::GetGlobalForObjectCrossCompartment(obj),
-                          checkPermissions)) {
+    if (checkAnyPermissions &&
+        !CheckAnyPermissions(cx, js::GetGlobalForObjectCrossCompartment(obj),
+                             checkAnyPermissions)) {
       return false;
     }
     if (checkAllPermissions &&
         !CheckAllPermissions(cx, js::GetGlobalForObjectCrossCompartment(obj),
                              checkAllPermissions)) {
       return false;
     }
     return true;
@@ -89,17 +89,17 @@ struct Prefable {
   // even if "enabled" is set to true.  If the pointer is null the value of
   // "enabled" is used as-is unless availableFunc overrides.
   PropertyEnabled enabledFunc;
   // A function pointer to a function that can be used to disable a
   // property even if "enabled" is true and enabledFunc allowed.  This
   // is basically a hack to avoid having to codegen PropertyEnabled
   // implementations in case when we need to do two separate checks.
   PropertyEnabled availableFunc;
-  const char* const* checkPermissions;
+  const char* const* checkAnyPermissions;
   const char* const* checkAllPermissions;
   // Array of specs, terminated in whatever way is customary for T.
   // Null to indicate a end-of-array for Prefable, when such an
   // indicator is needed.
   const T* specs;
 };
 
 struct NativeProperties
--- a/dom/bindings/parser/WebIDL.py
+++ b/dom/bindings/parser/WebIDL.py
@@ -1129,17 +1129,17 @@ class IDLInterface(IDLObjectWithScope, I
                         raise WebIDLError("[Alias] must not be used on a "
                                           "[Global] interface operation",
                                           [member.location])
                     if (member.getExtendedAttribute("Exposed") or
                         member.getExtendedAttribute("ChromeOnly") or
                         member.getExtendedAttribute("Pref") or
                         member.getExtendedAttribute("Func") or
                         member.getExtendedAttribute("AvailableIn") or
-                        member.getExtendedAttribute("CheckPermissions") or
+                        member.getExtendedAttribute("CheckAnyPermissions") or
                         member.getExtendedAttribute("CheckAllPermissions")):
                         raise WebIDLError("[Alias] must not be used on a "
                                           "conditionally exposed operation",
                                           [member.location])
                     if member.isStatic():
                         raise WebIDLError("[Alias] must not be used on a "
                                           "static operation",
                                           [member.location])
@@ -1162,17 +1162,17 @@ class IDLInterface(IDLObjectWithScope, I
                                               [member.location, m.location])
 
         if (self.getExtendedAttribute("Pref") and
             self._exposureGlobalNames != set([self.parentScope.primaryGlobalName])):
             raise WebIDLError("[Pref] used on an interface that is not %s-only" %
                               self.parentScope.primaryGlobalName,
                               [self.location])
 
-        for attribute in ["CheckPermissions", "CheckAllPermissions"]:
+        for attribute in ["CheckAnyPermissions", "CheckAllPermissions"]:
             if (self.getExtendedAttribute(attribute) and
                 self._exposureGlobalNames != set([self.parentScope.primaryGlobalName])):
                 raise WebIDLError("[%s] used on an interface that is "
                                   "not %s-only" %
                                   (attribute, self.parentScope.primaryGlobalName),
                                   [self.location])
 
         # Conditional exposure makes no sense for interfaces with no
@@ -1382,17 +1382,17 @@ class IDLInterface(IDLObjectWithScope, I
                 convertExposedAttrToGlobalNameSet(attr,
                                                   self._exposureGlobalNames)
             elif (identifier == "Pref" or
                   identifier == "JSImplementation" or
                   identifier == "HeaderFile" or
                   identifier == "NavigatorProperty" or
                   identifier == "AvailableIn" or
                   identifier == "Func" or
-                  identifier == "CheckPermissions" or
+                  identifier == "CheckAnyPermissions" or
                   identifier == "CheckAllPermissions"):
                 # Known extended attributes that take a string value
                 if not attr.hasValue():
                     raise WebIDLError("[%s] must have a value" % identifier,
                                       [attr.location])
             else:
                 raise WebIDLError("Unknown extended attribute %s on interface" % identifier,
                                   [attr.location])
@@ -1511,17 +1511,17 @@ class IDLInterface(IDLObjectWithScope, I
     def hasMembersInSlots(self):
         return self._ownMembersInSlots != 0
 
     def isExposedConditionally(self):
         return (self.getExtendedAttribute("Pref") or
                 self.getExtendedAttribute("ChromeOnly") or
                 self.getExtendedAttribute("Func") or
                 self.getExtendedAttribute("AvailableIn") or
-                self.getExtendedAttribute("CheckPermissions") or
+                self.getExtendedAttribute("CheckAnyPermissions") or
                 self.getExtendedAttribute("CheckAllPermissions"))
 
 class IDLDictionary(IDLObjectWithScope):
     def __init__(self, location, parentScope, name, parent, members):
         assert isinstance(parentScope, IDLScope)
         assert isinstance(name, IDLUnresolvedIdentifier)
         assert not parent or isinstance(parent, IDLIdentifierPlaceholder)
 
@@ -3360,17 +3360,17 @@ class IDLInterfaceMember(IDLObjectWithId
 
     def validate(self):
         if (self.getExtendedAttribute("Pref") and
             self.exposureSet != set([self._globalScope.primaryGlobalName])):
             raise WebIDLError("[Pref] used on an interface member that is not "
                               "%s-only" % self._globalScope.primaryGlobalName,
                               [self.location])
 
-        for attribute in ["CheckPermissions", "CheckAllPermissions"]:
+        for attribute in ["CheckAnyPermissions", "CheckAllPermissions"]:
             if (self.getExtendedAttribute(attribute) and
                 self.exposureSet != set([self._globalScope.primaryGlobalName])):
                 raise WebIDLError("[%s] used on an interface member that is "
                                   "not %s-only" %
                                   (attribute, self.parentScope.primaryGlobalName),
                                   [self.location])
 
         if self.isAttr() or self.isMethod():
@@ -3707,17 +3707,17 @@ class IDLConst(IDLInterfaceMember):
     def handleExtendedAttribute(self, attr):
         identifier = attr.identifier()
         if identifier == "Exposed":
             convertExposedAttrToGlobalNameSet(attr, self._exposureGlobalNames)
         elif (identifier == "Pref" or
               identifier == "ChromeOnly" or
               identifier == "Func" or
               identifier == "AvailableIn" or
-              identifier == "CheckPermissions" or
+              identifier == "CheckAnyPermissions" or
               identifier == "CheckAllPermissions"):
             # Known attributes that we don't need to do anything with here
             pass
         else:
             raise WebIDLError("Unknown extended attribute %s on constant" % identifier,
                               [attr.location])
         IDLInterfaceMember.handleExtendedAttribute(self, attr)
 
@@ -3975,17 +3975,17 @@ class IDLAttribute(IDLInterfaceMember):
               identifier == "Throws" or
               identifier == "GetterThrows" or
               identifier == "ChromeOnly" or
               identifier == "Func" or
               identifier == "Frozen" or
               identifier == "AvailableIn" or
               identifier == "NewObject" or
               identifier == "UnsafeInPrerendering" or
-              identifier == "CheckPermissions" or
+              identifier == "CheckAnyPermissions" or
               identifier == "CheckAllPermissions" or
               identifier == "BinaryName"):
             # Known attributes that we don't need to do anything with here
             pass
         else:
             raise WebIDLError("Unknown extended attribute %s on attribute" % identifier,
                               [attr.location])
         IDLInterfaceMember.handleExtendedAttribute(self, attr)
@@ -4651,17 +4651,17 @@ class IDLMethod(IDLInterfaceMember, IDLS
         elif (identifier == "Throws" or
               identifier == "NewObject" or
               identifier == "ChromeOnly" or
               identifier == "UnsafeInPrerendering" or
               identifier == "Pref" or
               identifier == "Deprecated" or
               identifier == "Func" or
               identifier == "AvailableIn" or
-              identifier == "CheckPermissions" or
+              identifier == "CheckAnyPermissions" or
               identifier == "CheckAllPermissions" or
               identifier == "BinaryName" or
               identifier == "MethodIdentityTestable" or
               identifier == "StaticClassOverride"):
             # Known attributes that we don't need to do anything with here
             pass
         else:
             raise WebIDLError("Unknown extended attribute %s on method" % identifier,
--- a/dom/webidl/AVInputPort.webidl
+++ b/dom/webidl/AVInputPort.webidl
@@ -1,9 +1,9 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[Pref="dom.inputport.enabled", CheckPermissions="inputport", AvailableIn=CertifiedApps]
+[Pref="dom.inputport.enabled", CheckAnyPermissions="inputport", AvailableIn=CertifiedApps]
  interface AVInputPort : InputPort {
  };
--- a/dom/webidl/AlarmsManager.webidl
+++ b/dom/webidl/AlarmsManager.webidl
@@ -3,17 +3,17 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * https://wiki.mozilla.org/WebAPI/AlarmAPI
  */
 
 [NavigatorProperty="mozAlarms",
  JSImplementation="@mozilla.org/alarmsManager;1",
- CheckPermissions="alarms",
+ CheckAnyPermissions="alarms",
  Pref="dom.mozAlarms.enabled"]
 interface AlarmsManager {
   DOMRequest getAll();
   [UnsafeInPrerendering]
   DOMRequest add(any date, DOMString respectTimezone, optional any data);
   [UnsafeInPrerendering]
   void remove(unsigned long id);
 };
--- a/dom/webidl/Apps.webidl
+++ b/dom/webidl/Apps.webidl
@@ -19,17 +19,17 @@ enum LocaleResourceType {
   "binary",
   "json",
   "text"
 };
 
 [NoInterfaceObject, NavigatorProperty="mozApps",
  JSImplementation="@mozilla.org/webapps;1"]
 interface DOMApplicationsRegistry {
-  [CheckPermissions="webapps-manage homescreen-webapps-manage"]
+  [CheckAnyPermissions="webapps-manage homescreen-webapps-manage"]
   readonly attribute DOMApplicationsManager mgmt;
   DOMRequest install(DOMString url, optional InstallParameters params);
   DOMRequest installPackage(DOMString url, optional InstallParameters params);
   DOMRequest getSelf();
   DOMRequest getInstalled();
   DOMRequest checkInstalled(DOMString manifestUrl);
 
   // Language pack API.
@@ -111,32 +111,32 @@ interface DOMApplication : EventTarget {
   // a langpack if one is available.
   Promise<DOMString> getLocalizedValue(DOMString property,
                                        DOMString locale,
                                        optional DOMString entryPoint);
 };
 
 [JSImplementation="@mozilla.org/webapps/manager;1",
  ChromeOnly,
- CheckPermissions="webapps-manage homescreen-webapps-manage"]
+ CheckAnyPermissions="webapps-manage homescreen-webapps-manage"]
 interface DOMApplicationsManager : EventTarget {
   DOMRequest getAll();
 
-  [CheckPermissions="webapps-manage"]
+  [CheckAnyPermissions="webapps-manage"]
   DOMRequest getNotInstalled();
-  [CheckPermissions="webapps-manage"]
+  [CheckAnyPermissions="webapps-manage"]
   void applyDownload(DOMApplication app);
   DOMRequest uninstall(DOMApplication app);
 
-  [CheckPermissions="webapps-manage"]
+  [CheckAnyPermissions="webapps-manage"]
   Promise<DOMApplication> import(Blob blob);
-  [CheckPermissions="webapps-manage"]
+  [CheckAnyPermissions="webapps-manage"]
   Promise<any> extractManifest(Blob blob);
 
-  [CheckPermissions="webapps-manage"]
+  [CheckAnyPermissions="webapps-manage"]
   void setEnabled(DOMApplication app, boolean state);
   Promise<Blob> getIcon(DOMApplication app, DOMString iconID,
                         optional DOMString entryPoint);
 
   attribute EventHandler oninstall;
   attribute EventHandler onuninstall;
   attribute EventHandler onenabledstatechange;
 };
--- a/dom/webidl/BeforeAfterKeyboardEvent.webidl
+++ b/dom/webidl/BeforeAfterKeyboardEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString typeArg,
  optional BeforeAfterKeyboardEventInit eventInitDict),
- CheckPermissions="embed-apps before-after-keyboard-event",
+ CheckAnyPermissions="embed-apps before-after-keyboard-event",
  Pref="dom.beforeAfterKeyboardEvent.enabled"]
 interface BeforeAfterKeyboardEvent : KeyboardEvent
 {
   // The valid value of embeddedCancelled is:
   // - "mozbrowserbeforekeydown": null
   // - "mozbrowserbeforekeyup": null
   // - "mozbrowserafterkeydown": true/false
   // - "mozbrowserafterkeyup": true/false
--- a/dom/webidl/BluetoothAdapter.webidl
+++ b/dom/webidl/BluetoothAdapter.webidl
@@ -27,17 +27,17 @@ dictionary MediaPlayStatus
   // current track length (ms)
   long long   duration = -1;
   // playing time (ms)
   long long   position = -1;
   // one of 'STOPPED'/'PLAYING'/'PAUSED'/'FWD_SEEK'/'REV_SEEK'/'ERROR'
   DOMString   playStatus = "";
 };
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothAdapter : EventTarget {
   readonly attribute DOMString      address;
   readonly attribute unsigned long  class;
   readonly attribute boolean        discovering;
   readonly attribute DOMString      name;
   readonly attribute boolean        discoverable;
   readonly attribute unsigned long  discoverableTimeout; // in seconds
 
--- a/dom/webidl/BluetoothAdapter2.webidl
+++ b/dom/webidl/BluetoothAdapter2.webidl
@@ -27,17 +27,17 @@ dictionary MediaPlayStatus
   // current track length (ms)
   long long   duration = -1;
   // playing time (ms)
   long long   position = -1;
   // one of 'STOPPED'/'PLAYING'/'PAUSED'/'FWD_SEEK'/'REV_SEEK'/'ERROR'
   DOMString   playStatus = "";
 };
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothAdapter : EventTarget {
   readonly attribute BluetoothAdapterState  state;
   [AvailableIn=CertifiedApps]
   readonly attribute DOMString              address;
   readonly attribute DOMString              name;
   readonly attribute boolean                discoverable;
   readonly attribute boolean                discovering;
 
--- a/dom/webidl/BluetoothAdapterEvent.webidl
+++ b/dom/webidl/BluetoothAdapterEvent.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="bluetooth",
+[CheckAnyPermissions="bluetooth",
  Constructor(DOMString type, optional BluetoothAdapterEventInit eventInitDict)]
 interface BluetoothAdapterEvent : Event
 {
   readonly attribute BluetoothAdapter? adapter;
   readonly attribute DOMString?        address;
 };
 
 dictionary BluetoothAdapterEventInit : EventInit
--- a/dom/webidl/BluetoothAttributeEvent.webidl
+++ b/dom/webidl/BluetoothAttributeEvent.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="bluetooth",
+[CheckAnyPermissions="bluetooth",
  Constructor(DOMString type,
              optional BluetoothAttributeEventInit eventInitDict)]
 interface BluetoothAttributeEvent : Event
 {
   [Cached, Constant]
   readonly attribute sequence<DOMString> attrs;
 };
 
--- a/dom/webidl/BluetoothClassOfDevice.webidl
+++ b/dom/webidl/BluetoothClassOfDevice.webidl
@@ -1,14 +1,14 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothClassOfDevice
 {
   /**
    * The following constants are defined in Assigned Numbers of bluetooth
    * General Access Profile (GAP) spec. For more information see
    *   https://www.bluetooth.org/en-us/specification/assigned-numbers/baseband
    */
 
--- a/dom/webidl/BluetoothDevice.webidl
+++ b/dom/webidl/BluetoothDevice.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothDevice : EventTarget {
   readonly attribute DOMString      address;
   readonly attribute DOMString      name;
   readonly attribute DOMString      icon;
   readonly attribute boolean        connected;
   readonly attribute boolean        paired;
   readonly attribute unsigned long  class;
 
--- a/dom/webidl/BluetoothDevice2.webidl
+++ b/dom/webidl/BluetoothDevice2.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothDevice : EventTarget
 {
   readonly attribute DOMString              address;
   readonly attribute BluetoothClassOfDevice cod;
   readonly attribute DOMString              name;
   readonly attribute boolean                paired;
   readonly attribute BluetoothDeviceType    type;
 
--- a/dom/webidl/BluetoothDeviceEvent.webidl
+++ b/dom/webidl/BluetoothDeviceEvent.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="bluetooth",
+[CheckAnyPermissions="bluetooth",
  Constructor(DOMString type, optional BluetoothDeviceEventInit eventInitDict)]
 interface BluetoothDeviceEvent : Event
 {
   readonly attribute BluetoothDevice? device;
   readonly attribute DOMString?       address;
 };
 
 dictionary BluetoothDeviceEventInit : EventInit
--- a/dom/webidl/BluetoothDiscoveryHandle.webidl
+++ b/dom/webidl/BluetoothDiscoveryHandle.webidl
@@ -1,9 +1,9 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothDiscoveryHandle : EventTarget {
   attribute EventHandler ondevicefound;
 };
--- a/dom/webidl/BluetoothDiscoveryStateChangedEvent.webidl
+++ b/dom/webidl/BluetoothDiscoveryStateChangedEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type,
              optional BluetoothDiscoveryStateChangedEventInit eventInitDict),
- CheckPermissions="bluetooth"]
+ CheckAnyPermissions="bluetooth"]
 interface BluetoothDiscoveryStateChangedEvent : Event
 {
     readonly attribute boolean discovering;
 };
 
 dictionary BluetoothDiscoveryStateChangedEventInit : EventInit
 {
     boolean discovering = false;
--- a/dom/webidl/BluetoothGatt.webidl
+++ b/dom/webidl/BluetoothGatt.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothGatt : EventTarget
 {
   [Cached, Pure]
   readonly attribute sequence<BluetoothGattService> services;
   readonly attribute BluetoothConnectionState       connectionState;
 
   // Fired when the value of any characteristic changed
            attribute EventHandler                   oncharacteristicchanged;
--- a/dom/webidl/BluetoothGattCharacteristic.webidl
+++ b/dom/webidl/BluetoothGattCharacteristic.webidl
@@ -11,17 +11,17 @@ dictionary GattCharacteristicProperties
   required boolean writeNoResponse;
   required boolean write;
   required boolean notify;
   required boolean indicate;
   required boolean signedWrite;
   required boolean extendedProps;
 };
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothGattCharacteristic
 {
   readonly attribute BluetoothGattService                   service;
   [Cached, Pure]
   readonly attribute sequence<BluetoothGattDescriptor>      descriptors;
 
   readonly attribute DOMString                              uuid;
   readonly attribute unsigned short                         instanceId;
--- a/dom/webidl/BluetoothGattCharacteristicEvent.webidl
+++ b/dom/webidl/BluetoothGattCharacteristicEvent.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="bluetooth",
+[CheckAnyPermissions="bluetooth",
  Constructor(DOMString type,
              optional BluetoothGattCharacteristicEventInit eventInitDict)]
 interface BluetoothGattCharacteristicEvent : Event
 {
   readonly attribute BluetoothGattCharacteristic? characteristic;
 };
 
 dictionary BluetoothGattCharacteristicEventInit : EventInit
--- a/dom/webidl/BluetoothGattDescriptor.webidl
+++ b/dom/webidl/BluetoothGattDescriptor.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothGattDescriptor
 {
   readonly attribute BluetoothGattCharacteristic            characteristic;
   readonly attribute DOMString                              uuid;
   readonly attribute ArrayBuffer?                           value;
 
   [NewObject]
   Promise<ArrayBuffer>  readValue();
--- a/dom/webidl/BluetoothGattService.webidl
+++ b/dom/webidl/BluetoothGattService.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothGattService
 {
   [Cached, Pure]
   readonly attribute sequence<BluetoothGattCharacteristic>  characteristics;
   [Cached, Pure]
   readonly attribute sequence<BluetoothGattService>         includedServices;
 
   readonly attribute boolean                                isPrimary;
--- a/dom/webidl/BluetoothLeDeviceEvent.webidl
+++ b/dom/webidl/BluetoothLeDeviceEvent.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="bluetooth",
+[CheckAnyPermissions="bluetooth",
  Constructor(DOMString type, optional BluetoothLeDeviceEventInit eventInitDict)]
 interface BluetoothLeDeviceEvent : Event
 {
   readonly attribute BluetoothDevice? device;
   readonly attribute short rssi;
   [Throws]
   readonly attribute ArrayBuffer? scanRecord;
 };
--- a/dom/webidl/BluetoothManager.webidl
+++ b/dom/webidl/BluetoothManager.webidl
@@ -1,14 +1,14 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothManager : EventTarget {
   [Throws]
   readonly attribute boolean      enabled;
 
            attribute EventHandler onenabled;
            attribute EventHandler ondisabled;
            attribute EventHandler onadapteradded;
 
--- a/dom/webidl/BluetoothManager2.webidl
+++ b/dom/webidl/BluetoothManager2.webidl
@@ -1,14 +1,14 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothManager: EventTarget
 {
   readonly attribute BluetoothAdapter? defaultAdapter;
 
   // Fired when attribute(s) of BluetoothManager changed
            attribute EventHandler onattributechanged;
 
   // Fired when a new adapter is plugged in
--- a/dom/webidl/BluetoothPairingEvent.webidl
+++ b/dom/webidl/BluetoothPairingEvent.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="bluetooth",
+[CheckAnyPermissions="bluetooth",
  Constructor(DOMString type,
              optional BluetoothPairingEventInit eventInitDict)]
 interface BluetoothPairingEvent : Event
 {
   readonly attribute DOMString               deviceName;
   readonly attribute BluetoothPairingHandle? handle;
 };
 
--- a/dom/webidl/BluetoothPairingHandle.webidl
+++ b/dom/webidl/BluetoothPairingHandle.webidl
@@ -1,14 +1,14 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[CheckPermissions="bluetooth"]
+[CheckAnyPermissions="bluetooth"]
 interface BluetoothPairingHandle
 {
   /**
    * A 6-digit string ranging from decimal 000000 to 999999.
    * This attribute is an empty string for enterpincodereq and
    * pairingconsentreq.
    */
   readonly attribute DOMString passkey;
--- a/dom/webidl/BluetoothPairingListener.webidl
+++ b/dom/webidl/BluetoothPairingListener.webidl
@@ -1,13 +1,13 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
-[AvailableIn=CertifiedApps, CheckPermissions="bluetooth"]
+[AvailableIn=CertifiedApps, CheckAnyPermissions="bluetooth"]
 interface BluetoothPairingListener: EventTarget
 {
   attribute EventHandler ondisplaypasskeyreq;
   attribute EventHandler onenterpincodereq;
   attribute EventHandler onpairingconfirmationreq;
   attribute EventHandler onpairingconsentreq;
 };
--- a/dom/webidl/BluetoothStatusChangedEvent.webidl
+++ b/dom/webidl/BluetoothStatusChangedEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type,
              optional BluetoothStatusChangedEventInit eventInitDict),
- CheckPermissions="bluetooth"]
+ CheckAnyPermissions="bluetooth"]
 interface BluetoothStatusChangedEvent : Event
 {
   readonly attribute DOMString address;
   readonly attribute boolean status;
 };
 
 dictionary BluetoothStatusChangedEventInit : EventInit
 {
--- a/dom/webidl/BrowserElement.webidl
+++ b/dom/webidl/BrowserElement.webidl
@@ -25,155 +25,155 @@ interface BrowserElement {
 
 BrowserElement implements BrowserElementCommon;
 BrowserElement implements BrowserElementPrivileged;
 
 [NoInterfaceObject]
 interface BrowserElementCommon {
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser embed-widgets"]
+   CheckAnyPermissions="browser embed-widgets"]
   void setVisible(boolean visible);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser embed-widgets"]
+   CheckAnyPermissions="browser embed-widgets"]
   DOMRequest getVisible();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser embed-widgets"]
+   CheckAnyPermissions="browser embed-widgets"]
   void setActive(boolean active);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser embed-widgets"]
+   CheckAnyPermissions="browser embed-widgets"]
   boolean getActive();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser embed-widgets"]
+   CheckAnyPermissions="browser embed-widgets"]
   void addNextPaintListener(BrowserElementNextPaintEventCallback listener);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser embed-widgets"]
+   CheckAnyPermissions="browser embed-widgets"]
   void removeNextPaintListener(BrowserElementNextPaintEventCallback listener);
 };
 
 [NoInterfaceObject]
 interface BrowserElementPrivileged {
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void sendMouseEvent(DOMString type,
                       unsigned long x,
                       unsigned long y,
                       unsigned long button,
                       unsigned long clickCount,
                       unsigned long modifiers);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
    Func="TouchEvent::PrefEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void sendTouchEvent(DOMString type,
                       sequence<unsigned long> identifiers,
                       sequence<long> x,
                       sequence<long> y,
                       sequence<unsigned long> rx,
                       sequence<unsigned long> ry,
                       sequence<float> rotationAngles,
                       sequence<float> forces,
                       unsigned long count,
                       unsigned long modifiers);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void goBack();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void goForward();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void reload(optional boolean hardReload = false);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void stop();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest download(DOMString url,
                       optional BrowserElementDownloadOptions options);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest purgeHistory();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest getScreenshot([EnforceRange] unsigned long width,
                            [EnforceRange] unsigned long height,
                            optional DOMString mimeType="");
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void zoom(float zoom);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest getCanGoBack();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest getCanGoForward();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest getContentDimensions();
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
    CheckAllPermissions="browser input-manage"]
   DOMRequest setInputMethodActive(boolean isActive);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
    CheckAllPermissions="browser setNFCFocus"]
   void setNFCFocus(boolean isFocus);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void findAll(DOMString searchString, BrowserFindCaseSensitivity caseSensitivity);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void findNext(BrowserFindDirection direction);
 
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   void clearMatch();
 
   // Additional |browser:universalxss| permission is required for executeScript API
   [Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   DOMRequest executeScript(DOMString script,
                            optional BrowserElementExecuteScriptOptions options);
 
 };
--- a/dom/webidl/BrowserElementAudioChannel.webidl
+++ b/dom/webidl/BrowserElementAudioChannel.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.mozBrowserFramesEnabled",
- CheckPermissions="browser"]
+ CheckAnyPermissions="browser"]
 interface BrowserElementAudioChannel : EventTarget {
   readonly attribute AudioChannel name;
 
   // This event is dispatched when this audiochannel is actually in used by the
   // app or one of the sub-iframes.
   attribute EventHandler onactivestatechanged;
 
   [Throws]
@@ -27,11 +27,11 @@ interface BrowserElementAudioChannel : E
 
   [Throws]
   DOMRequest isActive();
 };
 
 partial interface BrowserElementPrivileged {
   [Pure, Cached, Throws,
    Pref="dom.mozBrowserFramesEnabled",
-   CheckPermissions="browser"]
+   CheckAnyPermissions="browser"]
   readonly attribute sequence<BrowserElementAudioChannel> allowedAudioChannels;
 };
--- a/dom/webidl/DOMMobileMessageError.webidl
+++ b/dom/webidl/DOMMobileMessageError.webidl
@@ -1,12 +1,12 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.sms.enabled",
- CheckPermissions="sms",
+ CheckAnyPermissions="sms",
  AvailableIn="CertifiedApps"]
 interface DOMMobileMessageError : DOMError {
   readonly attribute (MozSmsMessage or MozMmsMessage) data;
 };
--- a/dom/webidl/DisplayPortInputPort.webidl
+++ b/dom/webidl/DisplayPortInputPort.webidl
@@ -1,9 +1,9 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[Pref="dom.inputport.enabled", CheckPermissions="inputport", AvailableIn=CertifiedApps]
+[Pref="dom.inputport.enabled", CheckAnyPermissions="inputport", AvailableIn=CertifiedApps]
  interface DisplayPortInputPort : InputPort {
  };
--- a/dom/webidl/DownloadEvent.webidl
+++ b/dom/webidl/DownloadEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional DownloadEventInit eventInitDict),
  Pref="dom.mozDownloads.enabled",
- CheckPermissions="downloads"]
+ CheckAnyPermissions="downloads"]
 interface DownloadEvent : Event
 {
   readonly attribute DOMDownload? download;
 };
 
 dictionary DownloadEventInit : EventInit
 {
   DOMDownload? download = null;
--- a/dom/webidl/Downloads.webidl
+++ b/dom/webidl/Downloads.webidl
@@ -14,17 +14,17 @@ enum DownloadState {
   "downloading",
   "stopped",
   "succeeded",
   "finalized"
 };
 
 //
 // XXXTODO: When we have a generic way to do feature detection in marketplace
-//          we will *STOP* using the pref and use CheckPermissions like 
+//          we will *STOP* using the pref and use CheckAnyPermissions like 
 //          DOMDownload and DownloadEvent.
 //
 [NoInterfaceObject,
  NavigatorProperty="mozDownloadManager",
  JSImplementation="@mozilla.org/downloads/manager;1",
  Pref="dom.mozDownloads.enabled"]
 interface DOMDownloadManager : EventTarget {
   // This promise returns an array of downloads with all the current
@@ -64,17 +64,17 @@ interface DOMDownloadManager : EventTarg
   Promise<DOMDownload> adoptDownload(optional AdoptDownloadDict download);
 
   // Fires when a new download starts.
   attribute EventHandler ondownloadstart;
 };
 
 [JSImplementation="@mozilla.org/downloads/download;1",
  Pref="dom.mozDownloads.enabled",
- CheckPermissions="downloads"]
+ CheckAnyPermissions="downloads"]
 interface DOMDownload : EventTarget {
   // The full size of the resource.
   readonly attribute long long totalBytes;
 
   // The number of bytes that we have currently downloaded.
   readonly attribute long long currentBytes;
 
   // The url of the resource.
--- a/dom/webidl/EngineeringMode.webidl
+++ b/dom/webidl/EngineeringMode.webidl
@@ -1,13 +1,13 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 [JSImplementation="@mozilla.org/dom/engineering-mode-api;1",
  NavigatorProperty="engineeringMode",
  AvailableIn=CertifiedApps,
- CheckPermissions="engineering-mode"]
+ CheckAnyPermissions="engineering-mode"]
 interface EngineeringMode : EventTarget {
   Promise<DOMString> getValue(DOMString name);
   Promise<void> setValue(DOMString name, DOMString value);
   attribute EventHandler onmessage;
 };
--- a/dom/webidl/ExternalAppEvent.webidl
+++ b/dom/webidl/ExternalAppEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional ExternalAppEventInit eventInitDict),
- CheckPermissions="external-app"]
+ CheckAnyPermissions="external-app"]
 interface ExternalAppEvent : Event
 {
   readonly attribute DOMString data;
 };
 
 dictionary ExternalAppEventInit : EventInit
 {
   DOMString data = "";
--- a/dom/webidl/HDMIInputPort.webidl
+++ b/dom/webidl/HDMIInputPort.webidl
@@ -1,9 +1,9 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[Pref="dom.inputport.enabled", CheckPermissions="inputport", AvailableIn=CertifiedApps]
+[Pref="dom.inputport.enabled", CheckAnyPermissions="inputport", AvailableIn=CertifiedApps]
  interface HDMIInputPort : InputPort {
  };
--- a/dom/webidl/HTMLExtAppElement.webidl
+++ b/dom/webidl/HTMLExtAppElement.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="external-app"]
+[CheckAnyPermissions="external-app"]
 interface HTMLExtAppElement : HTMLElement {
   // Gets the value of the property from a property bag
   // that was provided to the external application.
   DOMString getCustomProperty(DOMString name);
 
   // Posts a message to the external application.
   [Throws]
   void postMessage(DOMString name);
--- a/dom/webidl/IccCardLockError.webidl
+++ b/dom/webidl/IccCardLockError.webidl
@@ -1,12 +1,12 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString errorName, short retryCount),
  Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps"]
 interface IccCardLockError : DOMError {
   readonly attribute short retryCount;
 };
--- a/dom/webidl/IccChangeEvent.webidl
+++ b/dom/webidl/IccChangeEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps",
  Constructor(DOMString type, optional IccChangeEventInit eventInitDict)]
 interface IccChangeEvent : Event
 {
   readonly attribute DOMString iccId;
 };
 
 dictionary IccChangeEventInit : EventInit
--- a/dom/webidl/InputPort.webidl
+++ b/dom/webidl/InputPort.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * Reference https://wiki.mozilla.org/Input_Port_API#Basic_Port_Interface
  */
 
-[Pref="dom.inputport.enabled", CheckPermissions="inputport", AvailableIn=CertifiedApps]
+[Pref="dom.inputport.enabled", CheckAnyPermissions="inputport", AvailableIn=CertifiedApps]
 interface InputPort : EventTarget {
   readonly attribute DOMString id;
   readonly attribute MediaStream stream;
   readonly attribute boolean connected;
   attribute EventHandler onconnect;
   attribute EventHandler ondisconnect;
 };
--- a/dom/webidl/InputPortManager.webidl
+++ b/dom/webidl/InputPortManager.webidl
@@ -1,13 +1,13 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * Reference https://wiki.mozilla.org/Input_Port_API#InputPortManager
  */
 
-[Pref="dom.inputport.enabled", CheckPermissions="inputport", AvailableIn=CertifiedApps]
+[Pref="dom.inputport.enabled", CheckAnyPermissions="inputport", AvailableIn=CertifiedApps]
  interface InputPortManager {
    [Throws]
    Promise<sequence<InputPort>> getInputPorts();
  };
--- a/dom/webidl/MMICall.webidl
+++ b/dom/webidl/MMICall.webidl
@@ -1,13 +1,13 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.telephony.enabled",
- CheckPermissions="telephony",
+ CheckAnyPermissions="telephony",
  AvailableIn="CertifiedApps"]
 interface MMICall {
   [Throws]
   readonly attribute Promise<MozMMIResult> result;
 };
--- a/dom/webidl/MozCellBroadcast.webidl
+++ b/dom/webidl/MozCellBroadcast.webidl
@@ -4,17 +4,17 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * Cell Broadcast short message service (CBS) permits a number of
  * unacknowledged general CBS messages to be broadcast to all receivers within
  * a particular region.
  */
 [Pref="dom.cellbroadcast.enabled",
- CheckPermissions="cellbroadcast",
+ CheckAnyPermissions="cellbroadcast",
  AvailableIn="CertifiedApps"]
 interface MozCellBroadcast : EventTarget
 {
   /**
    * Cell Broadcast messages received.
    */
   attribute EventHandler onreceived;
 };
--- a/dom/webidl/MozCellBroadcastEvent.webidl
+++ b/dom/webidl/MozCellBroadcastEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional MozCellBroadcastEventInit eventInitDict),
  Pref="dom.cellbroadcast.enabled",
- CheckPermissions="cellbroadcast",
+ CheckAnyPermissions="cellbroadcast",
  AvailableIn="CertifiedApps"]
 interface MozCellBroadcastEvent : Event
 {
   readonly attribute MozCellBroadcastMessage? message;
 };
 
 dictionary MozCellBroadcastEventInit : EventInit
 {
--- a/dom/webidl/MozCellBroadcastMessage.webidl
+++ b/dom/webidl/MozCellBroadcastMessage.webidl
@@ -7,17 +7,17 @@
 enum CellBroadcastGsmGeographicalScope {"cell-immediate", "plmn",
                                         "location-area", "cell"};
 enum CellBroadcastMessageClass {"class-0", "class-1", "class-2",
                                 "class-3", "user-1", "user-2", "normal"};
 enum CellBroadcastEtwsWarningType {"earthquake", "tsunami",
                                    "earthquake-tsunami", "test", "other"};
 
 [Pref="dom.cellbroadcast.enabled",
- CheckPermissions="cellbroadcast",
+ CheckAnyPermissions="cellbroadcast",
  AvailableIn="CertifiedApps"]
 interface MozCellBroadcastMessage
 {
   /**
    * The Service Id in the device where the message is received from.
    */
   readonly attribute unsigned long serviceId;
 
@@ -70,17 +70,17 @@ interface MozCellBroadcastMessage
 
   /**
    * Service Category.
    */
   readonly attribute unsigned short? cdmaServiceCategory;
 };
 
 [Pref="dom.cellbroadcast.enabled",
- CheckPermissions="cellbroadcast",
+ CheckAnyPermissions="cellbroadcast",
  AvailableIn="CertifiedApps"]
 interface MozCellBroadcastEtwsInfo
 {
   /**
    * Warning type. Possible values are "earthquake", "tsunami",
    * "earthquake-tsunami", "test" and "other".
    */
   readonly attribute CellBroadcastEtwsWarningType? warningType;
--- a/dom/webidl/MozIcc.webidl
+++ b/dom/webidl/MozIcc.webidl
@@ -135,17 +135,17 @@ dictionary IccCardLockStatus
 };
 
 dictionary IccCardLockRetryCount
 {
   long retryCount; // The number of remaining retries. -1 if unkown.
 };
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps"]
 interface MozIcc : EventTarget
 {
   // Integrated Circuit Card Information.
 
   /**
    * Information stored in the device's ICC.
    *
--- a/dom/webidl/MozIccInfo.webidl
+++ b/dom/webidl/MozIccInfo.webidl
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 enum IccType {"sim", "usim", "csim", "ruim"};
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps"]
 interface MozIccInfo {
   /**
    * Integrated Circuit Card Type.
    */
   readonly attribute IccType? iccType;
 
   /**
@@ -40,28 +40,28 @@ interface MozIccInfo {
 
   /**
    * Service provider name must be a part of displayed carrier name.
    */
   readonly attribute boolean isDisplaySpnRequired;
 };
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps"]
 interface MozGsmIccInfo : MozIccInfo {
   /**
    * Mobile Station ISDN Number (MSISDN) of the subscriber, aka
    * his phone number.
    */
   readonly attribute DOMString? msisdn;
 };
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps"]
 interface MozCdmaIccInfo : MozIccInfo {
   /**
    * Mobile Directory Number (MDN) of the subscriber, aka his phone number.
    */
   readonly attribute DOMString? mdn;
 
   /**
--- a/dom/webidl/MozIccManager.webidl
+++ b/dom/webidl/MozIccManager.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps"]
 interface MozIccManager : EventTarget
 {
   /**
    * STK menu presentation types.
    */
   const unsigned short STK_MENU_TYPE_NOT_SPECIFIED      = 0x00;
   const unsigned short STK_MENU_TYPE_DATA_VALUES        = 0x01;
--- a/dom/webidl/MozMessageDeletedEvent.webidl
+++ b/dom/webidl/MozMessageDeletedEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.sms.enabled",
- CheckPermissions="sms",
+ CheckAnyPermissions="sms",
  AvailableIn="CertifiedApps",
  Constructor(DOMString type, optional MozMessageDeletedEventInit eventInitDict)]
 interface MozMessageDeletedEvent : Event
 {
   // Array of deleted message ids.
   [Cached, Constant] readonly attribute sequence<long>? deletedMessageIds;
   // Array of deleted thread ids.
   [Cached, Constant] readonly attribute sequence<unsigned long long>? deletedThreadIds;
--- a/dom/webidl/MozMmsEvent.webidl
+++ b/dom/webidl/MozMmsEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 interface MozMmsMessage;
 
 [Pref="dom.sms.enabled",
- CheckPermissions="sms",
+ CheckAnyPermissions="sms",
  AvailableIn="CertifiedApps",
  Constructor(DOMString type, optional MozMmsEventInit eventInitDict)]
 interface MozMmsEvent : Event
 {
   readonly attribute MozMmsMessage? message;
 };
 
 dictionary MozMmsEventInit : EventInit
--- a/dom/webidl/MozMobileConnection.webidl
+++ b/dom/webidl/MozMobileConnection.webidl
@@ -68,104 +68,104 @@ interface MozMobileConnection : EventTar
   const long CLIR_DEFAULT     = 0;
   const long CLIR_INVOCATION  = 1;
   const long CLIR_SUPPRESSION = 2;
 
   /**
    * These two fields can be accessed by privileged applications with the
    * 'mobilenetwork' permission.
    */
-  [CheckPermissions="mobilenetwork"]
+  [CheckAnyPermissions="mobilenetwork"]
   readonly attribute DOMString lastKnownNetwork;
-  [CheckPermissions="mobilenetwork"]
+  [CheckAnyPermissions="mobilenetwork"]
   readonly attribute DOMString lastKnownHomeNetwork;
 
   /**
    * Information about the voice connection.
    */
-  [CheckPermissions="mobileconnection"]
+  [CheckAnyPermissions="mobileconnection"]
   readonly attribute MozMobileConnectionInfo voice;
 
   /**
    * Information about the data connection.
    */
-  [CheckPermissions="mobileconnection"]
+  [CheckAnyPermissions="mobileconnection"]
   readonly attribute MozMobileConnectionInfo data;
 
   /**
    * Integrated Circuit Card Identifier of the SIM this mobile connection
    * corresponds to.
    */
-  [CheckPermissions="mobileconnection"]
+  [CheckAnyPermissions="mobileconnection"]
   readonly attribute DOMString? iccId;
 
   /**
    * The selection mode of the voice and data networks.
    */
-  [CheckPermissions="mobileconnection"]
+  [CheckAnyPermissions="mobileconnection"]
   readonly attribute MobileNetworkSelectionMode? networkSelectionMode;
 
   /**
    * The current radio state.
    */
-  [CheckPermissions="mobileconnection"]
+  [CheckAnyPermissions="mobileconnection"]
   readonly attribute MobileRadioState? radioState;
 
   /**
    * Array of network types that are supported by this radio.
    */
-  [Cached, Pure, CheckPermissions="mobileconnection"]
+  [Cached, Pure, CheckAnyPermissions="mobileconnection"]
   readonly attribute sequence<MobileNetworkType> supportedNetworkTypes;
 
   /**
    * Search for available networks.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called. And the request's
    * result will be an array of MozMobileNetworkInfo.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported', or
    * 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getNetworks();
 
   /**
    * Manually selects the passed in network, overriding the radio's current
    * selection.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called.
    * Note: If the network was actually changed by this request,
    * the 'voicechange' and 'datachange' events will also be fired.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest selectNetwork(MozMobileNetworkInfo network);
 
   /**
    * Tell the radio to automatically select a network.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called.
    * Note: If the network was actually changed by this request, the
    * 'voicechange' and 'datachange' events will also be fired.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest selectNetworkAutomatically();
 
   /**
    * Set preferred network type.
    *
    * @param type
    *        PreferredNetworkType indicates the desired preferred network type.
    *
@@ -173,17 +173,17 @@ interface MozMobileConnection : EventTar
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'ModeNotSupported', 'IllegalSIMorME', or
    * 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setPreferredNetworkType(MobilePreferredNetworkType type);
 
   /**
    * Query current preferred network type.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called. And the request's
@@ -191,50 +191,50 @@ interface MozMobileConnection : EventTar
    * The value will be either 'wcdma/gsm', 'gsm', 'wcdma', 'wcdma/gsm-auto',
    * 'cdma/evdo', 'cdma', 'evdo', 'wcdma/gsm/cdma/evdo', 'lte/cdma/evdo',
    * 'lte/wcdma/gsm', 'lte/wcdma/gsm/cdma/evdo', 'lte' or 'lte/wcdma'.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getPreferredNetworkType();
 
   /**
    * Set roaming preference.
    *
    * @param mode
    *        RoamingPreferenceMode indicates the desired roaming preference.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setRoamingPreference(MobileRoamingMode mode);
 
   /**
    * Query current roaming preference.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called. And the request's
    * result will be a string indicating the current roaming preference.
    * The value will be either 'home', 'affiliated', or 'any'.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getRoamingPreference();
 
   /**
    * Set voice privacy preference.
    *
    * @param enabled
    *        Boolean indicates the preferred voice privacy mode used in voice
    *        scrambling in CDMA networks. 'True' means the enhanced voice security
@@ -243,32 +243,32 @@ interface MozMobileConnection : EventTar
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setVoicePrivacyMode(boolean enabled);
 
   /**
    * Query current voice privacy mode.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called. And the request's
    * result will be a boolean indicating the current voice privacy mode.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getVoicePrivacyMode();
 
   /**
    * Configures call forward options.
    *
    * @param options
    *        An object containing the call forward rule to set.
    * @see MozCallForwardingOptions for the detail of options.
@@ -276,17 +276,17 @@ interface MozMobileConnection : EventTar
    * @return a DOMRequest
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setCallForwardingOption(optional MozCallForwardingOptions options);
 
   /**
    * Queries current call forward options.
    *
    * @param reason
    *        Indicates the reason the call is being forwarded. It shall be one of
    *        the MozMobileConnection.CALL_FORWARD_REASON_* values.
@@ -296,17 +296,17 @@ interface MozMobileConnection : EventTar
    * If successful, the request's onsuccess will be called. And the request's
    * result will be an array of MozCallForwardingOptions.
    * @see MozCallForwardingOptions for the detail of result.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getCallForwardingOption(unsigned short reason);
 
   /**
    * Configures call barring options.
    *
    * @param options
    *        An object containing the call barring rule to set.
    * @see MozCallBarringOptions for the detail of options.
@@ -314,17 +314,17 @@ interface MozMobileConnection : EventTar
    * @return a DOMRequest
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setCallBarringOption(optional MozCallBarringOptions options);
 
   /**
    * Queries current call barring status.
    *
    * @param options
    *        An object containing the call barring rule to query. No need to
    *        specify 'enabled' property.
@@ -336,17 +336,17 @@ interface MozMobileConnection : EventTar
    * result will be an object of MozCallBarringOptions with correct 'enabled'
    * property indicating the status of this rule.
    * @see MozCallBarringOptions for the detail of result.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getCallBarringOption(optional MozCallBarringOptions options);
 
   /**
    * Change call barring facility password.
    *
    * @param options
    *        An object containing information about pin and newPin, and,
    *        this object must have both "pin" and "newPin" attributes
@@ -361,49 +361,49 @@ interface MozMobileConnection : EventTar
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest changeCallBarringPassword(optional MozCallBarringOptions options);
 
   /**
    * Configures call waiting options.
    *
    * @param enabled
    *        Boolean indicates the desired call waiting status.
    *
    * @return a DOMRequest.
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setCallWaitingOption(boolean enabled);
 
   /**
    * Queries current call waiting options.
    *
    * @return a DOMRequest
    *
    * If successful, the request's onsuccess will be called. And the request's
    * result will be a boolean indicating the call waiting status.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getCallWaitingOption();
 
   /**
    * Enables or disables the presentation of the calling line identity (CLI) to
    * the called party when originating a call.
    *
    * @param mode
    *        It shall be one of the MozMobileConnection.CLIR_* values.
@@ -411,47 +411,47 @@ interface MozMobileConnection : EventTar
    * @return a DOMRequest
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'InvalidParameter', 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setCallingLineIdRestriction(unsigned short mode);
 
   /**
    * Queries current CLIR status.
    *
    * @return a DOMRequest
    *
    * If successful, the request's onsuccess will be called. And the request's
    * result will be an object containing containing CLIR 'n' and 'm' parameter.
    * @see MozClirStatus for the detail of result.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest getCallingLineIdRestriction();
 
   /**
    * Exit emergency callback mode.
    *
    * @return a DOMRequest
    *
    * If successful, the request's onsuccess will be called.
    *
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'RadioNotAvailable', 'RequestNotSupported',
    * 'IllegalSIMorME', or 'GenericFailure'.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest exitEmergencyCbMode();
 
   /**
    * Set radio enabled/disabled.
    *
    * @param enabled
    *        True to enable the radio.
    *
@@ -462,17 +462,17 @@ interface MozMobileConnection : EventTar
    * Otherwise, the request's onerror will be called, and the request's error
    * will be either 'InvalidStateError', 'RadioNotAvailable',
    * 'IllegalSIMorME', or 'GenericFailure'.
    *
    * Note: Request is not available when radioState is null, 'enabling', or
    * 'disabling'. Calling the function in above conditions will receive
    * 'InvalidStateError' error.
    */
-  [Throws, CheckPermissions="mobileconnection"]
+  [Throws, CheckAnyPermissions="mobileconnection"]
   DOMRequest setRadioEnabled(boolean enabled);
 
   /**
    * The 'voicechange' event is notified whenever the voice connection object
    * changes.
    */
   attribute EventHandler onvoicechange;
 
--- a/dom/webidl/MozMobileMessageManager.webidl
+++ b/dom/webidl/MozMobileMessageManager.webidl
@@ -110,17 +110,17 @@ dictionary TypeOfAddress {
  * SMSC address.
  */
 dictionary SmscAddress {
   DOMString address;
   TypeOfAddress typeOfAddress;
 };
 
 [Pref="dom.sms.enabled",
- CheckPermissions="sms",
+ CheckAnyPermissions="sms",
  AvailableIn="CertifiedApps"]
 interface MozMobileMessageManager : EventTarget
 {
   [Throws]
   DOMRequest getSegmentInfoForText(DOMString text);
 
   /**
    * Send SMS.
--- a/dom/webidl/MozNFC.webidl
+++ b/dom/webidl/MozNFC.webidl
@@ -30,68 +30,68 @@ enum NfcErrorMessage {
 interface MozNFCManager {
   /**
    * API to check if the given application's manifest
    * URL is registered with the Chrome Process or not.
    *
    * Returns success if given manifestUrl is registered for 'onpeerready',
    * otherwise error
    */
-  [CheckPermissions="nfc-manager", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-manager", AvailableIn=CertifiedApps]
   Promise<boolean> checkP2PRegistration(DOMString manifestUrl);
 
   /**
    * Notify that user has accepted to share nfc message on P2P UI
    */
-  [CheckPermissions="nfc-manager", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-manager", AvailableIn=CertifiedApps]
   void notifyUserAcceptedP2P(DOMString manifestUrl);
 
   /**
    * Notify the status of sendFile operation
    */
-  [CheckPermissions="nfc-manager", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-manager", AvailableIn=CertifiedApps]
   void notifySendFileStatus(octet status, DOMString requestId);
 
   /**
    * Power on the NFC hardware and start polling for NFC tags or devices.
    */
-  [CheckPermissions="nfc-manager", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-manager", AvailableIn=CertifiedApps]
   Promise<void> startPoll();
 
   /**
    * Stop polling for NFC tags or devices. i.e. enter low power mode.
    */
-  [CheckPermissions="nfc-manager", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-manager", AvailableIn=CertifiedApps]
   Promise<void> stopPoll();
 
   /**
    * Power off the NFC hardware.
    */
-  [CheckPermissions="nfc-manager", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-manager", AvailableIn=CertifiedApps]
   Promise<void> powerOff();
 };
 
 [JSImplementation="@mozilla.org/nfc/manager;1",
  NavigatorProperty="mozNfc",
  Func="Navigator::HasNFCSupport",
- CheckPermissions="nfc nfc-share",
+ CheckAnyPermissions="nfc nfc-share",
  AvailableIn="PrivilegedApps",
  UnsafeInPrerendering]
 interface MozNFC : EventTarget {
   /**
    * Indicate if NFC is enabled.
    */
   readonly attribute boolean enabled;
 
   /**
    * This event will be fired when another NFCPeer is detected, and user confirms
    * to share data to the NFCPeer object by calling mozNFC.notifyUserAcceptedP2P.
    * The event will be type of NFCPeerEvent.
    */
-  [CheckPermissions="nfc-share", AvailableIn=CertifiedApps]
+  [CheckAnyPermissions="nfc-share", AvailableIn=CertifiedApps]
   attribute EventHandler onpeerready;
 
   /**
    * This event will be fired when a NFCPeer is detected. The application has to
    * be running on the foreground (decided by System app) to receive this event.
    *
    * The default action of this event is to dispatch the event in System app
    * again, and System app will run the default UX behavior (like vibration).
--- a/dom/webidl/MozNFCPeer.webidl
+++ b/dom/webidl/MozNFCPeer.webidl
@@ -19,17 +19,17 @@ interface MozNFCPeer {
    * Send NDEF data to peer device.
    */
   [Throws]
   Promise<void> sendNDEF(sequence<MozNDEFRecord> records);
 
   /**
    * Send file to peer device.
    */
-  [Throws, CheckPermissions="nfc-share", AvailableIn="CertifiedApps"]
+  [Throws, CheckAnyPermissions="nfc-share", AvailableIn="CertifiedApps"]
   Promise<void> sendFile(Blob blob);
 };
 
 // Mozilla Only
 partial interface MozNFCPeer {
   [ChromeOnly]
   attribute DOMString session;
 
--- a/dom/webidl/MozNFCPeerEvent.webidl
+++ b/dom/webidl/MozNFCPeerEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional MozNFCPeerEventInit eventInitDict),
- Func="Navigator::HasNFCSupport", CheckPermissions="nfc nfc-share",
+ Func="Navigator::HasNFCSupport", CheckAnyPermissions="nfc nfc-share",
  AvailableIn="PrivilegedApps"]
 interface MozNFCPeerEvent : Event
 {
   /**
    * The detected NFCPeer.
    */
   readonly attribute MozNFCPeer? peer;
 };
--- a/dom/webidl/MozNFCTagEvent.webidl
+++ b/dom/webidl/MozNFCTagEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional MozNFCTagEventInit eventInitDict),
- Func="Navigator::HasNFCSupport", CheckPermissions="nfc",
+ Func="Navigator::HasNFCSupport", CheckAnyPermissions="nfc",
  AvailableIn="PrivilegedApps"]
 interface MozNFCTagEvent : Event
 {
   /**
    * The detected NFCTag.
    */
   readonly attribute MozNFCTag? tag;
 
--- a/dom/webidl/MozNetworkStats.webidl
+++ b/dom/webidl/MozNetworkStats.webidl
@@ -28,17 +28,17 @@ dictionary NetworkStatsGetOptions
 dictionary NetworkStatsAlarmOptions
 {
   Date startTime;
   Date data;
 };
 
 [JSImplementation="@mozilla.org/networkstats;1",
  ChromeOnly,
- CheckPermissions="networkstats-manage",
+ CheckAnyPermissions="networkstats-manage",
  Pref="dom.mozNetworkStats.enabled"]
 interface MozNetworkStats {
   /**
    * App manifest URL of an application for specifying the per-app stats of the
    * specified app.
    */
   readonly attribute DOMString    appManifestURL;
 
--- a/dom/webidl/MozNetworkStatsAlarm.webidl
+++ b/dom/webidl/MozNetworkStatsAlarm.webidl
@@ -1,14 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 [JSImplementation="@mozilla.org/networkstatsalarm;1",
  ChromeOnly,
- CheckPermissions="networkstats-manage",
+ CheckAnyPermissions="networkstats-manage",
  Pref="dom.mozNetworkStats.enabled"]
 interface MozNetworkStatsAlarm {
   readonly attribute unsigned long alarmId;
   readonly attribute MozNetworkStatsInterface network;
   readonly attribute long threshold;
   readonly attribute any data;
 };
--- a/dom/webidl/MozNetworkStatsData.webidl
+++ b/dom/webidl/MozNetworkStatsData.webidl
@@ -1,13 +1,13 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 [JSImplementation="@mozilla.org/networkStatsdata;1",
  ChromeOnly,
- CheckPermissions="networkstats-manage",
+ CheckAnyPermissions="networkstats-manage",
  Pref="dom.mozNetworkStats.enabled"]
 interface MozNetworkStatsData {
   readonly attribute unsigned long   rxBytes;   // Received bytes.
   readonly attribute unsigned long   txBytes;   // Sent bytes.
   readonly attribute Date            date;      // Date.
 };
--- a/dom/webidl/MozNetworkStatsInterface.webidl
+++ b/dom/webidl/MozNetworkStatsInterface.webidl
@@ -7,17 +7,17 @@ dictionary NetworkInterface {
   DOMString id;
 };
 
 /**
  * Represents a data interface for which the manager is recording statistics.
  */
 [Constructor(optional NetworkInterface networkinterface),
  JSImplementation="@mozilla.org/networkstatsinterface;1",
- CheckPermissions="networkstats-manage",
+ CheckAnyPermissions="networkstats-manage",
  Pref="dom.mozNetworkStats.enabled"]
 interface MozNetworkStatsInterface {
   readonly attribute long type;
 
   /**
    * Id value is '0' for wifi or the iccid for mobile (SIM).
    */
   readonly attribute DOMString id;
--- a/dom/webidl/MozSettingsTransactionEvent.webidl
+++ b/dom/webidl/MozSettingsTransactionEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional MozSettingsTransactionEventInit eventInitDict),
- CheckPermissions="settings-api-read settings-api-write"]
+ CheckAnyPermissions="settings-api-read settings-api-write"]
 interface MozSettingsTransactionEvent : Event
 {
   readonly attribute DOMString? error;
 };
 
 dictionary MozSettingsTransactionEventInit : EventInit
 {
   DOMString error = "";
--- a/dom/webidl/MozSmsEvent.webidl
+++ b/dom/webidl/MozSmsEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 interface MozSmsMessage;
 
 [Pref="dom.sms.enabled",
- CheckPermissions="sms",
+ CheckAnyPermissions="sms",
  AvailableIn="CertifiedApps",
  Constructor(DOMString type, optional MozSmsEventInit eventInitDict)]
 interface MozSmsEvent : Event
 {
   readonly attribute MozSmsMessage? message;
 };
 
 dictionary MozSmsEventInit : EventInit
--- a/dom/webidl/MozStkCommandEvent.webidl
+++ b/dom/webidl/MozStkCommandEvent.webidl
@@ -50,17 +50,17 @@ dictionary MozStkIconContainer
    *
    * Array of icons, basically of a same image, that may differ in size,
    * resolution or coding scheme. The first icon should be the default one.
    */
   sequence<MozStkIcon> icons;
 };
 
 [Pref="dom.icc.enabled",
- CheckPermissions="mobileconnection",
+ CheckAnyPermissions="mobileconnection",
  AvailableIn="CertifiedApps",
  Constructor(DOMString type, optional MozStkCommandEventInit eventInitDict)]
 interface MozStkCommandEvent : Event
 {
   readonly attribute any command;
 };
 
 dictionary MozStkCommandEventInit : EventInit
--- a/dom/webidl/MozVoicemail.webidl
+++ b/dom/webidl/MozVoicemail.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=40: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 [Pref="dom.voicemail.enabled",
- CheckPermissions="voicemail",
+ CheckAnyPermissions="voicemail",
  AvailableIn="CertifiedApps"]
 interface MozVoicemail : EventTarget
 {
   /**
    * The current voicemail status of a specified service, or null when the
    * status is unknown.
    */
   [Throws]
--- a/dom/webidl/MozVoicemailEvent.webidl
+++ b/dom/webidl/MozVoicemailEvent.webidl
@@ -1,17 +1,17 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Constructor(DOMString type, optional MozVoicemailEventInit eventInitDict),
  Pref="dom.voicemail.enabled",
- CheckPermissions="voicemail",
+ CheckAnyPermissions="voicemail",
  AvailableIn="CertifiedApps"]
 interface MozVoicemailEvent : Event
 {
   readonly attribute MozVoicemailStatus? status;
 };
 
 dictionary MozVoicemailEventInit : EventInit
 {
--- a/dom/webidl/MozVoicemailStatus.webidl
+++ b/dom/webidl/MozVoicemailStatus.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=40: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 [Pref="dom.voicemail.enabled",
- CheckPermissions="voicemail",
+ CheckAnyPermissions="voicemail",
  AvailableIn="CertifiedApps"]
 interface MozVoicemailStatus
 {
   readonly attribute unsigned long serviceId;
 
   /**
    * Whether or not there are messages waiting in the voicemail box
    */
--- a/dom/webidl/Navigator.webidl
+++ b/dom/webidl/Navigator.webidl
@@ -85,20 +85,20 @@ interface NavigatorContentUtils {
 [NoInterfaceObject]
 interface NavigatorStorageUtils {
   // NOT IMPLEMENTED
   //void yieldForStorageUpdates();
 };
 
 [NoInterfaceObject]
 interface NavigatorFeatures {
-  [CheckPermissions="feature-detection", Throws]
+  [CheckAnyPermissions="feature-detection", Throws]
   Promise<any> getFeature(DOMString name);
 
-  [CheckPermissions="feature-detection", Throws]
+  [CheckAnyPermissions="feature-detection", Throws]
   Promise<any> hasFeature(DOMString name);
 };
 
 // Things that definitely need to be in the spec and and are not for some
 // reason.  See https://www.w3.org/Bugs/Public/show_bug.cgi?id=22406
 partial interface Navigator {
   [Throws]
   readonly attribute MimeTypeArray mimeTypes;
@@ -165,18 +165,18 @@ callback interface MozIdleObserver {
 
 #ifdef MOZ_B2G
 dictionary MobileIdOptions {
   boolean forceSelection = false;
 };
 
 [NoInterfaceObject]
 interface NavigatorMobileId {
-    // Ideally we would use [CheckPermissions] here, but the "mobileid"
-    // permission is set to PROMPT_ACTION and [CheckPermissions] only checks
+    // Ideally we would use [CheckAnyPermissions] here, but the "mobileid"
+    // permission is set to PROMPT_ACTION and [CheckAnyPermissions] only checks
     // for ALLOW_ACTION.
     // XXXbz what is this promise resolved with?
     [NewObject, Func="Navigator::HasMobileIdSupport"]
     Promise<any> getMobileIdAssertion(optional MobileIdOptions options);
 };
 Navigator implements NavigatorMobileId;
 #endif // MOZ_B2G
 
@@ -189,33 +189,33 @@ partial interface Navigator {
   // WebKit/Blink supports this (hardcoded ""); Trident/Presto do not.
   readonly attribute DOMString vendorSub;
   // WebKit/Blink supports this (hardcoded "20030107"); Trident/Presto don't
   readonly attribute DOMString productSub;
   // WebKit/Blink/Trident/Presto support this.
   readonly attribute boolean cookieEnabled;
   [Throws]
   readonly attribute DOMString buildID;
-  [Throws, CheckPermissions="power", UnsafeInPrerendering]
+  [Throws, CheckAnyPermissions="power", UnsafeInPrerendering]
   readonly attribute MozPowerManager mozPower;
 
   // WebKit/Blink/Trident/Presto support this.
   [Throws]
   boolean javaEnabled();
 
   /**
    * Navigator requests to add an idle observer to the existing window.
    */
-  [Throws, CheckPermissions="idle"]
+  [Throws, CheckAnyPermissions="idle"]
   void addIdleObserver(MozIdleObserver aIdleObserver);
 
   /**
    * Navigator requests to remove an idle observer from the existing window.
    */
-  [Throws, CheckPermissions="idle"]
+  [Throws, CheckAnyPermissions="idle"]
   void removeIdleObserver(MozIdleObserver aIdleObserver);
 
   /**
    * Request a wake lock for a resource.
    *
    * A page holds a wake lock to request that a resource not be turned
    * off (or otherwise made unavailable).
    *
@@ -263,17 +263,17 @@ partial interface Navigator {
 // nsIDOMNavigatorDesktopNotification
 partial interface Navigator {
   [Throws, Pref="notification.feature.enabled", UnsafeInPrerendering]
   readonly attribute DesktopNotificationCenter mozNotification;
 };
 
 #ifdef MOZ_WEBSMS_BACKEND
 partial interface Navigator {
-  [CheckPermissions="sms", Pref="dom.sms.enabled", AvailableIn="CertifiedApps"]
+  [CheckAnyPermissions="sms", Pref="dom.sms.enabled", AvailableIn="CertifiedApps"]
   readonly attribute MozMobileMessageManager? mozMobileMessage;
 };
 #endif
 
 // NetworkInformation
 partial interface Navigator {
   [Throws, Pref="dom.netinfo.enabled"]
   readonly attribute NetworkInformation connection;
@@ -298,40 +298,40 @@ partial interface Navigator {
   // it allows the page to set a promise to keep alive the app until the
   // current operation is not fully completed.
   [Throws, Pref="dom.sysmsg.enabled"]
   void mozSetMessageHandlerPromise (Promise<any> promise);
 };
 
 #ifdef MOZ_B2G_RIL
 partial interface Navigator {
-  [Throws, Pref="dom.mobileconnection.enabled", CheckPermissions="mobileconnection mobilenetwork", UnsafeInPrerendering]
+  [Throws, Pref="dom.mobileconnection.enabled", CheckAnyPermissions="mobileconnection mobilenetwork", UnsafeInPrerendering]
   readonly attribute MozMobileConnectionArray mozMobileConnections;
 };
 
 partial interface Navigator {
-  [Throws, Pref="dom.cellbroadcast.enabled", CheckPermissions="cellbroadcast",
+  [Throws, Pref="dom.cellbroadcast.enabled", CheckAnyPermissions="cellbroadcast",
    AvailableIn="CertifiedApps", UnsafeInPrerendering]
   readonly attribute MozCellBroadcast mozCellBroadcast;
 };
 
 partial interface Navigator {
-  [Throws, Pref="dom.voicemail.enabled", CheckPermissions="voicemail",
+  [Throws, Pref="dom.voicemail.enabled", CheckAnyPermissions="voicemail",
    AvailableIn="CertifiedApps", UnsafeInPrerendering]
   readonly attribute MozVoicemail mozVoicemail;
 };
 
 partial interface Navigator {
-  [Throws, Pref="dom.icc.enabled", CheckPermissions="mobileconnection",
+  [Throws, Pref="dom.icc.enabled", CheckAnyPermissions="mobileconnection",
    AvailableIn="CertifiedApps", UnsafeInPrerendering]
   readonly attribute MozIccManager? mozIccManager;
 };
 
 partial interface Navigator {
-  [Throws, Pref="dom.telephony.enabled", CheckPermissions="telephony", UnsafeInPrerendering]
+  [Throws, Pref="dom.telephony.enabled", CheckAnyPermissions="telephony", UnsafeInPrerendering]
   readonly attribute Telephony? mozTelephony;
 };
 #endif // MOZ_B2G_RIL
 
 #ifdef MOZ_GAMEPAD
 // https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#navigator-interface-extension
 partial interface Navigator {
   [Throws, Pref="dom.gamepad.enabled"]
@@ -341,32 +341,32 @@ partial interface Navigator {
 
 partial interface Navigator {
   [Throws, Pref="dom.vr.enabled"]
   Promise<sequence<VRDevice>> getVRDevices();
 };
 
 #ifdef MOZ_B2G_BT
 partial interface Navigator {
-  [Throws, CheckPermissions="bluetooth", UnsafeInPrerendering]
+  [Throws, CheckAnyPermissions="bluetooth", UnsafeInPrerendering]
   readonly attribute BluetoothManager mozBluetooth;
 };
 #endif // MOZ_B2G_BT
 
 #ifdef MOZ_B2G_FM
 partial interface Navigator {
-  [Throws, CheckPermissions="fmradio", UnsafeInPrerendering]
+  [Throws, CheckAnyPermissions="fmradio", UnsafeInPrerendering]
   readonly attribute FMRadio mozFMRadio;
 };
 #endif // MOZ_B2G_FM
 
 #ifdef MOZ_TIME_MANAGER
 // nsIDOMMozNavigatorTime
 partial interface Navigator {
-  [Throws, CheckPermissions="time", UnsafeInPrerendering]
+  [Throws, CheckAnyPermissions="time", UnsafeInPrerendering]
   readonly attribute MozTimeManager mozTime;
 };
 #endif // MOZ_TIME_MANAGER
 
 #ifdef MOZ_AUDIO_CHANNEL_MANAGER
 // nsIMozNavigatorAudioChannelManager
 partial interface Navigator {
   [Throws]
@@ -411,22 +411,22 @@ partial interface Navigator {
 
 partial interface Navigator {
   [Throws, Pref="beacon.enabled"]
   boolean sendBeacon(DOMString url,
                      optional (ArrayBufferView or Blob or DOMString or FormData)? data = null);
 };
 
 partial interface Navigator {
-  [Pref="dom.tv.enabled", CheckPermissions="tv", Func="Navigator::HasTVSupport"]
+  [Pref="dom.tv.enabled", CheckAnyPermissions="tv", Func="Navigator::HasTVSupport"]
   readonly attribute TVManager? tv;
 };
 
 partial interface Navigator {
-  [Throws, Pref="dom.inputport.enabled", CheckPermissions="inputport", AvailableIn=CertifiedApps]
+  [Throws, Pref="dom.inputport.enabled", CheckAnyPermissions="inputport", AvailableIn=CertifiedApps]
   readonly attribute InputPortManager inputPortManager;
 };
 
 #ifdef MOZ_EME
 partial interface Navigator {
   [Pref="media.eme.apiVisible", NewObject]
   Promise<MediaKeySystemAccess>
   requestMediaKeySystemAccess(DOMString keySystem,
--- a/dom/webidl/PermissionSettings.webidl
+++ b/dom/webidl/PermissionSettings.webidl
@@ -1,14 +1,14 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain at http://mozilla.org/MPL/2.0/. */
 
 [JSImplementation="@mozilla.org/permissionSettings;1",
- CheckPermissions="permissions",
+ CheckAnyPermissions="permissions",
  Pref="dom.mozPermissionSettings.enabled",
  NavigatorProperty="mozPermissionSettings"]
 interface PermissionSettings
 {
   DOMString get(DOMString permission, DOMString manifestURI, DOMString origin, boolean browserFlag);
 
   void set(DOMString permission, DOMString value, DOMString manifestURI, DOMString origin, boolean browserFlag);
 
--- a/dom/webidl/PhoneNumberService.webidl
+++ b/dom/webidl/PhoneNumberService.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [JSImplementation="@mozilla.org/phoneNumberService;1",
  NavigatorProperty="mozPhoneNumberService",
- CheckPermissions="phonenumberservice"]
+ CheckAnyPermissions="phonenumberservice"]
 interface PhoneNumberService {
   DOMRequest fuzzyMatch([TreatNullAs=EmptyString] optional DOMString number1 = "",
                         [TreatNullAs=EmptyString] optional DOMString number2= "");
 
   DOMString normalize(DOMString number);
 };
--- a/dom/webidl/PresentationDeviceInfoManager.webidl
+++ b/dom/webidl/PresentationDeviceInfoManager.webidl
@@ -8,17 +8,17 @@ dictionary PresentationDeviceInfo {
   DOMString id;
   DOMString name;
   DOMString type;
 };
 
 [NavigatorProperty="mozPresentationDeviceInfo",
  JSImplementation="@mozilla.org/presentation-device/deviceInfo;1",
  Pref="dom.presentation.enabled",
- CheckPermissions="presentation-device-manage"]
+ CheckAnyPermissions="presentation-device-manage"]
 interface PresentationDeviceInfoManager : EventTarget {
   // notify if any device updated.
   attribute EventHandler ondevicechange;
 
   // retrieve all available device infos
   Promise<sequence<PresentationDeviceInfo>> getAll();
 
   // Force all registered device provider to update device information.
--- a/dom/webidl/RequestSyncManager.webidl
+++ b/dom/webidl/RequestSyncManager.webidl
@@ -1,30 +1,30 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [AvailableIn=CertifiedApps,
  Pref="dom.requestSync.enabled",
- CheckPermissions="requestsync-manager",
+ CheckAnyPermissions="requestsync-manager",
  JSImplementation="@mozilla.org/dom/request-sync-task-app;1"]
 interface RequestSyncApp {
   readonly attribute USVString origin;
   readonly attribute USVString manifestURL;
   readonly attribute boolean isInBrowserElement;
 };
 
 enum RequestSyncTaskPolicyState { "enabled", "disabled", "wifiOnly" };
 
 // Like a normal task, but with info about the app.
 [AvailableIn=CertifiedApps,
  Pref="dom.requestSync.enabled",
- CheckPermissions="requestsync-manager",
+ CheckAnyPermissions="requestsync-manager",
  JSImplementation="@mozilla.org/dom/request-sync-task-manager;1"]
 interface RequestSyncTask {
   // This object describes the app that is owning the task.
   readonly attribute RequestSyncApp app;
 
   // Using setPolicy it's possible to owerwrite the state and the minInterval.
   readonly attribute RequestSyncTaskPolicyState state;
   readonly attribute long overwrittenMinInterval;
@@ -43,14 +43,14 @@ interface RequestSyncTask {
                           optional long ovewrittenMinInterval);
 
   Promise<void> runNow();
 };
 
 [NavigatorProperty="syncManager",
  AvailableIn=CertifiedApps,
  Pref="dom.requestSync.enabled",
- CheckPermissions="requestsync-manager",
+ CheckAnyPermissions="requestsync-manager",
  JSImplementation="@mozilla.org/dom/request-sync-manager;1"]
 // This interface will be used only by the B2G SystemApp
 interface RequestSyncManager {
     Promise<sequence<RequestSyncTask>> registrations();
 };
--- a/dom/webidl/ResourceStats.webidl
+++ b/dom/webidl/ResourceStats.webidl
@@ -1,36 +1,36 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-[CheckPermissions="resourcestats-manage",
+[CheckAnyPermissions="resourcestats-manage",
  Pref="dom.resource_stats.enabled",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/networkStatsData;1"]
 interface NetworkStatsData
 {
   readonly attribute unsigned long long   receivedBytes;
   readonly attribute unsigned long long   sentBytes;
   readonly attribute DOMTimeStamp         timestamp;      // timestamp of the record
 };
 
-[CheckPermissions="resourcestats-manage",
+[CheckAnyPermissions="resourcestats-manage",
  Pref="dom.resource_stats.enabled",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/powerStatsData;1"]
 interface PowerStatsData
 {
   readonly attribute unsigned long long   consumedPower;  // unit: mW
   readonly attribute DOMTimeStamp         timestamp;      // timestamp of the record
 };
 
-[CheckPermissions="resourcestats-manage",
+[CheckAnyPermissions="resourcestats-manage",
  Pref="dom.resource_stats.enabled",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/resourceStats;1"]
 interface ResourceStats
 {
   /**
    * Type of statistics/
    */
--- a/dom/webidl/ResourceStatsManager.webidl
+++ b/dom/webidl/ResourceStatsManager.webidl
@@ -65,17 +65,17 @@ dictionary ResourceStatsAlarmOptions
    *
    * |data| is used to reflect in the alarm object when the alarm is triggered.
    * |data| should be copied using the structured clone algorithm.
    */
   [EnforceRange] DOMTimeStamp   startTime;  // time in milliseconds since Epoch
   any                           data;
 };
 
-[CheckPermissions="resourcestats-manage",
+[CheckAnyPermissions="resourcestats-manage",
  Pref="dom.resource_stats.enabled",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/resourceStatsAlarm;1"]
 interface ResourceStatsAlarm
 {
   /**
    * ID of the alarm
    */
@@ -107,17 +107,17 @@ interface ResourceStatsAlarm
   readonly attribute unsigned long long     threshold;
 
   /**
    * |data| is used to reflect in the alarm object when the alarm is triggered.
    */
   readonly attribute any                    data;
 };
 
-[CheckPermissions="resourcestats-manage",
+[CheckAnyPermissions="resourcestats-manage",
  Pref="dom.resource_stats.enabled",
  Constructor(ResourceType type),
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/resourceStatsManager;1"]
 interface ResourceStatsManager
 {
   /**
    * Query resource statistics.
--- a/dom/webidl/SecureElement.webidl
+++ b/dom/webidl/SecureElement.webidl
@@ -32,17 +32,17 @@ dictionary SECommand {
   required octet p1;             // First Octet of Parameters Byte
   required octet p2;             // Second Octet of Parameters Byte
   sequence<octet>? data = null;  // Sequence of octets
   short le = -1;                 // The length of the expected
                                  // response data or -1 if none is expected
 };
 
 [Pref="dom.secureelement.enabled",
- CheckPermissions="secureelement-manage",
+ CheckAnyPermissions="secureelement-manage",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/secureelement/reader;1"]
 interface SEReader {
 
   // 'true' if a secure element is present
   readonly attribute boolean isSEPresent;
 
   // Type of SecureElement
@@ -61,17 +61,17 @@ interface SEReader {
    * Closes all sessions associated with this Reader and its associated channels.
    *
    */
   [Throws]
   Promise<void> closeAll();
 };
 
 [Pref="dom.secureelement.enabled",
- CheckPermissions="secureelement-manage",
+ CheckAnyPermissions="secureelement-manage",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/secureelement/session;1"]
 interface SESession {
 
   // 'reader' that provides this session
   readonly attribute SEReader reader;
 
   // Status of current session
@@ -97,17 +97,17 @@ interface SESession {
    * Close all active channels associated with this session.
    *
    */
   [Throws]
   Promise<void> closeAll();
 };
 
 [Pref="dom.secureelement.enabled",
- CheckPermissions="secureelement-manage",
+ CheckAnyPermissions="secureelement-manage",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/secureelement/channel;1"]
 interface SEChannel {
 
   // 'session' obj this channel is bound to
   readonly attribute SESession session;
 
   // response to openBasicChannel / openLogicalChannel operation
@@ -137,17 +137,17 @@ interface SEChannel {
    * Closes the active channel.
    *
    */
   [Throws]
   Promise<void> close();
 };
 
 [Pref="dom.secureelement.enabled",
- CheckPermissions="secureelement-manage",
+ CheckAnyPermissions="secureelement-manage",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/secureelement/response;1"]
 interface SEResponse {
   // Response received on this 'channel' object.
   [Constant] readonly attribute SEChannel channel;
 
   // First octet of response's status word
   [Constant] readonly attribute octet        sw1;
--- a/dom/webidl/SecureElementManager.webidl
+++ b/dom/webidl/SecureElementManager.webidl
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
  /* Copyright © 2014 Deutsche Telekom, Inc. */
 
 [Pref="dom.secureelement.enabled",
- CheckPermissions="secureelement-manage",
+ CheckAnyPermissions="secureelement-manage",
  AvailableIn="CertifiedApps",
  JSImplementation="@mozilla.org/secureelement/manager;1",
  NavigatorProperty="seManager",
  NoInterfaceObject]
 interface SEManager {
 
   /**
    * Retrieves all the readers available on the device.
--- a/dom/webidl/SimplePushManager.webidl
+++ b/dom/webidl/SimplePushManager.webidl
@@ -1,15 +1,15 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/.
 */
 
 [NavigatorProperty="push",
  JSImplementation="@mozilla.org/push/PushManager;1",
- CheckPermissions="push",
+ CheckAnyPermissions="push",
  Pref="services.push.enabled"]
 interface SimplePushManager {
     DOMRequest register();
     DOMRequest unregister(DOMString pushEndpoint);
     DOMRequest registrations();
 };
--- a/dom/webidl/SystemUpdate.webidl
+++ b/dom/webidl/SystemUpdate.webidl
@@ -11,17 +11,17 @@ dictionary SystemUpdatePackageInfo {
   DOMString type = "";
   DOMString version = "";
   DOMString description = "";
   DOMTimeStamp buildDate = 0;
   unsigned long long size = 0;
 };
 
 [JSImplementation="@mozilla.org/system-update-provider;1",
- CheckPermissions="system-update",
+ CheckAnyPermissions="system-update",
  Pref="dom.system_update.enabled"]
 interface SystemUpdateProvider : EventTarget {
   readonly attribute DOMString name;
   readonly attribute DOMString uuid;
 
   attribute EventHandler onupdateavailable;
   attribute EventHandler onprogress;
   attribute EventHandler onupdateready;
@@ -32,17 +32,17 @@ interface SystemUpdateProvider : EventTa
   void stopDownload();
   void applyUpdate();
   boolean setParameter(DOMString name, DOMString value);
   DOMString getParameter(DOMString name);
 };
 
 [NavigatorProperty="updateManager",
  JSImplementation="@mozilla.org/system-update-manager;1",
- CheckPermissions="system-update",
+ CheckAnyPermissions="system-update",
  Pref="dom.system_update.enabled"]
 interface SystemUpdateManager {
   Promise<sequence<SystemUpdateProviderInfo>> getProviders();
 
   Promise<SystemUpdateProvider> setActiveProvider(DOMString uuid);
 
   Promise<SystemUpdateProvider> getActiveProvider();
 };
--- a/dom/webidl/TVChannel.webidl
+++ b/dom/webidl/TVChannel.webidl
@@ -13,17 +13,17 @@ enum TVChannelType {
   "data"
 };
 
 dictionary TVGetProgramsOptions {
   unsigned long long startTime;
   unsigned long long duration;
 };
 
-[Pref="dom.tv.enabled", CheckPermissions="tv", Func="Navigator::HasTVSupport"]
+[Pref="dom.tv.enabled", CheckAnyPermissions="tv", Func="Navigator::HasTVSupport"]
 interface TVChannel : EventTarget {
   [Throws]
   Promise<sequence<TVProgram>> getPrograms(optional TVGetProgramsOptions options);
 
   [Throws]
   Promise<TVProgram> getCurrentProgram();
 
   readonly attribute DOMString networkId;
--- a/dom/webidl/TVCurrentChannelChangedEvent.webidl
+++ b/dom/webidl/TVCurrentChannelChangedEvent.webidl
@@ -7,14 +7,14 @@
  * http://seanyhlin.github.io/TV-Manager-API/
  */
 
 dictionary TVCurrentChannelChangedEventInit : EventInit {
   TVChannel? channel = null;
 };
 
 [Pref="dom.tv.enabled",
- CheckPermissions="tv",
+ CheckAnyPermissions="tv",
  Func="Navigator::HasTVSupport",
  Constructor(DOMString type, optional TVCurrentChannelChangedEventInit eventInitDict)]
 interface TVCurrentChannelChangedEvent : Event {
   readonly attribute TVChannel? channel;
 };
--- a/dom/webidl/TVCurrentSourceChangedEvent.webidl
+++ b/dom/webidl/TVCurrentSourceChangedEvent.webidl
@@ -7,14 +7,14 @@
  * http://seanyhlin.github.io/TV-Manager-API/
  */
 
 dictionary TVCurrentSourceChangedEventInit : EventInit {
   TVSource? source = null;
 };
 
 [Pref="dom.tv.enabled",
- CheckPermissions="tv",
+ CheckAnyPermissions="tv",
  Func="Navigator::HasTVSupport",
  Constructor(DOMString type, optional TVCurrentSourceChangedEventInit eventInitDict)]
 interface TVCurrentSourceChangedEvent : Event {
   readonly attribute TVSource? source;
 };
--- a/dom/webidl/TVEITBroadcastedEvent.webidl
+++ b/dom/webidl/TVEITBroadcastedEvent.webidl
@@ -7,14 +7,14 @@
  * http://seanyhlin.github.io/TV-Manager-API/
  */
 
 dictionary TVEITBroadcastedEventInit : EventInit {
   sequence<TVProgram> programs = [];
 };
 
 [Pref="dom.tv.enabled",
- CheckPermissions="tv",
+ CheckAnyPermissions="tv",
  Func="Navigator::HasTVSupport",
  Constructor(DOMString type, optional TVEITBroadcastedEventInit eventInitDict)]
 interface TVEITBroadcastedEvent : Event {
   [Pure, Cached] readonly attribute sequence<TVProgram> programs;
 };
--- a/dom/webidl/TVManager.webidl
+++ b/dom/webidl/TVManager.webidl
@@ -2,13 +2,13 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * The origin of this IDL file is
  * http://seanyhlin.github.io/TV-Manager-API/
  */
 
-[Pref="dom.tv.enabled", CheckPermissions="tv", Func="Navigator::HasTVSupport"]
+[Pref="dom.tv.enabled", CheckAnyPermissions="tv", Func="Navigator::HasTVSupport"]
 interface TVManager : EventTarget {
   [Throws]
   Promise<sequence<TVTuner>> getTuners();
 };
--- a/dom/webidl/TVProgram.webidl
+++ b/dom/webidl/TVProgram.webidl
@@ -2,17 +2,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * The origin of this IDL file is
  * http://seanyhlin.github.io/TV-Manager-API/
  */
 
-[Pref="dom.tv.enabled", CheckPermissions="tv", Func="Navigator::HasTVSupport"]
+[Pref="dom.tv.enabled", CheckAnyPermissions="tv", Func="Navigator::HasTVSupport"]
 interface TVProgram {
   sequence<DOMString> getAudioLanguages();
 
   sequence<DOMString> getSubtitleLanguages();
 
   readonly attribute DOMString eventId;
 
   readonly attribute TVChannel channel;
--- a/dom/webidl/TVScanningStateChangedEvent.webidl
+++ b/dom/webidl/TVScanningStateChangedEvent.webidl
@@ -15,15 +15,15 @@ enum TVScanningState {
 };
 
 dictionary TVScanningStateChangedEventInit : EventInit {
   TVScanningState state = "cleared";
   TVChannel? channel = null;
 };
 
 [Pref="dom.tv.enabled",
- CheckPermissions="tv",
+ CheckAnyPermissions="tv",
  Func="Navigator::HasTVSupport",
  Constructor(DOMString type, optional TVScanningStateChangedEventInit eventInitDict)]
 interface TVScanningStateChangedEvent : Event {
   readonly attribute TVScanningState state;
   readonly attribute TVChannel? channel;
 };
--- a/dom/webidl/TVSource.webidl
+++ b/dom/webidl/TVSource.webidl
@@ -28,17 +28,17 @@ enum TVSourceType {
   "t-dmb",
   "s-dmb"
 };
 
 dictionary TVStartScanningOptions {
   boolean isRescanned;
 };
 
-[Pref="dom.tv.enabled", CheckPermissions="tv", Func="Navigator::HasTVSupport"]
+[Pref="dom.tv.enabled", CheckAnyPermissions="tv", Func="Navigator::HasTVSupport"]
 interface TVSource : EventTarget {
   [Throws]
   Promise<sequence<TVChannel>> getChannels();
 
   [Throws]
   Promise<void> setCurrentChannel(DOMString channelNumber);
 
   [Throws]
--- a/dom/webidl/TVTuner.webidl
+++ b/dom/webidl/TVTuner.webidl
@@ -2,17 +2,17 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  *
  * The origin of this IDL file is
  * http://seanyhlin.github.io/TV-Manager-API/
  */
 
-[Pref="dom.tv.enabled", CheckPermissions="tv", Func="Navigator::HasTVSupport"]
+[Pref="dom.tv.enabled", CheckAnyPermissions="tv", Func="Navigator::HasTVSupport"]
 interface TVTuner : EventTarget {
   [Throws]
   sequence<TVSourceType> getSupportedSourceTypes();
 
   [Throws]
   Promise<sequence<TVSource>> getSources();
 
   [Throws]
--- a/dom/webidl/UDPMessageEvent.webidl
+++ b/dom/webidl/UDPMessageEvent.webidl
@@ -5,17 +5,17 @@
  *
  * The origin of this IDL file is
  * http://www.w3.org/TR/raw-sockets/#interface-udpmessageevent
  */
 
 //Bug 1056444: This interface should be removed after UDPSocket.input/UDPSocket.output are ready.
 [Constructor(DOMString type, optional UDPMessageEventInit eventInitDict),
  Pref="dom.udpsocket.enabled",
- CheckPermissions="udp-socket"]
+ CheckAnyPermissions="udp-socket"]
 interface UDPMessageEvent : Event {
     readonly    attribute DOMString      remoteAddress;
     readonly    attribute unsigned short remotePort;
     readonly    attribute any            data;
 };
 
 dictionary UDPMessageEventInit : EventInit {
   DOMString remoteAddress = "";
--- a/dom/webidl/UDPSocket.webidl
+++ b/dom/webidl/UDPSocket.webidl
@@ -14,17 +14,17 @@ dictionary UDPOptions {
     DOMString      remoteAddress;
     unsigned short remotePort;
     boolean        addressReuse = true;
     boolean        loopback = false;
 };
 
 [Constructor (optional UDPOptions options),
  Pref="dom.udpsocket.enabled",
- CheckPermissions="udp-socket"]
+ CheckAnyPermissions="udp-socket"]
 interface UDPSocket : EventTarget {
     readonly    attribute DOMString?       localAddress;
     readonly    attribute unsigned short?  localPort;
     readonly    attribute DOMString?       remoteAddress;
     readonly    attribute unsigned short?  remotePort;
     readonly    attribute boolean          addressReuse;
     readonly    attribute boolean          loopback;
     readonly    attribute SocketReadyState readyState;
--- a/dom/webidl/USSDReceivedEvent.webidl
+++ b/dom/webidl/USSDReceivedEvent.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.telephony.enabled",
- CheckPermissions="telephony",
+ CheckAnyPermissions="telephony",
  AvailableIn="CertifiedApps",
  Constructor(DOMString type, optional USSDReceivedEventInit eventInitDict)]
 interface USSDReceivedEvent : Event
 {
   readonly attribute unsigned long serviceId;
   readonly attribute DOMString? message;
   readonly attribute USSDSession? session;  // null if session is ended.
 };
--- a/dom/webidl/USSDSession.webidl
+++ b/dom/webidl/USSDSession.webidl
@@ -1,16 +1,16 @@
 /* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
 [Pref="dom.telephony.enabled",
- CheckPermissions="telephony",
+ CheckAnyPermissions="telephony",
  AvailableIn="CertifiedApps",
  Constructor(unsigned long serviceId)]
 interface USSDSession {
   [NewObject]
   Promise<void> send(DOMString ussd);
 
   [NewObject]
   Promise<void> cancel();