diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /mobile/android/chrome/content/PermissionsHelper.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | uxp-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz |
Add m-esr52 at 52.6.0
Diffstat (limited to 'mobile/android/chrome/content/PermissionsHelper.js')
-rw-r--r-- | mobile/android/chrome/content/PermissionsHelper.js | 188 |
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 0000000000..ad1eb760aa --- /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); + } + } +}; |