Bug 933917 - Remove about:permissions. r=MattN
authorDão Gottwald <dao@mozilla.com>
Fri, 13 Nov 2015 11:18:27 +0100
changeset 308706 ec09a14e52b3862efeecf7c4f6789bcef7cdafb5
parent 308705 9e64e9666b4062358e4c81deb3b775b7cb18e84b
child 308707 fda060cdf44aaa98116d4ed21d6043155ef81892
push id7514
push users.kaspari@gmail.com
push dateFri, 13 Nov 2015 14:12:41 +0000
reviewersMattN
bugs933917
milestone45.0a1
Bug 933917 - Remove about:permissions. r=MattN
browser/base/content/test/general/browser_zbug569342.js
browser/components/about/AboutRedirector.cpp
browser/components/preferences/aboutPermissions.css
browser/components/preferences/aboutPermissions.js
browser/components/preferences/aboutPermissions.xml
browser/components/preferences/aboutPermissions.xul
browser/components/preferences/in-content/tests/browser.ini
browser/components/preferences/in-content/tests/browser_chunk_permissions.js
browser/components/preferences/in-content/tests/browser_permissions.js
browser/components/preferences/jar.mn
browser/locales/en-US/chrome/browser/preferences/aboutPermissions.dtd
browser/locales/en-US/chrome/browser/preferences/aboutPermissions.properties
browser/locales/jar.mn
browser/themes/linux/jar.mn
browser/themes/linux/preferences/aboutPermissions.css
browser/themes/osx/jar.mn
browser/themes/osx/preferences/aboutPermissions.css
browser/themes/windows/jar.mn
browser/themes/windows/preferences/aboutPermissions.css
--- a/browser/base/content/test/general/browser_zbug569342.js
+++ b/browser/base/content/test/general/browser_zbug569342.js
@@ -27,17 +27,16 @@ function test() {
   ok(!gFindBar.hidden, "Find bar should be visible");
 
   nextTest();
 }
 
 var urls = [
   "about:config",
   "about:addons",
-  "about:permissions"
 ];
 
 function nextTest() {
   let url = urls.shift();
   if (url) {
     testFindDisabled(url, nextTest);
   } else {
     // Make sure the find bar is re-enabled after disabled page is closed.
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -88,18 +88,16 @@ static RedirEntry kRedirMap[] = {
     nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
     nsIAboutModule::ALLOW_SCRIPT |
     nsIAboutModule::ENABLE_INDEXED_DB },
   { "newtab", "chrome://browser/content/newtab/newTab.xhtml",
     nsIAboutModule::ALLOW_SCRIPT },
   { "remote-newtab", "chrome://browser/content/remote-newtab/newTab.xhtml",
     nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
     nsIAboutModule::ALLOW_SCRIPT },
-  { "permissions", "chrome://browser/content/preferences/aboutPermissions.xul",
-    nsIAboutModule::ALLOW_SCRIPT },
   { "preferences", "chrome://browser/content/preferences/in-content/preferences.xul",
     nsIAboutModule::ALLOW_SCRIPT },
   { "downloads", "chrome://browser/content/downloads/contentAreaDownloadsView.xul",
     nsIAboutModule::ALLOW_SCRIPT },
 #ifdef MOZ_SERVICES_HEALTHREPORT
   { "healthreport", "chrome://browser/content/abouthealthreport/abouthealth.xhtml",
     nsIAboutModule::ALLOW_SCRIPT },
 #endif
deleted file mode 100644
--- a/browser/components/preferences/aboutPermissions.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/* 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/. */
-
-.site {
-  -moz-binding: url("chrome://browser/content/preferences/aboutPermissions.xml#site");
-}
deleted file mode 100644
--- a/browser/components/preferences/aboutPermissions.js
+++ /dev/null
@@ -1,911 +0,0 @@
-/* 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 Ci = Components.interfaces;
-var Cc = Components.classes;
-var Cu = Components.utils;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/DownloadUtils.jsm");
-Cu.import("resource://gre/modules/NetUtil.jsm");
-Cu.import("resource://gre/modules/ForgetAboutSite.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
-                                  "resource://gre/modules/PluralForm.jsm");
-
-var gSecMan = Cc["@mozilla.org/scriptsecuritymanager;1"].
-              getService(Ci.nsIScriptSecurityManager);
-
-var gFaviconService = Cc["@mozilla.org/browser/favicon-service;1"].
-                      getService(Ci.nsIFaviconService);
-
-var gPlacesDatabase = Cc["@mozilla.org/browser/nav-history-service;1"].
-                      getService(Ci.nsPIPlacesDatabase).
-                      DBConnection.
-                      clone(true);
-
-var gSitesStmt = gPlacesDatabase.createAsyncStatement(
-                  "SELECT url " +
-                  "FROM moz_places " +
-                  "WHERE rev_host > '.' " +
-                  "AND visit_count > 0 " +
-                  "GROUP BY rev_host " +
-                  "ORDER BY MAX(frecency) DESC " +
-                  "LIMIT :limit");
-
-var gVisitStmt = gPlacesDatabase.createAsyncStatement(
-                  "SELECT SUM(visit_count) AS count " +
-                  "FROM moz_places " +
-                  "WHERE rev_host = :rev_host");
-
-/**
- * Permission types that should be tested with testExactPermission, as opposed
- * to testPermission. This is based on what consumers use to test these permissions.
- */
-var TEST_EXACT_PERM_TYPES = ["geo", "camera", "microphone", "desktop-notification"];
-
-/**
- * Site object represents a single site, uniquely identified by a principal.
- */
-function Site(principal) {
-  this.principal = principal;
-  this.listitem = null;
-}
-
-Site.prototype = {
-  /**
-   * Gets the favicon to use for the site. The callback only gets called if
-   * a favicon is found for either the http URI or the https URI.
-   *
-   * @param aCallback
-   *        A callback function that takes a favicon image URL as a parameter.
-   */
-  getFavicon: function Site_getFavicon(aCallback) {
-    function invokeCallback(aFaviconURI) {
-      try {
-        // Use getFaviconLinkForIcon to get image data from the database instead
-        // of using the favicon URI to fetch image data over the network.
-        aCallback(gFaviconService.getFaviconLinkForIcon(aFaviconURI).spec);
-      } catch (e) {
-        Cu.reportError("AboutPermissions: " + e);
-      }
-    }
-
-    // Get the favicon for the origin
-    gFaviconService.getFaviconURLForPage(this.principal.URI, function (aURI) {
-      if (aURI) {
-        invokeCallback(aURI);
-      }
-    }.bind(this));
-  },
-
-  /**
-   * Gets the number of history visits for the site.
-   *
-   * @param aCallback
-   *        A function that takes the visit count (a number) as a parameter.
-   */
-  getVisitCount: function Site_getVisitCount(aCallback) {
-    // XXX This won't be a very reliable system, as it will count both http: and https: visits
-    // Unfortunately, I don't think that there is a much better way to do it right now.
-    let rev_host = this.principal.URI.host.split("").reverse().join("") + ".";
-    gVisitStmt.params.rev_host = rev_host;
-    gVisitStmt.executeAsync({
-      handleResult: function(aResults) {
-        let row = aResults.getNextRow();
-        let count = row.getResultByName("count") || 0;
-        try {
-          aCallback(count);
-        } catch (e) {
-          Cu.reportError("AboutPermissions: " + e);
-        }
-      },
-      handleError: function(aError) {
-        Cu.reportError("AboutPermissions: " + aError);
-      },
-      handleCompletion: function(aReason) {
-      }
-    });
-  },
-
-  /**
-   * Gets the permission value stored for a specified permission type.
-   *
-   * @param aType
-   *        The permission type string stored in permission manager.
-   *        e.g. "cookie", "geo", "indexedDB", "popup", "image"
-   * @param aResultObj
-   *        An object that stores the permission value set for aType.
-   *
-   * @return A boolean indicating whether or not a permission is set.
-   */
-  getPermission: function Site_getPermission(aType, aResultObj) {
-    // Password saving isn't a nsIPermissionManager permission type, so handle
-    // it seperately.
-    if (aType == "password") {
-      aResultObj.value =  this.loginSavingEnabled ?
-                          Ci.nsIPermissionManager.ALLOW_ACTION :
-                          Ci.nsIPermissionManager.DENY_ACTION;
-      return true;
-    }
-
-    let permissionValue;
-    if (TEST_EXACT_PERM_TYPES.indexOf(aType) == -1) {
-      permissionValue = Services.perms.testPermissionFromPrincipal(this.principal, aType);
-    } else {
-      permissionValue = Services.perms.testExactPermissionFromPrincipal(this.principal, aType);
-    }
-    aResultObj.value = permissionValue;
-
-    return permissionValue != Ci.nsIPermissionManager.UNKNOWN_ACTION;
-  },
-
-  /**
-   * Sets a permission for the site given a permission type and value.
-   *
-   * @param aType
-   *        The permission type string stored in permission manager.
-   *        e.g. "cookie", "geo", "indexedDB", "popup", "image"
-   * @param aPerm
-   *        The permission value to set for the permission type. This should
-   *        be one of the constants defined in nsIPermissionManager.
-   */
-  setPermission: function Site_setPermission(aType, aPerm) {
-    // Password saving isn't a nsIPermissionManager permission type, so handle
-    // it seperately.
-    if (aType == "password") {
-      this.loginSavingEnabled = aPerm == Ci.nsIPermissionManager.ALLOW_ACTION;
-      return;
-    }
-
-    Services.perms.addFromPrincipal(this.principal, aType, aPerm);
-  },
-
-  /**
-   * 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. "cookie", "geo", "indexedDB", "popup", "image"
-   */
-  clearPermission: function Site_clearPermission(aType) {
-    Services.perms.removeFromPrincipal(this.principal, aType);
-  },
-
-  /**
-   * Gets cookies stored for the site. This does not return cookies stored
-   * for the base domain, only the exact hostname stored for the site.
-   *
-   * @return An array of the cookies set for the site.
-   */
-  get cookies() {
-    let host = this.principal.URI.host;
-    let cookies = [];
-    let enumerator = Services.cookies.getCookiesFromHost(host);
-    while (enumerator.hasMoreElements()) {
-      let cookie = enumerator.getNext().QueryInterface(Ci.nsICookie2);
-      // getCookiesFromHost returns cookies for base domain, but we only want
-      // the cookies for the exact domain.
-      if (cookie.rawHost == host) {
-        cookies.push(cookie);
-      }
-    }
-    return cookies;
-  },
-
-  /**
-   * Removes a set of specific cookies from the browser.
-   */
-  clearCookies: function Site_clearCookies() {
-    this.cookies.forEach(function(aCookie) {
-      Services.cookies.remove(aCookie.host, aCookie.name, aCookie.path, false);
-    });
-  },
-
-  /**
-   * Gets logins stored for the site.
-   *
-   * @return An array of the logins stored for the site.
-   */
-  get logins() {
-    let logins = Services.logins.findLogins({}, this.principal.originNoSuffix, "", "");
-    return logins;
-  },
-
-  get loginSavingEnabled() {
-    return Services.logins.getLoginSavingEnabled(this.principal.originNoSuffix);
-  },
-
-  set loginSavingEnabled(isEnabled) {
-    Services.logins.setLoginSavingEnabled(this.principal.originNoSuffix, isEnabled);
-  },
-
-  /**
-   * Removes all data from the browser corresponding to the site.
-   */
-  forgetSite: function Site_forgetSite() {
-    // XXX This removes data for an entire domain, rather than just
-    // an origin. This may produce confusing results, as data will
-    // be cleared for the http:// as well as the https:// domain
-    // if you try to forget the https:// site.
-    ForgetAboutSite.removeDataFromDomain(this.principal.URI.host);
-  }
-}
-
-/**
- * PermissionDefaults object keeps track of default permissions for sites based
- * on global preferences.
- *
- * Inspired by pageinfo/permissions.js
- */
-var PermissionDefaults = {
-  UNKNOWN: Ci.nsIPermissionManager.UNKNOWN_ACTION, // 0
-  ALLOW: Ci.nsIPermissionManager.ALLOW_ACTION, // 1
-  DENY: Ci.nsIPermissionManager.DENY_ACTION, // 2
-  SESSION: Ci.nsICookiePermission.ACCESS_SESSION, // 8
-
-  get password() {
-    if (Services.prefs.getBoolPref("signon.rememberSignons")) {
-      return this.ALLOW;
-    }
-    return this.DENY;
-  },
-  set password(aValue) {
-    let value = (aValue != this.DENY);
-    Services.prefs.setBoolPref("signon.rememberSignons", value);
-  },
-
-  // For use with network.cookie.* prefs.
-  COOKIE_ACCEPT: 0,
-  COOKIE_DENY: 2,
-  COOKIE_NORMAL: 0,
-  COOKIE_SESSION: 2,
-
-  get cookie() {
-    if (Services.prefs.getIntPref("network.cookie.cookieBehavior") == this.COOKIE_DENY) {
-      return this.DENY;
-    }
-
-    if (Services.prefs.getIntPref("network.cookie.lifetimePolicy") == this.COOKIE_SESSION) {
-      return this.SESSION;
-    }
-    return this.ALLOW;
-  },
-  set cookie(aValue) {
-    let value = (aValue == this.DENY) ? this.COOKIE_DENY : this.COOKIE_ACCEPT;
-    Services.prefs.setIntPref("network.cookie.cookieBehavior", value);
-
-    let lifetimeValue = aValue == this.SESSION ? this.COOKIE_SESSION :
-                                                 this.COOKIE_NORMAL;
-    Services.prefs.setIntPref("network.cookie.lifetimePolicy", lifetimeValue);
-  },
-
-  get geo() {
-    if (!Services.prefs.getBoolPref("geo.enabled")) {
-      return this.DENY;
-    }
-    // We always ask for permission to share location with a specific site, so
-    // there is no global ALLOW.
-    return this.UNKNOWN;
-  },
-  set geo(aValue) {
-    let value = (aValue != this.DENY);
-    Services.prefs.setBoolPref("geo.enabled", value);
-  },
-
-  get indexedDB() {
-    if (!Services.prefs.getBoolPref("dom.indexedDB.enabled")) {
-      return this.DENY;
-    }
-    // We always ask for permission to enable indexedDB storage for a specific
-    // site, so there is no global ALLOW.
-    return this.UNKNOWN;
-  },
-  set indexedDB(aValue) {
-    let value = (aValue != this.DENY);
-    Services.prefs.setBoolPref("dom.indexedDB.enabled", value);
-  },
-
-  get popup() {
-    if (Services.prefs.getBoolPref("dom.disable_open_during_load")) {
-      return this.DENY;
-    }
-    return this.ALLOW;
-  },
-  set popup(aValue) {
-    let value = (aValue == this.DENY);
-    Services.prefs.setBoolPref("dom.disable_open_during_load", value);
-  },
-
-  get ["desktop-notification"]() {
-    return this.UNKNOWN;
-  },
-  get camera() {
-    return this.UNKNOWN;
-  },
-  get microphone() {
-    return this.UNKNOWN;
-  }
-};
-
-/**
- * AboutPermissions manages the about:permissions page.
- */
-var AboutPermissions = {
-  /**
-   * Number of sites to return from the places database.
-   */
-  PLACES_SITES_LIMIT: 50,
-
-  /**
-   * When adding sites to the dom sites-list, divide workload into intervals.
-   */
-  LIST_BUILD_CHUNK: 5, // interval size
-  LIST_BUILD_DELAY: 100, // delay between intervals
-
-  /**
-   * Stores a mapping of origin strings to Site objects.
-   */
-  _sites: {},
-
-  /**
-   * Using a getter for sitesFilter to avoid races with tests.
-   */
-  get sitesFilter () {
-    delete this.sitesFilter;
-    return this.sitesFilter = document.getElementById("sites-filter");
-  },
-
-  sitesList: null,
-  _selectedSite: null,
-
-  /**
-   * For testing, track initializations so we can send notifications
-   */
-  _initPlacesDone: false,
-  _initServicesDone: false,
-
-  /**
-   * This reflects the permissions that we expose in the UI. These correspond
-   * to permission type strings in the permission manager, PermissionDefaults,
-   * and element ids in aboutPermissions.xul.
-   *
-   * Potential future additions: "sts/use", "sts/subd"
-   */
-  _supportedPermissions: ["password", "cookie", "geo", "indexedDB", "popup",
-                          "camera", "microphone", "desktop-notification"],
-
-  /**
-   * Permissions that don't have a global "Allow" option.
-   */
-  _noGlobalAllow: ["geo", "indexedDB", "camera", "microphone",
-                   "desktop-notification"],
-
-  /**
-   * Permissions that don't have a global "Deny" option.
-   */
-  _noGlobalDeny: ["camera", "microphone", "desktop-notification"],
-
-  _stringBundle: Services.strings.
-                 createBundle("chrome://browser/locale/preferences/aboutPermissions.properties"),
-
-  /**
-   * Called on page load.
-   */
-  init: function() {
-    this.sitesList = document.getElementById("sites-list");
-
-    this.getSitesFromPlaces();
-
-    this.enumerateServicesGenerator = this.getEnumerateServicesGenerator();
-    setTimeout(this.enumerateServicesDriver.bind(this), this.LIST_BUILD_DELAY);
-
-    // Attach observers in case data changes while the page is open.
-    Services.prefs.addObserver("signon.rememberSignons", this, false);
-    Services.prefs.addObserver("network.cookie.", this, false);
-    Services.prefs.addObserver("geo.enabled", this, false);
-    Services.prefs.addObserver("dom.push.enabled", this, false);
-    Services.prefs.addObserver("dom.indexedDB.enabled", this, false);
-    Services.prefs.addObserver("dom.disable_open_during_load", this, false);
-    Services.prefs.addObserver("dom.push.enabled", this, false);
-
-    Services.obs.addObserver(this, "perm-changed", false);
-    Services.obs.addObserver(this, "passwordmgr-storage-changed", false);
-    Services.obs.addObserver(this, "cookie-changed", false);
-    Services.obs.addObserver(this, "browser:purge-domain-data", false);
-
-    this._observersInitialized = true;
-    Services.obs.notifyObservers(null, "browser-permissions-preinit", null);
-  },
-
-  /**
-   * Called on page unload.
-   */
-  cleanUp: function() {
-    if (this._observersInitialized) {
-      Services.prefs.removeObserver("signon.rememberSignons", this, false);
-      Services.prefs.removeObserver("network.cookie.", this, false);
-      Services.prefs.removeObserver("geo.enabled", this, false);
-      Services.prefs.removeObserver("dom.push.enabled", this, false);
-      Services.prefs.removeObserver("dom.indexedDB.enabled", this, false);
-      Services.prefs.removeObserver("dom.disable_open_during_load", this, false);
-      Services.prefs.removeObserver("dom.push.enabled", this, false);
-
-      Services.obs.removeObserver(this, "perm-changed");
-      Services.obs.removeObserver(this, "passwordmgr-storage-changed");
-      Services.obs.removeObserver(this, "cookie-changed");
-      Services.obs.removeObserver(this, "browser:purge-domain-data");
-    }
-
-    gSitesStmt.finalize();
-    gVisitStmt.finalize();
-    gPlacesDatabase.asyncClose(null);
-  },
-
-  observe: function (aSubject, aTopic, aData) {
-    switch(aTopic) {
-      case "perm-changed":
-        // Permissions changes only affect individual sites.
-        if (!this._selectedSite) {
-          break;
-        }
-        // aSubject is null when nsIPermisionManager::removeAll() is called.
-        if (!aSubject) {
-          this._supportedPermissions.forEach(function(aType){
-            this.updatePermission(aType);
-          }, this);
-          break;
-        }
-        let permission = aSubject.QueryInterface(Ci.nsIPermission);
-        // We can't compare selectedSite.principal and permission.principal here
-        // because we need to handle the case where a parent domain was changed
-        // in a way that affects the subdomain.
-        if (this._supportedPermissions.indexOf(permission.type) != -1) {
-          this.updatePermission(permission.type);
-        }
-        break;
-      case "nsPref:changed":
-        this._supportedPermissions.forEach(function(aType){
-          this.updatePermission(aType);
-        }, this);
-        break;
-      case "passwordmgr-storage-changed":
-        this.updatePermission("password");
-        if (this._selectedSite) {
-          this.updatePasswordsCount();
-        }
-        break;
-      case "cookie-changed":
-        if (this._selectedSite) {
-          this.updateCookiesCount();
-        }
-        break;
-      case "browser:purge-domain-data":
-        this.deleteFromSitesList(aData);
-        break;
-    }
-  },
-
-  /**
-   * Creates Site objects for the top-frecency sites in the places database and stores
-   * them in _sites. The number of sites created is controlled by PLACES_SITES_LIMIT.
-   */
-  getSitesFromPlaces: function() {
-    gSitesStmt.params.limit = this.PLACES_SITES_LIMIT;
-    gSitesStmt.executeAsync({
-      handleResult: function(aResults) {
-        AboutPermissions.startSitesListBatch();
-        let row;
-        while (row = aResults.getNextRow()) {
-          let spec = row.getResultByName("url");
-          let uri = NetUtil.newURI(spec);
-          let principal = gSecMan.createCodebasePrincipal(uri, {});
-
-          AboutPermissions.addPrincipal(principal);
-        }
-        AboutPermissions.endSitesListBatch();
-      },
-      handleError: function(aError) {
-        Cu.reportError("AboutPermissions: " + aError);
-      },
-      handleCompletion: function(aReason) {
-        // Notify oberservers for testing purposes.
-        AboutPermissions._initPlacesDone = true;
-        if (AboutPermissions._initServicesDone) {
-          Services.obs.notifyObservers(null, "browser-permissions-initialized", null);
-        }
-      }
-    });
-  },
-
-  /**
-   * Drives getEnumerateServicesGenerator to work in intervals.
-   */
-  enumerateServicesDriver: function() {
-    if (this.enumerateServicesGenerator.next()) {
-      // Build top sitesList items faster so that the list never seems sparse
-      let delay = Math.min(this.sitesList.itemCount * 5, this.LIST_BUILD_DELAY);
-      setTimeout(this.enumerateServicesDriver.bind(this), delay);
-    } else {
-      this.enumerateServicesGenerator.close();
-      this._initServicesDone = true;
-      if (this._initPlacesDone) {
-        Services.obs.notifyObservers(null, "browser-permissions-initialized", null);
-      }
-    }
-  },
-
-  /**
-   * Finds sites that have non-default permissions and creates Site objects for
-   * them if they are not already stored in _sites.
-   */
-  getEnumerateServicesGenerator: function() {
-    let itemCnt = 1;
-
-    let logins = Services.logins.getAllLogins();
-    logins.forEach(function(aLogin) {
-      if (itemCnt % this.LIST_BUILD_CHUNK == 0) {
-        yield true;
-      }
-      try {
-        // aLogin.hostname is a string in origin URL format (e.g. "http://foo.com")
-        let uri = NetUtil.newURI(aLogin.hostname);
-        let principal = gSecMan.createCodebasePrincipal(uri, {});
-        this.addPrincipal(principal);
-      } catch (e) {
-        // newURI will throw for add-ons logins stored in chrome:// URIs
-      }
-      itemCnt++;
-    }, this);
-
-    let disabledHosts = Services.logins.getAllDisabledHosts();
-    disabledHosts.forEach(function(aHostname) {
-      if (itemCnt % this.LIST_BUILD_CHUNK == 0) {
-        yield true;
-      }
-      try {
-        // aHostname is a string in origin URL format (e.g. "http://foo.com")
-        let uri = NetUtil.newURI(aHostname);
-        let principal = gSecMan.createCodebasePrincipal(uri, {});
-        this.addPrincipal(principal);
-      } catch (e) {
-        // newURI will throw for add-ons logins stored in chrome:// URIs
-      }
-      itemCnt++;
-    }, this);
-
-    let enumerator = Services.perms.enumerator;
-    while (enumerator.hasMoreElements()) {
-      if (itemCnt % this.LIST_BUILD_CHUNK == 0) {
-        yield true;
-      }
-      let permission = enumerator.getNext().QueryInterface(Ci.nsIPermission);
-      // Only include sites with exceptions set for supported permission types.
-      if (this._supportedPermissions.indexOf(permission.type) != -1) {
-        this.addPrincipal(permission.principal);
-      }
-      itemCnt++;
-    }
-
-    yield false;
-  },
-
-  /**
-   * Creates a new Site and adds it to _sites if it's not already there.
-   *
-   * @param aPrincipal
-   *        A principal.
-   */
-  addPrincipal: function(aPrincipal) {
-    if (aPrincipal.origin in this._sites) {
-      return;
-    }
-    let site = new Site(aPrincipal);
-    this._sites[aPrincipal.origin] = site;
-    this.addToSitesList(site);
-  },
-
-  /**
-   * Populates sites-list richlistbox with data from Site object.
-   *
-   * @param aSite
-   *        A Site object.
-   */
-  addToSitesList: function(aSite) {
-    let item = document.createElement("richlistitem");
-    item.setAttribute("class", "site");
-    item.setAttribute("value", aSite.principal.origin);
-
-    aSite.getFavicon(function(aURL) {
-      item.setAttribute("favicon", aURL);
-    });
-    aSite.listitem = item;
-
-    // Make sure to only display relevant items when list is filtered
-    let filterValue = this.sitesFilter.value.toLowerCase();
-    item.collapsed = aSite.principal.origin.toLowerCase().indexOf(filterValue) == -1;
-
-    (this._listFragment || this.sitesList).appendChild(item);
-  },
-
-  startSitesListBatch: function () {
-    if (!this._listFragment)
-      this._listFragment = document.createDocumentFragment();
-  },
-
-  endSitesListBatch: function () {
-    if (this._listFragment) {
-      this.sitesList.appendChild(this._listFragment);
-      this._listFragment = null;
-    }
-  },
-
-  /**
-   * Hides sites in richlistbox based on search text in sites-filter textbox.
-   */
-  filterSitesList: function() {
-    let siteItems = this.sitesList.children;
-    let filterValue = this.sitesFilter.value.toLowerCase();
-
-    if (filterValue == "") {
-      for (let i = 0; i < siteItems.length; i++) {
-        siteItems[i].collapsed = false;
-      }
-      return;
-    }
-
-    for (let i = 0; i < siteItems.length; i++) {
-      let siteValue = siteItems[i].value.toLowerCase();
-      siteItems[i].collapsed = siteValue.indexOf(filterValue) == -1;
-    }
-  },
-
-  /**
-   * Removes all evidence of the selected site. The "forget this site" observer
-   * will call deleteFromSitesList to update the UI.
-   */
-  forgetSite: function() {
-    this._selectedSite.forgetSite();
-  },
-
-  /**
-   * Deletes sites for a host and all of its sub-domains. Removes these sites
-   * from _sites and removes their corresponding elements from the DOM.
-   *
-   * @param aHost
-   *        The host string corresponding to the site to delete.
-   */
-  deleteFromSitesList: function(aHost) {
-    for (let origin in this._sites) {
-      let site = this._sites[origin];
-      if (site.principal.URI.host.hasRootDomain(aHost)) {
-        if (site == this._selectedSite) {
-          // Replace site-specific interface with "All Sites" interface.
-          this.sitesList.selectedItem = document.getElementById("all-sites-item");
-        }
-
-        this.sitesList.removeChild(site.listitem);
-        delete this._sites[site.principal.origin];
-      }
-    }
-  },
-
-  /**
-   * Shows interface for managing site-specific permissions.
-   */
-  onSitesListSelect: function(event) {
-    if (event.target.selectedItem.id == "all-sites-item") {
-      // Clear the header label value from the previously selected site.
-      document.getElementById("site-label").value = "";
-      this.manageDefaultPermissions();
-      return;
-    }
-
-    let origin = event.target.value;
-    let site = this._selectedSite = this._sites[origin];
-    document.getElementById("site-label").value = origin;
-    document.getElementById("header-deck").selectedPanel =
-      document.getElementById("site-header");
-
-    this.updateVisitCount();
-    this.updatePermissionsBox();
-  },
-
-  /**
-   * Shows interface for managing default permissions. This corresponds to
-   * the "All Sites" list item.
-   */
-  manageDefaultPermissions: function() {
-    this._selectedSite = null;
-
-    document.getElementById("header-deck").selectedPanel =
-      document.getElementById("defaults-header");
-
-    this.updatePermissionsBox();
-  },
-
-  /**
-   * Updates permissions interface based on selected site.
-   */
-  updatePermissionsBox: function() {
-    this._supportedPermissions.forEach(function(aType){
-      this.updatePermission(aType);
-    }, this);
-
-    this.updatePasswordsCount();
-    this.updateCookiesCount();
-  },
-
-  /**
-   * Sets menulist for a given permission to the correct state, based on the
-   * stored permission.
-   *
-   * @param aType
-   *        The permission type string stored in permission manager.
-   *        e.g. "cookie", "geo", "indexedDB", "popup", "image"
-   */
-  updatePermission: function(aType) {
-    let allowItem = document.getElementById(aType + "-" + PermissionDefaults.ALLOW);
-    allowItem.hidden = !this._selectedSite &&
-                       this._noGlobalAllow.indexOf(aType) != -1;
-    let denyItem = document.getElementById(aType + "-" + PermissionDefaults.DENY);
-    denyItem.hidden = !this._selectedSite &&
-                      this._noGlobalDeny.indexOf(aType) != -1;
-
-    let permissionMenulist = document.getElementById(aType + "-menulist");
-    let permissionValue;
-    if (!this._selectedSite) {
-      // If there is no selected site, we are updating the default permissions interface.
-      permissionValue = PermissionDefaults[aType];
-      if (aType == "cookie")
-	      // cookie-9 corresponds to ALLOW_FIRST_PARTY_ONLY, which is reserved
-	      // for site-specific preferences only.
-	      document.getElementById("cookie-9").hidden = true;
-    } else {
-      if (aType == "cookie")
-        document.getElementById("cookie-9").hidden = false;
-      let result = {};
-      permissionValue = this._selectedSite.getPermission(aType, result) ?
-                        result.value : PermissionDefaults[aType];
-    }
-
-    permissionMenulist.selectedItem = document.getElementById(aType + "-" + permissionValue);
-  },
-
-  onPermissionCommand: function(event) {
-    let permissionType = event.currentTarget.getAttribute("type");
-    let permissionValue = event.target.value;
-
-    if (!this._selectedSite) {
-      // If there is no selected site, we are setting the default permission.
-      PermissionDefaults[permissionType] = permissionValue;
-    } else {
-      this._selectedSite.setPermission(permissionType, permissionValue);
-    }
-  },
-
-  updateVisitCount: function() {
-    this._selectedSite.getVisitCount(function(aCount) {
-      let visitForm = AboutPermissions._stringBundle.GetStringFromName("visitCount");
-      let visitLabel = PluralForm.get(aCount, visitForm)
-                                  .replace("#1", aCount);
-      document.getElementById("site-visit-count").value = visitLabel;
-    });
-  },
-
-  updatePasswordsCount: function() {
-    if (!this._selectedSite) {
-      document.getElementById("passwords-count").hidden = true;
-      document.getElementById("passwords-manage-all-button").hidden = false;
-      return;
-    }
-
-    let passwordsCount = this._selectedSite.logins.length;
-    let passwordsForm = this._stringBundle.GetStringFromName("passwordsCount");
-    let passwordsLabel = PluralForm.get(passwordsCount, passwordsForm)
-                                   .replace("#1", passwordsCount);
-
-    document.getElementById("passwords-label").value = passwordsLabel;
-    document.getElementById("passwords-manage-button").disabled = (passwordsCount < 1);
-    document.getElementById("passwords-manage-all-button").hidden = true;
-    document.getElementById("passwords-count").hidden = false;
-  },
-
-  /**
-   * Opens password manager dialog.
-   */
-  managePasswords: function() {
-    let selectedOrigin = "";
-    if (this._selectedSite) {
-      selectedOrigin = this._selectedSite.principal.URI.prePath;
-    }
-
-    let win = Services.wm.getMostRecentWindow("Toolkit:PasswordManager");
-    if (win) {
-      win.setFilter(selectedOrigin);
-      win.focus();
-    } else {
-      window.openDialog("chrome://passwordmgr/content/passwordManager.xul",
-                        "Toolkit:PasswordManager", "", {filterString : selectedOrigin});
-    }
-  },
-
-  updateCookiesCount: function() {
-    if (!this._selectedSite) {
-      document.getElementById("cookies-count").hidden = true;
-      document.getElementById("cookies-clear-all-button").hidden = false;
-      document.getElementById("cookies-manage-all-button").hidden = false;
-      return;
-    }
-
-    let cookiesCount = this._selectedSite.cookies.length;
-    let cookiesForm = this._stringBundle.GetStringFromName("cookiesCount");
-    let cookiesLabel = PluralForm.get(cookiesCount, cookiesForm)
-                                 .replace("#1", cookiesCount);
-
-    document.getElementById("cookies-label").value = cookiesLabel;
-    document.getElementById("cookies-clear-button").disabled = (cookiesCount < 1);
-    document.getElementById("cookies-manage-button").disabled = (cookiesCount < 1);
-    document.getElementById("cookies-clear-all-button").hidden = true;
-    document.getElementById("cookies-manage-all-button").hidden = true;
-    document.getElementById("cookies-count").hidden = false;
-  },
-
-  /**
-   * Clears cookies for the selected site.
-   */
-  clearCookies: function() {
-    if (!this._selectedSite) {
-      return;
-    }
-    let site = this._selectedSite;
-    site.clearCookies(site.cookies);
-    this.updateCookiesCount();
-  },
-
-  /**
-   * Opens cookie manager dialog.
-   */
-  manageCookies: function() {
-    // Cookies are stored by-host, and thus we filter the cookie window
-    // using only the host of the selected principal's origin
-    let selectedHost = "";
-    if (this._selectedSite) {
-      selectedHost = this._selectedSite.principal.URI.host;
-    }
-
-    let win = Services.wm.getMostRecentWindow("Browser:Cookies");
-    if (win) {
-      win.gCookiesWindow.setFilter(selectedHost);
-      win.focus();
-    } else {
-      window.openDialog("chrome://browser/content/preferences/cookies.xul",
-                        "Browser:Cookies", "", {filterString : selectedHost});
-    }
-  },
-
-  /**
-   * Focusses the filter box.
-   */
-  focusFilterBox: function() {
-    this.sitesFilter.focus();
-  }
-}
-
-// See nsPrivateBrowsingService.js
-String.prototype.hasRootDomain = function hasRootDomain(aDomain) {
-  let index = this.indexOf(aDomain);
-  if (index == -1)
-    return false;
-
-  if (this == aDomain)
-    return true;
-
-  let prevChar = this[index - 1];
-  return (index == (this.length - aDomain.length)) &&
-         (prevChar == "." || prevChar == "/");
-}
deleted file mode 100644
--- a/browser/components/preferences/aboutPermissions.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<!-- 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/. -->
-
-<!DOCTYPE bindings>
-<bindings xmlns="http://www.mozilla.org/xbl"
-          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-          xmlns:xbl="http://www.mozilla.org/xbl">
-  <binding id="site" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
-    <content>
-      <xul:hbox class="site-container" align="center" flex="1">
-        <xul:image xbl:inherits="src=favicon" class="site-favicon"/>
-        <xul:label xbl:inherits="value,selected" class="site-domain" crop="end" flex="1"/>
-      </xul:hbox>
-    </content>
-  </binding>
-</bindings>
deleted file mode 100644
--- a/browser/components/preferences/aboutPermissions.xul
+++ /dev/null
@@ -1,266 +0,0 @@
-<?xml version="1.0"?>
-<!-- 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/. -->
-
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://browser/content/preferences/aboutPermissions.css"?>
-<?xml-stylesheet href="chrome://browser/skin/preferences/aboutPermissions.css"?>
-
-<!DOCTYPE page [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
-%brandDTD;
-<!ENTITY % aboutPermissionsDTD SYSTEM "chrome://browser/locale/preferences/aboutPermissions.dtd" >
-%aboutPermissionsDTD;
-]>
-
-<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-      xmlns:xhtml="http://www.w3.org/1999/xhtml"
-      id="permissions-page" title="&permissionsManager.title;"
-      onload="AboutPermissions.init();"
-      onunload="AboutPermissions.cleanUp();"
-      disablefastfind="true"
-      role="application">
-
-  <script type="application/javascript"
-          src="chrome://browser/content/preferences/aboutPermissions.js"/>
-
-  <keyset>
-    <key key="&focusSearch.key;" modifiers="accel" oncommand="AboutPermissions.focusFilterBox();"/>
-  </keyset>
-
-  <hbox flex="1" id="permissions-content" class="main-content">
-
-    <vbox id="sites-box">
-      <textbox id="sites-filter"
-               emptytext="&sites.search;"
-               oncommand="AboutPermissions.filterSitesList();"
-               type="search"/>
-      <richlistbox id="sites-list"
-                   flex="1"
-                   class="list"
-                   onselect="AboutPermissions.onSitesListSelect(event);">
-        <richlistitem id="all-sites-item"
-                      class="site"
-                      value="&sites.allSites;"/>
-      </richlistbox>
-    </vbox>
-
-    <vbox id="permissions-box" flex="1">
-
-      <deck id="header-deck">
-        <hbox id="site-header" class="pref-item" align="center">
-          <description id="site-description">
-            &header.site.start;<label id="site-label"/>&header.site.end;
-          </description>
-          <label id="site-visit-count"/>
-          <spacer flex="1"/>
-          <button id="forget-site-button"
-                  label="&permissions.forgetSite;"
-                  oncommand="AboutPermissions.forgetSite();"/>
-        </hbox>
-
-        <hbox id="defaults-header" class="pref-item" align="center">
-          <description id="defaults-description">
-            &header.defaults;
-          </description>
-        </hbox>
-      </deck>
-
-      <vbox id="permissions-list" flex="1">
-
-        <!-- Passwords -->
-        <hbox id="password-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="password"/>
-          <vbox>
-            <label class="pref-title" value="&password.label;"/>
-            <hbox align="center">
-              <menulist id="password-menulist"
-                        class="pref-menulist"
-                        type="password"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="password-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="password-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-              <button id="passwords-manage-all-button"
-                      label="&password.manage;"
-                      oncommand="AboutPermissions.managePasswords();"/>
-            </hbox>
-            <hbox id="passwords-count" align="center">
-              <label id="passwords-label"/>
-              <button id="passwords-manage-button"
-                      label="&password.manage;"
-                      oncommand="AboutPermissions.managePasswords();"/>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- Geolocation -->
-        <hbox id="geo-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="geo"/>
-          <vbox>
-            <label class="pref-title" value="&geo.label;"/>
-            <hbox>
-              <menulist id="geo-menulist"
-                        class="pref-menulist"
-                        type="geo"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="geo-0" value="0" label="&permission.alwaysAsk;"/>
-                  <menuitem id="geo-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="geo-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- Camera -->
-        <hbox id="camera-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="camera"/>
-          <vbox>
-            <label class="pref-title" value="&camera.label;"/>
-            <hbox align="center">
-              <menulist id="camera-menulist"
-                        class="pref-menulist"
-                        type="camera"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="camera-0" value="0" label="&permission.alwaysAsk;"/>
-                  <menuitem id="camera-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="camera-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- Microphone -->
-        <hbox id="microphone-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="microphone"/>
-          <vbox>
-            <label class="pref-title" value="&microphone.label;"/>
-            <hbox align="center">
-              <menulist id="microphone-menulist"
-                        class="pref-menulist"
-                        type="microphone"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="microphone-0" value="0" label="&permission.alwaysAsk;"/>
-                  <menuitem id="microphone-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="microphone-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- Cookies -->
-        <hbox id="cookie-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="cookie"/>
-          <vbox>
-            <label class="pref-title" value="&cookie.label;"/>
-            <hbox align="center">
-              <menulist id="cookie-menulist"
-                        class="pref-menulist"
-                        type="cookie"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="cookie-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="cookie-8" value="8" label="&permission.allowForSession;"/>
-                  <menuitem id="cookie-9" value="9" label="&permission.allowFirstPartyOnly;"/>
-                  <menuitem id="cookie-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-              <button id="cookies-clear-all-button"
-                      label="&cookie.removeAll;"
-                      oncommand="Services.cookies.removeAll();"/>
-              <button id="cookies-manage-all-button"
-                      label="&cookie.manage;"
-                      oncommand="AboutPermissions.manageCookies();"/>
-            </hbox>
-            <hbox id="cookies-count" align="center">
-              <label id="cookies-label"/>
-              <button id="cookies-clear-button"
-                      label="&cookie.remove;"
-                      oncommand="AboutPermissions.clearCookies();"/>
-              <button id="cookies-manage-button"
-                      label="&cookie.manage;"
-                      oncommand="AboutPermissions.manageCookies();"/>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- Pop-up Blocking -->
-        <hbox id="popup-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="popup"/>
-          <vbox>
-            <label class="pref-title" value="&popup.label;"/>
-            <hbox>
-              <menulist id="popup-menulist"
-                        class="pref-menulist"
-                        type="popup"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="popup-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="popup-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- IndexedDB Storage -->
-        <hbox id="indexedDB-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="indexedDB"/>
-          <vbox>
-            <label class="pref-title" value="&indexedDB.label;"/>
-            <hbox>
-              <menulist id="indexedDB-menulist"
-                        class="pref-menulist"
-                        type="indexedDB"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="indexedDB-0" value="0" label="&permission.alwaysAsk;"/>
-                  <menuitem id="indexedDB-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="indexedDB-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-          </vbox>
-        </hbox>
-
-        <!-- Notifications -->
-        <hbox id="desktop-notification-pref-item"
-              class="pref-item" align="top">
-          <image class="pref-icon" type="desktop-notification"/>
-          <vbox>
-            <label class="pref-title" value="&desktop-notification2.label;"/>
-            <hbox align="center">
-              <menulist id="desktop-notification-menulist"
-                        class="pref-menulist"
-                        type="desktop-notification"
-                        oncommand="AboutPermissions.onPermissionCommand(event);">
-                <menupopup>
-                  <menuitem id="desktop-notification-0" value="0" label="&permission.alwaysAsk;"/>
-                  <menuitem id="desktop-notification-1" value="1" label="&permission.allow;"/>
-                  <menuitem id="desktop-notification-2" value="2" label="&permission.block;"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-          </vbox>
-        </hbox>
-      </vbox>
-    </vbox>
-  </hbox>
-
-</page>
--- a/browser/components/preferences/in-content/tests/browser.ini
+++ b/browser/components/preferences/in-content/tests/browser.ini
@@ -9,24 +9,22 @@ support-files =
 [browser_bug410900.js]
 [browser_bug705422.js]
 [browser_bug731866.js]
 [browser_bug795764_cachedisabled.js]
 [browser_bug1018066_resetScrollPosition.js]
 [browser_bug1020245_openPreferences_to_paneContent.js]
 [browser_change_app_handler.js]
 skip-if = os != "win" # This test tests the windows-specific app selection dialog, so can't run on non-Windows
-[browser_chunk_permissions.js]
 [browser_connection.js]
 [browser_connection_bug388287.js]
 [browser_cookies_exceptions.js]
 [browser_healthreport.js]
 skip-if = !healthreport || (os == 'linux' && debug)
 [browser_notifications_do_not_disturb.js]
-[browser_permissions.js]
 [browser_permissions_urlFieldHidden.js]
 [browser_proxy_backup.js]
 [browser_privacypane_1.js]
 [browser_privacypane_3.js]
 [browser_privacypane_4.js]
 [browser_privacypane_5.js]
 [browser_privacypane_8.js]
 skip-if = e10s # Bug ?????? -  "leaked until shutdown [nsGlobalWindow #99 about:preferences]"
deleted file mode 100644
--- a/browser/components/preferences/in-content/tests/browser_chunk_permissions.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-Components.utils.import("resource://gre/modules/NetUtil.jsm");
-Components.utils.import("resource://gre/modules/ForgetAboutSite.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils",
-  "resource://testing-common/PlacesTestUtils.jsm");
-
-const ABOUT_PERMISSIONS_SPEC = "about:permissions";
-
-const TEST_URI_1 = NetUtil.newURI("http://mozilla.com/");
-const TEST_URI_2 = NetUtil.newURI("http://mozilla.org/");
-const TEST_URI_3 = NetUtil.newURI("http://wikipedia.org/");
-
-// values from DefaultPermissions object
-const PERM_UNKNOWN = 0;
-const PERM_ALLOW = 1;
-const PERM_DENY = 2;
-
-// used to set permissions on test sites
-const TEST_PERMS = {
-  "password": PERM_ALLOW,
-  "cookie": PERM_ALLOW,
-  "geo": PERM_UNKNOWN,
-  "indexedDB": PERM_UNKNOWN,
-  "popup": PERM_DENY
-};
-
-function test() {
-  waitForExplicitFinish();
-  registerCleanupFunction(cleanUp);
-  setup(function() {
-    runNextTest();
-  });
-}
-
-function setup(aCallback) {
-  // add test history visit
-  PlacesTestUtils.addVisits(TEST_URI_1).then(() => {
-    // set permissions ourselves to avoid problems with different defaults
-    // from test harness configuration
-    for (let type in TEST_PERMS) {
-      if (type == "password") {
-        Services.logins.setLoginSavingEnabled(TEST_URI_2.prePath, true);
-      } else {
-        // set permissions on a site without history visits to test enumerateServices
-        Services.perms.add(TEST_URI_2, type, TEST_PERMS[type]);
-      }
-    }
-
-    Services.perms.add(TEST_URI_3, "popup", TEST_PERMS["popup"]);
-    aCallback();
-  });
-}
-
-function cleanUp() {
-  for (let type in TEST_PERMS) {
-    if (type != "password") {
-      Services.perms.remove(TEST_URI_1, type);
-      Services.perms.remove(TEST_URI_2, type);
-      Services.perms.remove(TEST_URI_3, type);
-    }
-  }
-}
-
-function runNextTest() {
-  if (gTestIndex == tests.length) {
-    PlacesTestUtils.clearHistory().then(finish);
-    return;
-  }
-
-  let nextTest = tests[gTestIndex++];
-  info(nextTest.desc);
-
-  function preinit_observer() {
-    Services.obs.removeObserver(preinit_observer, "browser-permissions-preinit");
-    nextTest.preInit();
-  }
-  Services.obs.addObserver(preinit_observer, "browser-permissions-preinit", false);
-
-  function init_observer() {
-    Services.obs.removeObserver(init_observer, "browser-permissions-initialized");
-    nextTest.run();
-  }
-  Services.obs.addObserver(init_observer, "browser-permissions-initialized", false);
-
-  // open about:permissions
-  let tab = gBrowser.selectedTab = gBrowser.addTab("about:permissions");
-  registerCleanupFunction(function() {
-    gBrowser.removeTab(tab);
-  });
-}
-
-var gSitesList;
-
-var gTestIndex = 0;
-var tests = [
-  // 'preInit' occurs after opening about:permissions, before sites-list is populated
-  // 'run' occurs after sites-list is populated
-  {
-    desc: "test filtering before sites-list is fully constructed.",
-    preInit: function() {
-      let sitesFilter = gBrowser.contentDocument.getElementById("sites-filter");
-      sitesFilter.value = TEST_URI_2.host;
-      sitesFilter.doCommand();
-    },
-    run: function() {
-      let testSite1 = getSiteItem(TEST_URI_1.prePath);
-      ok(testSite1.collapsed, "test site 1 is collapsed after early filtering");
-      let testSite2 = getSiteItem(TEST_URI_2.prePath);
-      ok(!testSite2.collapsed, "test site 2 is not collapsed after early filtering");
-      let testSite3 = getSiteItem(TEST_URI_3.prePath);
-      ok(testSite3.collapsed, "test site 3 is collapsed after early filtering");
-
-      runNextTest();
-    }
-  },
-  {
-    desc: "test removing from sites-list before it is fully constructed.",
-    preInit: function() {
-      ForgetAboutSite.removeDataFromDomain(TEST_URI_2.host);
-    },
-    run: function() {
-      let testSite1 = getSiteItem(TEST_URI_1.prePath);
-      ok(testSite1, "test site 1 was not removed from sites list");
-      let testSite2 = getSiteItem(TEST_URI_2.prePath);
-      ok(!testSite2, "test site 2 was pre-removed from sites list");
-      let testSite3 = getSiteItem(TEST_URI_3.prePath);
-      ok(testSite3, "test site 3 was not removed from sites list");
-
-      runNextTest();
-    }
-  }
-];
-
-function getSiteItem(aPrePath) {
-  return gBrowser.contentDocument.
-                  querySelector(".site[value='" + aPrePath + "']");
-}
deleted file mode 100644
--- a/browser/components/preferences/in-content/tests/browser_permissions.js
+++ /dev/null
@@ -1,334 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-Components.utils.import("resource://gre/modules/NetUtil.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesTestUtils",
-  "resource://testing-common/PlacesTestUtils.jsm");
-
-const ABOUT_PERMISSIONS_SPEC = "about:permissions";
-
-const TEST_URI_1 = NetUtil.newURI("http://mozilla.com/");
-const TEST_URI_2 = NetUtil.newURI("http://mozilla.org/");
-
-const TEST_PRINCIPAL_1 =
-  Services.scriptSecurityManager.createCodebasePrincipal(TEST_URI_1, {});
-const TEST_PRINCIPAL_2 =
-  Services.scriptSecurityManager.createCodebasePrincipal(TEST_URI_2, {});
-
-// values from DefaultPermissions object
-const PERM_UNKNOWN = 0;
-const PERM_ALLOW = 1;
-const PERM_DENY = 2;
-// cookie specific permissions
-const PERM_FIRST_PARTY_ONLY = 9;
-
-// used to set permissions on test sites
-const TEST_PERMS = {
-  "password": PERM_ALLOW,
-  "cookie": PERM_ALLOW,
-  "geo": PERM_UNKNOWN,
-  "desktop-notification": PERM_UNKNOWN,
-  "indexedDB": PERM_UNKNOWN,
-  "popup": PERM_DENY,
-  "camera": PERM_UNKNOWN,
-  "microphone": PERM_UNKNOWN
-};
-
-const NO_GLOBAL_ALLOW = [
-  "geo",
-  "indexedDB",
-];
-
-// number of managed permissions in the interface
-const TEST_PERMS_COUNT = 8;
-
-function test() {
-  waitForExplicitFinish();
-  registerCleanupFunction(cleanUp);
-
-  // add test history visit
-  PlacesTestUtils.addVisits(TEST_URI_1).then(() => {
-    // set permissions ourselves to avoid problems with different defaults
-    // from test harness configuration
-    for (let type in TEST_PERMS) {
-      if (type == "password") {
-        Services.logins.setLoginSavingEnabled(TEST_URI_2.prePath, true);
-      } else {
-        // set permissions on a site without history visits to test enumerateServices
-        Services.perms.addFromPrincipal(TEST_PRINCIPAL_2, type, TEST_PERMS[type]);
-      }
-    }
-
-    // open about:permissions
-    gBrowser.selectedTab = gBrowser.addTab("about:permissions");
-  });
-
-  function observer() {
-    Services.obs.removeObserver(observer, "browser-permissions-initialized");
-    runNextTest();
-  }
-  Services.obs.addObserver(observer, "browser-permissions-initialized", false);
-}
-
-function cleanUp() {
-  for (let type in TEST_PERMS) {
-    if (type != "password") {
-      Services.perms.removeFromPrincipal(TEST_PRINCIPAL_1, type);
-      Services.perms.removeFromPrincipal(TEST_PRINCIPAL_2, type);
-    }
-  }
-
-  gBrowser.removeTab(gBrowser.selectedTab);
-}
-
-function runNextTest() {
-  if (gTestIndex == tests.length) {
-    PlacesTestUtils.clearHistory().then(finish);
-    return;
-  }
-
-  let nextTest = tests[gTestIndex++];
-  info("[" + nextTest.name + "] running test");
-  nextTest();
-}
-
-var gSitesList;
-var gHeaderDeck;
-var gSiteLabel;
-
-var gTestIndex = 0;
-var tests = [
-  function test_page_load() {
-    is(gBrowser.currentURI.spec, ABOUT_PERMISSIONS_SPEC, "about:permissions loaded");
-
-    gSitesList = gBrowser.contentDocument.getElementById("sites-list");
-    ok(gSitesList, "got sites list");
-
-    gHeaderDeck = gBrowser.contentDocument.getElementById("header-deck");
-    ok(gHeaderDeck, "got header deck");
-
-    gSiteLabel = gBrowser.contentDocument.getElementById("site-label");
-    ok(gSiteLabel, "got site label");
-
-    runNextTest();
-  },
-
-  function test_sites_list() {
-    is(gSitesList.firstChild.id, "all-sites-item",
-       "all sites is the first item in the sites list");
-
-    ok(getSiteItem(TEST_URI_1.prePath), "site item from places db exists");
-    ok(getSiteItem(TEST_URI_2.prePath), "site item from enumerating services exists");
-
-    runNextTest();
-  },
-
-  function test_filter_sites_list() {
-    // set filter to test host
-    let sitesFilter = gBrowser.contentDocument.getElementById("sites-filter");
-    sitesFilter.value = TEST_URI_1.host;
-    sitesFilter.doCommand();
-
-    // make sure correct sites are collapsed/showing
-    let testSite1 = getSiteItem(TEST_URI_1.prePath);
-    ok(!testSite1.collapsed, "test site 1 is not collapsed");
-    let testSite2 = getSiteItem(TEST_URI_2.prePath);
-    ok(testSite2.collapsed, "test site 2 is collapsed");
-
-    // clear filter
-    sitesFilter.value = "";
-    sitesFilter.doCommand();
-
-    runNextTest();
-  },
-
-  function test_all_sites() {
-    // "All Sites" item should be selected when the page is first loaded
-    is(gSitesList.selectedItem, gBrowser.contentDocument.getElementById("all-sites-item"),
-       "all sites item is selected");
-
-    let defaultsHeader = gBrowser.contentDocument.getElementById("defaults-header");
-    is(defaultsHeader, gHeaderDeck.selectedPanel,
-       "correct header shown for all sites");
-
-    ok(gBrowser.contentDocument.getElementById("passwords-count").hidden,
-       "passwords count is hidden");
-    ok(gBrowser.contentDocument.getElementById("cookies-count").hidden,
-       "cookies count is hidden");
-
-    // Test to make sure "Allow" items hidden for certain permission types
-    NO_GLOBAL_ALLOW.forEach(function(aType) {
-      let menuitem = gBrowser.contentDocument.getElementById(aType + "-" + PERM_ALLOW);
-      ok(menuitem.hidden, aType + " allow menuitem hidden for all sites");
-    });
-
-    runNextTest();
-  },
-
-  function test_all_sites_permission() {
-    // apply the old default of allowing all cookies
-    Services.prefs.setIntPref("network.cookie.cookieBehavior", 0);
-
-    // there should be no user-set pref for cookie behavior
-    is(Services.prefs.getIntPref("network.cookie.cookieBehavior"), PERM_UNKNOWN,
-       "network.cookie.cookieBehavior is expected default");
-
-    // the default behavior is to allow cookies
-    let cookieMenulist = getPermissionMenulist("cookie");
-    is(cookieMenulist.value, PERM_ALLOW,
-       "menulist correctly shows that cookies are allowed");
-
-    // set the pref to block cookies
-    Services.prefs.setIntPref("network.cookie.cookieBehavior", PERM_DENY);
-    // check to make sure this change is reflected in the UI
-    is(cookieMenulist.value, PERM_DENY, "menulist correctly shows that cookies are blocked");
-
-    // clear the pref
-    Services.prefs.clearUserPref("network.cookie.cookieBehavior");
-
-    runNextTest();
-  },
-
-  function test_manage_all_passwords() {
-    // make sure "Manage All Passwords..." button opens the correct dialog
-    addWindowListener("chrome://passwordmgr/content/passwordManager.xul", runNextTest);
-    gBrowser.contentDocument.getElementById("passwords-manage-all-button").doCommand();
-
-  },
-
-  function test_manage_all_cookies() {
-    // make sure "Manage All Cookies..." button opens the correct dialog
-    addWindowListener("chrome://browser/content/preferences/cookies.xul", runNextTest);
-    gBrowser.contentDocument.getElementById("cookies-manage-all-button").doCommand();
-  },
-
-  function test_select_site() {
-    // select the site that has the permissions we set at the beginning of the test
-    let testSiteItem = getSiteItem(TEST_URI_2.prePath);
-    gSitesList.selectedItem = testSiteItem;
-
-    let siteHeader = gBrowser.contentDocument.getElementById("site-header");
-    is(siteHeader, gHeaderDeck.selectedPanel,
-       "correct header shown for a specific site");
-    is(gSiteLabel.value, TEST_URI_2.prePath, "header updated for selected site");
-
-    ok(!gBrowser.contentDocument.getElementById("passwords-count").hidden,
-       "passwords count is not hidden");
-    ok(!gBrowser.contentDocument.getElementById("cookies-count").hidden,
-       "cookies count is not hidden");
-
-    // Test to make sure "Allow" items are *not* hidden for certain permission types
-    NO_GLOBAL_ALLOW.forEach(function(aType) {
-      let menuitem = gBrowser.contentDocument.getElementById(aType + "-" + PERM_ALLOW);
-      ok(!menuitem.hidden, aType  + " allow menuitem not hidden for single site");
-    });
-
-    runNextTest();
-  },
-
-  function test_permissions() {
-    let menulists = gBrowser.contentDocument.getElementsByClassName("pref-menulist");
-    is(menulists.length, TEST_PERMS_COUNT, "got expected number of managed permissions");
-
-    for (let i = 0; i < menulists.length; i++) {
-      let permissionMenulist = menulists.item(i);
-      let permissionType = permissionMenulist.getAttribute("type");
-
-      // permissions should reflect what we set at the beginning of the test
-      is(permissionMenulist.value, TEST_PERMS[permissionType],
-        "got expected value for " + permissionType + " permission");
-    }
-
-    runNextTest();
-  },
-
-  function test_permission_change() {
-    let geoMenulist = getPermissionMenulist("geo");
-    is(geoMenulist.value, PERM_UNKNOWN, "menulist correctly shows that geolocation permission is unspecified");
-
-    // change a permission programatically
-    Services.perms.addFromPrincipal(TEST_PRINCIPAL_2, "geo", PERM_DENY);
-    // check to make sure this change is reflected in the UI
-    is(geoMenulist.value, PERM_DENY, "menulist shows that geolocation is blocked");
-
-    // change a permisssion in the UI
-    let geoAllowItem = gBrowser.contentDocument.getElementById("geo-" + PERM_ALLOW);
-    geoMenulist.selectedItem = geoAllowItem;
-    geoMenulist.doCommand();
-    // check to make sure this change is reflected in the permission manager
-    is(Services.perms.testPermissionFromPrincipal(TEST_PRINCIPAL_2, "geo"), PERM_ALLOW,
-       "permission manager shows that geolocation is allowed");
-
-
-    // change a site-specific cookie permission, just for fun
-    let cookieMenuList = getPermissionMenulist("cookie");
-    let cookieItem = gBrowser.contentDocument.getElementById("cookie-" + PERM_FIRST_PARTY_ONLY);
-    cookieMenuList.selectedItem = cookieItem;
-    cookieMenuList.doCommand();
-    is(cookieMenuList.value, PERM_FIRST_PARTY_ONLY, "menulist correctly shows that " +
-       "first party only cookies are allowed");
-    is(Services.perms.testPermissionFromPrincipal(TEST_PRINCIPAL_2, "cookie"),
-       PERM_FIRST_PARTY_ONLY, "permission manager shows that first party cookies " +
-       "are allowed");
-
-    runNextTest();
-  },
-
-  function test_forget_site() {
-    // click "Forget About This Site" button
-    gBrowser.contentDocument.getElementById("forget-site-button").doCommand();
-    PlacesTestUtils.clearHistory().then(() => {
-      is(gSiteLabel.value, "", "site label cleared");
-
-      let allSitesItem = gBrowser.contentDocument.getElementById("all-sites-item");
-      is(gSitesList.selectedItem, allSitesItem,
-         "all sites item selected after forgetting selected site");
-
-      // check to make sure site is gone from sites list
-      let testSiteItem = getSiteItem(TEST_URI_2.prePath);
-      ok(!testSiteItem, "site removed from sites list");
-
-      // check to make sure we forgot all permissions corresponding to site
-      for (let type in TEST_PERMS) {
-        if (type == "password") {
-          ok(Services.logins.getLoginSavingEnabled(TEST_URI_2.prePath),
-             "password saving should be enabled by default");
-        } else {
-          is(Services.perms.testPermissionFromPrincipal(TEST_PRINCIPAL_2, type), PERM_UNKNOWN,
-             type + " permission should not be set for test site 2");
-        }
-      }
-
-      runNextTest();
-    });
-  }
-];
-
-function getPermissionMenulist(aType) {
-  return gBrowser.contentDocument.getElementById(aType + "-menulist");
-}
-
-function getSiteItem(aHost) {
-  return gBrowser.contentDocument.
-                  querySelector(".site[value='" + aHost + "']");
-}
-
-function addWindowListener(aURL, aCallback) {
-  Services.wm.addListener({
-    onOpenWindow: function(aXULWindow) {
-      info("window opened, waiting for focus");
-      Services.wm.removeListener(this);
-
-      var domwindow = aXULWindow.QueryInterface(Ci.nsIInterfaceRequestor)
-                                .getInterface(Ci.nsIDOMWindow);
-      waitForFocus(function() {
-        is(domwindow.document.location.href, aURL, "should have seen the right window open");
-        domwindow.close();
-        aCallback();
-      }, domwindow);
-    },
-    onCloseWindow: function(aXULWindow) { },
-    onWindowTitleChange: function(aXULWindow, aNewTitle) { }
-  });
-}
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -1,17 +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/.
 
 browser.jar:
-    content/browser/preferences/aboutPermissions.xul
-    content/browser/preferences/aboutPermissions.js
-    content/browser/preferences/aboutPermissions.css
-    content/browser/preferences/aboutPermissions.xml
     content/browser/preferences/applicationManager.xul
     content/browser/preferences/applicationManager.js
     content/browser/preferences/blocklists.xul
     content/browser/preferences/blocklists.js
 *   content/browser/preferences/colors.xul
 *   content/browser/preferences/cookies.xul
 *   content/browser/preferences/cookies.js
 *   content/browser/preferences/connection.xul
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/preferences/aboutPermissions.dtd
+++ /dev/null
@@ -1,48 +0,0 @@
-<!-- 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/. -->
-
-<!ENTITY permissionsManager.title        "Permissions Manager">
-
-<!ENTITY sites.search                    "Search Sites">
-<!ENTITY sites.allSites                  "All Sites">
-
-<!-- LOCALIZATION NOTE (permissions.header.start, permissions.header.end): These strings
-     surround the host name of the site to make the header for the permissions page.
-     example: "Permissions for mozilla.org" -->
-<!ENTITY header.site.start               "Permissions for">
-<!ENTITY header.site.end                 "">
-
-<!ENTITY header.defaults                 "Default Permissions for All Sites">
-
-<!ENTITY permissions.forgetSite          "Forget About This Site">
-
-<!ENTITY permission.alwaysAsk            "Always Ask">
-<!ENTITY permission.allow                "Allow">
-<!ENTITY permission.allowForSession      "Allow for Session">
-<!ENTITY permission.allowFirstPartyOnly  "Allow First Party Only">
-<!ENTITY permission.block                "Block">
-
-<!ENTITY password.label                  "Store Passwords">
-<!ENTITY password.manage                 "Manage Passwords…">
-
-<!ENTITY cookie.label                    "Set Cookies">
-<!ENTITY cookie.remove                   "Remove Cookies">
-<!ENTITY cookie.manage                   "Manage Cookies…">
-<!ENTITY cookie.removeAll                "Remove All Cookies">
-
-<!ENTITY geo.label                       "Share Location">
-
-<!ENTITY plugins.label                   "Plugins">
-
-<!-- LOCALIZATION NOTE (indexedDB.label): This is describing indexedDB storage
-     using the same language used for the permIndexedDB string in browser/pageInfo.dtd -->
-<!ENTITY indexedDB.label                 "Maintain Offline Storage">
-
-<!ENTITY popup.label                     "Open Pop-up Windows">
-
-<!ENTITY desktop-notification2.label     "Receive Notifications">
-<!ENTITY camera.label                    "Use the Camera">
-<!ENTITY microphone.label                "Use the Microphone">
-
-<!ENTITY focusSearch.key                 "f">
deleted file mode 100644
--- a/browser/locales/en-US/chrome/browser/preferences/aboutPermissions.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-# 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/.
-
-# LOCALIZATION NOTE (visitCount): Semicolon-separated list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-# #1 is the number of history visits for a site
-visitCount=#1 visit;#1 visits
-
-# LOCALIZATION NOTE (passwordsCount, cookiesCount): Semicolon-separated list of plural forms.
-# See: http://developer.mozilla.org/en/docs/Localization_and_Plurals
-passwordsCount=#1 password is stored for this website.;#1 passwords are stored for this website.
-cookiesCount=#1 cookie is set for this website.;#1 cookies are set for this website.
--- a/browser/locales/jar.mn
+++ b/browser/locales/jar.mn
@@ -60,18 +60,16 @@
 #ifdef MOZ_SAFE_BROWSING
     locale/browser/safebrowsing/phishing-afterload-warning-message.dtd (%chrome/browser/safebrowsing/phishing-afterload-warning-message.dtd)
     locale/browser/safebrowsing/report-phishing.dtd                    (%chrome/browser/safebrowsing/report-phishing.dtd)
 #endif
     locale/browser/feeds/subscribe.dtd              (%chrome/browser/feeds/subscribe.dtd)
     locale/browser/feeds/subscribe.properties       (%chrome/browser/feeds/subscribe.properties)
     locale/browser/migration/migration.dtd         (%chrome/browser/migration/migration.dtd)
     locale/browser/migration/migration.properties  (%chrome/browser/migration/migration.properties)
-    locale/browser/preferences/aboutPermissions.dtd          (%chrome/browser/preferences/aboutPermissions.dtd)
-    locale/browser/preferences/aboutPermissions.properties   (%chrome/browser/preferences/aboutPermissions.properties)
     locale/browser/preferences/advanced.dtd           (%chrome/browser/preferences/advanced.dtd)
     locale/browser/preferences/applicationManager.dtd        (%chrome/browser/preferences/applicationManager.dtd)
     locale/browser/preferences/applicationManager.properties (%chrome/browser/preferences/applicationManager.properties)
     locale/browser/preferences/blocklists.dtd         (%chrome/browser/preferences/blocklists.dtd)
     locale/browser/preferences/colors.dtd             (%chrome/browser/preferences/colors.dtd)
     locale/browser/preferences/cookies.dtd            (%chrome/browser/preferences/cookies.dtd)
     locale/browser/preferences/content.dtd            (%chrome/browser/preferences/content.dtd)
     locale/browser/preferences/connection.dtd         (%chrome/browser/preferences/connection.dtd)
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -99,17 +99,16 @@ browser.jar:
   skin/classic/browser/preferences/Options.png        (preferences/Options.png)
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/preferences/Options-sync.png   (preferences/Options-sync.png)
 #endif
 * skin/classic/browser/preferences/preferences.css    (preferences/preferences.css)
 * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
 * skin/classic/browser/preferences/in-content/dialog.css      (preferences/in-content/dialog.css)
   skin/classic/browser/preferences/applications.css   (preferences/applications.css)
-  skin/classic/browser/preferences/aboutPermissions.css (preferences/aboutPermissions.css)
   skin/classic/browser/preferences/search.css         (preferences/search.css)
   skin/classic/browser/social/services-16.png         (social/services-16.png)
   skin/classic/browser/social/services-64.png         (social/services-64.png)
   skin/classic/browser/social/share-button.png        (social/share-button.png)
   skin/classic/browser/social/share-button-active.png (social/share-button-active.png)
   skin/classic/browser/tabbrowser/alltabs.png         (tabbrowser/alltabs.png)
   skin/classic/browser/tabbrowser/alltabs-inverted.png (tabbrowser/alltabs-inverted.png)
   skin/classic/browser/tabbrowser/connecting.png      (tabbrowser/connecting.png)
deleted file mode 100644
--- a/browser/themes/linux/preferences/aboutPermissions.css
+++ /dev/null
@@ -1,136 +0,0 @@
-/* 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/. */
-
-@import url("chrome://global/skin/in-content/common.css");
-
-#permissions-content {
-  padding-top: 48px;
-  -moz-padding-end: 0; /* no padding to move the scroll bar to the edge */
-}
-
-/* sites box */
-
-#sites-box {
-  width: 25em;
-}
-
-#sites-filter {
-  margin: 0;
-}
-
-#sites-list {
-  margin: 5px 0 0 0;
-}
-
-.site {
-  padding: 4px;
-  border-bottom: 1px solid ThreeDLightShadow;
-}
-
-.site-favicon {
-  height: 16px;
-  width: 16px;
-  -moz-margin-end: 4px;
-  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
-}
-
-#all-sites-item > .site-container > .site-favicon {
-  list-style-image: none;
-}
-
-/* permissions box */
-
-#permissions-box {
-  -moz-padding-start: 10px;
-}
-
-#permissions-list {
-  overflow-y: auto;
-  padding-top: 5px;
-  -moz-padding-end: 44px;
-}
-
-#site-description {
-  font-size: 125%;
-}
-
-#site-label {
-  font-weight: bold;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-#defaults-description {
-  font-size: 125%;
-  font-weight: bold;
-}
-
-#header-deck {
-  -moz-margin-end: 44px;
-}
-
-#site-header,
-#defaults-header {
-  margin-bottom: 1px;
-}
-
-.pref-item {
-  margin-bottom: 10px;
-}
-
-.pref-icon {
-  width: 36px;
-  height: 36px;
-  -moz-margin-end: 10px;
-}
-
-.pref-icon[type="password"] {
-  list-style-image: url(chrome://mozapps/skin/passwordmgr/key-64.png);
-}
-.pref-icon[type="cookie"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="geo"] {
-  list-style-image: url(chrome://browser/skin/Geolocation-64.png);
-}
-.pref-icon[type="desktop-notification"] {
-  list-style-image: url(chrome://browser/skin/web-notifications-icon.svg);
-}
-.pref-icon[type="indexedDB"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="install"] {
-  list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric.svg);
-}
-.pref-icon[type="popup"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="image"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="plugins"] {
-  list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png);
-}
-.pref-icon[type="camera"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="microphone"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-
-.pref-title {
-  font-size: 125%;
-  -moz-margin-start: 4px;
-  margin-bottom: 0;
-  font-weight: bold;
-}
-
-.pref-menulist {
-  min-width: 10em;
- }
-
-#cookies-label,
-#passwords-label {
-  -moz-margin-start: 4px; /* align with the menulists */
-}
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -157,17 +157,16 @@ browser.jar:
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/preferences/Options-sync.png         (preferences/Options-sync.png)
 #endif
   skin/classic/browser/preferences/saveFile.png             (preferences/saveFile.png)
 * skin/classic/browser/preferences/preferences.css          (preferences/preferences.css)
 * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
 * skin/classic/browser/preferences/in-content/dialog.css      (preferences/in-content/dialog.css)
   skin/classic/browser/preferences/applications.css         (preferences/applications.css)
-  skin/classic/browser/preferences/aboutPermissions.css     (preferences/aboutPermissions.css)
   skin/classic/browser/preferences/search.css               (preferences/search.css)
   skin/classic/browser/preferences/checkbox.png             (preferences/checkbox.png)
   skin/classic/browser/preferences/checkbox@2x.png          (preferences/checkbox@2x.png)
   skin/classic/browser/yosemite/preferences/checkbox.png    (preferences/checkbox-yosemite.png)
   skin/classic/browser/yosemite/preferences/checkbox@2x.png (preferences/checkbox-yosemite@2x.png)
   skin/classic/browser/social/services-16.png               (social/services-16.png)
   skin/classic/browser/social/services-16@2x.png            (social/services-16@2x.png)
   skin/classic/browser/social/services-64.png               (social/services-64.png)
deleted file mode 100644
--- a/browser/themes/osx/preferences/aboutPermissions.css
+++ /dev/null
@@ -1,152 +0,0 @@
-/* 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/. */
-
-@import url("chrome://global/skin/in-content/common.css");
-
-#permissions-content {
-  padding-top: 48px;
-  -moz-padding-end: 0; /* no padding to move the scroll bar to the edge */
-}
-
-/* sites box */
-
-#sites-box {
-  width: 25em;
-}
-
-#sites-filter {
-  margin: 0;
-}
-
-#sites-list {
-  margin: 5px 0 0 0;
-}
-
-.site {
-  padding: 4px;
-  border-bottom: 1px solid ThreeDLightShadow;
-}
-
-.site-favicon {
-  height: 16px;
-  width: 16px;
-  -moz-margin-end: 4px;
-  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
-}
-
-@media (min-resolution: 2dppx) {
-  .site-favicon {
-    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
-  }
-}
-
-#all-sites-item > .site-container > .site-favicon {
-  list-style-image: none;
-}
-
-/* permissions box */
-
-#permissions-box {
-  -moz-padding-start: 10px;
-}
-
-#permissions-list {
-  overflow-y: auto;
-  padding-top: 5px;
-  -moz-padding-end: 44px;
-}
-
-#site-description {
-  font-size: 125%;
-}
-
-#site-label {
-  font-weight: bold;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-#site-visit-count {
-  margin-bottom: 4px;
-}
-
-#defaults-description {
-  font-size: 125%;
-  font-weight: bold;
-}
-
-#header-deck {
-  -moz-margin-end: 44px;
-}
-
-#site-header,
-#defaults-header {
-  margin-bottom: 1px;
-}
-
-.pref-item {
-  margin-bottom: 10px;
-}
-
-.pref-icon {
-  width: 36px;
-  height: 36px;
-  -moz-margin-end: 10px;
-}
-
-.pref-icon[type="password"] {
-  list-style-image: url(chrome://mozapps/skin/passwordmgr/key-64.png);
-}
-.pref-icon[type="cookie"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="geo"] {
-  list-style-image: url(chrome://browser/skin/Geolocation-64.png);
-}
-.pref-icon[type="desktop-notification"] {
-  list-style-image: url(chrome://browser/skin/web-notifications-icon.svg);
-}
-.pref-icon[type="indexedDB"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="install"] {
-  list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric.svg);
-}
-.pref-icon[type="popup"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="image"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="plugins"] {
-  list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png);
-}
-.pref-icon[type="camera"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="microphone"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-
-@media (min-resolution: 2dppx) {
-  .pref-icon[type="geo"] {
-    list-style-image: url(chrome://browser/skin/Geolocation-64@2x.png);
-  }
-}
-
-.pref-title {
-  font-size: 125%;
-  -moz-margin-start: 2px; /* align with the menulists */
-  margin-bottom: 0;
-  font-weight: bold;
-}
-
-.pref-menulist {
-  min-width: 10em;
- }
-
-#cookies-label,
-#passwords-label {
-  -moz-margin-start: 2px; /* align with the menulists */
-}
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -183,17 +183,16 @@ browser.jar:
   skin/classic/browser/preferences/Options-sync.png            (preferences/Options-sync.png)
 #endif
   skin/classic/browser/preferences/saveFile.png                (preferences/saveFile.png)
   skin/classic/browser/preferences/saveFile-XP.png             (preferences/saveFile-XP.png)
 * skin/classic/browser/preferences/preferences.css             (preferences/preferences.css)
 * skin/classic/browser/preferences/in-content/preferences.css  (preferences/in-content/preferences.css)
 * skin/classic/browser/preferences/in-content/dialog.css       (preferences/in-content/dialog.css)
   skin/classic/browser/preferences/applications.css            (preferences/applications.css)
-  skin/classic/browser/preferences/aboutPermissions.css        (preferences/aboutPermissions.css)
   skin/classic/browser/preferences/search.css                  (preferences/search.css)
   skin/classic/browser/preferences/checkbox.png                (preferences/checkbox.png)
   skin/classic/browser/preferences/checkbox-aero.png           (preferences/checkbox-aero.png)
   skin/classic/browser/preferences/checkbox-classic.png        (preferences/checkbox-classic.png)
   skin/classic/browser/preferences/checkbox-xp.png             (preferences/checkbox-xp.png)
   skin/classic/browser/social/services-16.png                  (social/services-16.png)
   skin/classic/browser/social/services-64.png                  (social/services-64.png)
   skin/classic/browser/tabbrowser/newtab.png                   (tabbrowser/newtab.png)
deleted file mode 100644
--- a/browser/themes/windows/preferences/aboutPermissions.css
+++ /dev/null
@@ -1,140 +0,0 @@
-/* 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/. */
-
-@import url("chrome://global/skin/in-content/common.css");
-
-#permissions-content {
-  padding-top: 48px;
-  -moz-padding-end: 0; /* no padding to move the scroll bar to the edge */
-}
-
-/* sites box */
-
-#sites-box {
-  width: 25em;
-}
-
-#sites-filter {
-  margin: 0;
-}
-
-#sites-list {
-  margin: 5px 0 0 0;
-}
-
-.site {
-  padding: 4px;
-  border-bottom: 1px solid ThreeDLightShadow;
-}
-
-.site-favicon {
-  height: 16px;
-  width: 16px;
-  -moz-margin-end: 4px;
-  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
-}
-
-#all-sites-item > .site-container > .site-favicon {
-  list-style-image: none;
-}
-
-/* permissions box */
-
-#permissions-box {
-  -moz-padding-start: 10px;
-}
-
-#permissions-list {
-  overflow-y: auto;
-  padding-top: 5px;
-  -moz-padding-end: 44px;
-}
-
-#site-description {
-  font-size: 125%;
-}
-
-#site-label {
-  font-weight: bold;
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-#site-visit-count {
-  margin-bottom: 0;
-}
-
-#defaults-description {
-  font-size: 125%;
-  font-weight: bold;
-}
-
-#header-deck {
-  -moz-margin-end: 44px;
-}
-
-#site-header,
-#defaults-header {
-  margin-bottom: 1px;
-}
-
-.pref-item {
-  margin-bottom: 10px;
-}
-
-.pref-icon {
-  width: 36px;
-  height: 36px;
-  -moz-margin-end: 10px;
-}
-
-.pref-icon[type="password"] {
-  list-style-image: url(chrome://mozapps/skin/passwordmgr/key-64.png);
-}
-.pref-icon[type="cookie"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="geo"] {
-  list-style-image: url(chrome://browser/skin/Geolocation-64.png);
-}
-.pref-icon[type="desktop-notification"] {
-  list-style-image: url(chrome://browser/skin/web-notifications-icon.svg);
-}
-.pref-icon[type="indexedDB"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="install"] {
-  list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric.svg);
-}
-.pref-icon[type="popup"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="image"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="plugins"] {
-  list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png);
-}
-.pref-icon[type="camera"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-.pref-icon[type="microphone"] {
-  list-style-image: url(chrome://global/skin/icons/question-64.png);
-}
-
-.pref-title {
-  font-size: 125%;
-  -moz-margin-start: 4px;
-  margin-bottom: 0;
-  font-weight: bold;
-}
-
-.pref-menulist {
-  min-width: 10em;
- }
-
-#cookies-label,
-#passwords-label {
-  -moz-margin-start: 4px; /* align with the menulists */
-}