Skip to content

Commit

Permalink
Bug 985796 - Port the permission settings API to WebIDL; r=bzbarsky
Browse files Browse the repository at this point in the history
  • Loading branch information
ehsan committed Mar 22, 2014
1 parent 5cad4df commit 936e4bd
Show file tree
Hide file tree
Showing 13 changed files with 36 additions and 56 deletions.
5 changes: 0 additions & 5 deletions b2g/components/ContentPermissionPrompt.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@ var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptS

let permissionSpecificChecker = {};

XPCOMUtils.defineLazyServiceGetter(this,
"PermSettings",
"@mozilla.org/permissionSettings;1",
"nsIDOMPermissionSettings");

XPCOMUtils.defineLazyServiceGetter(this,
"AudioManager",
"@mozilla.org/telephony/audiomanager;1",
Expand Down
8 changes: 8 additions & 0 deletions dom/base/Navigator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2296,6 +2296,14 @@ Navigator::HasDownloadsSupport(JSContext* aCx, JSObject* aGlobal)
Preferences::GetBool("dom.mozDownloads.enabled");
}

/* static */
bool
Navigator::HasPermissionSettingsSupport(JSContext* /* unused */, JSObject* aGlobal)
{
nsCOMPtr<nsPIDOMWindow> win = GetWindowFromGlobal(aGlobal);
return CheckPermission(win, "permissions");
}

/* static */
already_AddRefed<nsPIDOMWindow>
Navigator::GetWindowFromGlobal(JSObject* aGlobal)
Expand Down
2 changes: 2 additions & 0 deletions dom/base/Navigator.h
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,8 @@ class Navigator : public nsIDOMNavigator

static bool HasDownloadsSupport(JSContext* aCx, JSObject* aGlobal);

static bool HasPermissionSettingsSupport(JSContext* aCx, JSObject* aGlobal);

nsPIDOMWindow* GetParentObject() const
{
return GetWindow();
Expand Down
1 change: 0 additions & 1 deletion dom/interfaces/permission/moz.build
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

XPIDL_SOURCES += [
'nsIDOMPermissionSettings.idl',
'nsIPermissionPromptService.idl',
]

Expand Down
21 changes: 0 additions & 21 deletions dom/interfaces/permission/nsIDOMPermissionSettings.idl

This file was deleted.

2 changes: 1 addition & 1 deletion dom/interfaces/permission/nsIPermissionPromptService.idl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ interface nsIPermissionPromptService : nsISupports
{
/**
* Checks if the capability requires a permission, fires the corresponding cancel()
* or allow() method in aRequest after consulting nsIDOMPermissionSettings, etc.
* or allow() method in aRequest after consulting PermissionSettings, etc.
*/
void getPermission(in nsIContentPermissionRequest aRequest);
};
5 changes: 0 additions & 5 deletions dom/permission/PermissionPromptService.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,6 @@ const PERMISSIONPROMPTSERVICE_CONTRACTID = "@mozilla.org/permission-prompt-servi
const PERMISSIONPROMPTSERVICE_CID = Components.ID("{e5f953b3-a6ca-444e-a88d-cdc81383741c}");
const permissionPromptService = Ci.nsIPermissionPromptService;

XPCOMUtils.defineLazyServiceGetter(this,
"PermSettings",
"@mozilla.org/permissionSettings;1",
"nsIDOMPermissionSettings");

var permissionManager = Cc["@mozilla.org/permissionmanager;1"].getService(Ci.nsIPermissionManager);
var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"].getService(Ci.nsIScriptSecurityManager);

Expand Down
22 changes: 1 addition & 21 deletions dom/permission/PermissionSettings.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ var cpm = Cc["@mozilla.org/childprocessmessagemanager;1"].getService(Ci.nsISyncM

const PERMISSIONSETTINGS_CONTRACTID = "@mozilla.org/permissionSettings;1";
const PERMISSIONSETTINGS_CID = Components.ID("{cd2cf7a1-f4c1-487b-8c1b-1a71c7097431}");
const nsIDOMPermissionSettings = Ci.nsIDOMPermissionSettings;

function PermissionSettings()
{
Expand Down Expand Up @@ -129,27 +128,8 @@ PermissionSettings.prototype = {
});
},

init: function init(aWindow) {
debug("init");

// Set navigator.mozPermissionSettings to null.
let perm = Services.perms.testExactPermissionFromPrincipal(aWindow.document.nodePrincipal, "permissions");
if (!Services.prefs.getBoolPref("dom.mozPermissionSettings.enabled")
|| perm != Ci.nsIPermissionManager.ALLOW_ACTION) {
return null;
}

debug("Permission to get/set permissions granted!");
},

classID : PERMISSIONSETTINGS_CID,
QueryInterface : XPCOMUtils.generateQI([nsIDOMPermissionSettings, Ci.nsIDOMGlobalPropertyInitializer]),

classInfo : XPCOMUtils.generateCI({classID: PERMISSIONSETTINGS_CID,
contractID: PERMISSIONSETTINGS_CONTRACTID,
classDescription: "PermissionSettings",
interfaces: [nsIDOMPermissionSettings],
flags: Ci.nsIClassInfo.DOM_OBJECT})
QueryInterface : XPCOMUtils.generateQI([])
}

this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PermissionSettings])
1 change: 0 additions & 1 deletion dom/permission/PermissionSettings.manifest
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
component {cd2cf7a1-f4c1-487b-8c1b-1a71c7097431} PermissionSettings.js
contract @mozilla.org/permissionSettings;1 {cd2cf7a1-f4c1-487b-8c1b-1a71c7097431}
category JavaScript-navigator-property mozPermissionSettings @mozilla.org/permissionSettings;1
2 changes: 1 addition & 1 deletion dom/permission/tests/test_permissions.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
{
perm: ["permissions"],
obj: "mozPermissionSettings",
idl: "nsIDOMPermissionSettings",
webidl: "PermissionSettings",
settings: [["dom.mozPermissionSettings.enabled", true]],
},
]
Expand Down
2 changes: 2 additions & 0 deletions dom/tests/mochitest/general/test_interfaces.html
Original file line number Diff line number Diff line change
Expand Up @@ -743,6 +743,8 @@
"PerformanceTiming",
// IMPORTANT: Do not change this list without review from a DOM peer!
"PeriodicWave",
// IMPORTANT: Do not change this list without review from a DOM peer!
{name: "PermissionSettings", b2g: true, permission: "permissions"},
// IMPORTANT: Do not change this list without review from a DOM peer!
"PhoneNumberService",
// IMPORTANT: Do not change this list without review from a DOM peer!
Expand Down
20 changes: 20 additions & 0 deletions dom/webidl/PermissionSettings.webidl
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/* 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",
Func="Navigator::HasPermissionSettingsSupport",
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);

boolean isExplicit(DOMString permission, DOMString manifestURI, DOMString origin, boolean browserFlag);

// Removing a permission is only allowed for pages with a different origin than the app
// and pages that have browserFlag=true, so remove() doesn't have a browserFlag parameter.
void remove(DOMString permission, DOMString manifestURI, DOMString origin);
};
1 change: 1 addition & 0 deletions dom/webidl/moz.build
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ WEBIDL_FILES = [
'PerformanceNavigation.webidl',
'PerformanceTiming.webidl',
'PeriodicWave.webidl',
'PermissionSettings.webidl',
'PhoneNumberService.webidl',
'Plugin.webidl',
'PluginArray.webidl',
Expand Down

0 comments on commit 936e4bd

Please sign in to comment.