summaryrefslogtreecommitdiffstats
path: root/mobile/android/chrome/content/PermissionsHelper.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /mobile/android/chrome/content/PermissionsHelper.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/chrome/content/PermissionsHelper.js')
-rw-r--r--mobile/android/chrome/content/PermissionsHelper.js188
1 files changed, 188 insertions, 0 deletions
diff --git a/mobile/android/chrome/content/PermissionsHelper.js b/mobile/android/chrome/content/PermissionsHelper.js
new file mode 100644
index 000000000..ad1eb760a
--- /dev/null
+++ b/mobile/android/chrome/content/PermissionsHelper.js
@@ -0,0 +1,188 @@
+/* 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/. */
+"use strict";
+
+var PermissionsHelper = {
+ _permissonTypes: ["password", "geolocation", "popup", "indexedDB",
+ "offline-app", "desktop-notification", "plugins", "native-intent",
+ "flyweb-publish-server"],
+ _permissionStrings: {
+ "password": {
+ label: "password.logins",
+ allowed: "password.save",
+ denied: "password.dontSave"
+ },
+ "geolocation": {
+ label: "geolocation.location",
+ allowed: "geolocation.allow",
+ denied: "geolocation.dontAllow"
+ },
+ "flyweb-publish-server": {
+ label: "flyWebPublishServer.publishServer",
+ allowed: "flyWebPublishServer.allow",
+ denied: "flyWebPublishServer.dontAllow"
+ },
+ "popup": {
+ label: "blockPopups.label2",
+ allowed: "popup.show",
+ denied: "popup.dontShow"
+ },
+ "indexedDB": {
+ label: "offlineApps.offlineData",
+ allowed: "offlineApps.allow",
+ denied: "offlineApps.dontAllow2"
+ },
+ "offline-app": {
+ label: "offlineApps.offlineData",
+ allowed: "offlineApps.allow",
+ denied: "offlineApps.dontAllow2"
+ },
+ "desktop-notification": {
+ label: "desktopNotification.notifications",
+ allowed: "desktopNotification2.allow",
+ denied: "desktopNotification2.dontAllow"
+ },
+ "plugins": {
+ label: "clickToPlayPlugins.plugins",
+ allowed: "clickToPlayPlugins.activate",
+ denied: "clickToPlayPlugins.dontActivate"
+ },
+ "native-intent": {
+ label: "helperapps.openWithList2",
+ allowed: "helperapps.always",
+ denied: "helperapps.never"
+ }
+ },
+
+ observe: function observe(aSubject, aTopic, aData) {
+ let uri = BrowserApp.selectedBrowser.currentURI;
+ let check = false;
+
+ switch (aTopic) {
+ case "Permissions:Check":
+ check = true;
+ case "Permissions:Get":
+ let permissions = [];
+ for (let i = 0; i < this._permissonTypes.length; i++) {
+ let type = this._permissonTypes[i];
+ let value = this.getPermission(uri, type);
+
+ // Only add the permission if it was set by the user
+ if (value == Services.perms.UNKNOWN_ACTION)
+ continue;
+
+ if (check) {
+ Messaging.sendRequest({
+ type: "Permissions:CheckResult",
+ hasPermissions: true
+ });
+ return;
+ }
+ // Get the strings that correspond to the permission type
+ let typeStrings = this._permissionStrings[type];
+ let label = Strings.browser.GetStringFromName(typeStrings["label"]);
+
+ // Get the key to look up the appropriate string entity
+ let valueKey = value == Services.perms.ALLOW_ACTION ?
+ "allowed" : "denied";
+ let valueString = Strings.browser.GetStringFromName(typeStrings[valueKey]);
+
+ permissions.push({
+ type: type,
+ setting: label,
+ value: valueString
+ });
+ }
+
+ if (check) {
+ Messaging.sendRequest({
+ type: "Permissions:CheckResult",
+ hasPermissions: false
+ });
+ return;
+ }
+
+ // Keep track of permissions, so we know which ones to clear
+ this._currentPermissions = permissions;
+
+ Messaging.sendRequest({
+ type: "Permissions:Data",
+ permissions: permissions
+ });
+ break;
+
+ case "Permissions:Clear":
+ // An array of the indices of the permissions we want to clear
+ let permissionsToClear = JSON.parse(aData);
+ let privacyContext = BrowserApp.selectedBrowser.docShell
+ .QueryInterface(Ci.nsILoadContext);
+
+ for (let i = 0; i < permissionsToClear.length; i++) {
+ let indexToClear = permissionsToClear[i];
+ let permissionType = this._currentPermissions[indexToClear]["type"];
+ this.clearPermission(uri, permissionType, privacyContext);
+ }
+ break;
+ }
+ },
+
+ /**
+ * Gets the permission value stored for a specified permission type.
+ *
+ * @param aType
+ * The permission type string stored in permission manager.
+ * e.g. "geolocation", "indexedDB", "popup"
+ *
+ * @return A permission value defined in nsIPermissionManager.
+ */
+ getPermission: function getPermission(aURI, aType) {
+ // Password saving isn't a nsIPermissionManager permission type, so handle
+ // it seperately.
+ if (aType == "password") {
+ // By default, login saving is enabled, so if it is disabled, the
+ // user selected the never remember option
+ if (!Services.logins.getLoginSavingEnabled(aURI.prePath))
+ return Services.perms.DENY_ACTION;
+
+ // Check to see if the user ever actually saved a login
+ if (Services.logins.countLogins(aURI.prePath, "", ""))
+ return Services.perms.ALLOW_ACTION;
+
+ return Services.perms.UNKNOWN_ACTION;
+ }
+
+ // Geolocation consumers use testExactPermission
+ if (aType == "geolocation")
+ return Services.perms.testExactPermission(aURI, aType);
+
+ return Services.perms.testPermission(aURI, aType);
+ },
+
+ /**
+ * Clears a user-set permission value for the site given a permission type.
+ *
+ * @param aType
+ * The permission type string stored in permission manager.
+ * e.g. "geolocation", "indexedDB", "popup"
+ */
+ clearPermission: function clearPermission(aURI, aType, aContext) {
+ // Password saving isn't a nsIPermissionManager permission type, so handle
+ // it seperately.
+ if (aType == "password") {
+ // Get rid of exisiting stored logings
+ let logins = Services.logins.findLogins({}, aURI.prePath, "", "");
+ for (let i = 0; i < logins.length; i++) {
+ Services.logins.removeLogin(logins[i]);
+ }
+ // Re-set login saving to enabled
+ Services.logins.setLoginSavingEnabled(aURI.prePath, true);
+ } else {
+ Services.perms.remove(aURI, aType);
+ // Clear content prefs set in ContentPermissionPrompt.js
+ Cc["@mozilla.org/content-pref/service;1"]
+ .getService(Ci.nsIContentPrefService2)
+ .removeByDomainAndName(aURI.spec, aType + ".request.remember", aContext);
+ }
+ }
+};