Merge mozilla-central to b2g-inbound
authorCarsten "Tomcat" Book <cbook@mozilla.com>
Thu, 03 Sep 2015 14:19:00 +0200
changeset 290218 70f7c00f7fe676b365b3ea91c73b85f778ea3c4e
parent 290217 b3a16cd542896bed83ca5573fd020a962054ffa9 (current diff)
parent 290120 74fbd245369c474beaa7f2b1959570243e3dafaa (diff)
child 290219 cf073093dc61045ec02a2a1496992b99f49c8c99
child 290394 13fd8bc2185b250bc6861e271753f13d8490f414
push id5107
push userjbruaroey@mozilla.com
push dateThu, 03 Sep 2015 23:22:31 +0000
milestone43.0a1
Merge mozilla-central to b2g-inbound
accessible/jsat/TraversalRules.jsm
browser/components/preferences/advanced.js
browser/components/preferences/advanced.xul
browser/components/preferences/applications.js
browser/components/preferences/applications.xul
browser/components/preferences/content.js
browser/components/preferences/content.xul
browser/components/preferences/main.js
browser/components/preferences/main.xul
browser/components/preferences/preferences.js
browser/components/preferences/preferences.xul
browser/components/preferences/privacy.js
browser/components/preferences/privacy.xul
browser/components/preferences/search.js
browser/components/preferences/search.xul
browser/components/preferences/security.js
browser/components/preferences/security.xul
browser/components/preferences/sync.js
browser/components/preferences/sync.xul
browser/components/preferences/tabs.js
browser/components/preferences/tabs.xul
browser/components/preferences/tests/browser.ini
browser/components/preferences/tests/browser_advanced_update.js
browser/components/preferences/tests/browser_bug410900.js
browser/components/preferences/tests/browser_bug705422.js
browser/components/preferences/tests/browser_chunk_permissions.js
browser/components/preferences/tests/browser_connection_bug388287.js
browser/components/preferences/tests/browser_cookies_exceptions.js
browser/components/preferences/tests/browser_healthreport.js
browser/components/preferences/tests/browser_permissions.js
browser/components/preferences/tests/browser_privacypane_1.js
browser/components/preferences/tests/browser_privacypane_3.js
browser/components/preferences/tests/browser_privacypane_4.js
browser/components/preferences/tests/browser_privacypane_5.js
browser/components/preferences/tests/browser_privacypane_8.js
browser/components/preferences/tests/browser_telemetry.js
browser/components/preferences/tests/head.js
browser/components/preferences/tests/privacypane_tests_perwindow.js
dom/ipc/ContentChild.cpp
dom/ipc/ContentParent.cpp
dom/ipc/ContentParent.h
dom/ipc/StructuredCloneUtils.cpp
dom/ipc/StructuredCloneUtils.h
layout/reftests/scoped-style/scoped-style-document-ref.html
layout/reftests/scoped-style/scoped-style-document.html
layout/reftests/w3c-css/submitted/conditional3/css-supports-027.xht
layout/reftests/w3c-css/submitted/conditional3/css-supports-028.xht
layout/style/crashtests/495269-2.html
layout/style/crashtests/long-url-list-stack-overflow.html
layout/style/test/chrome/test_moz_document_rules.html
layout/style/test/test_bug511909.html
layout/style/test/test_rule_serialization.html
testing/web-platform/mozilla/meta/service-workers/service-worker/fetch-mixed-content-to-inscope.https.html.ini
testing/web-platform/mozilla/meta/service-workers/service-worker/fetch-mixed-content-to-outscope.https.html.ini
testing/web-platform/mozilla/meta/service-workers/service-worker/postmessage-to-client.https.html.ini
testing/web-platform/mozilla/meta/service-workers/service-worker/update.https.html.ini
--- a/accessible/jsat/ContentControl.jsm
+++ b/accessible/jsat/ContentControl.jsm
@@ -10,29 +10,30 @@ XPCOMUtils.defineLazyModuleGetter(this, 
   'resource://gre/modules/Services.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Utils',
   'resource://gre/modules/accessibility/Utils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Logger',
   'resource://gre/modules/accessibility/Utils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Roles',
   'resource://gre/modules/accessibility/Constants.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'TraversalRules',
-  'resource://gre/modules/accessibility/TraversalRules.jsm');
+  'resource://gre/modules/accessibility/Traversal.jsm');
+XPCOMUtils.defineLazyModuleGetter(this, 'TraversalHelper',
+  'resource://gre/modules/accessibility/Traversal.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Presentation',
   'resource://gre/modules/accessibility/Presentation.jsm');
 
 this.EXPORTED_SYMBOLS = ['ContentControl'];
 
 const MOVEMENT_GRANULARITY_CHARACTER = 1;
 const MOVEMENT_GRANULARITY_WORD = 2;
 const MOVEMENT_GRANULARITY_PARAGRAPH = 8;
 
 this.ContentControl = function ContentControl(aContentScope) {
   this._contentScope = Cu.getWeakReference(aContentScope);
-  this._vcCache = new WeakMap();
   this._childMessageSenders = new WeakMap();
 };
 
 this.ContentControl.prototype = {
   messagesOfInterest: ['AccessFu:MoveCursor',
                        'AccessFu:ClearCursor',
                        'AccessFu:MoveToPoint',
                        'AccessFu:AutoMove',
@@ -123,17 +124,17 @@ this.ContentControl.prototype = {
       // Forwarded succesfully to child cursor.
       return;
     }
 
     if (adjustRange && this.adjustRange(vc.position, action === 'moveNext')) {
       return;
     }
 
-    let moved = vc[action](TraversalRules[aMessage.json.rule]);
+    let moved = TraversalHelper.move(vc, action, aMessage.json.rule);
 
     if (moved) {
       if (origin === 'child') {
         // We just stepped out of a child, clear child cursor.
         Utils.getMessageManager(aMessage.target).sendAsyncMessage(
           'AccessFu:ClearCursor', {});
       } else {
         // We potentially landed on a new child cursor. If so, we want to
--- a/accessible/jsat/EventManager.jsm
+++ b/accessible/jsat/EventManager.jsm
@@ -13,18 +13,16 @@ Cu.import('resource://gre/modules/XPCOMU
 XPCOMUtils.defineLazyModuleGetter(this, 'Services',
   'resource://gre/modules/Services.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Utils',
   'resource://gre/modules/accessibility/Utils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Logger',
   'resource://gre/modules/accessibility/Utils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Presentation',
   'resource://gre/modules/accessibility/Presentation.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'TraversalRules',
-  'resource://gre/modules/accessibility/TraversalRules.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Roles',
   'resource://gre/modules/accessibility/Constants.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Events',
   'resource://gre/modules/accessibility/Constants.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'States',
   'resource://gre/modules/accessibility/Constants.jsm');
 
 this.EXPORTED_SYMBOLS = ['EventManager'];
rename from accessible/jsat/TraversalRules.jsm
rename to accessible/jsat/Traversal.jsm
--- a/accessible/jsat/TraversalRules.jsm
+++ b/accessible/jsat/Traversal.jsm
@@ -1,50 +1,51 @@
 /* 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/. */
 
 /* global PrefCache, Roles, Prefilters, States, Filters, Utils,
    TraversalRules, Components, XPCOMUtils */
-/* exported TraversalRules */
+/* exported TraversalRules, TraversalHelper */
 
 'use strict';
 
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-this.EXPORTED_SYMBOLS = ['TraversalRules']; // jshint ignore:line
+this.EXPORTED_SYMBOLS = ['TraversalRules', 'TraversalHelper']; // jshint ignore:line
 
 Cu.import('resource://gre/modules/accessibility/Utils.jsm');
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Roles',  // jshint ignore:line
   'resource://gre/modules/accessibility/Constants.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Filters',  // jshint ignore:line
   'resource://gre/modules/accessibility/Constants.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'States',  // jshint ignore:line
   'resource://gre/modules/accessibility/Constants.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Prefilters',  // jshint ignore:line
   'resource://gre/modules/accessibility/Constants.jsm');
 
 let gSkipEmptyImages = new PrefCache('accessibility.accessfu.skip_empty_images');
 
-function BaseTraversalRule(aRoles, aMatchFunc, aPreFilter) {
+function BaseTraversalRule(aRoles, aMatchFunc, aPreFilter, aContainerRule) {
   this._explicitMatchRoles = new Set(aRoles);
   this._matchRoles = aRoles;
   if (aRoles.length) {
     if (aRoles.indexOf(Roles.LABEL) < 0) {
       this._matchRoles.push(Roles.LABEL);
     }
     if (aRoles.indexOf(Roles.INTERNAL_FRAME) < 0) {
       // Used for traversing in to child OOP frames.
       this._matchRoles.push(Roles.INTERNAL_FRAME);
     }
   }
   this._matchFunc = aMatchFunc || function() { return Filters.MATCH; };
   this.preFilter = aPreFilter || gSimplePreFilter;
+  this.containerRule = aContainerRule;
 }
 
 BaseTraversalRule.prototype = {
     getMatchRoles: function BaseTraversalRule_getmatchRoles(aRoles) {
       aRoles.value = this._matchRoles;
       return aRoles.value.length;
     },
 
@@ -216,18 +217,17 @@ this.TraversalRules = { // jshint ignore
     [Roles.COMBOBOX,
      Roles.LISTBOX]),
 
   Landmark: new BaseTraversalRule(
     [],
     function Landmark_match(aAccessible) {
       return Utils.getLandmarkName(aAccessible) ? Filters.MATCH :
         Filters.IGNORE;
-    }
-  ),
+    }, null, true),
 
   Entry: new BaseTraversalRule(
     [Roles.ENTRY,
      Roles.PASSWORD_TEXT]),
 
   FormElement: new BaseTraversalRule(
     [Roles.PUSHBUTTON,
      Roles.SPINBUTTON,
@@ -271,17 +271,18 @@ this.TraversalRules = { // jshint ignore
         return Filters.MATCH;
       } else {
         return Filters.IGNORE;
       }
     }),
 
   List: new BaseTraversalRule(
     [Roles.LIST,
-     Roles.DEFINITION_LIST]),
+     Roles.DEFINITION_LIST],
+    null, null, true),
 
   PageTab: new BaseTraversalRule(
     [Roles.PAGETAB]),
 
   Paragraph: new BaseTraversalRule(
     [Roles.PARAGRAPH,
      Roles.SECTION],
     function Paragraph_match(aAccessible) {
@@ -311,8 +312,56 @@ this.TraversalRules = { // jshint ignore
 
   _shouldSkipImage: function _shouldSkipImage(aAccessible) {
     if (gSkipEmptyImages.value && aAccessible.name === '') {
       return Filters.IGNORE;
     }
     return Filters.MATCH;
   }
 };
+
+this.TraversalHelper = {
+  _helperPivotCache: null,
+
+  get helperPivotCache() {
+    delete this.helperPivotCache;
+    this.helperPivotCache = new WeakMap();
+    return this.helperPivotCache;
+  },
+
+  getHelperPivot: function TraversalHelper_getHelperPivot(aRoot) {
+    let pivot = this.helperPivotCache.get(aRoot.DOMNode);
+    if (!pivot) {
+      pivot = Utils.AccRetrieval.createAccessiblePivot(aRoot);
+      this.helperPivotCache.set(aRoot.DOMNode, pivot);
+    }
+
+    return pivot;
+  },
+
+  move: function TraversalHelper_move(aVirtualCursor, aMethod, aRule) {
+    let rule = TraversalRules[aRule];
+
+    if (rule.containerRule) {
+      let moved = false;
+      let helperPivot = this.getHelperPivot(aVirtualCursor.root);
+      helperPivot.position = aVirtualCursor.position;
+
+      // We continue to step through containers until there is one with an
+      // atomic child (via 'Simple') on which we could land.
+      while (!moved) {
+        if (helperPivot[aMethod](rule)) {
+          aVirtualCursor.modalRoot = helperPivot.position;
+          moved = aVirtualCursor.moveFirst(TraversalRules.Simple);
+          aVirtualCursor.modalRoot = null;
+        } else {
+          // If we failed to step to another container, break and return false.
+          break;
+        }
+      }
+
+      return moved;
+    } else {
+      return aVirtualCursor[aMethod](rule);
+    }
+  }
+
+};
--- a/accessible/jsat/content-script.js
+++ b/accessible/jsat/content-script.js
@@ -5,18 +5,16 @@
 let Ci = Components.interfaces;
 let Cu = Components.utils;
 
 Cu.import('resource://gre/modules/XPCOMUtils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Logger',
   'resource://gre/modules/accessibility/Utils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Presentation',
   'resource://gre/modules/accessibility/Presentation.jsm');
-XPCOMUtils.defineLazyModuleGetter(this, 'TraversalRules',
-  'resource://gre/modules/accessibility/TraversalRules.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Utils',
   'resource://gre/modules/accessibility/Utils.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'EventManager',
   'resource://gre/modules/accessibility/EventManager.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'ContentControl',
   'resource://gre/modules/accessibility/ContentControl.jsm');
 XPCOMUtils.defineLazyModuleGetter(this, 'Roles',
   'resource://gre/modules/accessibility/Constants.jsm');
--- a/accessible/jsat/moz.build
+++ b/accessible/jsat/moz.build
@@ -8,13 +8,13 @@ EXTRA_JS_MODULES.accessibility += [
     'AccessFu.jsm',
     'Constants.jsm',
     'ContentControl.jsm',
     'EventManager.jsm',
     'Gestures.jsm',
     'OutputGenerator.jsm',
     'PointerAdapter.jsm',
     'Presentation.jsm',
-    'TraversalRules.jsm',
+    'Traversal.jsm',
     'Utils.jsm'
 ]
 
 JAR_MANIFESTS += ['jar.mn']
\ No newline at end of file
--- a/accessible/tests/mochitest/jsat/a11y.ini
+++ b/accessible/tests/mochitest/jsat/a11y.ini
@@ -19,8 +19,9 @@ skip-if = buildapp == 'mulet'
 [test_landmarks.html]
 [test_live_regions.html]
 [test_output_mathml.html]
 [test_output.html]
 [test_quicknav_modes.html]
 [test_tables.html]
 [test_pointer_relay.html]
 [test_traversal.html]
+[test_traversal_helper.html]
--- a/accessible/tests/mochitest/jsat/test_traversal.html
+++ b/accessible/tests/mochitest/jsat/test_traversal.html
@@ -16,17 +16,17 @@
   <script type="application/javascript" src="../browser.js"></script>
   <script type="application/javascript" src="../events.js"></script>
   <script type="application/javascript" src="../role.js"></script>
   <script type="application/javascript" src="../states.js"></script>
   <script type="application/javascript" src="../pivot.js"></script>
   <script type="application/javascript" src="../layout.js"></script>
 
   <script type="application/javascript">
-    Components.utils.import("resource://gre/modules/accessibility/TraversalRules.jsm");
+    Components.utils.import("resource://gre/modules/accessibility/Traversal.jsm");
     var gBrowserWnd = null;
     var gQueue = null;
 
     function doTest()
     {
       var doc = currentTabDocument();
       var docAcc = getAccessible(doc, [nsIAccessibleDocument]);
 
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/jsat/test_traversal_helper.html
@@ -0,0 +1,111 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>Tests AccessFu TraversalRules</title>
+  <meta charset="utf-8" />
+  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js">
+  </script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/chrome-harness.js">
+  </script>
+
+  <script type="application/javascript" src="../common.js"></script>
+  <script type="application/javascript" src="../browser.js"></script>
+  <script type="application/javascript" src="../events.js"></script>
+  <script type="application/javascript" src="../role.js"></script>
+  <script type="application/javascript" src="../states.js"></script>
+  <script type="application/javascript" src="../pivot.js"></script>
+  <script type="application/javascript" src="../layout.js"></script>
+
+  <script type="application/javascript">
+    Components.utils.import("resource://gre/modules/accessibility/Traversal.jsm");
+
+    var vc;
+
+    function accessibleIs(aAccessible, aExpected, aMessage) {
+      if (!aAccessible && aAccessible == aExpected) {
+        ok(true, "Accessible is null. " + aMessage);
+      } else {
+        ok(aAccessible.DOMNode.id == aExpected || aAccessible.name == aExpected,
+          "expected '" + aExpected + "', got " + prettyName(vc.position) +
+          ". " + aMessage);
+      }
+    }
+
+    function walkSequence(aMethod, aRule, aExpectedSequence) {
+      for (var expected of aExpectedSequence) {
+        ok(TraversalHelper.move(vc, aMethod, aRule),
+          "successfully did " + aMethod + " with " + aRule);
+        accessibleIs(vc.position, expected, "landed on correct accessible");
+      }
+    }
+
+    function testTraversalHelper(aRule, aExpectedSequence) {
+      vc.position = null;
+
+      walkSequence('moveNext', aRule, aExpectedSequence);
+
+      ok(!TraversalHelper.move(vc, 'moveNext', aRule), "reached end");
+
+      TraversalHelper.move(vc, 'moveLast', 'Simple');
+
+      walkSequence('movePrevious', aRule,
+        Array.from(aExpectedSequence).reverse());
+
+      ok(!TraversalHelper.move(vc, 'movePrevious', aRule), "reached start");
+
+      vc.position = null;
+
+      ok(TraversalHelper.move(vc, 'moveFirst', aRule), "moveFirst");
+
+      accessibleIs(vc.position, aExpectedSequence[0],
+        "moveFirst to correct accessible");
+
+      ok(TraversalHelper.move(vc, 'moveLast', aRule), "moveLast");
+
+      accessibleIs(vc.position, aExpectedSequence[aExpectedSequence.length - 1],
+        "moveLast to correct accessible");
+    }
+
+
+    function doTest()
+    {
+      var doc = currentTabDocument();
+      var docAcc = getAccessible(doc, [nsIAccessibleDocument]);
+      vc = docAcc.virtualCursor;
+
+      testTraversalHelper('Landmark',
+        ['heading-1', 'heading-2', 'statusbar-1']);
+
+      testTraversalHelper('List',
+        ['Programming Language', 'listitem-2-1', 'listitem-3-1']);
+
+      vc.position = null;
+
+      SimpleTest.finish();
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addLoadEvent(function () {
+      /* We open a new browser because we need to test with a top-level content
+         document. */
+      openBrowserWindow(
+        doTest,
+        getRootDirectory(window.location.href) + "doc_traversal.html");
+    });
+  </script>
+</head>
+<body id="body">
+
+  <a target="_blank"
+     title="Add tests for AccessFu TraversalRules"
+     href="https://bugzilla.mozilla.org/show_bug.cgi?id=xxx">Mozilla Bug xxx</a>
+  <p id="display"></p>
+  <div id="content" style="display: none"></div>
+  <pre id="test">
+  </pre>
+</body>
+</html>
--- a/addon-sdk/source/lib/sdk/content/tab-events.js
+++ b/addon-sdk/source/lib/sdk/content/tab-events.js
@@ -1,15 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 
 const system = require('sdk/system/events');
 const { frames } = require('sdk/remote/child');
+const { WorkerChild } = require('sdk/content/worker-child');
 
 // map observer topics to tab event names
 const EVENTS = {
   'content-document-interactive': 'ready',
   'chrome-document-interactive': 'ready',
   'content-document-loaded': 'load',
   'chrome-document-loaded': 'load',
 // 'content-page-shown': 'pageshow', // bug 1024105
@@ -29,8 +30,13 @@ for (let topic in EVENTS)
 
 // bug 1024105 - content-page-shown notification doesn't pass persisted param
 function eventListener({target, type, persisted}) {
   let frame = this;
   if (target === frame.content.document)
     frame.port.emit('sdk/tab/event', type, persisted);
 }
 frames.addEventListener('pageshow', eventListener, true);
+
+frames.port.on('sdk/tab/attach', (frame, options) => {
+  options.window = frame.content;
+  new WorkerChild(options);
+});
--- a/addon-sdk/source/lib/sdk/content/utils.js
+++ b/addon-sdk/source/lib/sdk/content/utils.js
@@ -7,16 +7,17 @@ module.metadata = {
   'stability': 'unstable'
 };
 
 let { merge } = require('../util/object');
 let { data } = require('../self');
 let assetsURI = data.url();
 let isArray = Array.isArray;
 let method = require('../../method/core');
+let { uuid } = require('../util/uuid');
 
 const isAddonContent = ({ contentURL }) =>
   contentURL && data.url(contentURL).startsWith(assetsURI);
 
 exports.isAddonContent = isAddonContent;
 
 function hasContentScript({ contentScript, contentScriptFile }) {
   return (isArray(contentScript) ? contentScript.length > 0 :
@@ -79,8 +80,26 @@ function WorkerHost (workerFor) {
     return proto;
   }, {});
   
   function isDescriptor (prop) {
     return ~['postMessage'].indexOf(prop);
   }
 }
 exports.WorkerHost = WorkerHost;
+
+function makeChildOptions(options) {
+  function makeStringArray(arrayOrValue) {
+    if (!arrayOrValue)
+      return [];
+    return [String(v) for (v of [].concat(arrayOrValue))];
+  }
+
+  return {
+    id: String(uuid()),
+    contentScript: makeStringArray(options.contentScript),
+    contentScriptFile: makeStringArray(options.contentScriptFile),
+    contentScriptOptions: options.contentScriptOptions ?
+                          JSON.stringify(options.contentScriptOptions) :
+                          null,
+  }
+}
+exports.makeChildOptions = makeChildOptions;
--- a/addon-sdk/source/lib/sdk/content/worker.js
+++ b/addon-sdk/source/lib/sdk/content/worker.js
@@ -10,20 +10,19 @@ module.metadata = {
 const { emit } = require('../event/core');
 const { omit, merge } = require('../util/object');
 const { Class } = require('../core/heritage');
 const { method } = require('../lang/functional');
 const { getInnerId } = require('../window/utils');
 const { EventTarget } = require('../event/target');
 const { isPrivate } = require('../private-browsing/utils');
 const { getTabForBrowser, getTabForContentWindow, getBrowserForTab } = require('../tabs/utils');
-const { attach, connect, detach, destroy } = require('./utils');
+const { attach, connect, detach, destroy, makeChildOptions } = require('./utils');
 const { ensure } = require('../system/unload');
 const { on: observe } = require('../system/events');
-const { uuid } = require('../util/uuid');
 const { Ci } = require('chrome');
 const { modelFor: tabFor } = require('sdk/model/core');
 const { remoteRequire, processes, frames } = require('../remote/parent');
 remoteRequire('sdk/content/worker-child');
 
 const workers = new WeakMap();
 let modelFor = (worker) => workers.get(worker);
 
@@ -123,36 +122,22 @@ attach.define(Worker, function(worker, w
     detach(worker);
 
   model.window = window;
   let frame = null;
   let tab = getTabForContentWindow(window.top);
   if (tab)
     frame = frames.getFrameForBrowser(getBrowserForTab(tab));
 
-  function makeStringArray(arrayOrValue) {
-    if (!arrayOrValue)
-      return [];
-    return [String(v) for (v of [].concat(arrayOrValue))];
-  }
-
-  let id = String(uuid());
-  let childOptions = {
-    id,
-    windowId: getInnerId(window),
-    contentScript: makeStringArray(model.options.contentScript),
-    contentScriptFile: makeStringArray(model.options.contentScriptFile),
-    contentScriptOptions: model.options.contentScriptOptions ?
-                          JSON.stringify(model.options.contentScriptOptions) :
-                          null,
-  }
+  let childOptions = makeChildOptions(model.options);
+  childOptions.windowId = getInnerId(window);
 
   processes.port.emit('sdk/worker/create', childOptions);
 
-  connect(worker, frame, { id, url: String(window.location) });
+  connect(worker, frame, { id: childOptions.id, url: String(window.location) });
 })
 
 connect.define(Worker, function(worker, frame, { id, url }) {
   let model = modelFor(worker);
   if (model.attached)
     detach(worker);
 
   model.id = id;
--- a/addon-sdk/source/lib/sdk/remote/parent.js
+++ b/addon-sdk/source/lib/sdk/remote/parent.js
@@ -234,17 +234,17 @@ const FrameList = Class({
 
   // Returns the frame for a browser element
   getFrameForBrowser: function(browser) {
     for (let frame of this) {
       if (frame.frameElement == browser)
         return frame;
     }
     return null;
-  }
+  },
 });
 let frames = exports.frames = new FrameList();
 
 // Create the module loader in any existing processes
 ppmm.broadcastAsyncMessage('sdk/remote/process/load', {
   modulePath: PATH,
   loaderID,
   options: childOptions,
--- a/addon-sdk/source/lib/sdk/tabs/tab-firefox.js
+++ b/addon-sdk/source/lib/sdk/tabs/tab-firefox.js
@@ -186,20 +186,47 @@ const Tab = Class({
     }
     return getThumbnailURIForWindow(browser(this).contentWindow);
   },
 
   attach: function(options) {
     if (isDestroyed(this))
       return;
 
-    // BUG 792946 https://bugzilla.mozilla.org/show_bug.cgi?id=792946
-    // TODO: fix this circular dependency
-    let { Worker } = require('./worker');
-    return Worker(options, browser(this).contentWindow);
+    let { Worker } = require('../content/worker');
+    let { connect, makeChildOptions } = require('../content/utils');
+
+    let worker = Worker(options);
+    worker.once("detach", () => {
+      worker.destroy();
+    });
+
+    let attach = frame => {
+      let childOptions = makeChildOptions(options);
+      frame.port.emit("sdk/tab/attach", childOptions);
+      connect(worker, frame, { id: childOptions.id, url: this.url });
+    };
+
+    // Do this synchronously if possible
+    let frame = frames.getFrameForBrowser(browser(this));
+    if (frame) {
+      attach(frame);
+    }
+    else {
+      let listener = (frame) => {
+        if (frame.frameElement != browser(this))
+          return;
+
+        listener.off("attach", listener);
+        attach(frame);
+      };
+      frames.on("attach", listener);
+    }
+
+    return worker;
   },
 
   destroy: function() {
     if (isDestroyed(this))
       return;
 
     destroyed.set(this, true);
   }
--- a/addon-sdk/source/test/test-ui-sidebar.js
+++ b/addon-sdk/source/test/test-ui-sidebar.js
@@ -1295,17 +1295,17 @@ exports.testDestroyWhileNonBrowserWindow
   let url = 'data:text/html;charset=utf-8,' + testName;
 
   let sidebar = Sidebar({
     id: testName,
     title: testName,
     url: url
   });
 
-  let window = yield open('chrome://browser/content/preferences/preferences.xul');
+  let window = yield open('chrome://browser/content/aboutDialog.xul');
 
   yield sidebar.show();
   assert.equal(isSidebarShowing(getMostRecentBrowserWindow()), true, 'the sidebar is showing');
 
   sidebar.destroy();
   assert.pass('sidebar was destroyed while a non browser window was open');
 
   yield cleanUI();
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -850,19 +850,16 @@ pref("browser.preferences.animateFadeIn"
 #endif
 
 #ifdef XP_WIN
 pref("browser.preferences.instantApply", false);
 #else
 pref("browser.preferences.instantApply", true);
 #endif
 
-// Toggles between the two Preferences implementations, pop-up window and in-content
-pref("browser.preferences.inContent", true);
-
 pref("browser.download.show_plugins_in_list", true);
 pref("browser.download.hide_plugins_without_extensions", true);
 
 // Backspace and Shift+Backspace behavior
 // 0 goes Back/Forward
 // 1 act like PgUp/PgDown
 // 2 and other values, nothing
 #ifdef UNIX_BUT_NOT_MAC
--- a/browser/base/content/test/general/browser_aboutHome.js
+++ b/browser/base/content/test/general/browser_aboutHome.js
@@ -614,43 +614,22 @@ function promiseWaitForEvent(node, type,
     node.addEventListener(type, function listener(event) {
       node.removeEventListener(type, listener, capturing);
       resolve(event);
     }, capturing);
   });
 }
 
 let promisePrefsOpen = Task.async(function*() {
-  if (Services.prefs.getBoolPref("browser.preferences.inContent")) {
-    info("Waiting for the preferences tab to open...");
-    let event = yield promiseWaitForEvent(gBrowser.tabContainer, "TabOpen", true);
-    let tab = event.target;
-    yield promiseTabLoadEvent(tab);
-    is(tab.linkedBrowser.currentURI.spec, "about:preferences#search", "Should have seen the prefs tab");
-    gBrowser.removeTab(tab);
-  } else {
-    info("Waiting for the preferences window to open...");
-    yield new Promise(resolve => {
-      let winWatcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].
-                       getService(Ci.nsIWindowWatcher);
-      winWatcher.registerNotification(function onWin(subj, topic, data) {
-        if (topic == "domwindowopened" && subj instanceof Ci.nsIDOMWindow) {
-          subj.addEventListener("load", function onLoad() {
-            subj.removeEventListener("load", onLoad);
-            is(subj.document.documentURI, "chrome://browser/content/preferences/preferences.xul", "Should have seen the prefs window");
-            winWatcher.unregisterNotification(onWin);
-            executeSoon(() => {
-              subj.close();
-              resolve();
-            });
-          });
-        }
-      });
-    });
-  }
+  info("Waiting for the preferences tab to open...");
+  let event = yield promiseWaitForEvent(gBrowser.tabContainer, "TabOpen", true);
+  let tab = event.target;
+  yield promiseTabLoadEvent(tab);
+  is(tab.linkedBrowser.currentURI.spec, "about:preferences#search", "Should have seen the prefs tab");
+  gBrowser.removeTab(tab);
 });
 
 function promiseContentSearchChange(newEngineName) {
   return new Promise(resolve => {
     content.addEventListener("ContentSearchService", function listener(aEvent) {
       if (aEvent.detail.type == "CurrentState" &&
           gBrowser.contentWindow.wrappedJSObject.gContentSearchController.defaultEngine.name == newEngineName) {
         content.removeEventListener("ContentSearchService", listener);
--- a/browser/base/content/test/general/browser_bug735471.js
+++ b/browser/base/content/test/general/browser_bug735471.js
@@ -2,54 +2,22 @@
  * 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/.
  */
 
 
 function test() {
   waitForExplicitFinish();
-  registerCleanupFunction(function() {
-    // Reset pref to its default
-    Services.prefs.clearUserPref("browser.preferences.inContent");
-  });
-  
-  // Verify that about:preferences tab is displayed when
-  // browser.preferences.inContent is set to true
-  Services.prefs.setBoolPref("browser.preferences.inContent", true);
-
   // Open a new tab.
   whenNewTabLoaded(window, testPreferences);
 }
 
 function testPreferences() {
   whenTabLoaded(gBrowser.selectedTab, function () {
-    is(Services.prefs.getBoolPref("browser.preferences.inContent"), true, "In-content prefs are enabled");
     is(content.location.href, "about:preferences", "Checking if the preferences tab was opened");
 
     gBrowser.removeCurrentTab();
-    Services.prefs.setBoolPref("browser.preferences.inContent", false);
-    openPreferences();
+    finish();
   });
-  
-  let observer = {
-    observe: function(aSubject, aTopic, aData) {
-      if (aTopic == "domwindowopened") {
-        windowWatcher.unregisterNotification(observer);
-        
-        let win = aSubject.QueryInterface(Components.interfaces.nsIDOMWindow);
-        win.addEventListener("load", function() {
-          win.removeEventListener("load", arguments.callee, false);
-          is(Services.prefs.getBoolPref("browser.preferences.inContent"), false, "In-content prefs are disabled");
-          is(win.location.href, "chrome://browser/content/preferences/preferences.xul", "Checking if the preferences window was opened");
-          win.close();
-          finish();
-        }, false);
-      }
-    }
-  }
-  
-  var windowWatcher = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                        .getService(Components.interfaces.nsIWindowWatcher);
-  windowWatcher.registerNotification(observer);
-  
+
   openPreferences();
 }
--- a/browser/base/content/test/general/browser_bug906190.js
+++ b/browser/base/content/test/general/browser_bug906190.js
@@ -65,16 +65,17 @@ let curTestName = null;
 let curChildTabLink = null;
 
 //------------------------ Helper Functions ---------------------
 
 registerCleanupFunction(function() {
   // Set preferences back to their original values
   Services.prefs.setBoolPref(PREF_ACTIVE, origBlockActive);
 });
+requestLongerTimeout(2);
 
 /*
  * Whenever we disable the Mixed Content Blocker of the page
  * we have to make sure that our condition is properly loaded.
  */
 function waitForCondition(condition, nextTest, errorMsg) {
   var tries = 0;
   var interval = setInterval(function() {
--- a/browser/base/content/test/general/browser_datachoices_notification.js
+++ b/browser/base/content/test/general/browser_datachoices_notification.js
@@ -95,21 +95,16 @@ let checkInfobarButton = Task.async(func
   let paneLoadedPromise = promiseTopicObserved("advanced-pane-loaded");
 
   // Click on the button.
   button.click();
 
   // Wait for the preferences panel to open.
   let preferenceWindow = yield paneLoadedPromise;
   yield promiseNextTick();
-  // If the prefs are being displayed in a dialog we need to close it.
-  // If in a tab (ie, in-content prefs) it closes with the window.
-  if (!Services.prefs.getBoolPref("browser.preferences.inContent")) {
-    prefWin.close();
-  }
 });
 
 add_task(function* setup(){
   const drsEnabled = Preferences.get(PREF_DRS_ENABLED, true);
   const bypassNotification = Preferences.get(PREF_BYPASS_NOTIFICATION, true);
   const currentPolicyVersion = Preferences.get(PREF_CURRENT_POLICY_VERSION, 1);
 
   // Register a cleanup function to reset our preferences.
--- a/browser/base/content/test/general/browser_datareporting_notification.js
+++ b/browser/base/content/test/general/browser_datareporting_notification.js
@@ -172,21 +172,16 @@ function test_multiple_windows() {
       // Add an observer to ensure the "advanced" pane opened (but don't bother
       // closing it - we close the entire window when done.)
       Services.obs.addObserver(function observer(prefWin, topic, data) {
         Services.obs.removeObserver(observer, "advanced-pane-loaded");
 
         ok(true, "Advanced preferences opened on info bar button press.");
         executeSoon(function soon() {
           prefWindowOpened = true;
-          // If the prefs are being displayed in a dialog we need to close it.
-          // If in a tab (ie, in-content prefs) it closes with the window.
-          if (!Services.prefs.getBoolPref("browser.preferences.inContent")) {
-            prefWin.close();
-          }
           maybeFinish();
         });
       }, "advanced-pane-loaded", false);
 
       button.click();
     }
 
     notification1.addEventListener("AlertActive", function active1() {
--- a/browser/base/content/test/general/browser_offlineQuotaNotification.js
+++ b/browser/base/content/test/general/browser_offlineQuotaNotification.js
@@ -12,35 +12,16 @@ registerCleanupFunction(function() {
   // Clean up after ourself
   let uri = Services.io.newURI(URL, null, null);
   let principal = Services.scriptSecurityManager.createCodebasePrincipal(uri, {});
   Services.perms.removeFromPrincipal(principal, "offline-app");
   Services.prefs.clearUserPref("offline-apps.quota.warn");
   Services.prefs.clearUserPref("offline-apps.allow_by_default");
 });
 
-// Check that the "preferences" UI is opened and showing which websites have
-// offline storage permissions - currently this is the "network" tab in the
-// "advanced" pane.
-function checkPreferences(prefsWin) {
-  // We expect a 'paneload' event for the 'advanced' pane, then
-  // a 'select' event on the 'network' tab inside that pane.
-  prefsWin.addEventListener("paneload", function paneload(evt) {
-    prefsWin.removeEventListener("paneload", paneload);
-    is(evt.target.id, "paneAdvanced", "advanced pane loaded");
-    let tabPanels = evt.target.getElementsByTagName("tabpanels")[0];
-    tabPanels.addEventListener("select", function tabselect() {
-      tabPanels.removeEventListener("select", tabselect);
-      is(tabPanels.selectedPanel.id, "networkPanel", "networkPanel is selected");
-      // all good, we are done.
-      prefsWin.close();
-      finish();
-    });
-  });
-}
 // Same as the other one, but for in-content preferences
 function checkInContentPreferences(win) {
   let doc = win.document;
   let sel = doc.getElementById("categories").selectedItems[0].id;
   let tab = doc.getElementById("advancedPrefs").selectedTab.id;
   is(gBrowser.currentURI.spec, "about:preferences#advanced", "about:preferences loaded");
   is(sel, "category-advanced", "Advanced pane was selected");
   is(tab, "networkTab", "Network tab is selected");
@@ -66,37 +47,25 @@ function test() {
     BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser)
   ]).then(() => {
     gBrowser.selectedBrowser.contentWindow.applicationCache.oncached = function() {
       executeSoon(function() {
         // We got cached - now we should have provoked the quota warning.
         let notification = PopupNotifications.getNotification('offline-app-usage');
         ok(notification, "have offline-app-usage notification");
         // select the default action - this should cause the preferences
-        // window to open - which we track either via a window watcher (for
-        // the window-based prefs) or via an "Initialized" event (for
-        // in-content prefs.)
-        if (!Services.prefs.getBoolPref("browser.preferences.inContent")) {
-          Services.ww.registerNotification(function wwobserver(aSubject, aTopic, aData) {
-            if (aTopic != "domwindowopened")
-              return;
-            Services.ww.unregisterNotification(wwobserver);
-            checkPreferences(aSubject);
-          });
-        }
+        // tab to open - which we track via an "Initialized" event.
         PopupNotifications.panel.firstElementChild.button.click();
-        if (Services.prefs.getBoolPref("browser.preferences.inContent")) {
-          let newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
-          newTabBrowser.addEventListener("Initialized", function PrefInit() {
-            newTabBrowser.removeEventListener("Initialized", PrefInit, true);
-            executeSoon(function() {
-              checkInContentPreferences(newTabBrowser.contentWindow);
-            })
-          }, true);
-        }
+        let newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
+        newTabBrowser.addEventListener("Initialized", function PrefInit() {
+          newTabBrowser.removeEventListener("Initialized", PrefInit, true);
+          executeSoon(function() {
+            checkInContentPreferences(newTabBrowser.contentWindow);
+          })
+        }, true);
       });
     };
     Services.prefs.setIntPref("offline-apps.quota.warn", 1);
 
     // Click the notification panel's "Allow" button.  This should kick
     // off updates which will call our oncached handler above.
     PopupNotifications.panel.firstElementChild.button.click();
   });
--- a/browser/base/content/test/social/browser_addons.js
+++ b/browser/base/content/test/social/browser_addons.js
@@ -1,31 +1,32 @@
 let AddonManager = Cu.import("resource://gre/modules/AddonManager.jsm", {}).AddonManager;
 let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
 
-const ADDON_TYPE_SERVICE     = "service";
-const ID_SUFFIX              = "@services.mozilla.org";
-const STRING_TYPE_NAME       = "type.%ID%.name";
-const XPINSTALL_URL = "chrome://mozapps/content/xpinstall/xpinstallConfirm.xul";
-
 let manifest = {
   name: "provider 1",
   origin: "https://example.com",
-  sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar.html",
-  workerURL: "https://example.com/browser/browser/base/content/test/social/social_worker.js",
+  sidebarURL: "https://example.com/browser/browser/base/content/test/social/social_sidebar_empty.html",
   iconURL: "https://example.com/browser/browser/base/content/test/general/moz.png"
 };
 let manifest2 = { // used for testing install
   name: "provider 2",
   origin: "https://test1.example.com",
-  sidebarURL: "https://test1.example.com/browser/browser/base/content/test/social/social_sidebar.html",
-  workerURL: "https://test1.example.com/browser/browser/base/content/test/social/social_worker.js",
+  sidebarURL: "https://test1.example.com/browser/browser/base/content/test/social/social_sidebar_empty.html",
   iconURL: "https://test1.example.com/browser/browser/base/content/test/general/moz.png",
   version: 1
 };
+let manifestUpgrade = { // used for testing install
+  name: "provider 3",
+  origin: "https://test2.example.com",
+  sidebarURL: "https://test2.example.com/browser/browser/base/content/test/social/social_sidebar.html",
+  workerURL: "https://test2.example.com/browser/browser/base/content/test/social/social_worker.js",
+  iconURL: "https://test2.example.com/browser/browser/base/content/test/general/moz.png",
+  version: 1
+};
 
 function test() {
   waitForExplicitFinish();
 
   let prefname = getManifestPrefname(manifest);
   // ensure that manifest2 is NOT showing as builtin
   is(SocialService.getOriginActivationType(manifest.origin), "foreign", "manifest is foreign");
   is(SocialService.getOriginActivationType(manifest2.origin), "foreign", "manifest2 is foreign");
@@ -78,32 +79,27 @@ function installListener(next, aManifest
       ok(!Services.prefs.prefHasUserValue(prefname), "manifest is not in user-prefs");
       AddonManager.removeAddonListener(this);
     }
   };
 }
 
 var tests = {
   testHTTPInstallFailure: function(next) {
-    let activationURL = "http://example.com/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
-      let doc = tab.linkedBrowser.contentDocument;
-      let installFrom = doc.nodePrincipal.origin;
-      is(SocialService.getOriginActivationType(installFrom), "foreign", "testing foriegn install");
-      let data = {
-        origin: doc.nodePrincipal.origin,
-        url: doc.location.href,
-        manifest: manifest,
-        window: window
-      }
-      Social.installProvider(data, function(addonManifest) {
-        ok(!addonManifest, "unable to install provider over http");
-        gBrowser.removeTab(tab);
-        next();
-      });
+    let installFrom = "http://example.com";
+    is(SocialService.getOriginActivationType(installFrom), "foreign", "testing foriegn install");
+    let data = {
+      origin: installFrom,
+      url: installFrom+"/activate",
+      manifest: manifest,
+      window: window
+    }
+    Social.installProvider(data, function(addonManifest) {
+      ok(!addonManifest, "unable to install provider over http");
+      next();
     });
   },
   testAddonEnableToggle: function(next) {
     let expectEvent;
     let prefname = getManifestPrefname(manifest);
     let listener = {
       onEnabled: function(addon) {
         is(expectEvent, "onEnabled", "provider onEnabled");
@@ -131,17 +127,17 @@ var tests = {
       }
     };
     AddonManager.addAddonListener(listener);
 
     // we're only testing enable disable, so we quickly set the user-level pref
     // for this provider and test enable/disable toggling
     setManifestPref(prefname, manifest);
     ok(Services.prefs.prefHasUserValue(prefname), "manifest is in user-prefs");
-    AddonManager.getAddonsByTypes([ADDON_TYPE_SERVICE], function(addons) {
+    AddonManager.getAddonsByTypes(["service"], function(addons) {
       for (let addon of addons) {
         if (addon.userDisabled) {
           expectEvent = "onEnabling";
           addon.userDisabled = false;
           // only test with one addon
           return;
         }
       }
@@ -186,99 +182,59 @@ var tests = {
       expectEvent = "onDisabling";
       SocialService.disableProvider(provider.origin, function() {
         AddonManager.removeAddonListener(listener);
         Services.prefs.clearUserPref(prefname);
         next();
       });
     });
   },
-  testForeignInstall: function(next) {
+  testDirectoryInstall: function(next) {
     AddonManager.addAddonListener(installListener(next, manifest2));
 
-    // we expect the addon install dialog to appear, we need to accept the
-    // install from the dialog.
-    info("Waiting for install dialog");
-    let panel = document.getElementById("servicesInstall-notification");
-    PopupNotifications.panel.addEventListener("popupshown", function onpopupshown() {
-      PopupNotifications.panel.removeEventListener("popupshown", onpopupshown);
-      info("servicesInstall-notification panel opened");
-      panel.button.click();
-    })
-
-    let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
-      let doc = tab.linkedBrowser.contentDocument;
-      let installFrom = doc.nodePrincipal.origin;
-      Services.prefs.setCharPref("social.whitelist", "");
-      is(SocialService.getOriginActivationType(installFrom), "foreign", "testing foriegn install");
-      let data = {
-        origin: doc.nodePrincipal.origin,
-        url: doc.location.href,
-        manifest: manifest2,
-        window: window
-      }
-      Social.installProvider(data, function(addonManifest) {
-        Services.prefs.clearUserPref("social.whitelist");
-        SocialService.enableProvider(addonManifest.origin, function(provider) {
-          Social.uninstallProvider(addonManifest.origin);
-          gBrowser.removeTab(tab);
-        });
-      });
-    });
-  },
-  testDirectoryInstall: function(next) {
-    AddonManager.addAddonListener(installListener(next, manifest2));
-    let panel = document.getElementById("servicesInstall-notification");
-    PopupNotifications.panel.addEventListener("popupshown", function onpopupshown() {
-      PopupNotifications.panel.removeEventListener("popupshown", onpopupshown);
+    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+      let panel = document.getElementById("servicesInstall-notification");
       info("servicesInstall-notification panel opened");
       panel.button.click();
     });
 
     let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    addTab(activationURL, function(tab) {
-      let doc = tab.linkedBrowser.contentDocument;
-      let installFrom = doc.nodePrincipal.origin;
-      Services.prefs.setCharPref("social.directories", installFrom);
-      is(SocialService.getOriginActivationType(installFrom), "directory", "testing directory install");
-      let data = {
-        origin: installFrom,
-        url: doc.location.href,
-        manifest: manifest2,
-        window: window
-      }
-      Social.installProvider(data, function(addonManifest) {
-        Services.prefs.clearUserPref("social.directories");
-        SocialService.enableProvider(addonManifest.origin, function(provider) {
-          Social.uninstallProvider(addonManifest.origin);
-          gBrowser.removeTab(tab);
-        });
+    Services.prefs.setCharPref("social.directories", manifest2.origin);
+    is(SocialService.getOriginActivationType(manifest2.origin), "directory", "testing directory install");
+    let data = {
+      origin: manifest2.origin,
+      url: manifest2.origin + "/directory",
+      manifest: manifest2,
+      window: window
+    }
+    Social.installProvider(data, function(addonManifest) {
+      Services.prefs.clearUserPref("social.directories");
+      SocialService.enableProvider(addonManifest.origin, function(provider) {
+        Social.uninstallProvider(addonManifest.origin);
       });
     });
   },
   testUpgradeProviderFromWorker: function(next) {
     // add the provider, change the pref, add it again. The provider at that
     // point should be upgraded
-    let activationURL = manifest2.origin + "/browser/browser/base/content/test/social/social_activate.html"
-    let panel = document.getElementById("servicesInstall-notification");
-    PopupNotifications.panel.addEventListener("popupshown", function onpopupshown() {
-      PopupNotifications.panel.removeEventListener("popupshown", onpopupshown);
+    let activationURL = manifestUpgrade.origin + "/browser/browser/base/content/test/social/social_activate.html"
+    ensureEventFired(PopupNotifications.panel, "popupshown").then(() => {
+      let panel = document.getElementById("servicesInstall-notification");
       info("servicesInstall-notification panel opened");
       panel.button.click();
     });
 
     addTab(activationURL, function(tab) {
       let doc = tab.linkedBrowser.contentDocument;
       let installFrom = doc.nodePrincipal.origin;
       Services.prefs.setCharPref("social.whitelist", installFrom);
       let data = {
         origin: installFrom,
         url: doc.location.href,
-        manifest: manifest2,
+        manifest: manifestUpgrade,
         window: window
       }
       Social.installProvider(data, function(addonManifest) {
         SocialService.enableProvider(addonManifest.origin, function(provider) {
           is(provider.manifest.version, 1, "manifest version is 1");
 
           // watch for the provider-update and test the new version
           SocialService.registerProviderListener(function providerListener(topic, origin, providers) {
@@ -301,18 +257,17 @@ var tests = {
               let topic = e.data.topic;
               switch (topic) {
                 case "social.manifest":
                   let manifest = e.data.data;
                   is(manifest.version, 2, "manifest version is 2");
                   port.close();
                   Social.uninstallProvider(origin, function() {
                     Services.prefs.clearUserPref("social.whitelist");
-                    gBrowser.removeTab(tab);
-                    next();
+                    ensureBrowserTabClosed(tab).then(next);
                   });
                   break;
               }
             }
             port.postMessage({topic: "test-init"});
             port.postMessage({topic: "manifest-get"});
 
           });
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -1855,17 +1855,23 @@ file, You can obtain one at http://mozil
 
             // If nothing is selected yet, select the first result if it is a
             // pre-selected "heuristic" result.  (See UnifiedComplete.js.)
             if (this._matchCount > 0 && this.selectedIndex == -1) {
               let styles = this.input.mController.getStyleAt(0).split(/\s+/);
               if (styles.indexOf("heuristic") >= 0) {
                 // Don't handle this as a user-initiated action.
                 this._ignoreNextSelect = true;
+
+                // Don't fire DOMMenuItemActive so that screen readers still see
+                // the input as being focused.
+                this.richlistbox.suppressMenuItemEvent = true;
+
                 this.selectedIndex = 0;
+                this.richlistbox.suppressMenuItemEvent = false;
                 this._ignoreNextSelect = false;
               }
             }
 
             this.input.gotResultForCurrentQuery = true;
             if (this.input.handleEnterWhenGotResult) {
               this.input.handleEnterWhenGotResult = false;
               this.input.mController.handleEnter(false);
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -524,84 +524,65 @@ function openPreferences(paneID, extraAr
     }
   }
 
   // This function is duplicated from preferences.js.
   function internalPrefCategoryNameToFriendlyName(aName) {
     return (aName || "").replace(/^pane./, function(toReplace) { return toReplace[4].toLowerCase(); });
   }
 
-  if (getBoolPref("browser.preferences.inContent")) {
-    let win = Services.wm.getMostRecentWindow("navigator:browser");
-    let friendlyCategoryName = internalPrefCategoryNameToFriendlyName(paneID);
-    let params;
-    if (extraArgs && extraArgs["urlParams"]) {
-      params = new URLSearchParams();
-      let urlParams = extraArgs["urlParams"];
-      for (let name in urlParams) {
-        if (urlParams[name] !== undefined) {
-          params.set(name, urlParams[name]);
-        }
+  let win = Services.wm.getMostRecentWindow("navigator:browser");
+  let friendlyCategoryName = internalPrefCategoryNameToFriendlyName(paneID);
+  let params;
+  if (extraArgs && extraArgs["urlParams"]) {
+    params = new URLSearchParams();
+    let urlParams = extraArgs["urlParams"];
+    for (let name in urlParams) {
+      if (urlParams[name] !== undefined) {
+        params.set(name, urlParams[name]);
       }
     }
-    let preferencesURL = "about:preferences" + (params ? "?" + params : "") +
-                         (friendlyCategoryName ? "#" + friendlyCategoryName : "");
-    let newLoad = true;
-    let browser = null;
-    if (!win) {
-      const Cc = Components.classes;
-      const Ci = Components.interfaces;
-      let windowArguments = Cc["@mozilla.org/supports-array;1"]
-                              .createInstance(Ci.nsISupportsArray);
-      let supportsStringPrefURL = Cc["@mozilla.org/supports-string;1"]
-                                    .createInstance(Ci.nsISupportsString);
-      supportsStringPrefURL.data = preferencesURL;
-      windowArguments.AppendElement(supportsStringPrefURL);
-
-      win = Services.ww.openWindow(null, Services.prefs.getCharPref("browser.chromeURL"),
-                                   "_blank", "chrome,dialog=no,all", windowArguments);
-    } else {
-      newLoad = !win.switchToTabHavingURI(preferencesURL, true, {ignoreFragment: true});
-      browser = win.gBrowser.selectedBrowser;
-    }
+  }
+  let preferencesURL = "about:preferences" + (params ? "?" + params : "") +
+                       (friendlyCategoryName ? "#" + friendlyCategoryName : "");
+  let newLoad = true;
+  let browser = null;
+  if (!win) {
+    const Cc = Components.classes;
+    const Ci = Components.interfaces;
+    let windowArguments = Cc["@mozilla.org/supports-array;1"]
+                            .createInstance(Ci.nsISupportsArray);
+    let supportsStringPrefURL = Cc["@mozilla.org/supports-string;1"]
+                                  .createInstance(Ci.nsISupportsString);
+    supportsStringPrefURL.data = preferencesURL;
+    windowArguments.AppendElement(supportsStringPrefURL);
 
-    if (newLoad) {
-      Services.obs.addObserver(function advancedPaneLoadedObs(prefWin, topic, data) {
-        if (!browser) {
-          browser = win.gBrowser.selectedBrowser;
-        }
-        if (prefWin != browser.contentWindow) {
-          return;
-        }
-        Services.obs.removeObserver(advancedPaneLoadedObs, "advanced-pane-loaded");
-        switchToAdvancedSubPane(browser.contentDocument);
-      }, "advanced-pane-loaded", false);
-    } else {
-      if (paneID) {
-        browser.contentWindow.gotoPref(paneID);
+    win = Services.ww.openWindow(null, Services.prefs.getCharPref("browser.chromeURL"),
+                                 "_blank", "chrome,dialog=no,all", windowArguments);
+  } else {
+    newLoad = !win.switchToTabHavingURI(preferencesURL, true, {ignoreFragment: true});
+    browser = win.gBrowser.selectedBrowser;
+  }
+
+  if (newLoad) {
+    Services.obs.addObserver(function advancedPaneLoadedObs(prefWin, topic, data) {
+      if (!browser) {
+        browser = win.gBrowser.selectedBrowser;
       }
+      if (prefWin != browser.contentWindow) {
+        return;
+      }
+      Services.obs.removeObserver(advancedPaneLoadedObs, "advanced-pane-loaded");
       switchToAdvancedSubPane(browser.contentDocument);
+    }, "advanced-pane-loaded", false);
+  } else {
+    if (paneID) {
+      browser.contentWindow.gotoPref(paneID);
     }
-  } else {
-    var instantApply = getBoolPref("browser.preferences.instantApply", false);
-    var features = "chrome,titlebar,toolbar,centerscreen" + (instantApply ? ",dialog=no" : ",modal");
-
-    var win = Services.wm.getMostRecentWindow("Browser:Preferences");
-    if (win) {
-      win.focus();
-      if (paneID) {
-        var pane = win.document.getElementById(paneID);
-        win.document.documentElement.showPane(pane);
-      }
-
-      switchToAdvancedSubPane(win.document);
-    } else {
-      openDialog("chrome://browser/content/preferences/preferences.xul",
-                 "Preferences", features, paneID, extraArgs);
-    }
+    switchToAdvancedSubPane(browser.contentDocument);
   }
 }
 
 function openAdvancedPreferences(tabID)
 {
   openPreferences("paneAdvanced", { "advancedTab" : tabID });
 }
 
--- a/browser/components/customizableui/test/browser_1087303_button_preferences.js
+++ b/browser/components/customizableui/test/browser_1087303_button_preferences.js
@@ -1,23 +1,19 @@
 /* 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";
 
-const PREF_INCONTENT = "browser.preferences.inContent";
-
 let newTab = null;
 
 add_task(function() {
   info("Check preferences button existence and functionality");
 
-  Services.prefs.setBoolPref(PREF_INCONTENT, true);
-
   yield PanelUI.show();
   info("Menu panel was opened");
 
   let preferencesButton = document.getElementById("preferences-button");
   ok(preferencesButton, "Preferences button exists in Panel Menu");
   preferencesButton.click();
 
   newTab = gBrowser.selectedTab;
@@ -28,19 +24,16 @@ add_task(function() {
 });
 
 add_task(function asyncCleanup() {
   if (gBrowser.tabs.length == 1)
     gBrowser.addTab("about:blank");
 
   gBrowser.removeTab(gBrowser.selectedTab);
   info("Tabs were restored");
-
-  // restore the browser.preferences.inContent preference
-  Services.prefs.clearUserPref(PREF_INCONTENT);
 });
 
 function waitForPageLoad(aTab) {
   let deferred = Promise.defer();
 
   let timeoutId = setTimeout(() => {
     aTab.linkedBrowser.removeEventListener("load", onTabLoad, true);
     deferred.reject("Page didn't load within " + 20000 + "ms");
--- a/browser/components/nsBrowserContentHandler.js
+++ b/browser/components/nsBrowserContentHandler.js
@@ -226,44 +226,32 @@ function openWindow(parent, url, target,
   argArray.AppendElement(null); // referer
   argArray.AppendElement(null); // postData
   argArray.AppendElement(null); // allowThirdPartyFixup
 
   return wwatch.openWindow(parent, url, target, features, argArray);
 }
 
 function openPreferences() {
-  if (Services.prefs.getBoolPref("browser.preferences.inContent")) { 
-    var sa = Components.classes["@mozilla.org/supports-array;1"]
-                       .createInstance(Components.interfaces.nsISupportsArray);
+  var sa = Components.classes["@mozilla.org/supports-array;1"]
+                     .createInstance(Components.interfaces.nsISupportsArray);
 
-    var wuri = Components.classes["@mozilla.org/supports-string;1"]
-                         .createInstance(Components.interfaces.nsISupportsString);
-    wuri.data = "about:preferences";
-
-    sa.AppendElement(wuri);
-
-    var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
-                           .getService(nsIWindowWatcher);
+  var wuri = Components.classes["@mozilla.org/supports-string;1"]
+                       .createInstance(Components.interfaces.nsISupportsString);
+  wuri.data = "about:preferences";
 
-    wwatch.openWindow(null, gBrowserContentHandler.chromeURL,
-                      "_blank",
-                      "chrome,dialog=no,all",
-                      sa);
-  } else {
-    var features = "chrome,titlebar,toolbar,centerscreen,dialog=no";
-    var url = "chrome://browser/content/preferences/preferences.xul";
-    
-    var win = getMostRecentWindow("Browser:Preferences");
-    if (win) {
-      win.focus();
-    } else {
-      openWindow(null, url, "_blank", features);
-    }
-  }
+  sa.AppendElement(wuri);
+
+  var wwatch = Components.classes["@mozilla.org/embedcomp/window-watcher;1"]
+                         .getService(nsIWindowWatcher);
+
+  wwatch.openWindow(null, gBrowserContentHandler.chromeURL,
+                    "_blank",
+                    "chrome,dialog=no,all",
+                    sa);
 }
 
 function getMostRecentWindow(aType) {
   var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                      .getService(nsIWindowMediator);
   return wm.getMostRecentWindow(aType);
 }
 
@@ -391,18 +379,17 @@ nsBrowserContentHandler.prototype = {
       Components.utils.reportError(e);
     }
 
     var chromeParam = cmdLine.handleFlagWithParam("chrome", false);
     if (chromeParam) {
 
       // Handle old preference dialog URLs.
       if (chromeParam == "chrome://browser/content/pref/pref.xul" ||
-          (Services.prefs.getBoolPref("browser.preferences.inContent") &&
-           chromeParam == "chrome://browser/content/preferences/preferences.xul")) {
+          chromeParam == "chrome://browser/content/preferences/preferences.xul") {
         openPreferences();
         cmdLine.preventDefault = true;
       } else try {
         var uri = resolveURIInternal(cmdLine, chromeParam);
         let isLocal = (uri) => {
           let localSchemes = new Set(["chrome", "file", "resource"]);
           if (uri instanceof Components.interfaces.nsINestedURI) {
             uri = uri.QueryInterface(Components.interfaces.nsINestedURI).innerMostURI;
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -525,18 +525,18 @@ BrowserGlue.prototype = {
     let actionType;
     if (action) {
       actionType =
         action.type == "searchengine" && action.params.searchSuggestion ?
           "searchsuggestion" :
         action.type;
     }
     if (!actionType) {
-      let styles = controller.getStyleAt(idx).split(/\s+/);
-      let style = ["autofill", "tag", "bookmark"].find(s => styles.includes(s));
+      let styles = new Set(controller.getStyleAt(idx).split(/\s+/));
+      let style = ["autofill", "tag", "bookmark"].find(s => styles.has(s));
       actionType = style || "history";
     }
 
     Services.telemetry
             .getHistogramById("FX_URLBAR_SELECTED_RESULT_INDEX")
             .add(idx);
 
     // Ideally this would be a keyed histogram and we'd just add(actionType),
deleted file mode 100644
--- a/browser/components/preferences/advanced.js
+++ /dev/null
@@ -1,823 +0,0 @@
-# -*- indent-tabs-mode: nil; js-indent-level: 4 -*-
-# 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/.
-
-// Load DownloadUtils module for convertByteUnits
-Components.utils.import("resource://gre/modules/DownloadUtils.jsm");
-Components.utils.import("resource://gre/modules/ctypes.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import("resource://gre/modules/LoadContextInfo.jsm");
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-Components.utils.import("resource://gre/modules/BrowserUtils.jsm");
-
-var gAdvancedPane = {
-  _inited: false,
-
-  /**
-   * Brings the appropriate tab to the front and initializes various bits of UI.
-   */
-  init: function ()
-  {
-    this._inited = true;
-    var advancedPrefs = document.getElementById("advancedPrefs");
-
-    var extraArgs = window.arguments[1];
-    if (extraArgs && extraArgs["advancedTab"]){
-      advancedPrefs.selectedTab = document.getElementById(extraArgs["advancedTab"]);
-    } else {
-      var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex");
-      if (preference.value !== null)
-        advancedPrefs.selectedIndex = preference.value;
-    }
-
-#ifdef MOZ_UPDATER
-    let onUnload = function () {
-      window.removeEventListener("unload", onUnload, false);
-      Services.prefs.removeObserver("app.update.", this);
-    }.bind(this);
-    window.addEventListener("unload", onUnload, false);
-    Services.prefs.addObserver("app.update.", this, false);
-    this.updateReadPrefs();
-#endif
-    this.updateOfflineApps();
-#ifdef MOZ_CRASHREPORTER
-    this.initSubmitCrashes();
-#endif
-    this.initTelemetry();
-#ifdef MOZ_SERVICES_HEALTHREPORT
-    this.initSubmitHealthReport();
-#endif
-
-    this.updateCacheSizeInputField();
-    this.updateActualCacheSize();
-    this.updateActualAppCacheSize();
-
-    let bundlePrefs = document.getElementById("bundlePreferences");
-    document.getElementById("offlineAppsList")
-            .style.height = bundlePrefs.getString("offlineAppsList.height");
-
-    // Notify observers that the UI is now ready
-    Services.obs.notifyObservers(window, "advanced-pane-loaded", null);
-  },
-
-  /**
-   * Stores the identity of the current tab in preferences so that the selected
-   * tab can be persisted between openings of the preferences window.
-   */
-  tabSelectionChanged: function ()
-  {
-    if (!this._inited)
-      return;
-    var advancedPrefs = document.getElementById("advancedPrefs");
-    var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex");
-    preference.valueFromPreferences = advancedPrefs.selectedIndex;
-  },
-
-  // GENERAL TAB
-
-  /*
-   * Preferences:
-   *
-   * accessibility.browsewithcaret
-   * - true enables keyboard navigation and selection within web pages using a
-   *   visible caret, false uses normal keyboard navigation with no caret
-   * accessibility.typeaheadfind
-   * - when set to true, typing outside text areas and input boxes will
-   *   automatically start searching for what's typed within the current
-   *   document; when set to false, no search action happens
-   * general.autoScroll
-   * - when set to true, clicking the scroll wheel on the mouse activates a
-   *   mouse mode where moving the mouse down scrolls the document downward with
-   *   speed correlated with the distance of the cursor from the original
-   *   position at which the click occurred (and likewise with movement upward);
-   *   if false, this behavior is disabled
-   * general.smoothScroll
-   * - set to true to enable finer page scrolling than line-by-line on page-up,
-   *   page-down, and other such page movements
-   * layout.spellcheckDefault
-   * - an integer:
-   *     0  disables spellchecking
-   *     1  enables spellchecking, but only for multiline text fields
-   *     2  enables spellchecking for all text fields
-   */
-
-  /**
-   * Stores the original value of the spellchecking preference to enable proper
-   * restoration if unchanged (since we're mapping a tristate onto a checkbox).
-   */
-  _storedSpellCheck: 0,
-
-  /**
-   * Returns true if any spellchecking is enabled and false otherwise, caching
-   * the current value to enable proper pref restoration if the checkbox is
-   * never changed.
-   */
-  readCheckSpelling: function ()
-  {
-    var pref = document.getElementById("layout.spellcheckDefault");
-    this._storedSpellCheck = pref.value;
-
-    return (pref.value != 0);
-  },
-
-  /**
-   * Returns the value of the spellchecking preference represented by UI,
-   * preserving the preference's "hidden" value if the preference is
-   * unchanged and represents a value not strictly allowed in UI.
-   */
-  writeCheckSpelling: function ()
-  {
-    var checkbox = document.getElementById("checkSpelling");
-    return checkbox.checked ? (this._storedSpellCheck == 2 ? 2 : 1) : 0;
-  },
-
-  /**
-   * security.OCSP.enabled is an integer value for legacy reasons.
-   * A value of 1 means OCSP is enabled. Any other value means it is disabled.
-   */
-  readEnableOCSP: function ()
-  {
-    var preference = document.getElementById("security.OCSP.enabled");
-    // This is the case if the preference is the default value.
-    if (preference.value === undefined) {
-      return true;
-    }
-    return preference.value == 1;
-  },
-
-  /**
-   * See documentation for readEnableOCSP.
-   */
-  writeEnableOCSP: function ()
-  {
-    var checkbox = document.getElementById("enableOCSP");
-    return checkbox.checked ? 1 : 0;
-  },
-
-  /**
-   * When the user toggles the layers.acceleration.disabled pref,
-   * sync its new value to the gfx.direct2d.disabled pref too.
-   */
-  updateHardwareAcceleration: function()
-  {
-#ifdef XP_WIN
-    var fromPref = document.getElementById("layers.acceleration.disabled");
-    var toPref = document.getElementById("gfx.direct2d.disabled");
-    toPref.value = fromPref.value;
-#endif
-  },
-
-  // DATA CHOICES TAB
-
-  /**
-   * opening links behind a modal dialog is poor form. Work around flawed text-link handling here.
-   */
-  openTextLink: function (evt) {
-    let where = Services.prefs.getBoolPref("browser.preferences.instantApply") ? "tab" : "window";
-    openUILinkIn(evt.target.getAttribute("href"), where);
-    evt.preventDefault();
-  },
-
-  /**
-   * Set up or hide the Learn More links for various data collection options
-   */
-  _setupLearnMoreLink: function (pref, element) {
-    // set up the Learn More link with the correct URL
-    let url = Services.prefs.getCharPref(pref);
-    let el = document.getElementById(element);
-
-    if (url) {
-      el.setAttribute("href", url);
-    } else {
-      el.setAttribute("hidden", "true");
-    }
-  },
-
-  /**
-   *
-   */
-  initSubmitCrashes: function ()
-  {
-    var checkbox = document.getElementById("submitCrashesBox");
-    try {
-      var cr = Components.classes["@mozilla.org/toolkit/crash-reporter;1"].
-               getService(Components.interfaces.nsICrashReporter);
-      checkbox.checked = cr.submitReports;
-    } catch (e) {
-      checkbox.style.display = "none";
-    }
-    this._setupLearnMoreLink("toolkit.crashreporter.infoURL", "crashReporterLearnMore");
-  },
-
-  /**
-   *
-   */
-  updateSubmitCrashes: function ()
-  {
-    var checkbox = document.getElementById("submitCrashesBox");
-    try {
-      var cr = Components.classes["@mozilla.org/toolkit/crash-reporter;1"].
-               getService(Components.interfaces.nsICrashReporter);
-      cr.submitReports = checkbox.checked;
-    } catch (e) { }
-  },
-
-
-  /**
-   * The preference/checkbox is configured in XUL.
-   *
-   * In all cases, set up the Learn More link sanely
-   */
-  initTelemetry: function ()
-  {
-#ifdef MOZ_TELEMETRY_REPORTING
-    this._setupLearnMoreLink("toolkit.telemetry.infoURL", "telemetryLearnMore");
-#endif
-  },
-
-  /**
-   * Set the status of the telemetry controls based on the input argument.
-   * @param {Boolean} aEnabled False disables the controls, true enables them.
-   */
-  setTelemetrySectionEnabled: function (aEnabled)
-  {
-#ifdef MOZ_TELEMETRY_REPORTING
-    // If FHR is disabled, additional data sharing should be disabled as well.
-    let disabled = !aEnabled;
-    document.getElementById("submitTelemetryBox").disabled = disabled;
-    if (disabled) {
-      // If we disable FHR, untick the telemetry checkbox.
-      Services.prefs.setBoolPref("toolkit.telemetry.enabled", false);
-    }
-    document.getElementById("telemetryDataDesc").disabled = disabled;
-#endif
-  },
-
-#ifdef MOZ_SERVICES_HEALTHREPORT
-  /**
-   * Initialize the health report service reference and checkbox.
-   */
-  initSubmitHealthReport: function () {
-    this._setupLearnMoreLink("datareporting.healthreport.infoURL", "FHRLearnMore");
-
-    let policy = Components.classes["@mozilla.org/datareporting/service;1"]
-                                   .getService(Components.interfaces.nsISupports)
-                                   .wrappedJSObject
-                                   .policy;
-
-    let checkbox = document.getElementById("submitHealthReportBox");
-
-    if (!policy || policy.healthReportUploadLocked) {
-      checkbox.setAttribute("disabled", "true");
-      return;
-    }
-
-    checkbox.checked = policy.healthReportUploadEnabled;
-    this.setTelemetrySectionEnabled(checkbox.checked);
-  },
-
-  /**
-   * Update the health report policy acceptance with state from checkbox.
-   */
-  updateSubmitHealthReport: function () {
-    let policy = Components.classes["@mozilla.org/datareporting/service;1"]
-                                   .getService(Components.interfaces.nsISupports)
-                                   .wrappedJSObject
-                                   .policy;
-
-    if (!policy) {
-      return;
-    }
-
-    let checkbox = document.getElementById("submitHealthReportBox");
-    policy.recordHealthReportUploadEnabled(checkbox.checked,
-                                           "Checkbox from preferences pane");
-    this.setTelemetrySectionEnabled(checkbox.checked);
-  },
-#endif
-
-  // NETWORK TAB
-
-  /*
-   * Preferences:
-   *
-   * browser.cache.disk.capacity
-   * - the size of the browser cache in KB
-   * - Only used if browser.cache.disk.smart_size.enabled is disabled
-   */
-
-  /**
-   * Displays a dialog in which proxy settings may be changed.
-   */
-  showConnections: function ()
-  {
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/connection.xul",
-                                           "", null);
-  },
-
-  // Retrieves the amount of space currently used by disk cache
-  updateActualCacheSize: function ()
-  {
-    var actualSizeLabel = document.getElementById("actualDiskCacheSize");
-    var prefStrBundle = document.getElementById("bundlePreferences");
-
-    // Needs to root the observer since cache service keeps only a weak reference.
-    this.observer = {
-      onNetworkCacheDiskConsumption: function(consumption) {
-        var size = DownloadUtils.convertByteUnits(consumption);
-        actualSizeLabel.value = prefStrBundle.getFormattedString("actualDiskCacheSize", size);
-      },
-
-      QueryInterface: XPCOMUtils.generateQI([
-        Components.interfaces.nsICacheStorageConsumptionObserver,
-        Components.interfaces.nsISupportsWeakReference
-      ])
-    };
-
-    actualSizeLabel.value = prefStrBundle.getString("actualDiskCacheSizeCalculated");
-
-    var cacheService =
-      Components.classes["@mozilla.org/netwerk/cache-storage-service;1"]
-                .getService(Components.interfaces.nsICacheStorageService);
-    cacheService.asyncGetDiskConsumption(this.observer);
-  },
-
-  // Retrieves the amount of space currently used by offline cache
-  updateActualAppCacheSize: function ()
-  {
-    var visitor = {
-      onCacheStorageInfo: function (aEntryCount, aConsumption, aCapacity, aDiskDirectory)
-      {
-        var actualSizeLabel = document.getElementById("actualAppCacheSize");
-        var sizeStrings = DownloadUtils.convertByteUnits(aConsumption);
-        var prefStrBundle = document.getElementById("bundlePreferences");
-        var sizeStr = prefStrBundle.getFormattedString("actualAppCacheSize", sizeStrings);
-        actualSizeLabel.value = sizeStr;
-      }
-    };
-
-    var cacheService =
-      Components.classes["@mozilla.org/netwerk/cache-storage-service;1"]
-                .getService(Components.interfaces.nsICacheStorageService);
-    var storage = cacheService.appCacheStorage(LoadContextInfo.default, null);
-    storage.asyncVisitStorage(visitor, false);
-  },
-
-  updateCacheSizeUI: function (smartSizeEnabled)
-  {
-    document.getElementById("useCacheBefore").disabled = smartSizeEnabled;
-    document.getElementById("cacheSize").disabled = smartSizeEnabled;
-    document.getElementById("useCacheAfter").disabled = smartSizeEnabled;
-  },
-
-  readSmartSizeEnabled: function ()
-  {
-    // The smart_size.enabled preference element is inverted="true", so its
-    // value is the opposite of the actual pref value
-    var disabled = document.getElementById("browser.cache.disk.smart_size.enabled").value;
-    this.updateCacheSizeUI(!disabled);
-  },
-
-  /**
-   * Converts the cache size from units of KB to units of MB and stores it in
-   * the textbox element.
-   */
-  updateCacheSizeInputField()
-  {
-    let cacheSizeElem = document.getElementById("cacheSize");
-    let cachePref = document.getElementById("browser.cache.disk.capacity");
-    cacheSizeElem.value = cachePref.value / 1024;
-    if (cachePref.locked)
-      cacheSizeElem.disabled = true;
-  },
-
-  /**
-   * Updates the cache size preference once user enters a new value.
-   * We intentionally do not set preference="browser.cache.disk.capacity"
-   * onto the textbox directly, as that would update the pref at each keypress
-   * not only after the final value is entered.
-   */
-  updateCacheSizePref()
-  {
-    let cacheSizeElem = document.getElementById("cacheSize");
-    let cachePref = document.getElementById("browser.cache.disk.capacity");
-    // Converts the cache size as specified in UI (in MB) to KB.
-    let intValue = parseInt(cacheSizeElem.value, 10);
-    cachePref.value = isNaN(intValue) ? 0 : intValue * 1024;
-  },
-
-  /**
-   * Clears the cache.
-   */
-  clearCache: function ()
-  {
-    var cache = Components.classes["@mozilla.org/netwerk/cache-storage-service;1"]
-                                 .getService(Components.interfaces.nsICacheStorageService);
-    try {
-      cache.clear();
-    } catch(ex) {}
-    this.updateActualCacheSize();
-    Services.obs.notifyObservers(null, "clear-private-data", null);
-  },
-
-  /**
-   * Clears the application cache.
-   */
-  clearOfflineAppCache: function ()
-  {
-    Components.utils.import("resource:///modules/offlineAppCache.jsm");
-    OfflineAppCacheHelper.clear();
-
-    this.updateActualAppCacheSize();
-    this.updateOfflineApps();
-    Services.obs.notifyObservers(null, "clear-private-data", null);
-  },
-
-  readOfflineNotify: function()
-  {
-    var pref = document.getElementById("browser.offline-apps.notify");
-    var button = document.getElementById("offlineNotifyExceptions");
-    button.disabled = !pref.value;
-    return pref.value;
-  },
-
-  showOfflineExceptions: function()
-  {
-    var bundlePreferences = document.getElementById("bundlePreferences");
-    var params = { blockVisible     : false,
-                   sessionVisible   : false,
-                   allowVisible     : false,
-                   prefilledHost    : "",
-                   permissionType   : "offline-app",
-                   manageCapability : Components.interfaces.nsIPermissionManager.DENY_ACTION,
-                   windowTitle      : bundlePreferences.getString("offlinepermissionstitle"),
-                   introText        : bundlePreferences.getString("offlinepermissionstext") };
-    document.documentElement.openWindow("Browser:Permissions",
-                                        "chrome://browser/content/preferences/permissions.xul",
-                                        "resizable", params);
-  },
-
-  // XXX: duplicated in browser.js
-  _getOfflineAppUsage: function (perm, groups)
-  {
-    var cacheService = Components.classes["@mozilla.org/network/application-cache-service;1"].
-                       getService(Components.interfaces.nsIApplicationCacheService);
-    if (!groups)
-      groups = cacheService.getGroups();
-
-    var ios = Components.classes["@mozilla.org/network/io-service;1"].
-              getService(Components.interfaces.nsIIOService);
-
-    var usage = 0;
-    for (var i = 0; i < groups.length; i++) {
-      var uri = ios.newURI(groups[i], null, null);
-      if (perm.matchesURI(uri, true)) {
-        var cache = cacheService.getActiveCache(groups[i]);
-        usage += cache.usage;
-      }
-    }
-
-    return usage;
-  },
-
-  /**
-   * Updates the list of offline applications
-   */
-  updateOfflineApps: function ()
-  {
-    var pm = Components.classes["@mozilla.org/permissionmanager;1"]
-                       .getService(Components.interfaces.nsIPermissionManager);
-
-    var list = document.getElementById("offlineAppsList");
-    while (list.firstChild) {
-      list.removeChild(list.firstChild);
-    }
-
-    var cacheService = Components.classes["@mozilla.org/network/application-cache-service;1"].
-                       getService(Components.interfaces.nsIApplicationCacheService);
-    var groups = cacheService.getGroups();
-
-    var bundle = document.getElementById("bundlePreferences");
-
-    var enumerator = pm.enumerator;
-    while (enumerator.hasMoreElements()) {
-      var perm = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
-      if (perm.type == "offline-app" &&
-          perm.capability != Components.interfaces.nsIPermissionManager.DEFAULT_ACTION &&
-          perm.capability != Components.interfaces.nsIPermissionManager.DENY_ACTION) {
-        var row = document.createElement("listitem");
-        row.id = "";
-        row.className = "offlineapp";
-        row.setAttribute("origin", perm.principal.origin);
-        var converted = DownloadUtils.
-                        convertByteUnits(this._getOfflineAppUsage(perm, groups));
-        row.setAttribute("usage",
-                         bundle.getFormattedString("offlineAppUsage",
-                                                   converted));
-        list.appendChild(row);
-      }
-    }
-  },
-
-  offlineAppSelected: function()
-  {
-    var removeButton = document.getElementById("offlineAppsListRemove");
-    var list = document.getElementById("offlineAppsList");
-    if (list.selectedItem) {
-      removeButton.setAttribute("disabled", "false");
-    } else {
-      removeButton.setAttribute("disabled", "true");
-    }
-  },
-
-  removeOfflineApp: function()
-  {
-    var list = document.getElementById("offlineAppsList");
-    var item = list.selectedItem;
-    var origin = item.getAttribute("origin");
-    var principal = BrowserUtils.principalFromOrigin(origin);
-
-    var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
-                            .getService(Components.interfaces.nsIPromptService);
-    var flags = prompts.BUTTON_TITLE_IS_STRING * prompts.BUTTON_POS_0 +
-                prompts.BUTTON_TITLE_CANCEL * prompts.BUTTON_POS_1;
-
-    var bundle = document.getElementById("bundlePreferences");
-    var title = bundle.getString("offlineAppRemoveTitle");
-    var prompt = bundle.getFormattedString("offlineAppRemovePrompt", [principal.URI.prePath]);
-    var confirm = bundle.getString("offlineAppRemoveConfirm");
-    var result = prompts.confirmEx(window, title, prompt, flags, confirm,
-                                   null, null, null, {});
-    if (result != 0)
-      return;
-
-    // get the permission
-    var pm = Components.classes["@mozilla.org/permissionmanager;1"]
-                       .getService(Components.interfaces.nsIPermissionManager);
-    var perm = pm.getPermissionObject(principal, "offline-app");
-
-    // clear offline cache entries
-    var cacheService = Components.classes["@mozilla.org/network/application-cache-service;1"].
-                       getService(Components.interfaces.nsIApplicationCacheService);
-    var ios = Components.classes["@mozilla.org/network/io-service;1"].
-              getService(Components.interfaces.nsIIOService);
-    var groups = cacheService.getGroups();
-    for (var i = 0; i < groups.length; i++) {
-        var uri = ios.newURI(groups[i], null, null);
-        if (perm.matchesURI(uri, true)) {
-            var cache = cacheService.getActiveCache(groups[i]);
-            cache.discard();
-        }
-    }
-
-    pm.removePermission(perm);
-
-    list.removeChild(item);
-    gAdvancedPane.offlineAppSelected();
-    this.updateActualAppCacheSize();
-  },
-
-  // UPDATE TAB
-
-  /*
-   * Preferences:
-   *
-   * app.update.enabled
-   * - true if updates to the application are enabled, false otherwise
-   * extensions.update.enabled
-   * - true if updates to extensions and themes are enabled, false otherwise
-   * browser.search.update
-   * - true if updates to search engines are enabled, false otherwise
-   * app.update.auto
-   * - true if updates should be automatically downloaded and installed,
-   *   possibly with a warning if incompatible extensions are installed (see
-   *   app.update.mode); false if the user should be asked what he wants to do
-   *   when an update is available
-   * app.update.mode
-   * - an integer:
-   *     0    do not warn if an update will disable extensions or themes
-   *     1    warn if an update will disable extensions or themes
-   *     2    warn if an update will disable extensions or themes *or* if the
-   *          update is a major update
-   */
-
-#ifdef MOZ_UPDATER
-  /**
-   * Selects the item of the radiogroup, and sets the warnIncompatible checkbox
-   * based on the pref values and locked states.
-   *
-   * UI state matrix for update preference conditions
-   *
-   * UI Components:                              Preferences
-   * Radiogroup                                  i   = app.update.enabled
-   * Warn before disabling extensions checkbox   ii  = app.update.auto
-   *                                             iii = app.update.mode
-   *
-   * Disabled states:
-   * Element           pref  value  locked  disabled
-   * radiogroup        i     t/f    f       false
-   *                   i     t/f    *t*     *true*
-   *                   ii    t/f    f       false
-   *                   ii    t/f    *t*     *true*
-   *                   iii   0/1/2  t/f     false
-   * warnIncompatible  i     t      f       false
-   *                   i     t      *t*     *true*
-   *                   i     *f*    t/f     *true*
-   *                   ii    t      f       false
-   *                   ii    t      *t*     *true*
-   *                   ii    *f*    t/f     *true*
-   *                   iii   0/1/2  f       false
-   *                   iii   0/1/2  *t*     *true*
-   */
-  updateReadPrefs: function ()
-  {
-    var enabledPref = document.getElementById("app.update.enabled");
-    var autoPref = document.getElementById("app.update.auto");
-    var radiogroup = document.getElementById("updateRadioGroup");
-
-    if (!enabledPref.value)   // Don't care for autoPref.value in this case.
-      radiogroup.value="manual";    // 3. Never check for updates.
-    else if (autoPref.value)  // enabledPref.value && autoPref.value
-      radiogroup.value="auto";      // 1. Automatically install updates for Desktop only
-    else                      // enabledPref.value && !autoPref.value
-      radiogroup.value="checkOnly"; // 2. Check, but let me choose
-
-    var canCheck = Components.classes["@mozilla.org/updates/update-service;1"].
-                     getService(Components.interfaces.nsIApplicationUpdateService).
-                     canCheckForUpdates;
-    // canCheck is false if the enabledPref is false and locked,
-    // or the binary platform or OS version is not known.
-    // A locked pref is sufficient to disable the radiogroup.
-    radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
-
-    var modePref = document.getElementById("app.update.mode");
-    var warnIncompatible = document.getElementById("warnIncompatible");
-    // the warnIncompatible checkbox value is set by readAddonWarn
-    warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
-                                !enabledPref.value || !autoPref.value;
-
-#ifdef MOZ_MAINTENANCE_SERVICE
-    // Check to see if the maintenance service is installed.
-    // If it is don't show the preference at all.
-    var installed;
-    try {
-      var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
-                .createInstance(Components.interfaces.nsIWindowsRegKey);
-      wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE,
-               "SOFTWARE\\Mozilla\\MaintenanceService",
-               wrk.ACCESS_READ | wrk.WOW64_64);
-      installed = wrk.readIntValue("Installed");
-      wrk.close();
-    } catch(e) {
-    }
-    if (installed != 1) {
-      document.getElementById("useService").hidden = true;
-    }
-    try {
-      const DRIVE_FIXED = 3;
-      const LPCWSTR = ctypes.char16_t.ptr;
-      const UINT = ctypes.uint32_t;
-      let kernel32 = ctypes.open("kernel32");
-      let GetDriveType = kernel32.declare("GetDriveTypeW", ctypes.default_abi, UINT, LPCWSTR);
-      var UpdatesDir = Components.classes["@mozilla.org/updates/update-service;1"].
-                       getService(Components.interfaces.nsIApplicationUpdateService);
-      let rootPath = UpdatesDir.getUpdatesDirectory();
-      while (rootPath.parent != null) {
-        rootPath = rootPath.parent;
-      }
-      if (GetDriveType(rootPath.path) != DRIVE_FIXED) {
-        document.getElementById("useService").hidden = true;
-      }
-      kernel32.close();
-    } catch(e) {
-    }
-#endif
-  },
-
-  /**
-   * Sets the pref values based on the selected item of the radiogroup,
-   * and sets the disabled state of the warnIncompatible checkbox accordingly.
-   */
-  updateWritePrefs: function ()
-  {
-    var enabledPref = document.getElementById("app.update.enabled");
-    var autoPref = document.getElementById("app.update.auto");
-    var modePref = document.getElementById("app.update.mode");
-    var radiogroup = document.getElementById("updateRadioGroup");
-    switch (radiogroup.value) {
-      case "auto":      // 1. Automatically install updates for Desktop only
-        enabledPref.value = true;
-        autoPref.value = true;
-        break;
-      case "checkOnly": // 2. Check, but let me choose
-        enabledPref.value = true;
-        autoPref.value = false;
-        break;
-      case "manual":    // 3. Never check for updates.
-        enabledPref.value = false;
-        autoPref.value = false;
-    }
-
-    var warnIncompatible = document.getElementById("warnIncompatible");
-    warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
-                                autoPref.locked || !autoPref.value ||
-                                modePref.locked;
-  },
-
-  /**
-   * Stores the value of the app.update.mode preference, which is a tristate
-   * integer preference.  We store the value here so that we can properly
-   * restore the preference value if the UI reflecting the preference value
-   * is in a state which can represent either of two integer values (as
-   * opposed to only one possible value in the other UI state).
-   */
-  _modePreference: -1,
-
-  /**
-   * Reads the app.update.mode preference and converts its value into a
-   * true/false value for use in determining whether the "Warn me if this will
-   * disable extensions or themes" checkbox is checked.  We also save the value
-   * of the preference so that the preference value can be properly restored if
-   * the user's preferences cannot adequately be expressed by a single checkbox.
-   *
-   * app.update.mode          Checkbox State    Meaning
-   * 0                        Unchecked         Do not warn
-   * 1                        Checked           Warn if there are incompatibilities
-   * 2                        Checked           Warn if there are incompatibilities,
-   *                                            or the update is major.
-   */
-  readAddonWarn: function ()
-  {
-    var preference = document.getElementById("app.update.mode");
-    var warn = preference.value != 0;
-    gAdvancedPane._modePreference = warn ? preference.value : 1;
-    return warn;
-  },
-
-  /**
-   * Converts the state of the "Warn me if this will disable extensions or
-   * themes" checkbox into the integer preference which represents it,
-   * returning that value.
-   */
-  writeAddonWarn: function ()
-  {
-    var warnIncompatible = document.getElementById("warnIncompatible");
-    return !warnIncompatible.checked ? 0 : gAdvancedPane._modePreference;
-  },
-
-  /**
-   * Displays the history of installed updates.
-   */
-  showUpdates: function ()
-  {
-    var prompter = Components.classes["@mozilla.org/updates/update-prompt;1"]
-                             .createInstance(Components.interfaces.nsIUpdatePrompt);
-    prompter.showUpdateHistory(window);
-  },
-#endif
-
-  // ENCRYPTION TAB
-
-  /*
-   * Preferences:
-   *
-   * security.default_personal_cert
-   * - a string:
-   *     "Select Automatically"   select a certificate automatically when a site
-   *                              requests one
-   *     "Ask Every Time"         present a dialog to the user so he can select
-   *                              the certificate to use on a site which
-   *                              requests one
-   */
-
-  /**
-   * Displays the user's certificates and associated options.
-   */
-  showCertificates: function ()
-  {
-    document.documentElement.openWindow("mozilla:certmanager",
-                                        "chrome://pippki/content/certManager.xul",
-                                        "", null);
-  },
-
-  /**
-   * Displays a dialog from which the user can manage his security devices.
-   */
-  showSecurityDevices: function ()
-  {
-    document.documentElement.openWindow("mozilla:devicemanager",
-                                        "chrome://pippki/content/device_manager.xul",
-                                        "", null);
-  },
-
-#ifdef MOZ_UPDATER
-  observe: function (aSubject, aTopic, aData) {
-    switch(aTopic) {
-      case "nsPref:changed":
-        this.updateReadPrefs();
-        break;
-    }
-  },
-#endif
-};
deleted file mode 100644
--- a/browser/components/preferences/advanced.xul
+++ /dev/null
@@ -1,397 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# 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 overlay [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-%brandDTD;
-<!ENTITY % advancedDTD SYSTEM "chrome://browser/locale/preferences/advanced.dtd">
-%advancedDTD;
-<!ENTITY % privacyDTD SYSTEM "chrome://browser/locale/preferences/privacy.dtd">
-%privacyDTD;
-]>
-
-<overlay id="AdvancedPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneAdvanced" onpaneload="gAdvancedPane.init();">
-
-    <preferences id="advancedPreferences">
-      <preference id="browser.preferences.advanced.selectedTabIndex"
-                  name="browser.preferences.advanced.selectedTabIndex"
-                  type="int"/>
-
-      <!--XXX button prefs -->
-
-      <!-- General tab -->
-      <preference id="accessibility.browsewithcaret"   name="accessibility.browsewithcaret"   type="bool"/>
-      <preference id="accessibility.typeaheadfind"     name="accessibility.typeaheadfind"     type="bool"/>
-      <preference id="accessibility.blockautorefresh"  name="accessibility.blockautorefresh"  type="bool"/>
-
-      <preference id="general.autoScroll"              name="general.autoScroll"              type="bool"/>
-      <preference id="general.smoothScroll"            name="general.smoothScroll"            type="bool"/>
-      <preference id="layers.acceleration.disabled"    name="layers.acceleration.disabled"    type="bool"   inverted="true"
-                  onchange="gAdvancedPane.updateHardwareAcceleration()"/>
-#ifdef XP_WIN
-      <preference id="gfx.direct2d.disabled"           name="gfx.direct2d.disabled"           type="bool"   inverted="true"/>
-#endif
-      <preference id="layout.spellcheckDefault"        name="layout.spellcheckDefault"        type="int"/>
-
-      <!-- Data Choices tab -->
-
-#ifdef MOZ_TELEMETRY_REPORTING
-      <preference id="toolkit.telemetry.enabled"
-                  name="toolkit.telemetry.enabled"
-                  type="bool"/>
-#endif
-
-      <!-- Network tab -->
-      <preference id="browser.cache.disk.capacity"     name="browser.cache.disk.capacity"     type="int"/>
-      <preference id="browser.offline-apps.notify"     name="browser.offline-apps.notify"     type="bool"/>
-
-      <preference id="browser.cache.disk.smart_size.enabled"
-                  name="browser.cache.disk.smart_size.enabled"
-                  inverted="true"
-                  type="bool"/>
-
-     <!-- Update tab -->
-#ifdef MOZ_UPDATER
-      <preference id="app.update.enabled"              name="app.update.enabled"              type="bool"/>
-      <preference id="app.update.auto"                 name="app.update.auto"                 type="bool"/>
-      <preference id="app.update.mode"                 name="app.update.mode"                 type="int"/>
-
-      <preference id="app.update.disable_button.showUpdateHistory"
-                  name="app.update.disable_button.showUpdateHistory"
-                  type="bool"/>
-
-#ifdef MOZ_MAINTENANCE_SERVICE
-      <preference id="app.update.service.enabled"
-                  name="app.update.service.enabled"
-                  type="bool"/>
-#endif
-#endif
-
-      <preference id="browser.search.update"           name="browser.search.update"           type="bool"/>
-
-      <!-- Certificates tab -->
-      <preference id="security.default_personal_cert"  name="security.default_personal_cert"  type="string"/>
-
-      <preference id="security.disable_button.openCertManager"
-                  name="security.disable_button.openCertManager"
-                  type="bool"/>
-      <preference id="security.disable_button.openDeviceManager"
-                  name="security.disable_button.openDeviceManager"
-                  type="bool"/>
-      <preference id="security.OCSP.enabled"
-                  name="security.OCSP.enabled"
-                  type="int"/>
-    </preferences>
-
-#ifdef HAVE_SHELL_SERVICE
-    <stringbundle id="bundleShell" src="chrome://browser/locale/shellservice.properties"/>
-    <stringbundle id="bundleBrand" src="chrome://branding/locale/brand.properties"/>
-#endif
-    <stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
-
-    <script type="application/javascript" src="chrome://browser/content/preferences/advanced.js"/>
-
-    <tabbox id="advancedPrefs" flex="1"
-            onselect="gAdvancedPane.tabSelectionChanged();">
-
-      <tabs id="tabsElement">
-        <tab id="generalTab" label="&generalTab.label;" helpTopic="prefs-advanced-general"/>
-#ifdef MOZ_DATA_REPORTING
-        <tab id="dataChoicesTab" label="&dataChoicesTab.label;" helpTopic="prefs-advanced-data-choices"/>
-#endif
-        <tab id="networkTab" label="&networkTab.label;" helpTopic="prefs-advanced-network"/>
-        <tab id="updateTab" label="&updateTab.label;"  helpTopic="prefs-advanced-update"/>
-        <tab id="encryptionTab" label="&certificateTab.label;" helpTopic="prefs-advanced-encryption"/>
-      </tabs>
-
-      <tabpanels flex="1">
-
-        <!-- General -->
-        <tabpanel id="generalPanel" orient="vertical">
-
-          <!-- Accessibility -->
-          <groupbox id="accessibilityGroup" align="start">
-            <caption label="&accessibility.label;"/>
-
-            <checkbox id="useCursorNavigation"
-                      label="&useCursorNavigation.label;"
-                      accesskey="&useCursorNavigation.accesskey;"
-                      preference="accessibility.browsewithcaret"/>
-            <checkbox id="searchStartTyping"
-                      label="&searchStartTyping.label;"
-                      accesskey="&searchStartTyping.accesskey;"
-                      preference="accessibility.typeaheadfind"/>
-            <checkbox id="blockAutoRefresh"
-                      label="&blockAutoRefresh.label;"
-                      accesskey="&blockAutoRefresh.accesskey;"
-                      preference="accessibility.blockautorefresh"/>
-          </groupbox>
-
-          <!-- Browsing -->
-          <groupbox id="browsingGroup" align="start">
-            <caption label="&browsing.label;"/>
-
-            <checkbox id="useAutoScroll"
-                      label="&useAutoScroll.label;"
-                      accesskey="&useAutoScroll.accesskey;"
-                      preference="general.autoScroll"/>
-            <checkbox id="useSmoothScrolling"
-                      label="&useSmoothScrolling.label;"
-                      accesskey="&useSmoothScrolling.accesskey;"
-                      preference="general.smoothScroll"/>
-            <checkbox id="allowHWAccel"
-                      label="&allowHWAccel.label;"
-                      accesskey="&allowHWAccel.accesskey;"
-                      preference="layers.acceleration.disabled"/>
-            <checkbox id="checkSpelling"
-                      label="&checkSpelling.label;"
-                      accesskey="&checkSpelling.accesskey;"
-                      onsyncfrompreference="return gAdvancedPane.readCheckSpelling();"
-                      onsynctopreference="return gAdvancedPane.writeCheckSpelling();"
-                      preference="layout.spellcheckDefault"/>
-          </groupbox>
-        </tabpanel>
-
-#ifdef MOZ_DATA_REPORTING
-        <!-- Data Choices -->
-        <tabpanel id="dataChoicesPanel" orient="vertical">
-#ifdef MOZ_SERVICES_HEALTHREPORT
-          <groupbox>
-            <caption>
-              <checkbox id="submitHealthReportBox" label="&enableHealthReport.label;"
-                        oncommand="gAdvancedPane.updateSubmitHealthReport();"
-                        accesskey="&enableHealthReport.accesskey;"/>
-            </caption>
-            <vbox>
-              <hbox class="indent">
-                <label flex="1">&healthReportDesc.label;</label>
-                <spacer flex="10"/>
-                <label id="FHRLearnMore" class="text-link"
-                       value="&healthReportLearnMore.label;"
-                       onclick="gAdvancedPane.openTextLink(event)"/>
-              </hbox>
-#ifdef MOZ_TELEMETRY_REPORTING
-              <hbox class="indent">
-                <vbox flex="1">
-                  <checkbox id="submitTelemetryBox" label="&enableTelemetryData.label;"
-                            preference="toolkit.telemetry.enabled"
-                            accesskey="&enableTelemetryData.accesskey;"/>
-                  <hbox class="indent">
-                    <label id="telemetryDataDesc" flex="1">&telemetryDesc.label;</label>
-                    <spacer flex="10"/>
-                    <label id="telemetryLearnMore" class="text-link"
-                           value="&telemetryLearnMore.label;"
-                           onclick="gAdvancedPane.openTextLink(event)"/>
-                  </hbox>
-                </vbox>
-              </hbox>
-#endif
-            </vbox>
-          </groupbox>
-#endif
-#ifdef MOZ_CRASHREPORTER
-          <groupbox>
-            <caption>
-              <checkbox id="submitCrashesBox" label="&enableCrashReporter.label;"
-                        oncommand="gAdvancedPane.updateSubmitCrashes();"
-                        accesskey="&enableCrashReporter.accesskey;"/>
-            </caption>
-            <hbox class="indent">
-              <label flex="1">&crashReporterDesc.label;</label>
-              <spacer flex="10"/>
-              <label id="crashReporterLearnMore"
-                     class="text-link"
-                     value="&crashReporterLearnMore.label;"
-                     onclick="gAdvancedPane.openTextLink(event)"/>
-            </hbox>
-          </groupbox>
-#endif
-        </tabpanel>
-#endif
-        <!-- Network -->
-        <tabpanel id="networkPanel" orient="vertical">
-
-          <!-- Connection -->
-          <groupbox id="connectionGroup">
-            <caption label="&connection.label;"/>
-
-            <hbox align="center">
-              <description flex="1" control="connectionSettings">&connectionDesc.label;</description>
-              <button id="connectionSettings" icon="network" label="&connectionSettings.label;"
-                      accesskey="&connectionSettings.accesskey;"
-                      oncommand="gAdvancedPane.showConnections();"/>
-            </hbox>
-          </groupbox>
-
-          <!-- Cache -->
-          <groupbox id="cacheGroup">
-            <caption label="&httpCache.label;"/>
-
-            <hbox align="center">
-              <label id="actualDiskCacheSize" flex="1"/>
-              <button id="clearCacheButton" icon="clear"
-                      label="&clearCacheNow.label;" accesskey="&clearCacheNow.accesskey;"
-                      oncommand="gAdvancedPane.clearCache();"/>
-            </hbox>
-            <checkbox preference="browser.cache.disk.smart_size.enabled"
-                      id="allowSmartSize" flex="1"
-                      onsyncfrompreference="return gAdvancedPane.readSmartSizeEnabled();"
-                      label="&overrideSmartCacheSize.label;"
-                      accesskey="&overrideSmartCacheSize.accesskey;"/>
-            <hbox align="center" class="indent">
-              <label id="useCacheBefore" control="cacheSize"
-                     accesskey="&limitCacheSizeBefore.accesskey;"
-                     value="&limitCacheSizeBefore.label;"/>
-              <textbox id="cacheSize" type="number" size="4" max="1024"
-                       onchange="gAdvancedPane.updateCacheSizePref();"
-                       aria-labelledby="useCacheBefore cacheSize useCacheAfter"/>
-              <label id="useCacheAfter" flex="1">&limitCacheSizeAfter.label;</label>
-            </hbox>
-          </groupbox>
-
-          <!-- Offline apps -->
-          <groupbox id="offlineGroup">
-            <caption label="&offlineStorage2.label;"/>
-
-            <hbox align="center">
-              <label id="actualAppCacheSize" flex="1"/>
-              <button id="clearOfflineAppCacheButton" icon="clear"
-                      label="&clearOfflineAppCacheNow.label;" accesskey="&clearOfflineAppCacheNow.accesskey;"
-                      oncommand="gAdvancedPane.clearOfflineAppCache();"/>
-            </hbox>
-            <hbox align="center">
-              <checkbox id="offlineNotify" flex="1"
-                        label="&offlineNotify.label;" accesskey="&offlineNotify.accesskey;"
-                        preference="browser.offline-apps.notify"
-                        onsyncfrompreference="return gAdvancedPane.readOfflineNotify();"/>
-              <button id="offlineNotifyExceptions"
-                      label="&offlineNotifyExceptions.label;"
-                      accesskey="&offlineNotifyExceptions.accesskey;"
-                      oncommand="gAdvancedPane.showOfflineExceptions();"/>
-            </hbox>
-            <hbox>
-              <vbox flex="1">
-                <label id="offlineAppsListLabel">&offlineAppsList2.label;</label>
-                <listbox id="offlineAppsList"
-                         flex="1"
-                         aria-labelledby="offlineAppsListLabel"
-                         onselect="gAdvancedPane.offlineAppSelected(event);">
-                </listbox>
-              </vbox>
-              <vbox pack="end">
-                <button id="offlineAppsListRemove"
-                        disabled="true"
-                        label="&offlineAppsListRemove.label;"
-                        accesskey="&offlineAppsListRemove.accesskey;"
-                        oncommand="gAdvancedPane.removeOfflineApp();"/>
-              </vbox>
-            </hbox>
-          </groupbox>
-        </tabpanel>
-
-        <!-- Update -->
-        <tabpanel id="updatePanel" orient="vertical">
-#ifdef MOZ_UPDATER
-          <groupbox id="updateApp">
-            <caption label="&updateApp.label;"/>
-            <radiogroup id="updateRadioGroup"
-                        oncommand="gAdvancedPane.updateWritePrefs();">
-              <radio id="autoDesktop"
-                     value="auto"
-                     label="&updateAuto1.label;"
-                     accesskey="&updateAuto1.accesskey;"/>
-              <hbox class="indent">
-                <checkbox id="warnIncompatible"
-                          label="&updateAutoAddonWarn.label;"
-                          accesskey="&updateAutoAddonWarn.accesskey;"
-                          preference="app.update.mode"
-                          onsyncfrompreference="return gAdvancedPane.readAddonWarn();"
-                          onsynctopreference="return gAdvancedPane.writeAddonWarn();"/>
-              </hbox>
-              <radio value="checkOnly"
-                     label="&updateCheck.label;"
-                     accesskey="&updateCheck.accesskey;"/>
-              <radio value="manual"
-                     label="&updateManual.label;"
-                     accesskey="&updateManual.accesskey;"/>
-            </radiogroup>
-
-            <hbox>
-              <button id="showUpdateHistory"
-                      label="&updateHistory.label;"
-                      accesskey="&updateHistory.accesskey;"
-                      preference="app.update.disable_button.showUpdateHistory"
-                      oncommand="gAdvancedPane.showUpdates();"/>
-            </hbox>
-
-#ifdef MOZ_MAINTENANCE_SERVICE
-            <checkbox id="useService"
-                      label="&useService.label;"
-                      accesskey="&useService.accesskey;"
-                      preference="app.update.service.enabled"/>
-#endif
-          </groupbox>
-#endif
-          <groupbox id="updateOthers">
-            <caption label="&updateOthers.label;"/>
-            <checkbox id="enableSearchUpdate"
-                      label="&enableSearchUpdate.label;"
-                      accesskey="&enableSearchUpdate.accesskey;"
-                      preference="browser.search.update"/>
-          </groupbox>
-        </tabpanel>
-
-        <!-- Certificates -->
-        <tabpanel id="encryptionPanel" orient="vertical">
-
-            <description id="CertSelectionDesc" control="certSelection">&certSelection.description;</description>
-
-            <!--
-              The values on these radio buttons may look like l12y issues, but
-              they're not - this preference uses *those strings* as its values.
-              I KID YOU NOT.
-            -->
-            <radiogroup id="certSelection" orient="horizontal" preftype="string"
-                        preference="security.default_personal_cert"
-                        aria-labelledby="CertSelectionDesc">
-              <radio label="&certs.auto;" accesskey="&certs.auto.accesskey;"
-                     value="Select Automatically"/>
-              <radio label="&certs.ask;" accesskey="&certs.ask.accesskey;"
-                     value="Ask Every Time"/>
-            </radiogroup>
-
-            <separator/>
-
-            <checkbox id="enableOCSP"
-                      label="&enableOCSP.label;"
-                      accesskey="&enableOCSP.accesskey;"
-                      onsyncfrompreference="return gAdvancedPane.readEnableOCSP();"
-                      onsynctopreference="return gAdvancedPane.writeEnableOCSP();"
-                      preference="security.OCSP.enabled"/>
-
-            <separator/>
-
-            <hbox>
-              <button id="viewCertificatesButton"
-                      label="&viewCerts.label;" accesskey="&viewCerts.accesskey;"
-                      oncommand="gAdvancedPane.showCertificates();"
-                      preference="security.disable_button.openCertManager"/>
-              <button id="viewSecurityDevicesButton"
-                      label="&viewSecurityDevices.label;" accesskey="&viewSecurityDevices.accesskey;"
-                      oncommand="gAdvancedPane.showSecurityDevices();"
-                      preference="security.disable_button.openDeviceManager"/>
-            </hbox>
-        </tabpanel>
-
-      </tabpanels>
-    </tabbox>
-  </prefpane>
-
-</overlay>
--- a/browser/components/preferences/applicationManager.js
+++ b/browser/components/preferences/applicationManager.js
@@ -1,16 +1,14 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
-#ifdef XP_MACOSX
 var Cc = Components.classes;
 var Ci = Components.interfaces;
-#endif
 
 var gAppManagerDialog = {
   _removed: [],
 
   init: function appManager_init() {
     this.handlerInfo = window.arguments[0];
 
     var bundle = document.getElementById("appManagerBundle");
--- a/browser/components/preferences/applicationManager.xul
+++ b/browser/components/preferences/applicationManager.xul
@@ -17,17 +17,17 @@
         style="&appManager.style;"
         persist="screenX screenY">
 
   <script type="application/javascript"
           src="chrome://browser/content/utilityOverlay.js"/>
   <script type="application/javascript"
           src="chrome://browser/content/preferences/applicationManager.js"/>
   <script type="application/javascript"
-          src="chrome://browser/content/preferences/applications.js"/>
+          src="chrome://browser/content/preferences/in-content/applications.js"/>
 
   <commandset id="appManagerCommandSet">
     <command id="cmd_remove"
              oncommand="gAppManagerDialog.remove();"
              disabled="true"/>
   </commandset>
 
   <keyset id="appManagerKeyset">
deleted file mode 100644
--- a/browser/components/preferences/applications.js
+++ /dev/null
@@ -1,1911 +0,0 @@
-/*
-# -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-//****************************************************************************//
-// Constants & Enumeration Values
-
-var Cc = Components.classes;
-var Ci = Components.interfaces;
-var Cr = Components.results;
-
-Components.utils.import('resource://gre/modules/Services.jsm');
-Components.utils.import('resource://gre/modules/AppConstants.jsm');
-
-const TYPE_MAYBE_FEED = "application/vnd.mozilla.maybe.feed";
-const TYPE_MAYBE_VIDEO_FEED = "application/vnd.mozilla.maybe.video.feed";
-const TYPE_MAYBE_AUDIO_FEED = "application/vnd.mozilla.maybe.audio.feed";
-const TYPE_PDF = "application/pdf";
-
-const PREF_PDFJS_DISABLED = "pdfjs.disabled";
-const TOPIC_PDFJS_HANDLER_CHANGED = "pdfjs:handlerChanged";
-
-const PREF_DISABLED_PLUGIN_TYPES = "plugin.disable_full_page_plugin_for_types";
-
-// Preferences that affect which entries to show in the list.
-const PREF_SHOW_PLUGINS_IN_LIST = "browser.download.show_plugins_in_list";
-const PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS =
-  "browser.download.hide_plugins_without_extensions";
-
-/*
- * Preferences where we store handling information about the feed type.
- *
- * browser.feeds.handler
- * - "bookmarks", "reader" (clarified further using the .default preference),
- *   or "ask" -- indicates the default handler being used to process feeds;
- *   "bookmarks" is obsolete; to specify that the handler is bookmarks,
- *   set browser.feeds.handler.default to "bookmarks";
- *
- * browser.feeds.handler.default
- * - "bookmarks", "client" or "web" -- indicates the chosen feed reader used
- *   to display feeds, either transiently (i.e., when the "use as default"
- *   checkbox is unchecked, corresponds to when browser.feeds.handler=="ask")
- *   or more permanently (i.e., the item displayed in the dropdown in Feeds
- *   preferences)
- *
- * browser.feeds.handler.webservice
- * - the URL of the currently selected web service used to read feeds
- *
- * browser.feeds.handlers.application
- * - nsILocalFile, stores the current client-side feed reading app if one has
- *   been chosen
- */
-const PREF_FEED_SELECTED_APP    = "browser.feeds.handlers.application";
-const PREF_FEED_SELECTED_WEB    = "browser.feeds.handlers.webservice";
-const PREF_FEED_SELECTED_ACTION = "browser.feeds.handler";
-const PREF_FEED_SELECTED_READER = "browser.feeds.handler.default";
-
-const PREF_VIDEO_FEED_SELECTED_APP    = "browser.videoFeeds.handlers.application";
-const PREF_VIDEO_FEED_SELECTED_WEB    = "browser.videoFeeds.handlers.webservice";
-const PREF_VIDEO_FEED_SELECTED_ACTION = "browser.videoFeeds.handler";
-const PREF_VIDEO_FEED_SELECTED_READER = "browser.videoFeeds.handler.default";
-
-const PREF_AUDIO_FEED_SELECTED_APP    = "browser.audioFeeds.handlers.application";
-const PREF_AUDIO_FEED_SELECTED_WEB    = "browser.audioFeeds.handlers.webservice";
-const PREF_AUDIO_FEED_SELECTED_ACTION = "browser.audioFeeds.handler";
-const PREF_AUDIO_FEED_SELECTED_READER = "browser.audioFeeds.handler.default";
-
-// The nsHandlerInfoAction enumeration values in nsIHandlerInfo identify
-// the actions the application can take with content of various types.
-// But since nsIHandlerInfo doesn't support plugins, there's no value
-// identifying the "use plugin" action, so we use this constant instead.
-const kActionUsePlugin = 5;
-
-const ICON_URL_APP = AppConstants.platform == "linux" ?
-                     "moz-icon://dummy.exe?size=16" :
-                     "chrome://browser/skin/preferences/application.png";
-
-// For CSS. Can be one of "ask", "save", "plugin" or "feed". If absent, the icon URL
-// was set by us to a custom handler icon and CSS should not try to override it.
-const APP_ICON_ATTR_NAME = "appHandlerIcon";
-
-//****************************************************************************//
-// Utilities
-
-function getFileDisplayName(file) {
-#ifdef XP_WIN
-  if (file instanceof Ci.nsILocalFileWin) {
-    try {
-      return file.getVersionInfoField("FileDescription");
-    } catch (e) {}
-  }
-#endif
-#ifdef XP_MACOSX
-  if (file instanceof Ci.nsILocalFileMac) {
-    try {
-      return file.bundleDisplayName;
-    } catch (e) {}
-  }
-#endif
-  return file.leafName;
-}
-
-function getLocalHandlerApp(aFile) {
-  var localHandlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
-                        createInstance(Ci.nsILocalHandlerApp);
-  localHandlerApp.name = getFileDisplayName(aFile);
-  localHandlerApp.executable = aFile;
-
-  return localHandlerApp;
-}
-
-/**
- * An enumeration of items in a JS array.
- *
- * FIXME: use ArrayConverter once it lands (bug 380839).
- * 
- * @constructor
- */
-function ArrayEnumerator(aItems) {
-  this._index = 0;
-  this._contents = aItems;
-}
-
-ArrayEnumerator.prototype = {
-  _index: 0,
-
-  hasMoreElements: function() {
-    return this._index < this._contents.length;
-  },
-
-  getNext: function() {
-    return this._contents[this._index++];
-  }
-};
-
-function isFeedType(t) {
-  return t == TYPE_MAYBE_FEED || t == TYPE_MAYBE_VIDEO_FEED || t == TYPE_MAYBE_AUDIO_FEED;
-}
-
-//****************************************************************************//
-// HandlerInfoWrapper
-
-/**
- * This object wraps nsIHandlerInfo with some additional functionality
- * the Applications prefpane needs to display and allow modification of
- * the list of handled types.
- *
- * We create an instance of this wrapper for each entry we might display
- * in the prefpane, and we compose the instances from various sources,
- * including plugins and the handler service.
- *
- * We don't implement all the original nsIHandlerInfo functionality,
- * just the stuff that the prefpane needs.
- *
- * In theory, all of the custom functionality in this wrapper should get
- * pushed down into nsIHandlerInfo eventually.
- */
-function HandlerInfoWrapper(aType, aHandlerInfo) {
-  this._type = aType;
-  this.wrappedHandlerInfo = aHandlerInfo;
-}
-
-HandlerInfoWrapper.prototype = {
-  // The wrapped nsIHandlerInfo object.  In general, this object is private,
-  // but there are a couple cases where callers access it directly for things
-  // we haven't (yet?) implemented, so we make it a public property.
-  wrappedHandlerInfo: null,
-
-
-  //**************************************************************************//
-  // Convenience Utils
-
-  _handlerSvc: Cc["@mozilla.org/uriloader/handler-service;1"].
-               getService(Ci.nsIHandlerService),
-
-  _prefSvc: Cc["@mozilla.org/preferences-service;1"].
-            getService(Ci.nsIPrefBranch),
-
-  _categoryMgr: Cc["@mozilla.org/categorymanager;1"].
-                getService(Ci.nsICategoryManager),
-
-  element: function(aID) {
-    return document.getElementById(aID);
-  },
-
-
-  //**************************************************************************//
-  // nsIHandlerInfo
-
-  // The MIME type or protocol scheme.
-  _type: null,
-  get type() {
-    return this._type;
-  },
-
-  get description() {
-    if (this.wrappedHandlerInfo.description)
-      return this.wrappedHandlerInfo.description;
-
-    if (this.primaryExtension) {
-      var extension = this.primaryExtension.toUpperCase();
-      return this.element("bundlePreferences").getFormattedString("fileEnding",
-                                                                  [extension]);
-    }
-
-    return this.type;
-  },
-
-  get preferredApplicationHandler() {
-    return this.wrappedHandlerInfo.preferredApplicationHandler;
-  },
-
-  set preferredApplicationHandler(aNewValue) {
-    this.wrappedHandlerInfo.preferredApplicationHandler = aNewValue;
-
-    // Make sure the preferred handler is in the set of possible handlers.
-    if (aNewValue)
-      this.addPossibleApplicationHandler(aNewValue)
-  },
-
-  get possibleApplicationHandlers() {
-    return this.wrappedHandlerInfo.possibleApplicationHandlers;
-  },
-
-  addPossibleApplicationHandler: function(aNewHandler) {
-    var possibleApps = this.possibleApplicationHandlers.enumerate();
-    while (possibleApps.hasMoreElements()) {
-      if (possibleApps.getNext().equals(aNewHandler))
-        return;
-    }
-    this.possibleApplicationHandlers.appendElement(aNewHandler, false);
-  },
-
-  removePossibleApplicationHandler: function(aHandler) {
-    var defaultApp = this.preferredApplicationHandler;
-    if (defaultApp && aHandler.equals(defaultApp)) {
-      // If the app we remove was the default app, we must make sure
-      // it won't be used anymore
-      this.alwaysAskBeforeHandling = true;
-      this.preferredApplicationHandler = null;
-    }
-
-    var handlers = this.possibleApplicationHandlers;
-    for (var i = 0; i < handlers.length; ++i) {
-      var handler = handlers.queryElementAt(i, Ci.nsIHandlerApp);
-      if (handler.equals(aHandler)) {
-        handlers.removeElementAt(i);
-        break;
-      }
-    }
-  },
-
-  get hasDefaultHandler() {
-    return this.wrappedHandlerInfo.hasDefaultHandler;
-  },
-
-  get defaultDescription() {
-    return this.wrappedHandlerInfo.defaultDescription;
-  },
-
-  // What to do with content of this type.
-  get preferredAction() {
-    // If we have an enabled plugin, then the action is to use that plugin.
-    if (this.pluginName && !this.isDisabledPluginType)
-      return kActionUsePlugin;
-
-    // If the action is to use a helper app, but we don't have a preferred
-    // handler app, then switch to using the system default, if any; otherwise
-    // fall back to saving to disk, which is the default action in nsMIMEInfo.
-    // Note: "save to disk" is an invalid value for protocol info objects,
-    // but the alwaysAskBeforeHandling getter will detect that situation
-    // and always return true in that case to override this invalid value.
-    if (this.wrappedHandlerInfo.preferredAction == Ci.nsIHandlerInfo.useHelperApp &&
-        !gApplicationsPane.isValidHandlerApp(this.preferredApplicationHandler)) {
-      if (this.wrappedHandlerInfo.hasDefaultHandler)
-        return Ci.nsIHandlerInfo.useSystemDefault;
-      else
-        return Ci.nsIHandlerInfo.saveToDisk;
-    }
-
-    return this.wrappedHandlerInfo.preferredAction;
-  },
-
-  set preferredAction(aNewValue) {
-    // If the action is to use the plugin,
-    // we must set the preferred action to "save to disk".
-    // But only if it's not currently the preferred action.
-    if ((aNewValue == kActionUsePlugin) &&
-        (this.preferredAction != Ci.nsIHandlerInfo.saveToDisk)) {
-      aNewValue = Ci.nsIHandlerInfo.saveToDisk;
-    }
-
-    // We don't modify the preferred action if the new action is to use a plugin
-    // because handler info objects don't understand our custom "use plugin"
-    // value.  Also, leaving it untouched means that we can automatically revert
-    // to the old setting if the user ever removes the plugin.
-
-    if (aNewValue != kActionUsePlugin)
-      this.wrappedHandlerInfo.preferredAction = aNewValue;
-  },
-
-  get alwaysAskBeforeHandling() {
-    // If this type is handled only by a plugin, we can't trust the value
-    // in the handler info object, since it'll be a default based on the absence
-    // of any user configuration, and the default in that case is to always ask,
-    // even though we never ask for content handled by a plugin, so special case
-    // plugin-handled types by returning false here.
-    if (this.pluginName && this.handledOnlyByPlugin)
-      return false;
-
-    // If this is a protocol type and the preferred action is "save to disk",
-    // which is invalid for such types, then return true here to override that
-    // action.  This could happen when the preferred action is to use a helper
-    // app, but the preferredApplicationHandler is invalid, and there isn't
-    // a default handler, so the preferredAction getter returns save to disk
-    // instead.
-    if (!(this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) &&
-        this.preferredAction == Ci.nsIHandlerInfo.saveToDisk)
-      return true;
-
-    return this.wrappedHandlerInfo.alwaysAskBeforeHandling;
-  },
-
-  set alwaysAskBeforeHandling(aNewValue) {
-    this.wrappedHandlerInfo.alwaysAskBeforeHandling = aNewValue;
-  },
-
-
-  //**************************************************************************//
-  // nsIMIMEInfo
-
-  // The primary file extension associated with this type, if any.
-  //
-  // XXX Plugin objects contain an array of MimeType objects with "suffixes"
-  // properties; if this object has an associated plugin, shouldn't we check
-  // those properties for an extension?
-  get primaryExtension() {
-    try {
-      if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
-          this.wrappedHandlerInfo.primaryExtension)
-        return this.wrappedHandlerInfo.primaryExtension
-    } catch(ex) {}
-
-    return null;
-  },
-
-
-  //**************************************************************************//
-  // Plugin Handling
-
-  // A plugin that can handle this type, if any.
-  //
-  // Note: just because we have one doesn't mean it *will* handle the type.
-  // That depends on whether or not the type is in the list of types for which
-  // plugin handling is disabled.
-  plugin: null,
-
-  // Whether or not this type is only handled by a plugin or is also handled
-  // by some user-configured action as specified in the handler info object.
-  //
-  // Note: we can't just check if there's a handler info object for this type,
-  // because OS and user configuration is mixed up in the handler info object,
-  // so we always need to retrieve it for the OS info and can't tell whether
-  // it represents only OS-default information or user-configured information.
-  //
-  // FIXME: once handler info records are broken up into OS-provided records
-  // and user-configured records, stop using this boolean flag and simply
-  // check for the presence of a user-configured record to determine whether
-  // or not this type is only handled by a plugin.  Filed as bug 395142.
-  handledOnlyByPlugin: undefined,
-
-  get isDisabledPluginType() {
-    return this._getDisabledPluginTypes().indexOf(this.type) != -1;
-  },
-
-  _getDisabledPluginTypes: function() {
-    var types = "";
-
-    if (this._prefSvc.prefHasUserValue(PREF_DISABLED_PLUGIN_TYPES))
-      types = this._prefSvc.getCharPref(PREF_DISABLED_PLUGIN_TYPES);
-
-    // Only split if the string isn't empty so we don't end up with an array
-    // containing a single empty string.
-    if (types != "")
-      return types.split(",");
-
-    return [];
-  },
-
-  disablePluginType: function() {
-    var disabledPluginTypes = this._getDisabledPluginTypes();
-
-    if (disabledPluginTypes.indexOf(this.type) == -1)
-      disabledPluginTypes.push(this.type);
-
-    this._prefSvc.setCharPref(PREF_DISABLED_PLUGIN_TYPES,
-                              disabledPluginTypes.join(","));
-
-    // Update the category manager so existing browser windows update.
-    this._categoryMgr.deleteCategoryEntry("Gecko-Content-Viewers",
-                                          this.type,
-                                          false);
-  },
-
-  enablePluginType: function() {
-    var disabledPluginTypes = this._getDisabledPluginTypes();
-
-    var type = this.type;
-    disabledPluginTypes = disabledPluginTypes.filter(function(v) v != type);
-
-    this._prefSvc.setCharPref(PREF_DISABLED_PLUGIN_TYPES,
-                              disabledPluginTypes.join(","));
-
-    // Update the category manager so existing browser windows update.
-    this._categoryMgr.
-      addCategoryEntry("Gecko-Content-Viewers",
-                       this.type,
-                       "@mozilla.org/content/plugin/document-loader-factory;1",
-                       false,
-                       true);
-  },
-
-
-  //**************************************************************************//
-  // Storage
-
-  store: function() {
-    this._handlerSvc.store(this.wrappedHandlerInfo);
-  },
-
-
-  //**************************************************************************//
-  // Icons
-
-  get smallIcon() {
-    return this._getIcon(16);
-  },
-
-  _getIcon: function(aSize) {
-    if (this.primaryExtension)
-      return "moz-icon://goat." + this.primaryExtension + "?size=" + aSize;
-
-    if (this.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo)
-      return "moz-icon://goat?size=" + aSize + "&contentType=" + this.type;
-
-    // FIXME: consider returning some generic icon when we can't get a URL for
-    // one (for example in the case of protocol schemes).  Filed as bug 395141.
-    return null;
-  }
-
-};
-
-
-//****************************************************************************//
-// Feed Handler Info
-
-/**
- * This object implements nsIHandlerInfo for the feed types.  It's a separate
- * object because we currently store handling information for the feed type
- * in a set of preferences rather than the nsIHandlerService-managed datastore.
- * 
- * This object inherits from HandlerInfoWrapper in order to get functionality
- * that isn't special to the feed type.
- * 
- * XXX Should we inherit from HandlerInfoWrapper?  After all, we override
- * most of that wrapper's properties and methods, and we have to dance around
- * the fact that the wrapper expects to have a wrappedHandlerInfo, which we
- * don't provide.
- */
-
-function FeedHandlerInfo(aMIMEType) {
-  HandlerInfoWrapper.call(this, aMIMEType, null);
-}
-
-FeedHandlerInfo.prototype = {
-  __proto__: HandlerInfoWrapper.prototype,
-
-  //**************************************************************************//
-  // Convenience Utils
-
-  _converterSvc:
-    Cc["@mozilla.org/embeddor.implemented/web-content-handler-registrar;1"].
-    getService(Ci.nsIWebContentConverterService),
-
-  _shellSvc:
-#ifdef HAVE_SHELL_SERVICE
-    getShellService(),
-#else
-    null,
-#endif
-
-
-  //**************************************************************************//
-  // nsIHandlerInfo
-
-  get description() {
-    return this.element("bundlePreferences").getString(this._appPrefLabel);
-  },
-
-  get preferredApplicationHandler() {
-    switch (this.element(this._prefSelectedReader).value) {
-      case "client":
-        var file = this.element(this._prefSelectedApp).value;
-        if (file)
-          return getLocalHandlerApp(file);
-
-        return null;
-
-      case "web":
-        var uri = this.element(this._prefSelectedWeb).value;
-        if (!uri)
-          return null;
-        return this._converterSvc.getWebContentHandlerByURI(this.type, uri);
-
-      case "bookmarks":
-      default:
-        // When the pref is set to bookmarks, we handle feeds internally,
-        // we don't forward them to a local or web handler app, so there is
-        // no preferred handler.
-        return null;
-    }
-  },
-
-  set preferredApplicationHandler(aNewValue) {
-    if (aNewValue instanceof Ci.nsILocalHandlerApp) {
-      this.element(this._prefSelectedApp).value = aNewValue.executable;
-      this.element(this._prefSelectedReader).value = "client";
-    }
-    else if (aNewValue instanceof Ci.nsIWebContentHandlerInfo) {
-      this.element(this._prefSelectedWeb).value = aNewValue.uri;
-      this.element(this._prefSelectedReader).value = "web";
-      // Make the web handler be the new "auto handler" for feeds.
-      // Note: we don't have to unregister the auto handler when the user picks
-      // a non-web handler (local app, Live Bookmarks, etc.) because the service
-      // only uses the "auto handler" when the selected reader is a web handler.
-      // We also don't have to unregister it when the user turns on "always ask"
-      // (i.e. preview in browser), since that also overrides the auto handler.
-      this._converterSvc.setAutoHandler(this.type, aNewValue);
-    }
-  },
-
-  _possibleApplicationHandlers: null,
-
-  get possibleApplicationHandlers() {
-    if (this._possibleApplicationHandlers)
-      return this._possibleApplicationHandlers;
-
-    // A minimal implementation of nsIMutableArray.  It only supports the two
-    // methods its callers invoke, namely appendElement and nsIArray::enumerate.
-    this._possibleApplicationHandlers = {
-      _inner: [],
-      _removed: [],
-
-      QueryInterface: function(aIID) {
-        if (aIID.equals(Ci.nsIMutableArray) ||
-            aIID.equals(Ci.nsIArray) ||
-            aIID.equals(Ci.nsISupports))
-          return this;
-
-        throw Cr.NS_ERROR_NO_INTERFACE;
-      },
-
-      get length() {
-        return this._inner.length;
-      },
-
-      enumerate: function() {
-        return new ArrayEnumerator(this._inner);
-      },
-
-      appendElement: function(aHandlerApp, aWeak) {
-        this._inner.push(aHandlerApp);
-      },
-
-      removeElementAt: function(aIndex) {
-        this._removed.push(this._inner[aIndex]);
-        this._inner.splice(aIndex, 1);
-      },
-
-      queryElementAt: function(aIndex, aInterface) {
-        return this._inner[aIndex].QueryInterface(aInterface);
-      }
-    };
-
-    // Add the selected local app if it's different from the OS default handler.
-    // Unlike for other types, we can store only one local app at a time for the
-    // feed type, since we store it in a preference that historically stores
-    // only a single path.  But we display all the local apps the user chooses
-    // while the prefpane is open, only dropping the list when the user closes
-    // the prefpane, for maximum usability and consistency with other types.
-    var preferredAppFile = this.element(this._prefSelectedApp).value;
-    if (preferredAppFile) {
-      let preferredApp = getLocalHandlerApp(preferredAppFile);
-      let defaultApp = this._defaultApplicationHandler;
-      if (!defaultApp || !defaultApp.equals(preferredApp))
-        this._possibleApplicationHandlers.appendElement(preferredApp, false);
-    }
-
-    // Add the registered web handlers.  There can be any number of these.
-    var webHandlers = this._converterSvc.getContentHandlers(this.type);
-    for each (let webHandler in webHandlers)
-      this._possibleApplicationHandlers.appendElement(webHandler, false);
-
-    return this._possibleApplicationHandlers;
-  },
-
-  __defaultApplicationHandler: undefined,
-  get _defaultApplicationHandler() {
-    if (typeof this.__defaultApplicationHandler != "undefined")
-      return this.__defaultApplicationHandler;
-
-    var defaultFeedReader = null;
-#ifdef HAVE_SHELL_SERVICE
-    try {
-      defaultFeedReader = this._shellSvc.defaultFeedReader;
-    }
-    catch(ex) {
-      // no default reader or _shellSvc is null
-    }
-#endif
-
-    if (defaultFeedReader) {
-      let handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
-                       createInstance(Ci.nsIHandlerApp);
-      handlerApp.name = getFileDisplayName(defaultFeedReader);
-      handlerApp.QueryInterface(Ci.nsILocalHandlerApp);
-      handlerApp.executable = defaultFeedReader;
-
-      this.__defaultApplicationHandler = handlerApp;
-    }
-    else {
-      this.__defaultApplicationHandler = null;
-    }
-
-    return this.__defaultApplicationHandler;
-  },
-
-  get hasDefaultHandler() {
-#ifdef HAVE_SHELL_SERVICE
-    try {
-      if (this._shellSvc.defaultFeedReader)
-        return true;
-    }
-    catch(ex) {
-      // no default reader or _shellSvc is null
-    }
-#endif
-
-    return false;
-  },
-
-  get defaultDescription() {
-    if (this.hasDefaultHandler)
-      return this._defaultApplicationHandler.name;
-
-    // Should we instead return null?
-    return "";
-  },
-
-  // What to do with content of this type.
-  get preferredAction() {
-    switch (this.element(this._prefSelectedAction).value) {
-
-      case "bookmarks":
-        return Ci.nsIHandlerInfo.handleInternally;
-
-      case "reader": {
-        let preferredApp = this.preferredApplicationHandler;
-        let defaultApp = this._defaultApplicationHandler;
-
-        // If we have a valid preferred app, return useSystemDefault if it's
-        // the default app; otherwise return useHelperApp.
-        if (gApplicationsPane.isValidHandlerApp(preferredApp)) {
-          if (defaultApp && defaultApp.equals(preferredApp))
-            return Ci.nsIHandlerInfo.useSystemDefault;
-
-          return Ci.nsIHandlerInfo.useHelperApp;
-        }
-
-        // The pref is set to "reader", but we don't have a valid preferred app.
-        // What do we do now?  Not sure this is the best option (perhaps we
-        // should direct the user to the default app, if any), but for now let's
-        // direct the user to live bookmarks.
-        return Ci.nsIHandlerInfo.handleInternally;
-      }
-
-      // If the action is "ask", then alwaysAskBeforeHandling will override
-      // the action, so it doesn't matter what we say it is, it just has to be
-      // something that doesn't cause the controller to hide the type.
-      case "ask":
-      default:
-        return Ci.nsIHandlerInfo.handleInternally;
-    }
-  },
-
-  set preferredAction(aNewValue) {
-    switch (aNewValue) {
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        this.element(this._prefSelectedReader).value = "bookmarks";
-        break;
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        this.element(this._prefSelectedAction).value = "reader";
-        // The controller has already set preferredApplicationHandler
-        // to the new helper app.
-        break;
-
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        this.element(this._prefSelectedAction).value = "reader";
-        this.preferredApplicationHandler = this._defaultApplicationHandler;
-        break;
-    }
-  },
-
-  get alwaysAskBeforeHandling() {
-    return this.element(this._prefSelectedAction).value == "ask";
-  },
-
-  set alwaysAskBeforeHandling(aNewValue) {
-    if (aNewValue == true)
-      this.element(this._prefSelectedAction).value = "ask";
-    else
-      this.element(this._prefSelectedAction).value = "reader";
-  },
-
-  // Whether or not we are currently storing the action selected by the user.
-  // We use this to suppress notification-triggered updates to the list when
-  // we make changes that may spawn such updates, specifically when we change
-  // the action for the feed type, which results in feed preference updates,
-  // which spawn "pref changed" notifications that would otherwise cause us
-  // to rebuild the view unnecessarily.
-  _storingAction: false,
-
-
-  //**************************************************************************//
-  // nsIMIMEInfo
-
-  get primaryExtension() {
-    return "xml";
-  },
-
-
-  //**************************************************************************//
-  // Storage
-
-  // Changes to the preferred action and handler take effect immediately
-  // (we write them out to the preferences right as they happen),
-  // so we when the controller calls store() after modifying the handlers,
-  // the only thing we need to store is the removal of possible handlers
-  // XXX Should we hold off on making the changes until this method gets called?
-  store: function() {
-    for each (let app in this._possibleApplicationHandlers._removed) {
-      if (app instanceof Ci.nsILocalHandlerApp) {
-        let pref = this.element(PREF_FEED_SELECTED_APP);
-        var preferredAppFile = pref.value;
-        if (preferredAppFile) {
-          let preferredApp = getLocalHandlerApp(preferredAppFile);
-          if (app.equals(preferredApp))
-            pref.reset();
-        }
-      }
-      else {
-        app.QueryInterface(Ci.nsIWebContentHandlerInfo);
-        this._converterSvc.removeContentHandler(app.contentType, app.uri);
-      }
-    }
-    this._possibleApplicationHandlers._removed = [];
-  },
-
-
-  //**************************************************************************//
-  // Icons
-
-  get smallIcon() {
-    return this._smallIcon;
-  }
-
-};
-
-var feedHandlerInfo = {
-  __proto__: new FeedHandlerInfo(TYPE_MAYBE_FEED),
-  _prefSelectedApp: PREF_FEED_SELECTED_APP, 
-  _prefSelectedWeb: PREF_FEED_SELECTED_WEB, 
-  _prefSelectedAction: PREF_FEED_SELECTED_ACTION, 
-  _prefSelectedReader: PREF_FEED_SELECTED_READER,
-  _smallIcon: "chrome://browser/skin/feeds/feedIcon16.png",
-  _appPrefLabel: "webFeed"
-}
-
-var videoFeedHandlerInfo = {
-  __proto__: new FeedHandlerInfo(TYPE_MAYBE_VIDEO_FEED),
-  _prefSelectedApp: PREF_VIDEO_FEED_SELECTED_APP, 
-  _prefSelectedWeb: PREF_VIDEO_FEED_SELECTED_WEB, 
-  _prefSelectedAction: PREF_VIDEO_FEED_SELECTED_ACTION, 
-  _prefSelectedReader: PREF_VIDEO_FEED_SELECTED_READER,
-  _smallIcon: "chrome://browser/skin/feeds/videoFeedIcon16.png",
-  _appPrefLabel: "videoPodcastFeed"
-}
-
-var audioFeedHandlerInfo = {
-  __proto__: new FeedHandlerInfo(TYPE_MAYBE_AUDIO_FEED),
-  _prefSelectedApp: PREF_AUDIO_FEED_SELECTED_APP, 
-  _prefSelectedWeb: PREF_AUDIO_FEED_SELECTED_WEB, 
-  _prefSelectedAction: PREF_AUDIO_FEED_SELECTED_ACTION, 
-  _prefSelectedReader: PREF_AUDIO_FEED_SELECTED_READER,
-  _smallIcon: "chrome://browser/skin/feeds/audioFeedIcon16.png",
-  _appPrefLabel: "audioPodcastFeed"
-}
-
-/**
- * InternalHandlerInfoWrapper provides a basic mechanism to create an internal
- * mime type handler that can be enabled/disabled in the applications preference
- * menu.
- */
-function InternalHandlerInfoWrapper(aMIMEType) {
-  var mimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
-  var handlerInfo = mimeSvc.getFromTypeAndExtension(aMIMEType, null);
-
-  HandlerInfoWrapper.call(this, aMIMEType, handlerInfo);
-}
-
-InternalHandlerInfoWrapper.prototype = {
-  __proto__: HandlerInfoWrapper.prototype,
-
-  // Override store so we so we can notify any code listening for registration
-  // or unregistration of this handler.
-  store: function() {
-    HandlerInfoWrapper.prototype.store.call(this);
-    Services.obs.notifyObservers(null, this._handlerChanged, null);
-  },
-
-  get enabled() {
-    throw Cr.NS_ERROR_NOT_IMPLEMENTED;
-  },
-
-  get description() {
-    return this.element("bundlePreferences").getString(this._appPrefLabel);
-  }
-};
-
-var pdfHandlerInfo = {
-  __proto__: new InternalHandlerInfoWrapper(TYPE_PDF),
-  _handlerChanged: TOPIC_PDFJS_HANDLER_CHANGED,
-  _appPrefLabel: "portableDocumentFormat",
-  get enabled() {
-    return !Services.prefs.getBoolPref(PREF_PDFJS_DISABLED);
-  },
-};
-
-
-//****************************************************************************//
-// Prefpane Controller
-
-var gApplicationsPane = {
-  // The set of types the app knows how to handle.  A hash of HandlerInfoWrapper
-  // objects, indexed by type.
-  _handledTypes: {},
-  
-  // The list of types we can show, sorted by the sort column/direction.
-  // An array of HandlerInfoWrapper objects.  We build this list when we first
-  // load the data and then rebuild it when users change a pref that affects
-  // what types we can show or change the sort column/direction.
-  // Note: this isn't necessarily the list of types we *will* show; if the user
-  // provides a filter string, we'll only show the subset of types in this list
-  // that match that string.
-  _visibleTypes: [],
-
-  // A count of the number of times each visible type description appears.
-  // We use these counts to determine whether or not to annotate descriptions
-  // with their types to distinguish duplicate descriptions from each other.
-  // A hash of integer counts, indexed by string description.
-  _visibleTypeDescriptionCount: {},
-
-
-  //**************************************************************************//
-  // Convenience & Performance Shortcuts
-
-  // These get defined by init().
-  _brandShortName : null,
-  _prefsBundle    : null,
-  _list           : null,
-  _filter         : null,
-
-  _prefSvc      : Cc["@mozilla.org/preferences-service;1"].
-                  getService(Ci.nsIPrefBranch),
-
-  _mimeSvc      : Cc["@mozilla.org/mime;1"].
-                  getService(Ci.nsIMIMEService),
-
-  _helperAppSvc : Cc["@mozilla.org/uriloader/external-helper-app-service;1"].
-                  getService(Ci.nsIExternalHelperAppService),
-
-  _handlerSvc   : Cc["@mozilla.org/uriloader/handler-service;1"].
-                  getService(Ci.nsIHandlerService),
-
-  _ioSvc        : Cc["@mozilla.org/network/io-service;1"].
-                  getService(Ci.nsIIOService),
-
-
-  //**************************************************************************//
-  // Initialization & Destruction
-
-  init: function() {
-    // Initialize shortcuts to some commonly accessed elements & values.
-    this._brandShortName =
-      document.getElementById("bundleBrand").getString("brandShortName");
-    this._prefsBundle = document.getElementById("bundlePreferences");
-    this._list = document.getElementById("handlersView");
-    this._filter = document.getElementById("filter");
-
-    // Observe preferences that influence what we display so we can rebuild
-    // the view when they change.
-    this._prefSvc.addObserver(PREF_SHOW_PLUGINS_IN_LIST, this, false);
-    this._prefSvc.addObserver(PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS, this, false);
-    this._prefSvc.addObserver(PREF_FEED_SELECTED_APP, this, false);
-    this._prefSvc.addObserver(PREF_FEED_SELECTED_WEB, this, false);
-    this._prefSvc.addObserver(PREF_FEED_SELECTED_ACTION, this, false);
-    this._prefSvc.addObserver(PREF_FEED_SELECTED_READER, this, false);
-
-    this._prefSvc.addObserver(PREF_VIDEO_FEED_SELECTED_APP, this, false);
-    this._prefSvc.addObserver(PREF_VIDEO_FEED_SELECTED_WEB, this, false);
-    this._prefSvc.addObserver(PREF_VIDEO_FEED_SELECTED_ACTION, this, false);
-    this._prefSvc.addObserver(PREF_VIDEO_FEED_SELECTED_READER, this, false);
-
-    this._prefSvc.addObserver(PREF_AUDIO_FEED_SELECTED_APP, this, false);
-    this._prefSvc.addObserver(PREF_AUDIO_FEED_SELECTED_WEB, this, false);
-    this._prefSvc.addObserver(PREF_AUDIO_FEED_SELECTED_ACTION, this, false);
-    this._prefSvc.addObserver(PREF_AUDIO_FEED_SELECTED_READER, this, false);
-
-
-    // Listen for window unload so we can remove our preference observers.
-    window.addEventListener("unload", this, false);
-
-    // Figure out how we should be sorting the list.  We persist sort settings
-    // across sessions, so we can't assume the default sort column/direction.
-    // XXX should we be using the XUL sort service instead?
-    if (document.getElementById("actionColumn").hasAttribute("sortDirection")) {
-      this._sortColumn = document.getElementById("actionColumn");
-      // The typeColumn element always has a sortDirection attribute,
-      // either because it was persisted or because the default value
-      // from the xul file was used.  If we are sorting on the other
-      // column, we should remove it.
-      document.getElementById("typeColumn").removeAttribute("sortDirection");
-    }
-    else 
-      this._sortColumn = document.getElementById("typeColumn");
-
-    // Load the data and build the list of handlers.
-    // By doing this in a timeout, we let the preferences dialog resize itself
-    // to an appropriate size before we add a bunch of items to the list.
-    // Otherwise, if there are many items, and the Applications prefpane
-    // is the one that gets displayed when the user first opens the dialog,
-    // the dialog might stretch too much in an attempt to fit them all in.
-    // XXX Shouldn't we perhaps just set a max-height on the richlistbox?
-    var _delayedPaneLoad = function(self) {
-      self._loadData();
-      self._rebuildVisibleTypes();
-      self._sortVisibleTypes();
-      self._rebuildView();
-
-      // Notify observers that the UI is now ready
-      Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService).
-      notifyObservers(window, "app-handler-pane-loaded", null);
-    }
-    setTimeout(_delayedPaneLoad, 0, this);
-  },
-
-  destroy: function() {
-    window.removeEventListener("unload", this, false);
-    this._prefSvc.removeObserver(PREF_SHOW_PLUGINS_IN_LIST, this);
-    this._prefSvc.removeObserver(PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS, this);
-    this._prefSvc.removeObserver(PREF_FEED_SELECTED_APP, this);
-    this._prefSvc.removeObserver(PREF_FEED_SELECTED_WEB, this);
-    this._prefSvc.removeObserver(PREF_FEED_SELECTED_ACTION, this);
-    this._prefSvc.removeObserver(PREF_FEED_SELECTED_READER, this);
-
-    this._prefSvc.removeObserver(PREF_VIDEO_FEED_SELECTED_APP, this);
-    this._prefSvc.removeObserver(PREF_VIDEO_FEED_SELECTED_WEB, this);
-    this._prefSvc.removeObserver(PREF_VIDEO_FEED_SELECTED_ACTION, this);
-    this._prefSvc.removeObserver(PREF_VIDEO_FEED_SELECTED_READER, this);
-
-    this._prefSvc.removeObserver(PREF_AUDIO_FEED_SELECTED_APP, this);
-    this._prefSvc.removeObserver(PREF_AUDIO_FEED_SELECTED_WEB, this);
-    this._prefSvc.removeObserver(PREF_AUDIO_FEED_SELECTED_ACTION, this);
-    this._prefSvc.removeObserver(PREF_AUDIO_FEED_SELECTED_READER, this);
-  },
-
-
-  //**************************************************************************//
-  // nsISupports
-
-  QueryInterface: function(aIID) {
-    if (aIID.equals(Ci.nsIObserver) ||
-        aIID.equals(Ci.nsIDOMEventListener ||
-        aIID.equals(Ci.nsISupports)))
-      return this;
-
-    throw Cr.NS_ERROR_NO_INTERFACE;
-  },
-
-
-  //**************************************************************************//
-  // nsIObserver
-
-  observe: function (aSubject, aTopic, aData) {
-    // Rebuild the list when there are changes to preferences that influence
-    // whether or not to show certain entries in the list.
-    if (aTopic == "nsPref:changed" && !this._storingAction) {
-      // These two prefs alter the list of visible types, so we have to rebuild
-      // that list when they change.
-      if (aData == PREF_SHOW_PLUGINS_IN_LIST ||
-          aData == PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS) {
-        this._rebuildVisibleTypes();
-        this._sortVisibleTypes();
-      }
-
-      // All the prefs we observe can affect what we display, so we rebuild
-      // the view when any of them changes.
-      this._rebuildView();
-    }
-  },
-
-
-  //**************************************************************************//
-  // nsIDOMEventListener
-
-  handleEvent: function(aEvent) {
-    if (aEvent.type == "unload") {
-      this.destroy();
-    }
-  },
-
-
-  //**************************************************************************//
-  // Composed Model Construction
-
-  _loadData: function() {
-    this._loadFeedHandler();
-    this._loadInternalHandlers();
-    this._loadPluginHandlers();
-    this._loadApplicationHandlers();
-  },
-
-  _loadFeedHandler: function() {
-    this._handledTypes[TYPE_MAYBE_FEED] = feedHandlerInfo;
-    feedHandlerInfo.handledOnlyByPlugin = false;
-
-    this._handledTypes[TYPE_MAYBE_VIDEO_FEED] = videoFeedHandlerInfo;
-    videoFeedHandlerInfo.handledOnlyByPlugin = false;
-
-    this._handledTypes[TYPE_MAYBE_AUDIO_FEED] = audioFeedHandlerInfo;
-    audioFeedHandlerInfo.handledOnlyByPlugin = false;
-  },
-
-  /**
-   * Load higher level internal handlers so they can be turned on/off in the
-   * applications menu.
-   */
-  _loadInternalHandlers: function() {
-    var internalHandlers = [pdfHandlerInfo];
-    for (let internalHandler of internalHandlers) {
-      if (internalHandler.enabled) {
-        this._handledTypes[internalHandler.type] = internalHandler;
-      }
-    }
-  },
-
-  /**
-   * Load the set of handlers defined by plugins.
-   *
-   * Note: if there's more than one plugin for a given MIME type, we assume
-   * the last one is the one that the application will use.  That may not be
-   * correct, but it's how we've been doing it for years.
-   *
-   * Perhaps we should instead query navigator.mimeTypes for the set of types
-   * supported by the application and then get the plugin from each MIME type's
-   * enabledPlugin property.  But if there's a plugin for a type, we need
-   * to know about it even if it isn't enabled, since we're going to give
-   * the user an option to enable it.
-   *
-   * Also note that enabledPlugin does not get updated when
-   * plugin.disable_full_page_plugin_for_types changes, so even if we could use
-   * enabledPlugin to get the plugin that would be used, we'd still need to
-   * check the pref ourselves to find out if it's enabled.
-   */
-  _loadPluginHandlers: function() {
-    "use strict";
-
-    let mimeTypes = navigator.mimeTypes;
-
-    for (let mimeType of mimeTypes) {
-      let handlerInfoWrapper;
-      if (mimeType.type in this._handledTypes) {
-        handlerInfoWrapper = this._handledTypes[mimeType.type];
-      } else {
-        let wrappedHandlerInfo =
-              this._mimeSvc.getFromTypeAndExtension(mimeType.type, null);
-        handlerInfoWrapper = new HandlerInfoWrapper(mimeType.type, wrappedHandlerInfo);
-        handlerInfoWrapper.handledOnlyByPlugin = true;
-        this._handledTypes[mimeType.type] = handlerInfoWrapper;
-      }
-      handlerInfoWrapper.pluginName = mimeType.enabledPlugin.name;
-    }
-  },
-
-  /**
-   * Load the set of handlers defined by the application datastore.
-   */
-  _loadApplicationHandlers: function() {
-    var wrappedHandlerInfos = this._handlerSvc.enumerate();
-    while (wrappedHandlerInfos.hasMoreElements()) {
-      let wrappedHandlerInfo =
-        wrappedHandlerInfos.getNext().QueryInterface(Ci.nsIHandlerInfo);
-      let type = wrappedHandlerInfo.type;
-
-      let handlerInfoWrapper;
-      if (type in this._handledTypes)
-        handlerInfoWrapper = this._handledTypes[type];
-      else {
-        handlerInfoWrapper = new HandlerInfoWrapper(type, wrappedHandlerInfo);
-        this._handledTypes[type] = handlerInfoWrapper;
-      }
-
-      handlerInfoWrapper.handledOnlyByPlugin = false;
-    }
-  },
-
-
-  //**************************************************************************//
-  // View Construction
-
-  _rebuildVisibleTypes: function() {
-    // Reset the list of visible types and the visible type description counts.
-    this._visibleTypes = [];
-    this._visibleTypeDescriptionCount = {};
-
-    // Get the preferences that help determine what types to show.
-    var showPlugins = this._prefSvc.getBoolPref(PREF_SHOW_PLUGINS_IN_LIST);
-    var hidePluginsWithoutExtensions =
-      this._prefSvc.getBoolPref(PREF_HIDE_PLUGINS_WITHOUT_EXTENSIONS);
-
-    for (let type in this._handledTypes) {
-      let handlerInfo = this._handledTypes[type];
-
-      // Hide plugins without associated extensions if so prefed so we don't
-      // show a whole bunch of obscure types handled by plugins on Mac.
-      // Note: though protocol types don't have extensions, we still show them;
-      // the pref is only meant to be applied to MIME types, since plugins are
-      // only associated with MIME types.
-      // FIXME: should we also check the "suffixes" property of the plugin?
-      // Filed as bug 395135.
-      if (hidePluginsWithoutExtensions && handlerInfo.handledOnlyByPlugin &&
-          handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
-          !handlerInfo.primaryExtension)
-        continue;
-
-      // Hide types handled only by plugins if so prefed.
-      if (handlerInfo.handledOnlyByPlugin && !showPlugins)
-        continue;
-
-      // We couldn't find any reason to exclude the type, so include it.
-      this._visibleTypes.push(handlerInfo);
-
-      if (handlerInfo.description in this._visibleTypeDescriptionCount)
-        this._visibleTypeDescriptionCount[handlerInfo.description]++;
-      else
-        this._visibleTypeDescriptionCount[handlerInfo.description] = 1;
-    }
-  },
-
-  _rebuildView: function() {
-    // Clear the list of entries.
-    while (this._list.childNodes.length > 1)
-      this._list.removeChild(this._list.lastChild);
-
-    var visibleTypes = this._visibleTypes;
-
-    // If the user is filtering the list, then only show matching types.
-    if (this._filter.value)
-      visibleTypes = visibleTypes.filter(this._matchesFilter, this);
-
-    for each (let visibleType in visibleTypes) {
-      let item = document.createElement("richlistitem");
-      item.setAttribute("type", visibleType.type);
-      item.setAttribute("typeDescription", this._describeType(visibleType));
-      if (visibleType.smallIcon)
-        item.setAttribute("typeIcon", visibleType.smallIcon);
-      item.setAttribute("actionDescription",
-                        this._describePreferredAction(visibleType));
-
-      if (!this._setIconClassForPreferredAction(visibleType, item)) {
-        item.setAttribute("actionIcon",
-                          this._getIconURLForPreferredAction(visibleType));
-      }
-
-      this._list.appendChild(item);
-    }
-
-    this._selectLastSelectedType();
-  },
-
-  _matchesFilter: function(aType) {
-    var filterValue = this._filter.value.toLowerCase();
-    return this._describeType(aType).toLowerCase().indexOf(filterValue) != -1 ||
-           this._describePreferredAction(aType).toLowerCase().indexOf(filterValue) != -1;
-  },
-
-  /**
-   * Describe, in a human-readable fashion, the type represented by the given
-   * handler info object.  Normally this is just the description provided by
-   * the info object, but if more than one object presents the same description,
-   * then we annotate the duplicate descriptions with the type itself to help
-   * users distinguish between those types.
-   *
-   * @param aHandlerInfo {nsIHandlerInfo} the type being described
-   * @returns {string} a description of the type
-   */
-  _describeType: function(aHandlerInfo) {
-    if (this._visibleTypeDescriptionCount[aHandlerInfo.description] > 1)
-      return this._prefsBundle.getFormattedString("typeDescriptionWithType",
-                                                  [aHandlerInfo.description,
-                                                   aHandlerInfo.type]);
-
-    return aHandlerInfo.description;
-  },
-
-  /**
-   * Describe, in a human-readable fashion, the preferred action to take on
-   * the type represented by the given handler info object.
-   *
-   * XXX Should this be part of the HandlerInfoWrapper interface?  It would
-   * violate the separation of model and view, but it might make more sense
-   * nonetheless (f.e. it would make sortTypes easier).
-   *
-   * @param aHandlerInfo {nsIHandlerInfo} the type whose preferred action
-   *                                      is being described
-   * @returns {string} a description of the action
-   */
-  _describePreferredAction: function(aHandlerInfo) {
-    // alwaysAskBeforeHandling overrides the preferred action, so if that flag
-    // is set, then describe that behavior instead.  For most types, this is
-    // the "alwaysAsk" string, but for the feed type we show something special.
-    if (aHandlerInfo.alwaysAskBeforeHandling) {
-      if (isFeedType(aHandlerInfo.type))
-        return this._prefsBundle.getFormattedString("previewInApp",
-                                                    [this._brandShortName]);
-      else
-        return this._prefsBundle.getString("alwaysAsk");
-    }
-
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.saveToDisk:
-        return this._prefsBundle.getString("saveFile");
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        var preferredApp = aHandlerInfo.preferredApplicationHandler;
-        var name;
-        if (preferredApp instanceof Ci.nsILocalHandlerApp)
-          name = getFileDisplayName(preferredApp.executable);
-        else
-          name = preferredApp.name;
-        return this._prefsBundle.getFormattedString("useApp", [name]);
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        // For the feed type, handleInternally means live bookmarks.
-        if (isFeedType(aHandlerInfo.type)) {
-          return this._prefsBundle.getFormattedString("addLiveBookmarksInApp",
-                                                      [this._brandShortName]);
-        }
-
-        if (aHandlerInfo instanceof InternalHandlerInfoWrapper) {
-          return this._prefsBundle.getFormattedString("previewInApp",
-                                                      [this._brandShortName]);
-        }
-
-        // For other types, handleInternally looks like either useHelperApp
-        // or useSystemDefault depending on whether or not there's a preferred
-        // handler app.
-        if (this.isValidHandlerApp(aHandlerInfo.preferredApplicationHandler))
-          return aHandlerInfo.preferredApplicationHandler.name;
-
-        return aHandlerInfo.defaultDescription;
-
-        // XXX Why don't we say the app will handle the type internally?
-        // Is it because the app can't actually do that?  But if that's true,
-        // then why would a preferredAction ever get set to this value
-        // in the first place?
-
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        return this._prefsBundle.getFormattedString("useDefault",
-                                                    [aHandlerInfo.defaultDescription]);
-
-      case kActionUsePlugin:
-        return this._prefsBundle.getFormattedString("usePluginIn",
-                                                    [aHandlerInfo.pluginName,
-                                                     this._brandShortName]);
-    }
-  },
-
-  _selectLastSelectedType: function() {
-    // If the list is disabled by the pref.downloads.disable_button.edit_actions
-    // preference being locked, then don't select the type, as that would cause
-    // it to appear selected, with a different background and an actions menu
-    // that makes it seem like you can choose an action for the type.
-    if (this._list.disabled)
-      return;
-
-    var lastSelectedType = this._list.getAttribute("lastSelectedType");
-    if (!lastSelectedType)
-      return;
-
-    var item = this._list.getElementsByAttribute("type", lastSelectedType)[0];
-    if (!item)
-      return;
-
-    this._list.selectedItem = item;
-  },
-
-  /**
-   * Whether or not the given handler app is valid.
-   *
-   * @param aHandlerApp {nsIHandlerApp} the handler app in question
-   *
-   * @returns {boolean} whether or not it's valid
-   */
-  isValidHandlerApp: function(aHandlerApp) {
-    if (!aHandlerApp)
-      return false;
-
-    if (aHandlerApp instanceof Ci.nsILocalHandlerApp)
-      return this._isValidHandlerExecutable(aHandlerApp.executable);
-
-    if (aHandlerApp instanceof Ci.nsIWebHandlerApp)
-      return aHandlerApp.uriTemplate;
-
-    if (aHandlerApp instanceof Ci.nsIWebContentHandlerInfo)
-      return aHandlerApp.uri;
-
-    return false;
-  },
-
-  _isValidHandlerExecutable: function(aExecutable) {
-    return aExecutable &&
-           aExecutable.exists() &&
-           aExecutable.isExecutable() &&
-// XXXben - we need to compare this with the running instance executable
-//          just don't know how to do that via script...
-// XXXmano TBD: can probably add this to nsIShellService
-#ifdef XP_WIN
-#expand    aExecutable.leafName != "__MOZ_APP_NAME__.exe";
-#else
-#ifdef XP_MACOSX
-#expand    aExecutable.leafName != "__MOZ_MACBUNDLE_NAME__";
-#else
-#expand    aExecutable.leafName != "__MOZ_APP_NAME__-bin";
-#endif
-#endif
-  },
-
-  /**
-   * Rebuild the actions menu for the selected entry.  Gets called by
-   * the richlistitem constructor when an entry in the list gets selected.
-   */
-  rebuildActionsMenu: function() {
-    var typeItem = this._list.selectedItem;
-    var handlerInfo = this._handledTypes[typeItem.type];
-    var menu =
-      document.getAnonymousElementByAttribute(typeItem, "class", "actionsMenu");
-    var menuPopup = menu.menupopup;
-
-    // Clear out existing items.
-    while (menuPopup.hasChildNodes())
-      menuPopup.removeChild(menuPopup.lastChild);
-
-    // Add the "Preview in Firefox" option for optional internal handlers.
-    if (handlerInfo instanceof InternalHandlerInfoWrapper) {
-      var internalMenuItem = document.createElement("menuitem");
-      internalMenuItem.setAttribute("action", Ci.nsIHandlerInfo.handleInternally);
-      let label = this._prefsBundle.getFormattedString("previewInApp",
-                                                       [this._brandShortName]);
-      internalMenuItem.setAttribute("label", label);
-      internalMenuItem.setAttribute("tooltiptext", label);
-      internalMenuItem.setAttribute(APP_ICON_ATTR_NAME, "ask");
-      menuPopup.appendChild(internalMenuItem);
-    }
-
-    {
-      var askMenuItem = document.createElement("menuitem");
-      askMenuItem.setAttribute("action", Ci.nsIHandlerInfo.alwaysAsk);
-      let label;
-      if (isFeedType(handlerInfo.type))
-        label = this._prefsBundle.getFormattedString("previewInApp",
-                                                     [this._brandShortName]);
-      else
-        label = this._prefsBundle.getString("alwaysAsk");
-      askMenuItem.setAttribute("label", label);
-      askMenuItem.setAttribute("tooltiptext", label);
-      askMenuItem.setAttribute(APP_ICON_ATTR_NAME, "ask");
-      menuPopup.appendChild(askMenuItem);
-    }
-
-    // Create a menu item for saving to disk.
-    // Note: this option isn't available to protocol types, since we don't know
-    // what it means to save a URL having a certain scheme to disk, nor is it
-    // available to feeds, since the feed code doesn't implement the capability.
-    if ((handlerInfo.wrappedHandlerInfo instanceof Ci.nsIMIMEInfo) &&
-        !isFeedType(handlerInfo.type)) {
-      var saveMenuItem = document.createElement("menuitem");
-      saveMenuItem.setAttribute("action", Ci.nsIHandlerInfo.saveToDisk);
-      let label = this._prefsBundle.getString("saveFile");
-      saveMenuItem.setAttribute("label", label);
-      saveMenuItem.setAttribute("tooltiptext", label);
-      saveMenuItem.setAttribute(APP_ICON_ATTR_NAME, "save");
-      menuPopup.appendChild(saveMenuItem);
-    }
-
-    // If this is the feed type, add a Live Bookmarks item.
-    if (isFeedType(handlerInfo.type)) {
-      var internalMenuItem = document.createElement("menuitem");
-      internalMenuItem.setAttribute("action", Ci.nsIHandlerInfo.handleInternally);
-      let label = this._prefsBundle.getFormattedString("addLiveBookmarksInApp",
-                                                       [this._brandShortName]);
-      internalMenuItem.setAttribute("label", label);
-      internalMenuItem.setAttribute("tooltiptext", label);
-      internalMenuItem.setAttribute(APP_ICON_ATTR_NAME, "feed");
-      menuPopup.appendChild(internalMenuItem);
-    }
-
-    // Add a separator to distinguish these items from the helper app items
-    // that follow them.
-    let menuItem = document.createElement("menuseparator");
-    menuPopup.appendChild(menuItem);
-
-    // Create a menu item for the OS default application, if any.
-    if (handlerInfo.hasDefaultHandler) {
-      var defaultMenuItem = document.createElement("menuitem");
-      defaultMenuItem.setAttribute("action", Ci.nsIHandlerInfo.useSystemDefault);
-      let label = this._prefsBundle.getFormattedString("useDefault",
-                                                       [handlerInfo.defaultDescription]);
-      defaultMenuItem.setAttribute("label", label);
-      defaultMenuItem.setAttribute("tooltiptext", handlerInfo.defaultDescription);
-      defaultMenuItem.setAttribute("image", this._getIconURLForSystemDefault(handlerInfo));
-
-      menuPopup.appendChild(defaultMenuItem);
-    }
-
-    // Create menu items for possible handlers.
-    let preferredApp = handlerInfo.preferredApplicationHandler;
-    let possibleApps = handlerInfo.possibleApplicationHandlers.enumerate();
-    var possibleAppMenuItems = [];
-    while (possibleApps.hasMoreElements()) {
-      let possibleApp = possibleApps.getNext();
-      if (!this.isValidHandlerApp(possibleApp))
-        continue;
-
-      let menuItem = document.createElement("menuitem");
-      menuItem.setAttribute("action", Ci.nsIHandlerInfo.useHelperApp);
-      let label;
-      if (possibleApp instanceof Ci.nsILocalHandlerApp)
-        label = getFileDisplayName(possibleApp.executable);
-      else
-        label = possibleApp.name;
-      label = this._prefsBundle.getFormattedString("useApp", [label]);
-      menuItem.setAttribute("label", label);
-      menuItem.setAttribute("tooltiptext", label);
-      menuItem.setAttribute("image", this._getIconURLForHandlerApp(possibleApp));
-
-      // Attach the handler app object to the menu item so we can use it
-      // to make changes to the datastore when the user selects the item.
-      menuItem.handlerApp = possibleApp;
-
-      menuPopup.appendChild(menuItem);
-      possibleAppMenuItems.push(menuItem);
-    }
-
-    // Create a menu item for the plugin.
-    if (handlerInfo.pluginName) {
-      var pluginMenuItem = document.createElement("menuitem");
-      pluginMenuItem.setAttribute("action", kActionUsePlugin);
-      let label = this._prefsBundle.getFormattedString("usePluginIn",
-                                                       [handlerInfo.pluginName,
-                                                        this._brandShortName]);
-      pluginMenuItem.setAttribute("label", label);
-      pluginMenuItem.setAttribute("tooltiptext", label);
-      pluginMenuItem.setAttribute(APP_ICON_ATTR_NAME, "plugin");
-      menuPopup.appendChild(pluginMenuItem);
-    }
-
-    // Create a menu item for selecting a local application.
-#ifdef XP_WIN
-    // On Windows, selecting an application to open another application
-    // would be meaningless so we special case executables.
-    var executableType = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService)
-                                                  .getTypeFromExtension("exe");
-    if (handlerInfo.type != executableType)
-#endif
-    {
-      let menuItem = document.createElement("menuitem");
-      menuItem.setAttribute("oncommand", "gApplicationsPane.chooseApp(event)");
-      let label = this._prefsBundle.getString("useOtherApp");
-      menuItem.setAttribute("label", label);
-      menuItem.setAttribute("tooltiptext", label);
-      menuPopup.appendChild(menuItem);
-    }
-
-    // Create a menu item for managing applications.
-    if (possibleAppMenuItems.length) {
-      let menuItem = document.createElement("menuseparator");
-      menuPopup.appendChild(menuItem);
-      menuItem = document.createElement("menuitem");
-      menuItem.setAttribute("oncommand", "gApplicationsPane.manageApp(event)");
-      menuItem.setAttribute("label", this._prefsBundle.getString("manageApp"));
-      menuPopup.appendChild(menuItem);
-    }
-
-    // Select the item corresponding to the preferred action.  If the always
-    // ask flag is set, it overrides the preferred action.  Otherwise we pick
-    // the item identified by the preferred action (when the preferred action
-    // is to use a helper app, we have to pick the specific helper app item).
-    if (handlerInfo.alwaysAskBeforeHandling)
-      menu.selectedItem = askMenuItem;
-    else switch (handlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.handleInternally:
-        menu.selectedItem = internalMenuItem;
-        break;
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        menu.selectedItem = defaultMenuItem;
-        break;
-      case Ci.nsIHandlerInfo.useHelperApp:
-        if (preferredApp)
-          menu.selectedItem = 
-            possibleAppMenuItems.filter(function(v) v.handlerApp.equals(preferredApp))[0];
-        break;
-      case kActionUsePlugin:
-        menu.selectedItem = pluginMenuItem;
-        break;
-      case Ci.nsIHandlerInfo.saveToDisk:
-        menu.selectedItem = saveMenuItem;
-        break;
-    }
-  },
-
-
-  //**************************************************************************//
-  // Sorting & Filtering
-
-  _sortColumn: null,
-
-  /**
-   * Sort the list when the user clicks on a column header.
-   */
-  sort: function (event) {
-    var column = event.target;
-
-    // If the user clicked on a new sort column, remove the direction indicator
-    // from the old column.
-    if (this._sortColumn && this._sortColumn != column)
-      this._sortColumn.removeAttribute("sortDirection");
-
-    this._sortColumn = column;
-
-    // Set (or switch) the sort direction indicator.
-    if (column.getAttribute("sortDirection") == "ascending")
-      column.setAttribute("sortDirection", "descending");
-    else
-      column.setAttribute("sortDirection", "ascending");
-
-    this._sortVisibleTypes();
-    this._rebuildView();
-  },
-
-  /**
-   * Sort the list of visible types by the current sort column/direction.
-   */
-  _sortVisibleTypes: function() {
-    if (!this._sortColumn)
-      return;
-
-    var t = this;
-
-    function sortByType(a, b) {
-      return t._describeType(a).toLowerCase().
-             localeCompare(t._describeType(b).toLowerCase());
-    }
-
-    function sortByAction(a, b) {
-      return t._describePreferredAction(a).toLowerCase().
-             localeCompare(t._describePreferredAction(b).toLowerCase());
-    }
-
-    switch (this._sortColumn.getAttribute("value")) {
-      case "type":
-        this._visibleTypes.sort(sortByType);
-        break;
-      case "action":
-        this._visibleTypes.sort(sortByAction);
-        break;
-    }
-
-    if (this._sortColumn.getAttribute("sortDirection") == "descending")
-      this._visibleTypes.reverse();
-  },
-
-  /**
-   * Filter the list when the user enters a filter term into the filter field.
-   */
-  filter: function() {
-    this._rebuildView();
-  },
-
-  focusFilterBox: function() {
-    this._filter.focus();
-    this._filter.select();
-  },
-
-
-  //**************************************************************************//
-  // Changes
-
-  onSelectAction: function(aActionItem) {
-    this._storingAction = true;
-
-    try {
-      this._storeAction(aActionItem);
-    }
-    finally {
-      this._storingAction = false;
-    }
-  },
-
-  _storeAction: function(aActionItem) {
-    var typeItem = this._list.selectedItem;
-    var handlerInfo = this._handledTypes[typeItem.type];
-
-    let action = parseInt(aActionItem.getAttribute("action"), 10);
-
-    // Set the plugin state if we're enabling or disabling a plugin.
-    if (action == kActionUsePlugin)
-      handlerInfo.enablePluginType();
-    else if (handlerInfo.pluginName && !handlerInfo.isDisabledPluginType)
-      handlerInfo.disablePluginType();
-
-    // Set the preferred application handler.
-    // We leave the existing preferred app in the list when we set
-    // the preferred action to something other than useHelperApp so that
-    // legacy datastores that don't have the preferred app in the list
-    // of possible apps still include the preferred app in the list of apps
-    // the user can choose to handle the type.
-    if (action == Ci.nsIHandlerInfo.useHelperApp)
-      handlerInfo.preferredApplicationHandler = aActionItem.handlerApp;
-
-    // Set the "always ask" flag.
-    if (action == Ci.nsIHandlerInfo.alwaysAsk)
-      handlerInfo.alwaysAskBeforeHandling = true;
-    else
-      handlerInfo.alwaysAskBeforeHandling = false;
-
-    // Set the preferred action.
-    handlerInfo.preferredAction = action;
-
-    handlerInfo.store();
-
-    // Make sure the handler info object is flagged to indicate that there is
-    // now some user configuration for the type.
-    handlerInfo.handledOnlyByPlugin = false;
-
-    // Update the action label and image to reflect the new preferred action.
-    typeItem.setAttribute("actionDescription",
-                          this._describePreferredAction(handlerInfo));
-    if (!this._setIconClassForPreferredAction(handlerInfo, typeItem)) {
-      typeItem.setAttribute("actionIcon",
-                            this._getIconURLForPreferredAction(handlerInfo));
-    }
-  },
-
-  manageApp: function(aEvent) {
-    // Don't let the normal "on select action" handler get this event,
-    // as we handle it specially ourselves.
-    aEvent.stopPropagation();
-
-    var typeItem = this._list.selectedItem;
-    var handlerInfo = this._handledTypes[typeItem.type];
-
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/applicationManager.xul",
-                                           "", handlerInfo);
-
-    // Rebuild the actions menu so that we revert to the previous selection,
-    // or "Always ask" if the previous default application has been removed
-    this.rebuildActionsMenu();
-
-    // update the richlistitem too. Will be visible when selecting another row
-    typeItem.setAttribute("actionDescription",
-                          this._describePreferredAction(handlerInfo));
-    if (!this._setIconClassForPreferredAction(handlerInfo, typeItem)) {
-      typeItem.setAttribute("actionIcon",
-                            this._getIconURLForPreferredAction(handlerInfo));
-    }
-  },
-
-  chooseApp: function(aEvent) {
-    // Don't let the normal "on select action" handler get this event,
-    // as we handle it specially ourselves.
-    aEvent.stopPropagation();
-
-    var handlerApp;
-    let chooseAppCallback = function(aHandlerApp) {
-      // Rebuild the actions menu whether the user picked an app or canceled.
-      // If they picked an app, we want to add the app to the menu and select it.
-      // If they canceled, we want to go back to their previous selection.
-      this.rebuildActionsMenu();
-
-      // If the user picked a new app from the menu, select it.
-      if (aHandlerApp) {
-        let typeItem = this._list.selectedItem;
-        let actionsMenu =
-          document.getAnonymousElementByAttribute(typeItem, "class", "actionsMenu");
-        let menuItems = actionsMenu.menupopup.childNodes;
-        for (let i = 0; i < menuItems.length; i++) {
-          let menuItem = menuItems[i];
-          if (menuItem.handlerApp && menuItem.handlerApp.equals(aHandlerApp)) {
-            actionsMenu.selectedIndex = i;
-            this.onSelectAction(menuItem);
-            break;
-          }
-        }
-      }
-    }.bind(this);
-
-#ifdef XP_WIN
-    var params = {};
-    var handlerInfo = this._handledTypes[this._list.selectedItem.type];
-
-    if (isFeedType(handlerInfo.type)) {
-      // MIME info will be null, create a temp object.
-      params.mimeInfo = this._mimeSvc.getFromTypeAndExtension(handlerInfo.type, 
-                                                 handlerInfo.primaryExtension);
-    } else {
-      params.mimeInfo = handlerInfo.wrappedHandlerInfo;
-    }
-
-    params.title         = this._prefsBundle.getString("fpTitleChooseApp");
-    params.description   = handlerInfo.description;
-    params.filename      = null;
-    params.handlerApp    = null;
-
-    window.openDialog("chrome://global/content/appPicker.xul", null,
-                      "chrome,modal,centerscreen,titlebar,dialog=yes",
-                      params);
-
-    if (this.isValidHandlerApp(params.handlerApp)) {
-      handlerApp = params.handlerApp;
-
-      // Add the app to the type's list of possible handlers.
-      handlerInfo.addPossibleApplicationHandler(handlerApp);
-    }
-
-    chooseAppCallback(handlerApp);
-#else
-    let winTitle = this._prefsBundle.getString("fpTitleChooseApp");
-    let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
-    let fpCallback = function fpCallback_done(aResult) {
-      if (aResult == Ci.nsIFilePicker.returnOK && fp.file &&
-          this._isValidHandlerExecutable(fp.file)) {
-        handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"].
-                     createInstance(Ci.nsILocalHandlerApp);
-        handlerApp.name = getFileDisplayName(fp.file);
-        handlerApp.executable = fp.file;
-
-        // Add the app to the type's list of possible handlers.
-        let handlerInfo = this._handledTypes[this._list.selectedItem.type];
-        handlerInfo.addPossibleApplicationHandler(handlerApp);
-
-        chooseAppCallback(handlerApp);
-      }
-    }.bind(this);
-
-    // Prompt the user to pick an app.  If they pick one, and it's a valid
-    // selection, then add it to the list of possible handlers.
-    fp.init(window, winTitle, Ci.nsIFilePicker.modeOpen);
-    fp.appendFilters(Ci.nsIFilePicker.filterApps);
-    fp.open(fpCallback);
-#endif
-  },
-
-  // Mark which item in the list was last selected so we can reselect it
-  // when we rebuild the list or when the user returns to the prefpane.
-  onSelectionChanged: function() {
-    if (this._list.selectedItem)
-      this._list.setAttribute("lastSelectedType",
-                              this._list.selectedItem.getAttribute("type"));
-  },
-
-  _setIconClassForPreferredAction: function(aHandlerInfo, aElement) {
-    // If this returns true, the attribute that CSS sniffs for was set to something
-    // so you shouldn't manually set an icon URI.
-    // This removes the existing actionIcon attribute if any, even if returning false.
-    aElement.removeAttribute("actionIcon");
-
-    if (aHandlerInfo.alwaysAskBeforeHandling) {
-      aElement.setAttribute(APP_ICON_ATTR_NAME, "ask");
-      return true;
-    }
-
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.saveToDisk:
-        aElement.setAttribute(APP_ICON_ATTR_NAME, "save");
-        return true;
-
-      case Ci.nsIHandlerInfo.handleInternally:
-        if (isFeedType(aHandlerInfo.type)) {
-          aElement.setAttribute(APP_ICON_ATTR_NAME, "feed");
-          return true;
-        } else if (aHandlerInfo instanceof InternalHandlerInfoWrapper) {
-          aElement.setAttribute(APP_ICON_ATTR_NAME, "ask");
-          return true;
-        }
-        break;
-
-      case kActionUsePlugin:
-        aElement.setAttribute(APP_ICON_ATTR_NAME, "plugin");
-        return true;
-    }
-    aElement.removeAttribute(APP_ICON_ATTR_NAME);
-    return false;
-  },
-
-  _getIconURLForPreferredAction: function(aHandlerInfo) {
-    switch (aHandlerInfo.preferredAction) {
-      case Ci.nsIHandlerInfo.useSystemDefault:
-        return this._getIconURLForSystemDefault(aHandlerInfo);
-
-      case Ci.nsIHandlerInfo.useHelperApp:
-        let preferredApp = aHandlerInfo.preferredApplicationHandler;
-        if (this.isValidHandlerApp(preferredApp))
-          return this._getIconURLForHandlerApp(preferredApp);
-        break;
-
-      // This should never happen, but if preferredAction is set to some weird
-      // value, then fall back to the generic application icon.
-      default:
-        return ICON_URL_APP;
-    }
-  },
-
-  _getIconURLForHandlerApp: function(aHandlerApp) {
-    if (aHandlerApp instanceof Ci.nsILocalHandlerApp)
-      return this._getIconURLForFile(aHandlerApp.executable);
-
-    if (aHandlerApp instanceof Ci.nsIWebHandlerApp)
-      return this._getIconURLForWebApp(aHandlerApp.uriTemplate);
-
-    if (aHandlerApp instanceof Ci.nsIWebContentHandlerInfo)
-      return this._getIconURLForWebApp(aHandlerApp.uri)
-
-    // We know nothing about other kinds of handler apps.
-    return "";
-  },
-
-  _getIconURLForFile: function(aFile) {
-    var fph = this._ioSvc.getProtocolHandler("file").
-              QueryInterface(Ci.nsIFileProtocolHandler);
-    var urlSpec = fph.getURLSpecFromFile(aFile);
-
-    return "moz-icon://" + urlSpec + "?size=16";
-  },
-
-  _getIconURLForWebApp: function(aWebAppURITemplate) {
-    var uri = this._ioSvc.newURI(aWebAppURITemplate, null, null);
-
-    // Unfortunately we can't use the favicon service to get the favicon,
-    // because the service looks for a record with the exact URL we give it, and
-    // users won't have such records for URLs they don't visit, and users won't
-    // visit the handler's URL template, they'll only visit URLs derived from
-    // that template (i.e. with %s in the template replaced by the URL of the
-    // content being handled).
-
-    if (/^https?$/.test(uri.scheme) && this._prefSvc.getBoolPref("browser.chrome.favicons"))
-      return uri.prePath + "/favicon.ico";
-
-    return "";
-  },
-
-  _getIconURLForSystemDefault: function(aHandlerInfo) {
-    // Handler info objects for MIME types on some OSes implement a property bag
-    // interface from which we can get an icon for the default app, so if we're
-    // dealing with a MIME type on one of those OSes, then try to get the icon.
-    if ("wrappedHandlerInfo" in aHandlerInfo) {
-      let wrappedHandlerInfo = aHandlerInfo.wrappedHandlerInfo;
-
-      if (wrappedHandlerInfo instanceof Ci.nsIMIMEInfo &&
-          wrappedHandlerInfo instanceof Ci.nsIPropertyBag) {
-        try {
-          let url = wrappedHandlerInfo.getProperty("defaultApplicationIconURL");
-          if (url)
-            return url + "?size=16";
-        }
-        catch(ex) {}
-      }
-    }
-
-    // If this isn't a MIME type object on an OS that supports retrieving
-    // the icon, or if we couldn't retrieve the icon for some other reason,
-    // then use a generic icon.
-    return ICON_URL_APP;
-  }
-
-};
deleted file mode 100644
--- a/browser/components/preferences/applications.xul
+++ /dev/null
@@ -1,99 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- -->
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
-   - License, v. 2.0. If a copy of the MPL was not distributed with this
-  - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<!DOCTYPE overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % applicationsDTD SYSTEM "chrome://browser/locale/preferences/applications.dtd">
-  %brandDTD;
-  %applicationsDTD;
-]>
-
-<overlay id="ApplicationsPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneApplications"
-            onpaneload="gApplicationsPane.init();"
-            flex="1"
-            helpTopic="prefs-applications">
-
-    <preferences id="feedsPreferences">
-      <preference id="browser.feeds.handler"
-                  name="browser.feeds.handler"
-                  type="string"/>
-      <preference id="browser.feeds.handler.default"
-                  name="browser.feeds.handler.default"
-                  type="string"/>
-      <preference id="browser.feeds.handlers.application"
-                  name="browser.feeds.handlers.application"
-                  type="file"/>
-      <preference id="browser.feeds.handlers.webservice"
-                  name="browser.feeds.handlers.webservice"
-                  type="string"/>
-
-      <preference id="browser.videoFeeds.handler"
-                  name="browser.videoFeeds.handler"
-                  type="string"/>
-      <preference id="browser.videoFeeds.handler.default"
-                  name="browser.videoFeeds.handler.default"
-                  type="string"/>
-      <preference id="browser.videoFeeds.handlers.application"
-                  name="browser.videoFeeds.handlers.application"
-                  type="file"/>
-      <preference id="browser.videoFeeds.handlers.webservice"
-                  name="browser.videoFeeds.handlers.webservice"
-                  type="string"/>
-
-      <preference id="browser.audioFeeds.handler"
-                  name="browser.audioFeeds.handler"
-                  type="string"/>
-      <preference id="browser.audioFeeds.handler.default"
-                  name="browser.audioFeeds.handler.default"
-                  type="string"/>
-      <preference id="browser.audioFeeds.handlers.application"
-                  name="browser.audioFeeds.handlers.application"
-                  type="file"/>
-      <preference id="browser.audioFeeds.handlers.webservice"
-                  name="browser.audioFeeds.handlers.webservice"
-                  type="string"/>
-
-      <preference id="pref.downloads.disable_button.edit_actions"
-                  name="pref.downloads.disable_button.edit_actions"
-                  type="bool"/>
-    </preferences>
-
-    <script type="application/javascript" src="chrome://browser/content/preferences/applications.js"/>
-
-    <keyset>
-      <key key="&focusSearch1.key;" modifiers="accel" oncommand="gApplicationsPane.focusFilterBox();"/>
-      <key key="&focusSearch2.key;" modifiers="accel" oncommand="gApplicationsPane.focusFilterBox();"/>
-    </keyset>
-
-    <hbox>
-      <textbox id="filter" flex="1"
-               type="search"
-               placeholder="&filter.emptytext;"
-               aria-controls="handlersView"
-               oncommand="gApplicationsPane.filter();"/>
-    </hbox>
-
-    <separator class="thin"/>
-
-    <richlistbox id="handlersView" orient="vertical" persist="lastSelectedType"
-                 preference="pref.downloads.disable_button.edit_actions"
-                 onselect="gApplicationsPane.onSelectionChanged();">
-      <listheader equalsize="always" style="border: 0; padding: 0; -moz-appearance: none;">
-        <treecol id="typeColumn" label="&typeColumn.label;" value="type"
-                 accesskey="&typeColumn.accesskey;" persist="sortDirection"
-                 flex="1" onclick="gApplicationsPane.sort(event);"
-                 sortDirection="ascending"/>
-        <treecol id="actionColumn" label="&actionColumn2.label;" value="action"
-                 accesskey="&actionColumn2.accesskey;" persist="sortDirection"
-                 flex="1" onclick="gApplicationsPane.sort(event);"/>
-      </listheader>
-    </richlistbox>
-  </prefpane>
-</overlay>
deleted file mode 100644
--- a/browser/components/preferences/content.js
+++ /dev/null
@@ -1,209 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
-/* 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/. */
-
-var gContentPane = {
-  init: function ()
-  {
-    // Initializes the fonts dropdowns displayed in this pane.
-    this._rebuildFonts();
-    var menulist = document.getElementById("defaultFont");
-    if (menulist.selectedIndex == -1) {
-      menulist.value = FontBuilder.readFontSelection(menulist);
-    }
-
-    // Show translation preferences if we may:
-    const prefName = "browser.translation.ui.show";
-    if (Services.prefs.getBoolPref(prefName)) {
-      let row = document.getElementById("translationBox");
-      row.removeAttribute("hidden");
-      // Showing attribution only for Bing Translator.
-      Components.utils.import("resource:///modules/translation/Translation.jsm");
-      if (Translation.translationEngine == "bing") {
-        document.getElementById("bingAttribution").removeAttribute("hidden");
-      }
-    }
-
-    let drmInfoURL =
-      Services.urlFormatter.formatURLPref("app.support.baseURL") + "drm-content";
-    document.getElementById("playDRMContentLink").setAttribute("href", drmInfoURL);
-    let emeUIEnabled = Services.prefs.getBoolPref("browser.eme.ui.enabled");
-    // Force-disable/hide on WinXP:
-    if (navigator.platform.toLowerCase().startsWith("win")) {
-      emeUIEnabled = emeUIEnabled && parseFloat(Services.sysinfo.get("version")) >= 6;
-    }
-    document.getElementById("playDRMContentRow").hidden = !emeUIEnabled;
-  },
-
-  // UTILITY FUNCTIONS
-
-  /**
-   * Utility function to enable/disable the button specified by aButtonID based
-   * on the value of the Boolean preference specified by aPreferenceID.
-   */
-  updateButtons: function (aButtonID, aPreferenceID)
-  {
-    var button = document.getElementById(aButtonID);
-    var preference = document.getElementById(aPreferenceID);
-    button.disabled = preference.value != true;
-    return undefined;
-  },
-
-  // BEGIN UI CODE
-
-  /*
-   * Preferences:
-   *
-   * dom.disable_open_during_load
-   * - true if popups are blocked by default, false otherwise
-   */
-
-  // POP-UPS
-
-  /**
-   * Displays the popup exceptions dialog where specific site popup preferences
-   * can be set.
-   */
-  showPopupExceptions: function ()
-  {
-    var bundlePreferences = document.getElementById("bundlePreferences");
-    var params = { blockVisible: false, sessionVisible: false, allowVisible: true, prefilledHost: "", permissionType: "popup" };
-    params.windowTitle = bundlePreferences.getString("popuppermissionstitle");
-    params.introText = bundlePreferences.getString("popuppermissionstext");
-    document.documentElement.openWindow("Browser:Permissions",
-                                        "chrome://browser/content/preferences/permissions.xul",
-                                        "resizable", params);
-  },
-
-
-  // FONTS
-
-  /**
-   * Populates the default font list in UI.
-   */
-  _rebuildFonts: function ()
-  {
-    var langGroupPref = document.getElementById("font.language.group");
-    this._selectDefaultLanguageGroup(langGroupPref.value,
-                                     this._readDefaultFontTypeForLanguage(langGroupPref.value) == "serif");
-  },
-
-  /**
-   * 
-   */
-  _selectDefaultLanguageGroup: function (aLanguageGroup, aIsSerif)
-  {
-    const kFontNameFmtSerif         = "font.name.serif.%LANG%";
-    const kFontNameFmtSansSerif     = "font.name.sans-serif.%LANG%";
-    const kFontNameListFmtSerif     = "font.name-list.serif.%LANG%";
-    const kFontNameListFmtSansSerif = "font.name-list.sans-serif.%LANG%";
-    const kFontSizeFmtVariable      = "font.size.variable.%LANG%";
-
-    var prefs = [{ format   : aIsSerif ? kFontNameFmtSerif : kFontNameFmtSansSerif,
-                   type     : "fontname",
-                   element  : "defaultFont",
-                   fonttype : aIsSerif ? "serif" : "sans-serif" },
-                 { format   : aIsSerif ? kFontNameListFmtSerif : kFontNameListFmtSansSerif,
-                   type     : "unichar",
-                   element  : null,
-                   fonttype : aIsSerif ? "serif" : "sans-serif" },
-                 { format   : kFontSizeFmtVariable,
-                   type     : "int",
-                   element  : "defaultFontSize",
-                   fonttype : null }];
-    var preferences = document.getElementById("contentPreferences");
-    for (var i = 0; i < prefs.length; ++i) {
-      var preference = document.getElementById(prefs[i].format.replace(/%LANG%/, aLanguageGroup));
-      if (!preference) {
-        preference = document.createElement("preference");
-        var name = prefs[i].format.replace(/%LANG%/, aLanguageGroup);
-        preference.id = name;
-        preference.setAttribute("name", name);
-        preference.setAttribute("type", prefs[i].type);
-        preferences.appendChild(preference);
-      }
-
-      if (!prefs[i].element)
-        continue;
-
-      var element = document.getElementById(prefs[i].element);
-      if (element) {
-        element.setAttribute("preference", preference.id);
-
-        if (prefs[i].fonttype)
-          FontBuilder.buildFontList(aLanguageGroup, prefs[i].fonttype, element);
-
-        preference.setElementValue(element);
-      }
-    }
-  },
-
-  /**
-   * Returns the type of the current default font for the language denoted by
-   * aLanguageGroup.
-   */
-  _readDefaultFontTypeForLanguage: function (aLanguageGroup)
-  {
-    const kDefaultFontType = "font.default.%LANG%";
-    var defaultFontTypePref = kDefaultFontType.replace(/%LANG%/, aLanguageGroup);
-    var preference = document.getElementById(defaultFontTypePref);
-    if (!preference) {
-      preference = document.createElement("preference");
-      preference.id = defaultFontTypePref;
-      preference.setAttribute("name", defaultFontTypePref);
-      preference.setAttribute("type", "string");
-      preference.setAttribute("onchange", "gContentPane._rebuildFonts();");
-      document.getElementById("contentPreferences").appendChild(preference);
-    }
-    return preference.value;
-  },
-
-  /**
-   * Displays the fonts dialog, where web page font names and sizes can be
-   * configured.
-   */  
-  configureFonts: function ()
-  {
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/fonts.xul",
-                                           "", null);
-  },
-
-  /**
-   * Displays the colors dialog, where default web page/link/etc. colors can be
-   * configured.
-   */
-  configureColors: function ()
-  {
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/colors.xul",
-                                           "", null);  
-  },
-
-  // LANGUAGES
-
-  /**
-   * Shows a dialog in which the preferred language for web content may be set.
-   */
-  showLanguages: function ()
-  {
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/languages.xul",
-                                           "", null);
-  },
-
-  /**
-   * Displays the translation exceptions dialog where specific site and language
-   * translation preferences can be set.
-   */
-  showTranslationExceptions: function ()
-  {
-    document.documentElement.openWindow("Browser:TranslationExceptions",
-                                        "chrome://browser/content/preferences/translation.xul",
-                                        "resizable", null);
-  },
-
-  openTranslationProviderAttribution: function ()
-  {
-    Components.utils.import("resource:///modules/translation/Translation.jsm");
-    Translation.openProviderAttribution();
-  }
-};
deleted file mode 100644
--- a/browser/components/preferences/content.xul
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
-<!-- 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 overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % contentDTD SYSTEM "chrome://browser/locale/preferences/content.dtd">
-  %brandDTD;
-  %contentDTD;
-]>
-
-<overlay id="ContentPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneContent" 
-            onpaneload="gContentPane.init();"
-            helpTopic="prefs-content">
-
-    <preferences id="contentPreferences">
-      <!--XXX buttons prefs -->
-
-      <!-- DRM content -->
-      <preference id="media.eme.enabled" name="media.eme.enabled" type="bool"/>
-
-      <!-- POPUPS -->
-      <preference id="dom.disable_open_during_load"   name="dom.disable_open_during_load"   type="bool"/>
-
-      <!-- FONTS -->
-      <preference id="font.language.group"
-                  name="font.language.group"
-                  type="wstring"
-                  onchange="gContentPane._rebuildFonts();"/>
-
-      <!-- LANGUAGES -->
-      <preference id="browser.translation.detectLanguage"
-                  name="browser.translation.detectLanguage"
-                  type="bool"/>
-    </preferences>
-    
-    <script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/>
-    <script type="application/javascript" src="chrome://browser/content/preferences/content.js"/>
-
-    <stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
-
-    <!-- various checkboxes, font-fu -->
-    <groupbox id="miscGroup">
-      <grid id="contentGrid">
-        <columns>
-          <column flex="1"/>
-          <column/>
-        </columns>
-        <rows id="contentRows-1">
-          <row id="playDRMContentRow">
-            <vbox align="start">
-              <checkbox id="playDRMContent" preference="media.eme.enabled"
-                        label="&playDRMContent.label;" accesskey="&playDRMContent.accesskey;"/>
-            </vbox>
-            <hbox pack="end">
-              <label id="playDRMContentLink" class="text-link" value="&playDRMContent.learnMore.label;"/>
-            </hbox>
-          </row>
-          <row id="popupPolicyRow">
-            <vbox align="start">
-              <checkbox id="popupPolicy" preference="dom.disable_open_during_load"
-                        label="&blockPopups.label;" accesskey="&blockPopups.accesskey;"
-                        onsyncfrompreference="return gContentPane.updateButtons('popupPolicyButton', 
-                                                                            'dom.disable_open_during_load');"/>
-            </vbox>
-            <hbox pack="end">
-              <button id="popupPolicyButton" label="&popupExceptions.label;"
-                      oncommand="gContentPane.showPopupExceptions();"
-                      accesskey="&popupExceptions.accesskey;"/>
-            </hbox>
-          </row>
-        </rows>
-      </grid>
-    </groupbox>
-
-    <!-- Fonts and Colors -->
-    <groupbox id="fontsGroup">
-      <caption label="&fontsAndColors.label;"/>
-
-      <grid id="fontsGrid">
-        <columns>
-          <column flex="1"/>
-          <column/>
-        </columns>
-        <rows id="fontsRows">
-          <row id="fontRow">
-            <hbox align="center">
-              <label control="defaultFont" accesskey="&defaultFont.accesskey;">&defaultFont.label;</label>
-              <menulist id="defaultFont" flex="1"/>
-              <label control="defaultFontSize" accesskey="&defaultSize.accesskey;">&defaultSize.label;</label>
-              <menulist id="defaultFontSize">
-                <menupopup>
-                  <menuitem value="9" label="9"/>
-                  <menuitem value="10" label="10"/>
-                  <menuitem value="11" label="11"/>
-                  <menuitem value="12" label="12"/>
-                  <menuitem value="13" label="13"/>
-                  <menuitem value="14" label="14"/>
-                  <menuitem value="15" label="15"/>
-                  <menuitem value="16" label="16"/>
-                  <menuitem value="17" label="17"/>
-                  <menuitem value="18" label="18"/>
-                  <menuitem value="20" label="20"/>
-                  <menuitem value="22" label="22"/>
-                  <menuitem value="24" label="24"/>
-                  <menuitem value="26" label="26"/>
-                  <menuitem value="28" label="28"/>
-                  <menuitem value="30" label="30"/>
-                  <menuitem value="32" label="32"/>
-                  <menuitem value="34" label="34"/>
-                  <menuitem value="36" label="36"/>
-                  <menuitem value="40" label="40"/>
-                  <menuitem value="44" label="44"/>
-                  <menuitem value="48" label="48"/>
-                  <menuitem value="56" label="56"/>
-                  <menuitem value="64" label="64"/>
-                  <menuitem value="72" label="72"/>
-                </menupopup>
-              </menulist>
-            </hbox>
-            <button id="advancedFonts" icon="select-font"
-                    label="&advancedFonts.label;"
-                    accesskey="&advancedFonts.accesskey;"
-                    oncommand="gContentPane.configureFonts();"/>
-          </row>
-          <row id="colorsRow">
-            <hbox/>
-            <button id="colors" icon="select-color"
-                    label="&colors.label;"
-                    accesskey="&colors.accesskey;"
-                    oncommand="gContentPane.configureColors();"/>
-          </row>
-        </rows>
-      </grid>
-    </groupbox>
-
-    <!-- Languages -->
-    <groupbox id="languagesGroup">
-      <caption label="&languages.label;"/>
-
-      <grid id="languagesGrid">
-        <columns>
-          <column flex="1"/>
-          <column/>
-        </columns>
-        <rows id="languagesRows">
-          <row id="preferredLanguageRow">
-            <label flex="1" control="chooseLanguage">&chooseLanguage.label;</label>
-            <button id="chooseLanguage"
-                    label="&chooseButton.label;"
-                    accesskey="&chooseButton.accesskey;"
-                    oncommand="gContentPane.showLanguages();"/>
-          </row>
-          <row id="translationBox" hidden="true">
-            <hbox align="center">
-              <checkbox id="translate" preference="browser.translation.detectLanguage"
-                        label="&translateWebPages.label;." accesskey="&translateWebPages.accesskey;"
-                        onsyncfrompreference="return gContentPane.updateButtons('translateButton',
-                                              'browser.translation.detectLanguage');"/>
-              <hbox id="bingAttribution" hidden="true">
-                <label>&translation.options.attribution.beforeLogo;</label>
-                <image id="translationAttributionImage" aria-label="Microsoft Translator"
-                       onclick="gContentPane.openTranslationProviderAttribution()"
-                       src="chrome://browser/content/microsoft-translator-attribution.png"/>
-                <label>&translation.options.attribution.afterLogo;</label>
-              </hbox>
-            </hbox>
-            <button id="translateButton" label="&translateExceptions.label;"
-                    oncommand="gContentPane.showTranslationExceptions();"
-                    accesskey="&translateExceptions.accesskey;"/>
-          </row>
-        </rows>
-      </grid>
-
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
--- a/browser/components/preferences/in-content/tests/browser_basic_rebuild_fonts_test.js
+++ b/browser/components/preferences/in-content/tests/browser_basic_rebuild_fonts_test.js
@@ -1,13 +1,11 @@
-Services.prefs.setBoolPref("browser.preferences.inContent", true);
 Services.prefs.setBoolPref("browser.preferences.instantApply", true);
 
 registerCleanupFunction(function() {
-  Services.prefs.clearUserPref("browser.preferences.inContent");
   Services.prefs.clearUserPref("browser.preferences.instantApply");
 });
 
 add_task(function() {
   yield openPreferencesViaOpenPreferencesAPI("paneContent", null, {leaveOpen: true});
   let doc = gBrowser.contentDocument;
   var langGroup = Services.prefs.getComplexValue("font.language.group", Ci.nsIPrefLocalizedString).data
   is(doc.getElementById("font.language.group").value, langGroup,
--- a/browser/components/preferences/in-content/tests/browser_bug1018066_resetScrollPosition.js
+++ b/browser/components/preferences/in-content/tests/browser_bug1018066_resetScrollPosition.js
@@ -1,16 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-Services.prefs.setBoolPref("browser.preferences.inContent", true);
-
 let originalWindowHeight;
 registerCleanupFunction(function() {
-  Services.prefs.clearUserPref("browser.preferences.inContent");
   window.resizeTo(window.outerWidth, originalWindowHeight);
   while (gBrowser.tabs[1])
     gBrowser.removeTab(gBrowser.tabs[1]);
 });
 
 add_task(function() {
   originalWindowHeight = window.outerHeight;
   window.resizeTo(window.outerWidth, 300);
--- a/browser/components/preferences/in-content/tests/browser_bug1020245_openPreferences_to_paneContent.js
+++ b/browser/components/preferences/in-content/tests/browser_bug1020245_openPreferences_to_paneContent.js
@@ -1,16 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
-Services.prefs.setBoolPref("browser.preferences.inContent", true);
 Services.prefs.setBoolPref("browser.preferences.instantApply", true);
 
 registerCleanupFunction(function() {
-  Services.prefs.clearUserPref("browser.preferences.inContent");
   Services.prefs.clearUserPref("browser.preferences.instantApply");
 });
 
 add_task(function() {
   let prefs = yield openPreferencesViaOpenPreferencesAPI("paneContent");
   is(prefs.selectedPane, "paneContent", "Content pane was selected");
   prefs = yield openPreferencesViaOpenPreferencesAPI("advanced", "updateTab");
   is(prefs.selectedPane, "paneAdvanced", "Advanced pane was selected");
--- a/browser/components/preferences/in-content/tests/browser_bug410900.js
+++ b/browser/components/preferences/in-content/tests/browser_bug410900.js
@@ -1,18 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 Components.utils.import("resource://gre/modules/PlacesUtils.jsm");
 Components.utils.import("resource://gre/modules/NetUtil.jsm");
 
 function test() {
   waitForExplicitFinish();
-  Services.prefs.setBoolPref("browser.preferences.inContent", true);
-  registerCleanupFunction(() => Services.prefs.clearUserPref("browser.preferences.inContent"));
 
   // Setup a phony handler to ensure the app pane will be populated.
   var handler = Cc["@mozilla.org/uriloader/web-handler-app;1"].
                 createInstance(Ci.nsIWebHandlerApp);
   handler.name = "App pane alive test";
   handler.uriTemplate = "http://test.mozilla.org/%s";
 
   var extps = Cc["@mozilla.org/uriloader/external-protocol-service;1"].
--- a/browser/components/preferences/in-content/tests/browser_change_app_handler.js
+++ b/browser/components/preferences/in-content/tests/browser_change_app_handler.js
@@ -1,13 +1,11 @@
 let gMimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
 let gHandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService(Ci.nsIHandlerService);
 
-Services.prefs.setBoolPref("browser.preferences.inContent", true);
-
 SimpleTest.requestCompleteLog();
 
 function setupFakeHandler() {
   let info = gMimeSvc.getFromTypeAndExtension("text/plain", "foo.txt");
   ok(info.possibleLocalHandlers.length, "Should have at least one known handler");
   let handler = info.possibleLocalHandlers.queryElementAt(0, Ci.nsILocalHandlerApp);
 
   let infoToModify = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
@@ -91,11 +89,10 @@ add_task(function*() {
      "No app should be visible as preferred item.");
 
   gBrowser.removeCurrentTab();
 });
 
 registerCleanupFunction(function() {
   let infoToModify = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
   gHandlerSvc.remove(infoToModify);
-  Services.prefs.clearUserPref("browser.preferences.inContent");
 });
 
--- a/browser/components/preferences/in-content/tests/browser_sanitizeOnShutdown_prefLocked.js
+++ b/browser/components/preferences/in-content/tests/browser_sanitizeOnShutdown_prefLocked.js
@@ -17,19 +17,17 @@ function testPrefStateMatchesLockedState
   is(checkbox.disabled, preference.locked, "Always Clear checkbox should be enabled when preference is not locked.");
 
   gBrowser.removeCurrentTab();
 }
 
 add_task(function setup() {
   registerCleanupFunction(function resetPreferences() {
     Services.prefs.unlockPref("privacy.sanitize.sanitizeOnShutdown");
-    Services.prefs.clearUserPref("browser.preferences.inContent");
   });
-  Services.prefs.setBoolPref("browser.preferences.inContent", true);
 });
 
 add_task(function test_preference_enabled_when_unlocked() {
   yield openPreferencesViaOpenPreferencesAPI("panePrivacy", undefined, {leaveOpen: true});
   testPrefStateMatchesLockedState();
 });
 
 add_task(function test_preference_disabled_when_locked() {
--- a/browser/components/preferences/jar.mn
+++ b/browser/components/preferences/jar.mn
@@ -2,51 +2,29 @@
 # 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/advanced.xul
-*   content/browser/preferences/advanced.js
-    content/browser/preferences/applications.xul
-*   content/browser/preferences/applications.js
     content/browser/preferences/applicationManager.xul
 *   content/browser/preferences/applicationManager.js
 *   content/browser/preferences/colors.xul
 *   content/browser/preferences/cookies.xul
 *   content/browser/preferences/cookies.js
-    content/browser/preferences/content.xul
-    content/browser/preferences/content.js
 *   content/browser/preferences/connection.xul
     content/browser/preferences/connection.js
 *   content/browser/preferences/fonts.xul
     content/browser/preferences/fonts.js
     content/browser/preferences/handlers.xml
     content/browser/preferences/handlers.css
 *   content/browser/preferences/languages.xul
     content/browser/preferences/languages.js
-*   content/browser/preferences/main.xul
-*   content/browser/preferences/main.js
     content/browser/preferences/permissions.xul
 *   content/browser/preferences/permissions.js
-*   content/browser/preferences/preferences.xul
-    content/browser/preferences/preferences.js
-    content/browser/preferences/privacy.xul
-*   content/browser/preferences/privacy.js
     content/browser/preferences/sanitize.xul
     content/browser/preferences/sanitize.js
-    content/browser/preferences/security.xul
-    content/browser/preferences/security.js
     content/browser/preferences/selectBookmark.xul
     content/browser/preferences/selectBookmark.js
-#ifdef MOZ_SERVICES_SYNC
-    content/browser/preferences/sync.xul
-    content/browser/preferences/sync.js
-#endif
-    content/browser/preferences/search.xul
-    content/browser/preferences/search.js
-*   content/browser/preferences/tabs.xul
-*   content/browser/preferences/tabs.js
     content/browser/preferences/translation.xul
     content/browser/preferences/translation.js
deleted file mode 100644
--- a/browser/components/preferences/main.js
+++ /dev/null
@@ -1,544 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-Components.utils.import("resource://gre/modules/Downloads.jsm");
-Components.utils.import("resource://gre/modules/FileUtils.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-var gMainPane = {
-  _pane: null,
-
-  /**
-   * Initialization of this.
-   */
-  init: function ()
-  {
-    this._pane = document.getElementById("paneMain");
-
-#ifdef HAVE_SHELL_SERVICE
-    this.updateSetDefaultBrowser();
-#ifdef XP_WIN
-    // In Windows 8 we launch the control panel since it's the only
-    // way to get all file type association prefs. So we don't know
-    // when the user will select the default.  We refresh here periodically
-    // in case the default changes.  On other Windows OS's defaults can also
-    // be set while the prefs are open.
-    window.setInterval(this.updateSetDefaultBrowser, 1000);
-#endif
-#endif
-
-    // set up the "use current page" label-changing listener
-    this._updateUseCurrentButton();
-    window.addEventListener("focus", this._updateUseCurrentButton.bind(this), false);
-
-    this.updateBrowserStartupLastSession();
-
-#ifdef MOZ_DEV_EDITION
-    let separateProfileModeCheckbox = document.getElementById("separateProfileMode");
-    let listener = gMainPane.separateProfileModeChange.bind(gMainPane);
-    separateProfileModeCheckbox.addEventListener("command", listener);
-
-    let getStartedLink = document.getElementById("getStarted");
-    let syncListener = gMainPane.onGetStarted.bind(gMainPane);
-    getStartedLink.addEventListener("click", syncListener);
-
-    Components.utils.import("resource://gre/modules/osfile.jsm");
-    let uAppData = OS.Constants.Path.userApplicationDataDir;
-    let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile");
-
-    OS.File.stat(ignoreSeparateProfile).then(() => separateProfileModeCheckbox.checked = false,
-                                             () => separateProfileModeCheckbox.checked = true);
-#endif
-
-    // Notify observers that the UI is now ready
-    Components.classes["@mozilla.org/observer-service;1"]
-              .getService(Components.interfaces.nsIObserverService)
-              .notifyObservers(window, "main-pane-loaded", null);
-  },
-
-#ifdef MOZ_DEV_EDITION
-  separateProfileModeChange: function ()
-  {
-    function quitApp() {
-      Services.startup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit |
-                            Components.interfaces.nsIAppStartup.eRestartNotSameProfile);
-    }
-    function revertCheckbox(error) {
-      separateProfileModeCheckbox.checked = !separateProfileModeCheckbox.checked;
-      if (error) {
-        Components.utils.reportError("Failed to toggle separate profile mode: " + error);
-      }
-    }
-
-    let separateProfileModeCheckbox = document.getElementById("separateProfileMode");
-    let brandName = document.getElementById("bundleBrand").getString("brandShortName");
-    let bundle = document.getElementById("bundlePreferences");
-    let msg = bundle.getFormattedString(separateProfileModeCheckbox.checked ?
-                                        "featureEnableRequiresRestart" : "featureDisableRequiresRestart",
-                                        [brandName]);
-    let title = bundle.getFormattedString("shouldRestartTitle", [brandName]);
-    let shouldProceed = Services.prompt.confirm(window, title, msg)
-    if (shouldProceed) {
-      let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
-                         .createInstance(Components.interfaces.nsISupportsPRBool);
-      Services.obs.notifyObservers(cancelQuit, "quit-application-requested",
-                                   "restart");
-      shouldProceed = !cancelQuit.data;
-
-      if (shouldProceed) {
-        Components.utils.import("resource://gre/modules/osfile.jsm");
-        let uAppData = OS.Constants.Path.userApplicationDataDir;
-        let ignoreSeparateProfile = OS.Path.join(uAppData, "ignore-dev-edition-profile");
-
-        if (separateProfileModeCheckbox.checked) {
-          OS.File.remove(ignoreSeparateProfile).then(quitApp, revertCheckbox);
-        } else {
-          OS.File.writeAtomic(ignoreSeparateProfile, new Uint8Array()).then(quitApp, revertCheckbox);
-        }
-      }
-    }
-
-    // Revert the checkbox in case we didn't quit
-    revertCheckbox();
-  },
-
-  onGetStarted: function (aEvent) {
-    const Cc = Components.classes, Ci = Components.interfaces;
-    let wm = Cc["@mozilla.org/appshell/window-mediator;1"]
-               .getService(Components.interfaces.nsIWindowMediator);
-    let win = wm.getMostRecentWindow("navigator:browser");
-
-    if (win) {
-      let accountsTab = win.gBrowser.addTab("about:accounts");
-      win.gBrowser.selectedTab = accountsTab;
-    }
-  },
-#endif
-
-  // HOME PAGE
-
-  /*
-   * Preferences:
-   *
-   * browser.startup.homepage
-   * - the user's home page, as a string; if the home page is a set of tabs,
-   *   this will be those URLs separated by the pipe character "|"
-   * browser.startup.page
-   * - what page(s) to show when the user starts the application, as an integer:
-   *
-   *     0: a blank page
-   *     1: the home page (as set by the browser.startup.homepage pref)
-   *     2: the last page the user visited (DEPRECATED)
-   *     3: windows and tabs from the last session (a.k.a. session restore)
-   *
-   *   The deprecated option is not exposed in UI; however, if the user has it
-   *   selected and doesn't change the UI for this preference, the deprecated
-   *   option is preserved.
-   */
-
-  syncFromHomePref: function ()
-  {
-    let homePref = document.getElementById("browser.startup.homepage");
-
-    // If the pref is set to about:home, set the value to "" to show the
-    // placeholder text (about:home title).
-    if (homePref.value.toLowerCase() == "about:home")
-      return "";
-
-    // If the pref is actually "", show about:blank.  The actual home page
-    // loading code treats them the same, and we don't want the placeholder text
-    // to be shown.
-    if (homePref.value == "")
-      return "about:blank";
-
-    // Otherwise, show the actual pref value.
-    return undefined;
-  },
-
-  syncToHomePref: function (value)
-  {
-    // If the value is "", use about:home.
-    if (value == "")
-      return "about:home";
-
-    // Otherwise, use the actual textbox value.
-    return undefined;
-  },
-
-  /**
-   * Sets the home page to the current displayed page (or frontmost tab, if the
-   * most recent browser window contains multiple tabs), updating preference
-   * window UI to reflect this.
-   */
-  setHomePageToCurrent: function ()
-  {
-    let homePage = document.getElementById("browser.startup.homepage");
-    let tabs = this._getTabsForHomePage();
-    function getTabURI(t) t.linkedBrowser.currentURI.spec;
-
-    // FIXME Bug 244192: using dangerous "|" joiner!
-    if (tabs.length)
-      homePage.value = tabs.map(getTabURI).join("|");
-  },
-
-  /**
-   * Displays a dialog in which the user can select a bookmark to use as home
-   * page.  If the user selects a bookmark, that bookmark's name is displayed in
-   * UI and the bookmark's address is stored to the home page preference.
-   */
-  setHomePageToBookmark: function ()
-  {
-    var rv = { urls: null, names: null };
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/selectBookmark.xul",
-                                           "resizable", rv);  
-    if (rv.urls && rv.names) {
-      var homePage = document.getElementById("browser.startup.homepage");
-
-      // XXX still using dangerous "|" joiner!
-      homePage.value = rv.urls.join("|");
-    }
-  },
-
-  /**
-   * Switches the "Use Current Page" button between its singular and plural
-   * forms.
-   */
-  _updateUseCurrentButton: function () {
-    let useCurrent = document.getElementById("useCurrent");
-
-    let tabs = this._getTabsForHomePage();
-    if (tabs.length > 1)
-      useCurrent.label = useCurrent.getAttribute("label2");
-    else
-      useCurrent.label = useCurrent.getAttribute("label1");
-
-    // In this case, the button's disabled state is set by preferences.xml.
-    if (document.getElementById
-        ("pref.browser.homepage.disable_button.current_page").locked)
-      return;
-
-    useCurrent.disabled = !tabs.length
-  },
-
-  _getTabsForHomePage: function ()
-  {
-    var win;
-    var tabs = [];
-    if (document.documentElement.instantApply) {
-      const Cc = Components.classes, Ci = Components.interfaces;
-      // If we're in instant-apply mode, use the most recent browser window
-      var wm = Cc["@mozilla.org/appshell/window-mediator;1"]
-                 .getService(Components.interfaces.nsIWindowMediator);
-      win = wm.getMostRecentWindow("navigator:browser");
-    }
-    else {
-      win = window.opener;
-    }
-
-    if (win && win.document.documentElement
-                  .getAttribute("windowtype") == "navigator:browser") {
-      // We should only include visible & non-pinned tabs
-      tabs = win.gBrowser.visibleTabs.slice(win.gBrowser._numPinnedTabs);
-    }
-
-    return tabs;
-  },
-
-  /**
-   * Restores the default home page as the user's home page.
-   */
-  restoreDefaultHomePage: function ()
-  {
-    var homePage = document.getElementById("browser.startup.homepage");
-    homePage.value = homePage.defaultValue;
-  },
-
-  // DOWNLOADS
-
-  /*
-   * Preferences:
-   * 
-   * browser.download.useDownloadDir - bool
-   *   True - Save files directly to the folder configured via the
-   *   browser.download.folderList preference.
-   *   False - Always ask the user where to save a file and default to 
-   *   browser.download.lastDir when displaying a folder picker dialog.
-   * browser.download.dir - local file handle
-   *   A local folder the user may have selected for downloaded files to be
-   *   saved. Migration of other browser settings may also set this path.
-   *   This folder is enabled when folderList equals 2.
-   * browser.download.lastDir - local file handle
-   *   May contain the last folder path accessed when the user browsed
-   *   via the file save-as dialog. (see contentAreaUtils.js)
-   * browser.download.folderList - int
-   *   Indicates the location users wish to save downloaded files too.
-   *   It is also used to display special file labels when the default
-   *   download location is either the Desktop or the Downloads folder.
-   *   Values:
-   *     0 - The desktop is the default download location.
-   *     1 - The system's downloads folder is the default download location.
-   *     2 - The default download location is elsewhere as specified in
-   *         browser.download.dir.
-   * browser.download.downloadDir
-   *   deprecated.
-   * browser.download.defaultFolder
-   *   deprecated.
-   */
-
-  /**
-   * Enables/disables the folder field and Browse button based on whether a
-   * default download directory is being used.
-   */
-  readUseDownloadDir: function ()
-  {
-    var downloadFolder = document.getElementById("downloadFolder");
-    var chooseFolder = document.getElementById("chooseFolder");
-    var preference = document.getElementById("browser.download.useDownloadDir");
-    downloadFolder.disabled = !preference.value;
-    chooseFolder.disabled = !preference.value;
-
-    // don't override the preference's value in UI
-    return undefined;
-  },
-  
-  /**
-   * Displays a file picker in which the user can choose the location where
-   * downloads are automatically saved, updating preferences and UI in
-   * response to the choice, if one is made.
-   */
-  chooseFolder()
-  {
-    return this.chooseFolderTask().catch(Components.utils.reportError);
-  },
-  chooseFolderTask: Task.async(function* ()
-  {
-    let bundlePreferences = document.getElementById("bundlePreferences");
-    let title = bundlePreferences.getString("chooseDownloadFolderTitle");
-    let folderListPref = document.getElementById("browser.download.folderList");
-    let currentDirPref = yield this._indexToFolder(folderListPref.value);
-    let defDownloads = yield this._indexToFolder(1);
-    let fp = Components.classes["@mozilla.org/filepicker;1"].
-             createInstance(Components.interfaces.nsIFilePicker);
-
-    fp.init(window, title, Components.interfaces.nsIFilePicker.modeGetFolder);
-    fp.appendFilters(Components.interfaces.nsIFilePicker.filterAll);
-    // First try to open what's currently configured
-    if (currentDirPref && currentDirPref.exists()) {
-      fp.displayDirectory = currentDirPref;
-    } // Try the system's download dir
-    else if (defDownloads && defDownloads.exists()) {
-      fp.displayDirectory = defDownloads;
-    } // Fall back to Desktop
-    else {
-      fp.displayDirectory = yield this._indexToFolder(0);
-    }
-
-    let result = yield new Promise(resolve => fp.open(resolve));
-    if (result != Components.interfaces.nsIFilePicker.returnOK) {
-      return;
-    }
-
-    let downloadDirPref = document.getElementById("browser.download.dir");
-    downloadDirPref.value = fp.file;
-    folderListPref.value = yield this._folderToIndex(fp.file);
-    // Note, the real prefs will not be updated yet, so dnld manager's
-    // userDownloadsDirectory may not return the right folder after
-    // this code executes. displayDownloadDirPref will be called on
-    // the assignment above to update the UI.
-  }),
-
-  /**
-   * Initializes the download folder display settings based on the user's 
-   * preferences.
-   */
-  displayDownloadDirPref()
-  {
-    this.displayDownloadDirPrefTask().catch(Components.utils.reportError);
-
-    // don't override the preference's value in UI
-    return undefined;
-  },
-
-  displayDownloadDirPrefTask: Task.async(function* ()
-  {
-    var folderListPref = document.getElementById("browser.download.folderList");
-    var bundlePreferences = document.getElementById("bundlePreferences");
-    var downloadFolder = document.getElementById("downloadFolder");
-    var currentDirPref = document.getElementById("browser.download.dir");
-
-    // Used in defining the correct path to the folder icon.
-    var ios = Components.classes["@mozilla.org/network/io-service;1"]
-                        .getService(Components.interfaces.nsIIOService);
-    var fph = ios.getProtocolHandler("file")
-                 .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
-    var iconUrlSpec;
-      
-    // Display a 'pretty' label or the path in the UI.
-    if (folderListPref.value == 2) {
-      // Custom path selected and is configured
-      downloadFolder.label = this._getDisplayNameOfFile(currentDirPref.value);
-      iconUrlSpec = fph.getURLSpecFromFile(currentDirPref.value);
-    } else if (folderListPref.value == 1) {
-      // 'Downloads'
-      // In 1.5, this pointed to a folder we created called 'My Downloads'
-      // and was available as an option in the 1.5 drop down. On XP this
-      // was in My Documents, on OSX it was in User Docs. In 2.0, we did
-      // away with the drop down option, although the special label was
-      // still supported for the folder if it existed. Because it was
-      // not exposed it was rarely used.
-      // With 3.0, a new desktop folder - 'Downloads' was introduced for
-      // platforms and versions that don't support a default system downloads
-      // folder. See nsDownloadManager for details. 
-      downloadFolder.label = bundlePreferences.getString("downloadsFolderName");
-      iconUrlSpec = fph.getURLSpecFromFile(yield this._indexToFolder(1));
-    } else {
-      // 'Desktop'
-      downloadFolder.label = bundlePreferences.getString("desktopFolderName");
-      iconUrlSpec = fph.getURLSpecFromFile(yield this._getDownloadsFolder("Desktop"));
-    }
-    downloadFolder.image = "moz-icon://" + iconUrlSpec + "?size=16";
-  }),
-
-  /**
-   * Returns the textual path of a folder in readable form.
-   */
-  _getDisplayNameOfFile: function (aFolder)
-  {
-    // TODO: would like to add support for 'Downloads on Macintosh HD'
-    //       for OS X users.
-    return aFolder ? aFolder.path : "";
-  },
-
-  /**
-   * Returns the Downloads folder.  If aFolder is "Desktop", then the Downloads
-   * folder returned is the desktop folder; otherwise, it is a folder whose name
-   * indicates that it is a download folder and whose path is as determined by
-   * the XPCOM directory service via the download manager's attribute 
-   * defaultDownloadsDirectory.
-   *
-   * @throws if aFolder is not "Desktop" or "Downloads"
-   */
-  _getDownloadsFolder: Task.async(function* (aFolder)
-  {
-    switch (aFolder) {
-      case "Desktop":
-        var fileLoc = Components.classes["@mozilla.org/file/directory_service;1"]
-                                    .getService(Components.interfaces.nsIProperties);
-        return fileLoc.get("Desk", Components.interfaces.nsILocalFile);
-      case "Downloads":
-        let downloadsDir = yield Downloads.getSystemDownloadsDirectory();
-        return new FileUtils.File(downloadsDir);
-    }
-    throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'";
-  }),
-
-  /**
-   * Determines the type of the given folder.
-   *
-   * @param   aFolder
-   *          the folder whose type is to be determined
-   * @returns integer
-   *          0 if aFolder is the Desktop or is unspecified,
-   *          1 if aFolder is the Downloads folder,
-   *          2 otherwise
-   */
-  _folderToIndex: Task.async(function* (aFolder)
-  {
-    if (!aFolder || aFolder.equals(yield this._getDownloadsFolder("Desktop")))
-      return 0;
-    else if (aFolder.equals(yield this._getDownloadsFolder("Downloads")))
-      return 1;
-    return 2;
-  }),
-
-  /**
-   * Converts an integer into the corresponding folder.
-   *
-   * @param   aIndex
-   *          an integer
-   * @returns the Desktop folder if aIndex == 0,
-   *          the Downloads folder if aIndex == 1,
-   *          the folder stored in browser.download.dir
-   */
-  _indexToFolder: Task.async(function* (aIndex)
-  {
-    switch (aIndex) {
-      case 0:
-        return yield this._getDownloadsFolder("Desktop");
-      case 1:
-        return yield this._getDownloadsFolder("Downloads");
-    }
-    var currentDirPref = document.getElementById("browser.download.dir");
-    return currentDirPref.value;
-  }),
-
-  /**
-   * Hide/show the "Show my windows and tabs from last time" option based
-   * on the value of the browser.privatebrowsing.autostart pref.
-   */
-  updateBrowserStartupLastSession: function()
-  {
-    let pbAutoStartPref = document.getElementById("browser.privatebrowsing.autostart");
-    let startupPref = document.getElementById("browser.startup.page");
-    let menu = document.getElementById("browserStartupPage");
-    let option = document.getElementById("browserStartupLastSession");
-    if (pbAutoStartPref.value) {
-      option.setAttribute("disabled", "true");
-      if (option.selected) {
-        menu.selectedItem = document.getElementById("browserStartupHomePage");
-      }
-    } else {
-      option.removeAttribute("disabled");
-      startupPref.updateElements(); // select the correct index in the startup menulist
-    }
-  }
-
-#ifdef HAVE_SHELL_SERVICE
-  ,
-  /*
-   * Preferences:
-   *
-   * browser.shell.checkDefault
-   * - true if a default-browser check (and prompt to make it so if necessary)
-   *   occurs at startup, false otherwise
-   */
-
-  /**
-   * Show button for setting browser as default browser or information that
-   * browser is already the default browser.
-   */
-  updateSetDefaultBrowser: function()
-  {
-    let shellSvc = getShellService();
-    let defaultBrowserBox = document.getElementById("defaultBrowserBox");
-    if (!shellSvc) {
-      defaultBrowserBox.hidden = true;
-      return;
-    }
-    let setDefaultPane = document.getElementById("setDefaultPane");
-    let selectedIndex = shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
-    setDefaultPane.selectedIndex = selectedIndex;
-  },
-
-  /**
-   * Set browser as the operating system default browser.
-   */
-  setDefaultBrowser: function()
-  {
-    let shellSvc = getShellService();
-    if (!shellSvc)
-      return;
-    try {
-      shellSvc.setDefaultBrowser(true, false);
-    } catch (ex) {
-      Components.utils.reportError(ex);
-      return;
-    }
-    let selectedIndex =
-      shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
-    document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
-  }
-#endif
-};
deleted file mode 100644
--- a/browser/components/preferences/main.xul
+++ /dev/null
@@ -1,186 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# 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 overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % mainDTD SYSTEM "chrome://browser/locale/preferences/main.dtd">
-  <!ENTITY % aboutHomeDTD SYSTEM "chrome://browser/locale/aboutHome.dtd">
-  %brandDTD;
-  %mainDTD;
-  %aboutHomeDTD;
-]>
-
-<overlay id="MainPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-           
-  <prefpane id="paneMain" 
-            onpaneload="gMainPane.init();"
-            helpTopic="prefs-main">
-
-    <script type="application/javascript" src="chrome://browser/content/preferences/main.js"/>
-
-    <preferences id="mainPreferences">
-      <!-- XXX Button preferences -->
-
-      <!-- Startup -->
-      <preference id="browser.startup.page"
-                  name="browser.startup.page"
-                  type="int"/>
-      <preference id="browser.startup.homepage"
-                  name="browser.startup.homepage"
-                  type="wstring"/>
-
-#ifdef HAVE_SHELL_SERVICE
-      <preference id="browser.shell.checkDefaultBrowser"
-                  name="browser.shell.checkDefaultBrowser"
-                  type="bool"/>
-
-      <preference id="pref.general.disable_button.default_browser"
-                  name="pref.general.disable_button.default_browser"
-                  type="bool"/>
-#endif
-
-      <preference id="pref.browser.homepage.disable_button.current_page"
-                  name="pref.browser.homepage.disable_button.current_page"
-                  type="bool"/>
-      <preference id="pref.browser.homepage.disable_button.bookmark_page"
-                  name="pref.browser.homepage.disable_button.bookmark_page"
-                  type="bool"/>
-      <preference id="pref.browser.homepage.disable_button.restore_default"
-                  name="pref.browser.homepage.disable_button.restore_default"
-                  type="bool"/>
-
-      <preference id="browser.privatebrowsing.autostart"
-                  name="browser.privatebrowsing.autostart"
-                  type="bool"
-                  onchange="gMainPane.updateBrowserStartupLastSession();"/>
-
-      <!-- Downloads -->
-      <preference id="browser.download.useDownloadDir"
-                  name="browser.download.useDownloadDir"
-                  type="bool"/>
-      <preference id="browser.download.dir"
-                  name="browser.download.dir"
-                  type="file"
-                  onchange="gMainPane.displayDownloadDirPref();"/>
-      <preference id="browser.download.folderList"        name="browser.download.folderList"        type="int"/>
-
-    </preferences>
-    
-    <stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
-
-    <!-- Startup -->
-    <groupbox id="startupGroup">
-      <caption label="&startup.label;"/>
-
-#ifdef MOZ_DEV_EDITION
-      <vbox id="separateProfileBox">
-        <checkbox id="separateProfileMode"
-                  label="&separateProfileMode.label;"/>
-        <hbox align="center" class="indent">
-          <label id="useFirefoxSync">&useFirefoxSync.label;</label>
-          <label id="getStarted" class="text-link">&getStarted.label;</label>
-        </hbox>
-      </vbox>
-#endif
-
-#ifdef HAVE_SHELL_SERVICE
-      <vbox id="defaultBrowserBox">
-        <hbox align="center">
-          <checkbox id="alwaysCheckDefault" preference="browser.shell.checkDefaultBrowser"
-                    label="&alwaysCheckDefault2.label;" accesskey="&alwaysCheckDefault2.accesskey;"/>
-        </hbox>
-        <deck id="setDefaultPane">
-          <hbox align="center" class="indent">
-            <label id="isNotDefaultLabel" flex="1">&isNotDefault.label;</label>
-            <button id="setDefaultButton"
-                    label="&setAsMyDefaultBrowser2.label;" accesskey="&setAsMyDefaultBrowser2.accesskey;"
-                    oncommand="gMainPane.setDefaultBrowser();"
-                    preference="pref.general.disable_button.default_browser"/>
-          </hbox>
-          <hbox align="center" class="indent">
-            <label id="isDefaultLabel" flex="1">&isDefault.label;</label>
-          </hbox>
-        </deck>
-        <separator class="thin"/>
-      </vbox>
-#endif
-      <hbox align="center">
-        <label value="&startupPage.label;" accesskey="&startupPage.accesskey;"
-               control="browserStartupPage"/>
-        <menulist id="browserStartupPage" preference="browser.startup.page">
-          <menupopup>
-            <menuitem label="&startupHomePage.label;"     value="1" id="browserStartupHomePage"/>
-            <menuitem label="&startupBlankPage.label;"    value="0" id="browserStartupBlank"/>
-            <menuitem label="&startupLastSession.label;"  value="3" id="browserStartupLastSession"/>
-          </menupopup>
-        </menulist>
-      </hbox>
-      <separator class="thin"/>
-      <hbox align="center">
-        <label value="&homepage.label;" accesskey="&homepage.accesskey;" control="browserHomePage"/>
-        <textbox id="browserHomePage" class="padded uri-element" flex="1"
-                 type="autocomplete" autocompletesearch="history"
-                 onsyncfrompreference="return gMainPane.syncFromHomePref();"
-                 onsynctopreference="return gMainPane.syncToHomePref(this.value);"
-                 placeholder="&abouthome.pageTitle;"
-                 preference="browser.startup.homepage"/>
-      </hbox>
-      <hbox align="center" pack="end">
-        <button label="" accesskey="&useCurrentPage.accesskey;"
-                label1="&useCurrentPage.label;"
-                label2="&useMultiple.label;"
-                oncommand="gMainPane.setHomePageToCurrent();"
-                id="useCurrent"
-                preference="pref.browser.homepage.disable_button.current_page"/>
-        <button label="&chooseBookmark.label;" accesskey="&chooseBookmark.accesskey;"
-                oncommand="gMainPane.setHomePageToBookmark();"
-                id="useBookmark"
-                preference="pref.browser.homepage.disable_button.bookmark_page"/>
-        <button label="&restoreDefault.label;" accesskey="&restoreDefault.accesskey;"
-                oncommand="gMainPane.restoreDefaultHomePage();"
-                id="restoreDefaultHomePage"
-                preference="pref.browser.homepage.disable_button.restore_default"/>
-      </hbox>
-    </groupbox>
-
-    <!-- Downloads -->
-    <groupbox id="downloadsGroup">
-      <caption label="&downloads.label;"/>
-
-      <radiogroup id="saveWhere"
-                  preference="browser.download.useDownloadDir"
-                  onsyncfrompreference="return gMainPane.readUseDownloadDir();">
-        <hbox id="saveToRow">
-          <radio id="saveTo" value="true"
-                 label="&saveTo.label;"
-                 accesskey="&saveTo.accesskey;"
-                 aria-labelledby="saveTo downloadFolder"/>
-          <filefield id="downloadFolder" flex="1"
-                     preference="browser.download.folderList"
-                     preference-editable="true"
-                     aria-labelledby="saveTo"
-                     onsyncfrompreference="return gMainPane.displayDownloadDirPref();"/>
-          <button id="chooseFolder" oncommand="gMainPane.chooseFolder();"
-#ifdef XP_MACOSX
-                  accesskey="&chooseFolderMac.accesskey;"
-                  label="&chooseFolderMac.label;"
-#else
-                  accesskey="&chooseFolderWin.accesskey;"
-                  label="&chooseFolderWin.label;"
-#endif
-          />
-        </hbox>
-        <radio id="alwaysAsk" value="false"
-               label="&alwaysAsk.label;"
-               accesskey="&alwaysAsk.accesskey;"/>
-      </radiogroup>
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
--- a/browser/components/preferences/moz.build
+++ b/browser/components/preferences/moz.build
@@ -3,17 +3,16 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 DIRS += ['in-content']
 
 BROWSER_CHROME_MANIFESTS += [
     'in-content/tests/browser.ini',
-    'tests/browser.ini',
 ]
 
 for var in ('MOZ_APP_NAME', 'MOZ_MACBUNDLE_NAME'):
     DEFINES[var] = CONFIG[var]
 
 if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
     DEFINES['HAVE_SHELL_SERVICE'] = 1
 
deleted file mode 100644
--- a/browser/components/preferences/preferences.js
+++ /dev/null
@@ -1,19 +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";
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-if (!Services.prefs.getBoolPref("browser.search.showOneOffButtons")) {
-  addEventListener("load", function onLoad() {
-    removeEventListener("load", onLoad);
-    let pane =
-      document.getAnonymousElementByAttribute(document.documentElement,
-                                              "pane", "paneSearch");
-    pane.hidden = true;
-    if (pane.selected)
-      document.documentElement.showPane(document.getElementById("paneMain"));
-  });
-}
deleted file mode 100644
--- a/browser/components/preferences/preferences.xul
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# 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/global.css"?>
-<?xml-stylesheet href="chrome://mozapps/content/preferences/preferences.css"?>
-<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
-
-<!-- XXX This should be in applications.xul, but bug 393953 means putting it
-   - there causes the Applications pane not to work the first time you open
-   - the Preferences dialog in a browsing session, so we work around the problem
-   - by putting it here instead.
-   -->
-<?xml-stylesheet href="chrome://browser/content/preferences/handlers.css"?>
-<?xml-stylesheet href="chrome://browser/skin/preferences/applications.css"?>
-<?xml-stylesheet href="chrome://browser/skin/preferences/search.css"?>
-
-<!DOCTYPE prefwindow [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-<!ENTITY % preferencesDTD SYSTEM "chrome://browser/locale/preferences/preferences.dtd">
-%brandDTD;
-%preferencesDTD;
-]>
-
-#ifdef XP_WIN
-#define USE_WIN_TITLE_STYLE
-#endif
-
-#ifdef XP_MACOSX
-<?xul-overlay href="chrome://browser/content/macBrowserOverlay.xul"?>
-#endif
-
-<prefwindow type="prefwindow"
-            id="BrowserPreferences"
-            windowtype="Browser:Preferences"
-            ondialoghelp="openPrefsHelp()"
-#ifdef USE_WIN_TITLE_STYLE
-            title="&prefWindow.titleWin;"
-#else
-#ifdef XP_UNIX
-#ifndef XP_MACOSX
-            title="&prefWindow.titleGNOME;"
-#endif
-#endif
-#endif
-            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-#ifdef USE_WIN_TITLE_STYLE
-            style="&prefWinMinSize.styleWin2;">
-#else
-#ifdef XP_MACOSX
-            style="&prefWinMinSize.styleMac;">
-#else
-            style="&prefWinMinSize.styleGNOME;">
-#endif
-#endif
-
-    <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
-
-    <stringbundle id="bundleBrand" src="chrome://branding/locale/brand.properties"/>
-    <stringbundle id="bundlePreferences"
-                  src="chrome://browser/locale/preferences/preferences.properties"/>
-
-    <prefpane id="paneMain" label="&paneGeneral.title;"
-              src="chrome://browser/content/preferences/main.xul"/>
-    <prefpane id="paneTabs" label="&paneTabs.title;"
-              src="chrome://browser/content/preferences/tabs.xul"/>
-    <prefpane id="paneSearch" label="&paneSearch.title;"
-              src="chrome://browser/content/preferences/search.xul"/>
-    <prefpane id="paneContent" label="&paneContent.title;"
-              src="chrome://browser/content/preferences/content.xul"/>
-    <prefpane id="paneApplications" label="&paneApplications.title;"
-              src="chrome://browser/content/preferences/applications.xul"/>
-    <prefpane id="panePrivacy" label="&panePrivacy.title;"
-              src="chrome://browser/content/preferences/privacy.xul"/>
-    <prefpane id="paneSecurity" label="&paneSecurity.title;"
-              src="chrome://browser/content/preferences/security.xul"/>
-#ifdef MOZ_SERVICES_SYNC
-    <prefpane id="paneSync" label="&paneSync.title;"
-              src="chrome://browser/content/preferences/sync.xul"/>
-#endif
-    <prefpane id="paneAdvanced" label="&paneAdvanced.title;"
-              src="chrome://browser/content/preferences/advanced.xul"/>
-
-    <script type="application/javascript"
-            src="chrome://browser/content/preferences/preferences.js"/>
-#ifdef XP_MACOSX
-#include ../../base/content/browserMountPoints.inc
-#endif
-
-</prefwindow>
-
deleted file mode 100644
--- a/browser/components/preferences/privacy.js
+++ /dev/null
@@ -1,512 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
-/* 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/. */
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-Components.utils.import("resource://gre/modules/AppConstants.jsm");
-
-var gPrivacyPane = {
-
-  /**
-   * Whether the use has selected the auto-start private browsing mode in the UI.
-   */
-  _autoStartPrivateBrowsing: false,
-
-  /**
-   * Whether the prompt to restart Firefox should appear when changing the autostart pref.
-   */
-  _shouldPromptForRestart: true,
-
-#ifdef NIGHTLY_BUILD
-  /**
-   * Show the Tracking Protection UI depending on the
-   * privacy.trackingprotection.ui.enabled pref, and linkify its Learn More link
-   */
-  _initTrackingProtection: function () {
-    if (!Services.prefs.getBoolPref("privacy.trackingprotection.ui.enabled")) {
-      return;
-    }
-
-    let link = document.getElementById("trackingProtectionLearnMore");
-    let url = Services.urlFormatter.formatURLPref("app.support.baseURL") + "tracking-protection";
-    link.setAttribute("href", url);
-
-    document.getElementById("trackingprotectionbox").hidden = false;
-  },
-#endif
-
-  /**
-   * Initialize autocomplete to ensure prefs are in sync.
-   */
-  _initAutocomplete: function () {
-    let unifiedCompletePref = false;
-    try {
-      unifiedCompletePref =
-        Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete");
-    } catch (ex) {}
-
-    if (unifiedCompletePref) {
-      Components.classes["@mozilla.org/autocomplete/search;1?name=unifiedcomplete"]
-                .getService(Components.interfaces.mozIPlacesAutoComplete);
-    } else {
-      Components.classes["@mozilla.org/autocomplete/search;1?name=history"]
-                .getService(Components.interfaces.mozIPlacesAutoComplete);
-    }
-  },
-
-  /**
-   * Sets up the UI for the number of days of history to keep, and updates the
-   * label of the "Clear Now..." button.
-   */
-  init: function ()
-  {
-    this._updateSanitizeSettingsButton();
-    this.initializeHistoryMode();
-    this.updateHistoryModePane();
-    this.updatePrivacyMicroControls();
-    this.initAutoStartPrivateBrowsingReverter();
-#ifdef NIGHTLY_BUILD
-    this._initTrackingProtection();
-#endif
-    this._initAutocomplete();
-
-    document.getElementById("searchesSuggestion").hidden =
-      !Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete");
-  },
-
-  // HISTORY MODE
-
-  /**
-   * The list of preferences which affect the initial history mode settings.
-   * If the auto start private browsing mode pref is active, the initial
-   * history mode would be set to "Don't remember anything".
-   * If all of these preferences have their default values, and the auto-start
-   * private browsing mode is not active, the initial history mode would be
-   * set to "Remember everything".
-   * Otherwise, the initial history mode would be set to "Custom".
-   *
-   * Extensions adding their own preferences can append their IDs to this array if needed.
-   */
-  prefsForDefault: [
-    "places.history.enabled",
-    "browser.formfill.enable",
-    "network.cookie.cookieBehavior",
-    "network.cookie.lifetimePolicy",
-    "privacy.sanitize.sanitizeOnShutdown"
-  ],
-
-  /**
-   * The list of control IDs which are dependent on the auto-start private
-   * browsing setting, such that in "Custom" mode they would be disabled if
-   * the auto-start private browsing checkbox is checked, and enabled otherwise.
-   *
-   * Extensions adding their own controls can append their IDs to this array if needed.
-   */
-  dependentControls: [
-    "rememberHistory",
-    "rememberForms",
-    "keepUntil",
-    "keepCookiesUntil",
-    "alwaysClear",
-    "clearDataSettings"
-  ],
-
-  /**
-   * Check whether all the preferences values are set to their default values
-   *
-   * @param aPrefs an array of pref names to check for
-   * @returns boolean true if all of the prefs are set to their default values,
-   *                  false otherwise
-   */
-  _checkDefaultValues: function(aPrefs) {
-    for (let i = 0; i < aPrefs.length; ++i) {
-      let pref = document.getElementById(aPrefs[i]);
-      if (pref.value != pref.defaultValue)
-        return false;
-    }
-    return true;
-  },
-
-  /**
-   * Initialize the history mode menulist based on the privacy preferences
-   */
-  initializeHistoryMode: function PPP_initializeHistoryMode()
-  {
-    let mode;
-    let getVal = function (aPref)
-      document.getElementById(aPref).value;
-
-    if (this._checkDefaultValues(this.prefsForDefault)) {
-      if (getVal("browser.privatebrowsing.autostart"))
-        mode = "dontremember";
-      else 
-        mode = "remember";
-    }
-    else
-      mode = "custom";
-
-    document.getElementById("historyMode").value = mode;
-  },
-
-  /**
-   * Update the selected pane based on the history mode menulist
-   */
-  updateHistoryModePane: function PPP_updateHistoryModePane()
-  {
-    let selectedIndex = -1;
-    switch (document.getElementById("historyMode").value) {
-    case "remember":
-      selectedIndex = 0;
-      break;
-    case "dontremember":
-      selectedIndex = 1;
-      break;
-    case "custom":
-      selectedIndex = 2;
-      break;
-    }
-    document.getElementById("historyPane").selectedIndex = selectedIndex;
-  },
-
-  /**
-   * Update the private browsing auto-start pref and the history mode
-   * micro-management prefs based on the history mode menulist
-   */
-  updateHistoryModePrefs: function PPP_updateHistoryModePrefs()
-  {
-    let pref = document.getElementById("browser.privatebrowsing.autostart");
-    switch (document.getElementById("historyMode").value) {
-    case "remember":
-      if (pref.value)
-        pref.value = false;
-
-      // select the remember history option if needed
-      let rememberHistoryCheckbox = document.getElementById("rememberHistory");
-      if (!rememberHistoryCheckbox.checked)
-        rememberHistoryCheckbox.checked = true;
-
-      // select the remember forms history option
-      document.getElementById("browser.formfill.enable").value = true;
-
-      // select the accept cookies option
-      document.getElementById("network.cookie.cookieBehavior").value = 0;
-      // select the cookie lifetime policy option
-      document.getElementById("network.cookie.lifetimePolicy").value = 0;
-
-      // select the clear on close option
-      document.getElementById("privacy.sanitize.sanitizeOnShutdown").value = false;
-      break;
-    case "dontremember":
-      if (!pref.value)
-        pref.value = true;
-      break;
-    }
-  },
-
-  /**
-   * Update the privacy micro-management controls based on the
-   * value of the private browsing auto-start checkbox.
-   */
-  updatePrivacyMicroControls: function PPP_updatePrivacyMicroControls()
-  {
-    if (document.getElementById("historyMode").value == "custom") {
-      let disabled = this._autoStartPrivateBrowsing =
-        document.getElementById("privateBrowsingAutoStart").checked;
-      this.dependentControls.forEach(function (aElement) {
-        let control = document.getElementById(aElement);
-        let preferenceId = control.getAttribute("preference");
-        if (!preferenceId) {
-          let dependentControlId = control.getAttribute("control");
-          if (dependentControlId) {
-            let dependentControl = document.getElementById(dependentControlId);
-            preferenceId = dependentControl.getAttribute("preference");
-          }
-        }
-
-        let preference = preferenceId ? document.getElementById(preferenceId) : {};
-        control.disabled = disabled || preference.locked;
-      });
-
-      // adjust the cookie controls status
-      this.readAcceptCookies();
-      document.getElementById("keepCookiesUntil").value = disabled ? 2 :
-        document.getElementById("network.cookie.lifetimePolicy").value;
-
-      // adjust the checked state of the sanitizeOnShutdown checkbox
-      document.getElementById("alwaysClear").checked = disabled ? false :
-        document.getElementById("privacy.sanitize.sanitizeOnShutdown").value;
-
-      // adjust the checked state of the remember history checkboxes
-      document.getElementById("rememberHistory").checked = disabled ? false :
-        document.getElementById("places.history.enabled").value;
-      document.getElementById("rememberForms").checked = disabled ? false :
-        document.getElementById("browser.formfill.enable").value;
-
-      if (!disabled) {
-        // adjust the Settings button for sanitizeOnShutdown
-        this._updateSanitizeSettingsButton();
-      }
-    }
-  },
-
-  // PRIVATE BROWSING
-
-  /**
-   * Initialize the starting state for the auto-start private browsing mode pref reverter.
-   */
-  initAutoStartPrivateBrowsingReverter: function PPP_initAutoStartPrivateBrowsingReverter()
-  {
-    let mode = document.getElementById("historyMode");
-    let autoStart = document.getElementById("privateBrowsingAutoStart");
-    this._lastMode = mode.selectedIndex;
-    this._lastCheckState = autoStart.hasAttribute('checked');
-  },
-
-  _lastMode: null,
-  _lastCheckState: null,
-  updateAutostart: function PPP_updateAutostart() {
-      let mode = document.getElementById("historyMode");
-      let autoStart = document.getElementById("privateBrowsingAutoStart");
-      let pref = document.getElementById("browser.privatebrowsing.autostart");
-      if ((mode.value == "custom" && this._lastCheckState == autoStart.checked) ||
-          (mode.value == "remember" && !this._lastCheckState) ||
-          (mode.value == "dontremember" && this._lastCheckState)) {
-          // These are all no-op changes, so we don't need to prompt.
-          this._lastMode = mode.selectedIndex;
-          this._lastCheckState = autoStart.hasAttribute('checked');
-          return;
-      }
-
-      if (!this._shouldPromptForRestart) {
-        // We're performing a revert. Just let it happen.
-        return;
-      }
-
-      const Cc = Components.classes, Ci = Components.interfaces;
-      let brandName = document.getElementById("bundleBrand").getString("brandShortName");
-      let bundle = document.getElementById("bundlePreferences");
-      let msg = bundle.getFormattedString(autoStart.checked ?
-                                          "featureEnableRequiresRestart" : "featureDisableRequiresRestart",
-                                          [brandName]);
-      let title = bundle.getFormattedString("shouldRestartTitle", [brandName]);
-      let prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Ci.nsIPromptService);
-      let shouldProceed = prompts.confirm(window, title, msg)
-      if (shouldProceed) {
-        let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
-                           .createInstance(Ci.nsISupportsPRBool);
-        Services.obs.notifyObservers(cancelQuit, "quit-application-requested",
-                                     "restart");
-        shouldProceed = !cancelQuit.data;
-
-        if (shouldProceed) {
-          pref.value = autoStart.hasAttribute('checked');
-          document.documentElement.acceptDialog();
-          let appStartup = Cc["@mozilla.org/toolkit/app-startup;1"]
-                             .getService(Ci.nsIAppStartup);
-          appStartup.quit(Ci.nsIAppStartup.eAttemptQuit |  Ci.nsIAppStartup.eRestart);
-          return;
-        }
-      }
-
-      this._shouldPromptForRestart = false;
-
-      if (this._lastCheckState) {
-        autoStart.checked = "checked";
-      } else {
-        autoStart.removeAttribute('checked');
-      }
-      pref.value = autoStart.hasAttribute('checked');
-      mode.selectedIndex = this._lastMode;
-      mode.doCommand();
-
-      this._shouldPromptForRestart = true;
-  },
-
-  // HISTORY
-
-  /*
-   * Preferences:
-   *
-   * places.history.enabled
-   * - whether history is enabled or not
-   * browser.formfill.enable
-   * - true if entries in forms and the search bar should be saved, false
-   *   otherwise
-   */
-
-  // COOKIES
-
-  /*
-   * Preferences:
-   *
-   * network.cookie.cookieBehavior
-   * - determines how the browser should handle cookies:
-   *     0   means enable all cookies
-   *     1   means reject all third party cookies
-   *     2   means disable all cookies
-   *     3   means reject third party cookies unless at least one is already set for the eTLD
-   *         see netwerk/cookie/src/nsCookieService.cpp for details
-   * network.cookie.lifetimePolicy
-   * - determines how long cookies are stored:
-   *     0   means keep cookies until they expire
-   *     1   means ask how long to keep each cookie
-   *     2   means keep cookies until the browser is closed
-   */
-
-  /**
-   * Reads the network.cookie.cookieBehavior preference value and
-   * enables/disables the rest of the cookie UI accordingly, returning true
-   * if cookies are enabled.
-   */
-  readAcceptCookies: function ()
-  {
-    var pref = document.getElementById("network.cookie.cookieBehavior");
-    var acceptThirdPartyLabel = document.getElementById("acceptThirdPartyLabel");
-    var acceptThirdPartyMenu = document.getElementById("acceptThirdPartyMenu");
-    var keepUntil = document.getElementById("keepUntil");
-    var menu = document.getElementById("keepCookiesUntil");
-
-    // enable the rest of the UI for anything other than "disable all cookies"
-    var acceptCookies = (pref.value != 2);
-
-    acceptThirdPartyLabel.disabled = acceptThirdPartyMenu.disabled = !acceptCookies;
-    keepUntil.disabled = menu.disabled = this._autoStartPrivateBrowsing || !acceptCookies;
-    
-    return acceptCookies;
-  },
-
-  /**
-   * Enables/disables the "keep until" label and menulist in response to the
-   * "accept cookies" checkbox being checked or unchecked.
-   */
-  writeAcceptCookies: function ()
-  {
-    var accept = document.getElementById("acceptCookies");
-    var acceptThirdPartyMenu = document.getElementById("acceptThirdPartyMenu");
-
-    // if we're enabling cookies, automatically select 'accept third party always'
-    if (accept.checked)
-      acceptThirdPartyMenu.selectedIndex = 0;
-
-    return accept.checked ? 0 : 2;
-  },
-
-  /**
-   * Converts between network.cookie.cookieBehavior and the third-party cookie UI
-   */
-  readAcceptThirdPartyCookies: function ()
-  {
-    var pref = document.getElementById("network.cookie.cookieBehavior");
-    switch (pref.value)
-    {
-      case 0:
-        return "always";
-      case 1:
-        return "never";
-      case 2:
-        return "never";
-      case 3:
-        return "visited";
-      default:
-        return undefined;
-    }
-  },
-  
-  writeAcceptThirdPartyCookies: function ()
-  {
-    var accept = document.getElementById("acceptThirdPartyMenu").selectedItem;
-    switch (accept.value)
-    {
-      case "always":
-        return 0;
-      case "visited":
-        return 3;
-      case "never":
-        return 1;
-      default:
-        return undefined;
-    }
-  },
-
-  /**
-   * Displays fine-grained, per-site preferences for cookies.
-   */
-  showCookieExceptions: function ()
-  {
-    var bundlePreferences = document.getElementById("bundlePreferences");
-    var params = { blockVisible   : true, 
-                   sessionVisible : true, 
-                   allowVisible   : true, 
-                   prefilledHost  : "", 
-                   permissionType : "cookie",
-                   windowTitle    : bundlePreferences.getString("cookiepermissionstitle"),
-                   introText      : bundlePreferences.getString("cookiepermissionstext") };
-    document.documentElement.openWindow("Browser:Permissions",
-                                        "chrome://browser/content/preferences/permissions.xul",
-                                        "resizable", params);
-  },
-
-  /**
-   * Displays all the user's cookies in a dialog.
-   */  
-  showCookies: function (aCategory)
-  {
-    document.documentElement.openWindow("Browser:Cookies",
-                                        "chrome://browser/content/preferences/cookies.xul",
-                                        "resizable", null);
-  },
-
-  // CLEAR PRIVATE DATA
-
-  /*
-   * Preferences:
-   *
-   * privacy.sanitize.sanitizeOnShutdown
-   * - true if the user's private data is cleared on startup according to the
-   *   Clear Private Data settings, false otherwise
-   */
-
-  /**
-   * Displays the Clear Private Data settings dialog.
-   */
-  showClearPrivateDataSettings: function ()
-  {
-    document.documentElement.openSubDialog("chrome://browser/content/preferences/sanitize.xul",
-                                           "", null);
-  },
-
-
-  /**
-   * Displays a dialog from which individual parts of private data may be
-   * cleared.
-   */
-  clearPrivateDataNow: function (aClearEverything)
-  {
-    var ts = document.getElementById("privacy.sanitize.timeSpan");
-    var timeSpanOrig = ts.value;
-    if (aClearEverything)
-      ts.value = 0;
-
-    const Cc = Components.classes, Ci = Components.interfaces;
-    var glue = Cc["@mozilla.org/browser/browserglue;1"]
-                 .getService(Ci.nsIBrowserGlue);
-    glue.sanitize(window);
-
-    // reset the timeSpan pref
-    if (aClearEverything)
-      ts.value = timeSpanOrig;
-  },
-
-  /**
-   * Enables or disables the "Settings..." button depending
-   * on the privacy.sanitize.sanitizeOnShutdown preference value
-   */
-  _updateSanitizeSettingsButton: function () {
-    var settingsButton = document.getElementById("clearDataSettings");
-    var sanitizeOnShutdownPref = document.getElementById("privacy.sanitize.sanitizeOnShutdown");
-    
-    settingsButton.disabled = !sanitizeOnShutdownPref.value;
-   }
-
-};
deleted file mode 100644
--- a/browser/components/preferences/privacy.xul
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
-<!-- 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 overlay [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-<!ENTITY % privacyDTD SYSTEM "chrome://browser/locale/preferences/privacy.dtd">
-%brandDTD;
-%privacyDTD;
-]>
-
-<overlay id="PrivacyPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <prefpane id="panePrivacy"
-            onpaneload="gPrivacyPane.init();"
-            helpTopic="prefs-privacy">
-
-    <preferences id="privacyPreferences">
-  
-      <!-- Tracking -->
-      <preference id="privacy.donottrackheader.enabled"
-                  name="privacy.donottrackheader.enabled"
-                  type="bool"/>
-      <preference id="privacy.trackingprotection.enabled"
-                  name="privacy.trackingprotection.enabled"
-                  type="bool"/>
-
-      <!-- XXX button prefs -->
-      <preference id="pref.privacy.disable_button.cookie_exceptions"
-                  name="pref.privacy.disable_button.cookie_exceptions"
-                  type="bool"/>
-      <preference id="pref.privacy.disable_button.view_cookies"
-                  name="pref.privacy.disable_button.view_cookies"
-                  type="bool"/>
-
-      <!-- Location Bar -->
-      <preference id="browser.urlbar.autocomplete.enabled"
-                  name="browser.urlbar.autocomplete.enabled"
-                  type="bool"/>
-      <preference id="browser.urlbar.suggest.bookmark"
-                  name="browser.urlbar.suggest.bookmark"
-                  type="bool"/>
-      <preference id="browser.urlbar.suggest.history"
-                  name="browser.urlbar.suggest.history"
-                  type="bool"/>
-      <preference id="browser.urlbar.suggest.openpage"
-                  name="browser.urlbar.suggest.openpage"
-                  type="bool"/>
-      <preference id="browser.urlbar.suggest.searches"
-                  name="browser.urlbar.suggest.searches"
-                  type="bool"/>
-
-      <!-- History -->
-      <preference id="places.history.enabled"
-                  name="places.history.enabled"
-                  type="bool"/>
-      <preference id="browser.formfill.enable"
-                  name="browser.formfill.enable"
-                  type="bool"/>
-
-      <!-- Cookies -->
-      <preference id="network.cookie.cookieBehavior"      name="network.cookie.cookieBehavior"      type="int"/>
-      <preference id="network.cookie.lifetimePolicy"      name="network.cookie.lifetimePolicy"      type="int"/>
-      <preference id="network.cookie.blockFutureCookies"  name="network.cookie.blockFutureCookies"  type="bool"/>
-
-      <!-- Clear Private Data -->
-      <preference id="privacy.sanitize.sanitizeOnShutdown"
-                  name="privacy.sanitize.sanitizeOnShutdown"
-                  onchange="gPrivacyPane._updateSanitizeSettingsButton();"
-                  type="bool"/>
-      <preference id="privacy.sanitize.timeSpan"
-                  name="privacy.sanitize.timeSpan"
-                  type="int"/>
-
-      <!-- Private Browsing -->
-      <preference id="browser.privatebrowsing.autostart"
-                  name="browser.privatebrowsing.autostart"
-                  onchange="gPrivacyPane.updatePrivacyMicroControls();"
-                  type="bool"/>
-
-    </preferences>
-    
-    <stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
-    
-    <script type="application/javascript" src="chrome://browser/content/preferences/privacy.js"/>
-
-    <!-- Tracking -->
-    <groupbox id="trackingGroup" align="start">
-      <caption label="&tracking.label;"/>
-      <vbox id="trackingprotectionbox" hidden="true">
-        <hbox align="center">
-          <checkbox id="trackingProtection"
-                    preference="privacy.trackingprotection.enabled"
-                    accesskey="&trackingProtection5.accesskey;"
-                    label="&trackingProtection5.label;" />
-          <image id="trackingProtectionImage"
-                 src="chrome://browser/skin/tracking-protection-16.svg"/>
-        </hbox>
-        <hbox align="center"
-              class="indent">
-          <label id="trackingProtectionLearnMore"
-                 class="text-link"
-                 value="&trackingProtectionLearnMore.label;"/>
-        </hbox>
-      </vbox>
-      <vbox>
-        <hbox align="center">
-          <checkbox id="privacyDoNotTrackCheckbox"
-                    label="&dntTrackingNotOkay4.label;"
-                    accesskey="&dntTrackingNotOkay4.accesskey;"
-                    preference="privacy.donottrackheader.enabled"/>
-        </hbox>
-        <hbox align="center"
-              class="indent">
-          <label id="doNotTrackInfo"
-                 class="text-link"
-                 href="https://www.mozilla.org/dnt">
-            &doNotTrackInfo.label;
-          </label>
-        </hbox>
-      </vbox>
-
-    </groupbox>
-
-    <!-- History -->
-    <groupbox id="historyGroup">
-      <caption label="&history.label;"/>
-
-      <hbox align="center">
-        <label id="historyModeLabel"
-               control="historyMode"
-               accesskey="&historyHeader.pre.accesskey;">&historyHeader.pre.label;</label>
-        <menulist id="historyMode"
-                  oncommand="gPrivacyPane.updateHistoryModePane();
-                             gPrivacyPane.updateHistoryModePrefs();
-                             gPrivacyPane.updatePrivacyMicroControls();
-                             gPrivacyPane.updateAutostart();">
-          <menupopup>
-            <menuitem label="&historyHeader.remember.label;" value="remember"/>
-            <menuitem label="&historyHeader.dontremember.label;" value="dontremember"/>
-            <menuitem label="&historyHeader.custom.label;" value="custom"/>
-          </menupopup>
-        </menulist>
-        <label>&historyHeader.post.label;</label>
-      </hbox>
-
-      <deck id="historyPane">
-        <vbox align="center" id="historyRememberPane">
-          <hbox align="center" flex="1">
-            <spacer flex="1" class="indent"/>
-            <vbox flex="2">
-              <description>&rememberDescription.label;</description>
-              <separator/>
-              <description>&rememberActions.pre.label;<html:a
-                class="inline-link" href="#"
-                onclick="gPrivacyPane.clearPrivateDataNow(false); return false;"
-              >&rememberActions.clearHistory.label;</html:a>&rememberActions.middle.label;<html:a
-                class="inline-link" href="#"
-                onclick="gPrivacyPane.showCookies(); return false;"
-              >&rememberActions.removeCookies.label;</html:a>&rememberActions.post.label;</description>
-            </vbox>
-            <spacer flex="1" class="indent"/>
-          </hbox>
-        </vbox>
-        <vbox align="center" id="historyDontRememberPane">
-          <hbox align="center" flex="1">
-            <spacer flex="1" class="indent"/>
-            <vbox flex="2">
-              <description>&dontrememberDescription.label;</description>
-              <separator/>
-              <description>&dontrememberActions.pre.label;<html:a
-                class="inline-link" href="#"
-                onclick="gPrivacyPane.clearPrivateDataNow(true); return false;"
-              >&dontrememberActions.clearHistory.label;</html:a>&dontrememberActions.post.label;</description>
-            </vbox>
-            <spacer flex="1" class="indent"/>
-          </hbox>
-        </vbox>
-        <vbox id="historyCustomPane">
-          <separator class="thin"/>
-          <checkbox id="privateBrowsingAutoStart" class="indent"
-                    label="&privateBrowsingPermanent2.label;"
-                    accesskey="&privateBrowsingPermanent2.accesskey;"
-                    preference="browser.privatebrowsing.autostart"
-                    oncommand="gPrivacyPane.updateAutostart()"/>
-
-          <vbox class="indent">
-            <vbox class="indent">
-              <checkbox id="rememberHistory"
-                        label="&rememberHistory2.label;"
-                        accesskey="&rememberHistory2.accesskey;"
-                        preference="places.history.enabled"/>
-              <checkbox id="rememberForms"
-                        label="&rememberSearchForm.label;"
-                        accesskey="&rememberSearchForm.accesskey;"
-                        preference="browser.formfill.enable"/>
-
-              <hbox id="cookiesBox">
-                <checkbox id="acceptCookies" label="&acceptCookies.label;" flex="1"
-                          preference="network.cookie.cookieBehavior"
-                          accesskey="&acceptCookies.accesskey;"
-                          onsyncfrompreference="return gPrivacyPane.readAcceptCookies();"
-                          onsynctopreference="return gPrivacyPane.writeAcceptCookies();"/>
-                <button id="cookieExceptions" oncommand="gPrivacyPane.showCookieExceptions();"
-                        label="&cookieExceptions.label;" accesskey="&cookieExceptions.accesskey;"
-                        preference="pref.privacy.disable_button.cookie_exceptions"/>
-              </hbox>
-
-              <hbox id="acceptThirdPartyRow" class="indent">
-                <hbox id="acceptThirdPartyBox" align="center">
-                  <label id="acceptThirdPartyLabel" control="acceptThirdPartyMenu"
-                         accesskey="&acceptThirdParty.pre.accesskey;">&acceptThirdParty.pre.label;</label>
-                  <menulist id="acceptThirdPartyMenu" preference="network.cookie.cookieBehavior"
-                  onsyncfrompreference="return gPrivacyPane.readAcceptThirdPartyCookies();"
-                  onsynctopreference="return gPrivacyPane.writeAcceptThirdPartyCookies();">
-                    <menupopup>
-                      <menuitem label="&acceptThirdParty.always.label;" value="always"/>
-                      <menuitem label="&acceptThirdParty.visited.label;" value="visited"/>
-                      <menuitem label="&acceptThirdParty.never.label;" value="never"/>
-                    </menupopup>
-                  </menulist>
-                </hbox>
-              </hbox>
-              
-              <hbox id="keepRow" class="indent">
-                <hbox id="keepBox" align="center">
-                  <label id="keepUntil"
-                         control="keepCookiesUntil"
-                         accesskey="&keepUntil.accesskey;">&keepUntil.label;</label>
-                  <menulist id="keepCookiesUntil"
-                            preference="network.cookie.lifetimePolicy">
-                    <menupopup>
-                      <menuitem label="&expire.label;" value="0"/>
-                      <menuitem label="&close.label;" value="2"/>
-                      <menuitem label="&askEachTime.label;" value="1"/>
-                    </menupopup>
-                  </menulist>
-                </hbox>
-                <hbox flex="1"/>
-                <button id="showCookiesButton"
-                        label="&showCookies.label;" accesskey="&showCookies.accesskey;"
-                        oncommand="gPrivacyPane.showCookies();"
-                        preference="pref.privacy.disable_button.view_cookies"/>
-              </hbox>
-
-              <hbox id="clearDataBox" align="center">
-                <checkbox id="alwaysClear" flex="1"
-                          preference="privacy.sanitize.sanitizeOnShutdown"
-                          label="&clearOnClose.label;"
-                          accesskey="&clearOnClose.accesskey;"/>
-                <button id="clearDataSettings" label="&clearOnCloseSettings.label;"
-                        accesskey="&clearOnCloseSettings.accesskey;"
-                        oncommand="gPrivacyPane.showClearPrivateDataSettings();"/>
-              </hbox>
-            </vbox>
-          </vbox>
-        </vbox>
-      </deck>
-
-    </groupbox>
-
-    <!-- Location Bar -->
-    <groupbox id="locationBarGroup">
-      <caption label="&locationBar.label;"/>
-
-      <label id="locationBarSuggestionLabel">&locbar.suggest.label;</label>
-
-      <vbox id="tabPrefsBox" align="start" flex="1">
-        <checkbox id="historySuggestion" label="&locbar.history.label;"
-                  accesskey="&locbar.history.accesskey;"
-                  preference="browser.urlbar.suggest.history"/>
-        <checkbox id="bookmarkSuggestion" label="&locbar.bookmarks.label;"
-                  accesskey="&locbar.bookmarks.accesskey;"
-                  preference="browser.urlbar.suggest.bookmark"/>
-        <checkbox id="openpageSuggestion" label="&locbar.openpage.label;"
-                  accesskey="&locbar.openpage.accesskey;"
-                  preference="browser.urlbar.suggest.openpage"/>
-        <checkbox id="searchesSuggestion" label="&locbar.searches.label;"
-                  hidden="true"
-                  accesskey="&locbar.searches.accesskey;"
-                  preference="browser.urlbar.suggest.searches"/>
-      </vbox>
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/browser/components/preferences/search.js
+++ /dev/null
@@ -1,544 +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/. */
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
-                                  "resource://gre/modules/PlacesUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Task",
-                                  "resource://gre/modules/Task.jsm");
-
-const ENGINE_FLAVOR = "text/x-moz-search-engine";
-
-var gEngineView = null;
-
-var gSearchPane = {
-
-  init: function ()
-  {
-    gEngineView = new EngineView(new EngineStore());
-    document.getElementById("engineList").view = gEngineView;
-    this.buildDefaultEngineDropDown();
-
-    Services.obs.addObserver(this, "browser-search-engine-modified", false);
-    window.addEventListener("unload", () => {
-      Services.obs.removeObserver(this, "browser-search-engine-modified", false);
-    });
-  },
-
-  buildDefaultEngineDropDown: function() {
-    // This is called each time something affects the list of engines.
-    let list = document.getElementById("defaultEngine");
-    let currentEngine;
-
-    // First, try to preserve the current selection.
-    if (list.selectedItem)
-      currentEngine = list.selectedItem.label;
-
-    // If there's no current selection, use the current default engine.
-    if (!currentEngine)
-      currentEngine = Services.search.currentEngine.name;
-
-    // If the current engine isn't in the list any more, select the first item.
-    let engines = gEngineView._engineStore._engines;
-    if (!engines.some(e => e.name == currentEngine))
-      currentEngine = engines[0].name;
-
-    // Now clean-up and rebuild the list.
-    list.removeAllItems();
-    gEngineView._engineStore._engines.forEach(e => {
-      let item = list.appendItem(e.name);
-      item.setAttribute("class", "menuitem-iconic searchengine-menuitem menuitem-with-favicon");
-      if (e.iconURI) {
-        let uri = PlacesUtils.getImageURLForResolution(window, e.iconURI.spec);
-        item.setAttribute("image", uri);
-      }
-      item.engine = e;
-      if (e.name == currentEngine)
-        list.selectedItem = item;
-    });
-  },
-
-  observe: function(aEngine, aTopic, aVerb) {
-    if (aTopic == "browser-search-engine-modified") {
-      aEngine.QueryInterface(Components.interfaces.nsISearchEngine);
-      switch (aVerb) {
-      case "engine-added":
-        gEngineView._engineStore.addEngine(aEngine);
-        gEngineView.rowCountChanged(gEngineView.lastIndex, 1);
-        gSearchPane.buildDefaultEngineDropDown();
-        break;
-      case "engine-changed":
-        gEngineView._engineStore.reloadIcons();
-        gEngineView.invalidate();
-        break;
-      case "engine-removed":
-      case "engine-current":
-      case "engine-default":
-        // Not relevant
-        break;
-      }
-    }
-  },
-
-  onTreeSelect: function() {
-    document.getElementById("removeEngineButton").disabled =
-      gEngineView.selectedIndex == -1 || gEngineView.lastIndex == 0;
-  },
-
-  onTreeKeyPress: function(aEvent) {
-    let index = gEngineView.selectedIndex;
-    let tree = document.getElementById("engineList");
-    if (tree.hasAttribute("editing"))
-      return;
-
-    if (aEvent.charCode == KeyEvent.DOM_VK_SPACE) {
-      // Space toggles the checkbox.
-      let newValue = !gEngineView._engineStore.engines[index].shown;
-      gEngineView.setCellValue(index, tree.columns.getFirstColumn(),
-                               newValue.toString());
-    }
-    else {
-      let isMac = Services.appinfo.OS == "Darwin";
-      if ((isMac && aEvent.keyCode == KeyEvent.DOM_VK_RETURN) ||
-          (!isMac && aEvent.keyCode == KeyEvent.DOM_VK_F2))
-        tree.startEditing(index, tree.columns.getLastColumn());
-    }
-  },
-
-  onRestoreDefaults: function() {
-    let num = gEngineView._engineStore.restoreDefaultEngines();
-    gEngineView.rowCountChanged(0, num);
-    gEngineView.invalidate();
-  },
-
-  showRestoreDefaults: function(aEnable) {
-    document.getElementById("restoreDefaultSearchEngines").disabled = !aEnable;
-  },
-
-  remove: function() {
-    gEngineView._engineStore.removeEngine(gEngineView.selectedEngine);
-    let index = gEngineView.selectedIndex;
-    gEngineView.rowCountChanged(index, -1);
-    gEngineView.invalidate();
-    gEngineView.selection.select(Math.min(index, gEngineView.lastIndex));
-    gEngineView.ensureRowIsVisible(gEngineView.currentIndex);
-    document.getElementById("engineList").focus();
-  },
-
-  editKeyword: Task.async(function* (aEngine, aNewKeyword) {
-    if (aNewKeyword) {
-      let eduplicate = false;
-      let dupName = "";
-
-      // Check for duplicates in Places keywords.
-      let bduplicate = !!(yield PlacesUtils.keywords.fetch(aNewKeyword));
-
-      // Check for duplicates in changes we haven't committed yet
-      let engines = gEngineView._engineStore.engines;
-      for each (let engine in engines) {
-        if (engine.alias == aNewKeyword &&
-            engine.name != aEngine.name) {
-          eduplicate = true;
-          dupName = engine.name;
-          break;
-        }
-      }
-
-      // Notify the user if they have chosen an existing engine/bookmark keyword
-      if (eduplicate || bduplicate) {
-        let strings = document.getElementById("engineManagerBundle");
-        let dtitle = strings.getString("duplicateTitle");
-        let bmsg = strings.getString("duplicateBookmarkMsg");
-        let emsg = strings.getFormattedString("duplicateEngineMsg", [dupName]);
-
-        Services.prompt.alert(window, dtitle, eduplicate ? emsg : bmsg);
-        return false;
-      }
-    }
-
-    gEngineView._engineStore.changeEngine(aEngine, "alias", aNewKeyword);
-    gEngineView.invalidate();
-    return true;
-  }),
-
-  saveOneClickEnginesList: function () {
-    let hiddenList = [];
-    for (let engine of gEngineView._engineStore.engines) {
-      if (!engine.shown)
-        hiddenList.push(engine.name);
-    }
-    document.getElementById("browser.search.hiddenOneOffs").value =
-      hiddenList.join(",");
-  },
-
-  setDefaultEngine: function () {
-    if (document.documentElement.instantApply) {
-      Services.search.currentEngine =
-        document.getElementById("defaultEngine").selectedItem.engine;
-    }
-  },
-
-  loadAddEngines: function () {
-    window.opener.BrowserSearch.loadAddEngines();
-    window.document.documentElement.acceptDialog();
-  }
-};
-
-function onDragEngineStart(event) {
-  var selectedIndex = gEngineView.selectedIndex;
-  var tree = document.getElementById("engineList");
-  var row = { }, col = { }, child = { };
-  tree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, child);
-  if (selectedIndex >= 0 && !gEngineView.isCheckBox(row.value, col.value)) {
-    event.dataTransfer.setData(ENGINE_FLAVOR, selectedIndex.toString());
-    event.dataTransfer.effectAllowed = "move";
-  }
-}
-
-// "Operation" objects
-function EngineMoveOp(aEngineClone, aNewIndex) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineMoveOp!");
-  this._engine = aEngineClone.originalEngine;
-  this._newIndex = aNewIndex;
-}
-EngineMoveOp.prototype = {
-  _engine: null,
-  _newIndex: null,
-  commit: function EMO_commit() {
-    Services.search.moveEngine(this._engine, this._newIndex);
-  }
-};
-
-function EngineRemoveOp(aEngineClone) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineRemoveOp!");
-  this._engine = aEngineClone.originalEngine;
-}
-EngineRemoveOp.prototype = {
-  _engine: null,
-  commit: function ERO_commit() {
-    Services.search.removeEngine(this._engine);
-  }
-};
-
-function EngineUnhideOp(aEngineClone, aNewIndex) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineUnhideOp!");
-  this._engine = aEngineClone.originalEngine;
-  this._newIndex = aNewIndex;
-}
-EngineUnhideOp.prototype = {
-  _engine: null,
-  _newIndex: null,
-  commit: function EUO_commit() {
-    this._engine.hidden = false;
-    Services.search.moveEngine(this._engine, this._newIndex);
-  }
-};
-
-function EngineChangeOp(aEngineClone, aProp, aValue) {
-  if (!aEngineClone)
-    throw new Error("bad args to new EngineChangeOp!");
-
-  this._engine = aEngineClone.originalEngine;
-  this._prop = aProp;
-  this._newValue = aValue;
-}
-EngineChangeOp.prototype = {
-  _engine: null,
-  _prop: null,
-  _newValue: null,
-  commit: function ECO_commit() {
-    this._engine[this._prop] = this._newValue;
-  }
-};
-
-function EngineStore() {
-  let pref = document.getElementById("browser.search.hiddenOneOffs").value;
-  this.hiddenList = pref ? pref.split(",") : [];
-
-  this._engines = Services.search.getVisibleEngines().map(this._cloneEngine, this);
-  this._defaultEngines = Services.search.getDefaultEngines().map(this._cloneEngine, this);
-
-  if (document.documentElement.instantApply) {
-    this._ops = {
-      push: function(op) { op.commit(); }
-    };
-  }
-  else {
-    this._ops = [];
-    document.documentElement.addEventListener("beforeaccept", () => {
-      gEngineView._engineStore.commit();
-    });
-  }
-
-  // check if we need to disable the restore defaults button
-  var someHidden = this._defaultEngines.some(function (e) e.hidden);
-  gSearchPane.showRestoreDefaults(someHidden);
-}
-EngineStore.prototype = {
-  _engines: null,
-  _defaultEngines: null,
-  _ops: null,
-
-  get engines() {
-    return this._engines;
-  },
-  set engines(val) {
-    this._engines = val;
-    return val;
-  },
-
-  _getIndexForEngine: function ES_getIndexForEngine(aEngine) {
-    return this._engines.indexOf(aEngine);
-  },
-
-  _getEngineByName: function ES_getEngineByName(aName) {
-    for each (var engine in this._engines)
-      if (engine.name == aName)
-        return engine;
-
-    return null;
-  },
-
-  _cloneEngine: function ES_cloneEngine(aEngine) {
-    var clonedObj={};
-    for (var i in aEngine)
-      clonedObj[i] = aEngine[i];
-    clonedObj.originalEngine = aEngine;
-    clonedObj.shown = this.hiddenList.indexOf(clonedObj.name) == -1;
-    return clonedObj;
-  },
-
-  // Callback for Array's some(). A thisObj must be passed to some()
-  _isSameEngine: function ES_isSameEngine(aEngineClone) {
-    return aEngineClone.originalEngine == this.originalEngine;
-  },
-
-  commit: function ES_commit() {
-    for (op of this._ops)
-      op.commit();
-
-    Services.search.currentEngine =
-      document.getElementById("defaultEngine").selectedItem.engine;
-  },
-
-  addEngine: function ES_addEngine(aEngine) {
-    this._engines.push(this._cloneEngine(aEngine));
-  },
-
-  moveEngine: function ES_moveEngine(aEngine, aNewIndex) {
-    if (aNewIndex < 0 || aNewIndex > this._engines.length - 1)
-      throw new Error("ES_moveEngine: invalid aNewIndex!");
-    var index = this._getIndexForEngine(aEngine);
-    if (index == -1)
-      throw new Error("ES_moveEngine: invalid engine?");
-
-    if (index == aNewIndex)
-      return; // nothing to do
-
-    // Move the engine in our internal store
-    var removedEngine = this._engines.splice(index, 1)[0];
-    this._engines.splice(aNewIndex, 0, removedEngine);
-
-    this._ops.push(new EngineMoveOp(aEngine, aNewIndex));
-  },
-
-  removeEngine: function ES_removeEngine(aEngine) {
-    var index = this._getIndexForEngine(aEngine);
-    if (index == -1)
-      throw new Error("invalid engine?");
-
-    this._engines.splice(index, 1);
-    this._ops.push(new EngineRemoveOp(aEngine));
-    if (this._defaultEngines.some(this._isSameEngine, aEngine))
-      gSearchPane.showRestoreDefaults(true);
-    gSearchPane.buildDefaultEngineDropDown();
-  },
-
-  restoreDefaultEngines: function ES_restoreDefaultEngines() {
-    var added = 0;
-
-    for (var i = 0; i < this._defaultEngines.length; ++i) {
-      var e = this._defaultEngines[i];
-
-      // If the engine is already in the list, just move it.
-      if (this._engines.some(this._isSameEngine, e)) {
-        this.moveEngine(this._getEngineByName(e.name), i);
-      } else {
-        // Otherwise, add it back to our internal store
-
-        // The search service removes the alias when an engine is hidden,
-        // so clear any alias we may have cached before unhiding the engine.
-        e.alias = "";
-
-        this._engines.splice(i, 0, e);
-        this._ops.push(new EngineUnhideOp(e, i));
-        added++;
-      }
-    }
-    gSearchPane.showRestoreDefaults(false);
-    gSearchPane.buildDefaultEngineDropDown();
-    return added;
-  },
-
-  changeEngine: function ES_changeEngine(aEngine, aProp, aNewValue) {
-    var index = this._getIndexForEngine(aEngine);
-    if (index == -1)
-      throw new Error("invalid engine?");
-
-    this._engines[index][aProp] = aNewValue;
-    this._ops.push(new EngineChangeOp(aEngine, aProp, aNewValue));
-  },
-
-  reloadIcons: function ES_reloadIcons() {
-    this._engines.forEach(function (e) {
-      e.uri = e.originalEngine.uri;
-    });
-  }
-};
-
-function EngineView(aEngineStore) {
-  this._engineStore = aEngineStore;
-}
-EngineView.prototype = {
-  _engineStore: null,
-  tree: null,
-
-  get lastIndex() {
-    return this.rowCount - 1;
-  },
-  get selectedIndex() {
-    var seln = this.selection;
-    if (seln.getRangeCount() > 0) {
-      var min = {};
-      seln.getRangeAt(0, min, {});
-      return min.value;
-    }
-    return -1;
-  },
-  get selectedEngine() {
-    return this._engineStore.engines[this.selectedIndex];
-  },
-
-  // Helpers
-  rowCountChanged: function (index, count) {
-    this.tree.rowCountChanged(index, count);
-  },
-
-  invalidate: function () {
-    this.tree.invalidate();
-  },
-
-  ensureRowIsVisible: function (index) {
-    this.tree.ensureRowIsVisible(index);
-  },
-
-  getSourceIndexFromDrag: function (dataTransfer) {
-    return parseInt(dataTransfer.getData(ENGINE_FLAVOR));
-  },
-
-  isCheckBox: function(index, column) {
-    return column.id == "engineShown";
-  },
-
-  // nsITreeView
-  get rowCount() {
-    return this._engineStore.engines.length;
-  },
-
-  getImageSrc: function(index, column) {
-    if (column.id == "engineName" && this._engineStore.engines[index].iconURI) {
-      let uri = this._engineStore.engines[index].iconURI.spec;
-      return PlacesUtils.getImageURLForResolution(window, uri);
-    }
-    return "";
-  },
-
-  getCellText: function(index, column) {
-    if (column.id == "engineName")
-      return this._engineStore.engines[index].name;
-    else if (column.id == "engineKeyword")
-      return this._engineStore.engines[index].alias;
-    return "";
-  },
-
-  setTree: function(tree) {
-    this.tree = tree;
-  },
-
-  canDrop: function(targetIndex, orientation, dataTransfer) {
-    var sourceIndex = this.getSourceIndexFromDrag(dataTransfer);
-    return (sourceIndex != -1 &&
-            sourceIndex != targetIndex &&
-            sourceIndex != targetIndex + orientation);
-  },
-
-  drop: function(dropIndex, orientation, dataTransfer) {
-    var sourceIndex = this.getSourceIndexFromDrag(dataTransfer);
-    var sourceEngine = this._engineStore.engines[sourceIndex];
-
-    const nsITreeView = Components.interfaces.nsITreeView;
-    if (dropIndex > sourceIndex) {
-      if (orientation == nsITreeView.DROP_BEFORE)
-        dropIndex--;
-    } else {
-      if (orientation == nsITreeView.DROP_AFTER)
-        dropIndex++;
-    }
-
-    this._engineStore.moveEngine(sourceEngine, dropIndex);
-    gSearchPane.showRestoreDefaults(true);
-    gSearchPane.buildDefaultEngineDropDown();
-
-    // Redraw, and adjust selection
-    this.invalidate();
-    this.selection.select(dropIndex);
-  },
-
-  selection: null,
-  getRowProperties: function(index) { return ""; },
-  getCellProperties: function(index, column) { return ""; },
-  getColumnProperties: function(column) { return ""; },
-  isContainer: function(index) { return false; },
-  isContainerOpen: function(index) { return false; },
-  isContainerEmpty: function(index) { return false; },
-  isSeparator: function(index) { return false; },
-  isSorted: function(index) { return false; },
-  getParentIndex: function(index) { return -1; },
-  hasNextSibling: function(parentIndex, index) { return false; },
-  getLevel: function(index) { return 0; },
-  getProgressMode: function(index, column) { },
-  getCellValue: function(index, column) {
-    if (column.id == "engineShown")
-      return this._engineStore.engines[index].shown;
-    return undefined;
-  },
-  toggleOpenState: function(index) { },
-  cycleHeader: function(column) { },
-  selectionChanged: function() { },
-  cycleCell: function(row, column) { },
-  isEditable: function(index, column) { return column.id != "engineName"; },
-  isSelectable: function(index, column) { return false; },
-  setCellValue: function(index, column, value) {
-    if (column.id == "engineShown") {
-      this._engineStore.engines[index].shown = value == "true";
-      gEngineView.invalidate();
-      gSearchPane.saveOneClickEnginesList();
-    }
-  },
-  setCellText: function(index, column, value) {
-    if (column.id == "engineKeyword") {
-      gSearchPane.editKeyword(this._engineStore.engines[index], value)
-                 .then(valid => {
-        if (!valid)
-          document.getElementById("engineList").startEditing(index, column);
-      });
-    }
-  },
-  performAction: function(action) { },
-  performActionOnRow: function(action, index) { },
-  performActionOnCell: function(action, index, column) { }
-};
deleted file mode 100644
--- a/browser/components/preferences/search.xul
+++ /dev/null
@@ -1,93 +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 overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % searchDTD SYSTEM "chrome://browser/locale/preferences/search.dtd">
-  %brandDTD;
-  %searchDTD;
-]>
-
-<overlay id="SearchPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <prefpane id="paneSearch" helpTopic="prefs-search"
-            onpaneload="gSearchPane.init();">
-
-    <preferences id="searchPreferences">
-
-      <!-- Suggest -->
-      <preference id="browser.search.suggest.enabled"
-                  name="browser.search.suggest.enabled"
-                  type="bool"/>
-
-      <!-- One off providers -->
-      <preference id="browser.search.hiddenOneOffs"
-                  name="browser.search.hiddenOneOffs"
-                  type="unichar"/>
-
-    </preferences>
-
-    <script type="application/javascript" src="chrome://browser/content/preferences/search.js"/>
-
-    <stringbundle id="engineManagerBundle" src="chrome://browser/locale/engineManager.properties"/>
-
-    <!-- Default Search Engine -->
-    <groupbox id="defaultEngineGroup" align="start">
-      <caption label="&defaultSearchEngine.label;"/>
-      <label>&chooseYourDefaultSearchEngine.label;</label>
-      <menulist id="defaultEngine" oncommand="gSearchPane.setDefaultEngine();">
-        <menupopup/>
-      </menulist>
-      <checkbox id="suggestionsInSearchFieldsCheckbox"
-                label="&provideSearchSuggestions.label;"
-                accesskey="&provideSearchSuggestions.accesskey;"
-                preference="browser.search.suggest.enabled"/>
-    </groupbox>
-
-    <groupbox id="oneClickSearchProvidersGroup">
-      <caption label="&oneClickSearchEngines.label;"/>
-      <label>&chooseWhichOneToDisplay.label;</label>
-
-      <tree id="engineList" flex="1" rows="8" hidecolumnpicker="true" editable="true"
-            seltype="single" onselect="gSearchPane.onTreeSelect();"
-            onkeypress="gSearchPane.onTreeKeyPress(event);">
-        <treechildren id="engineChildren" flex="1"
-                      ondragstart="onDragEngineStart(event);"/>
-        <treecols>
-          <treecol id="engineShown" type="checkbox" style="min-width: 26px;" editable="true"
-                   sortable="false"/>
-          <treecol id="engineName" flex="4" label="&engineNameColumn.label;" sortable="false"/>
-          <treecol id="engineKeyword" flex="1" label="&engineKeywordColumn.label;" editable="true"
-                   sortable="false"/>
-        </treecols>
-      </tree>
-
-      <hbox>
-        <button id="restoreDefaultSearchEngines"
-                label="&restoreDefaultSearchEngines.label;"
-                accesskey="&restoreDefaultSearchEngines.accesskey;"
-                oncommand="gSearchPane.onRestoreDefaults();"/>
-        <spacer flex="1"/>
-        <button id="removeEngineButton"
-                label="&removeEngine.label;"
-                accesskey="&removeEngine.accesskey;"
-                disabled="true"
-                oncommand="gSearchPane.remove();"/>
-      </hbox>
-
-      <separator class="thin"/>
-
-      <hbox pack="start">
-        <label id="addEngines" class="text-link" value="&addMoreSearchEngines.label;"
-               onclick="if (event.button == 0) { gSearchPane.loadAddEngines(); }"/>
-      </hbox>
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/browser/components/preferences/security.js
+++ /dev/null
@@ -1,227 +0,0 @@
-/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
-/* 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/. */
-
-Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
-
-var gSecurityPane = {
-  _pane: null,
-
-  /**
-   * Initializes master password UI.
-   */
-  init: function ()
-  {
-    this._pane = document.getElementById("paneSecurity");
-    this._initMasterPasswordUI();
-  },
-
-  // ADD-ONS
-
-  /*
-   * Preferences:
-   *
-   * xpinstall.whitelist.required
-   * - true if a site must be added to a site whitelist before extensions
-   *   provided by the site may be installed from it, false if the extension
-   *   may be directly installed after a confirmation dialog
-   */
-
-  /**
-   * Enables/disables the add-ons Exceptions button depending on whether
-   * or not add-on installation warnings are displayed.
-   */
-  readWarnAddonInstall: function ()
-  {
-    var warn = document.getElementById("xpinstall.whitelist.required");
-    var exceptions = document.getElementById("addonExceptions");
-
-    exceptions.disabled = !warn.value;
-
-    // don't override the preference value
-    return undefined;
-  },
-
-  /**
-   * Displays the exceptions lists for add-on installation warnings.
-   */
-  showAddonExceptions: function ()
-  {
-    var bundlePrefs = document.getElementById("bundlePreferences");
-
-    var params = this._addonParams;
-    if (!params.windowTitle || !params.introText) {
-      params.windowTitle = bundlePrefs.getString("addons_permissions_title");
-      params.introText = bundlePrefs.getString("addonspermissionstext");
-    }
-
-    document.documentElement.openWindow("Browser:Permissions",
-                                        "chrome://browser/content/preferences/permissions.xul",
-                                        "", params);
-  },
-
-  /**
-   * Parameters for the add-on install permissions dialog.
-   */
-  _addonParams:
-    {
-      blockVisible: false,
-      sessionVisible: false,
-      allowVisible: true,
-      prefilledHost: "",
-      permissionType: "install"
-    },
-
-  // PASSWORDS
-
-  /*
-   * Preferences:
-   *
-   * signon.rememberSignons
-   * - true if passwords are remembered, false otherwise
-   */
-
-  /**
-   * Enables/disables the Exceptions button used to configure sites where
-   * passwords are never saved. When browser is set to start in Private
-   * Browsing mode, the "Remember passwords" UI is useless, so we disable it.
-   */
-  readSavePasswords: function ()
-  {
-    var pref = document.getElementById("signon.rememberSignons");
-    var excepts = document.getElementById("passwordExceptions");
-
-    if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
-      document.getElementById("savePasswords").disabled = true;
-      excepts.disabled = true;
-      return false;
-    } else {
-      excepts.disabled = !pref.value;
-      // don't override pref value in UI
-      return undefined;
-    }
-  },
-
-  /**
-   * Displays a dialog in which the user can view and modify the list of sites
-   * where passwords are never saved.
-   */
-  showPasswordExceptions: function ()
-  {
-    document.documentElement.openWindow("Toolkit:PasswordManagerExceptions",
-                                        "chrome://passwordmgr/content/passwordManagerExceptions.xul",
-                                        "resizable", null);
-  },
-
-  /**
-   * Initializes master password UI: the "use master password" checkbox, selects
-   * the master password button to show, and enables/disables it as necessary.
-   * The master password is controlled by various bits of NSS functionality, so
-   * the UI for it can't be controlled by the normal preference bindings.
-   */
-  _initMasterPasswordUI: function ()
-  {
-    var noMP = !this._masterPasswordSet();
-
-    var button = document.getElementById("changeMasterPassword");
-    button.disabled = noMP;
-
-    var checkbox = document.getElementById("useMasterPassword");
-    checkbox.checked = !noMP;
-  },
-
-  /**
-   * Returns true if the user has a master password set and false otherwise.
-   */
-  _masterPasswordSet: function ()
-  {
-    const Cc = Components.classes, Ci = Components.interfaces;
-    var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
-                   getService(Ci.nsIPKCS11ModuleDB);
-    var slot = secmodDB.findSlotByName("");
-    if (slot) {
-      var status = slot.status;
-      var hasMP = status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED &&
-                  status != Ci.nsIPKCS11Slot.SLOT_READY;
-      return hasMP;
-    } else {
-      // XXX I have no bloody idea what this means
-      return false;
-    }
-  },
-
-  /**
-   * Enables/disables the master password button depending on the state of the
-   * "use master password" checkbox, and prompts for master password removal if
-   * one is set.
-   */
-  updateMasterPasswordButton: function ()
-  {
-    var checkbox = document.getElementById("useMasterPassword");
-    var button = document.getElementById("changeMasterPassword");
-    button.disabled = !checkbox.checked;
-
-    // unchecking the checkbox should try to immediately remove the master
-    // password, because it's impossible to non-destructively remove the master
-    // password used to encrypt all the passwords without providing it (by
-    // design), and it would be extremely odd to pop up that dialog when the
-    // user closes the prefwindow and saves his settings
-    if (!checkbox.checked)
-      this._removeMasterPassword();
-    else
-      this.changeMasterPassword();
-
-    this._initMasterPasswordUI();
-
-    // We might want to hide sync's password engine.
-    gSyncPane.updateWeavePrefs();
-  },
-
-  /**
-   * Displays the "remove master password" dialog to allow the user to remove
-   * the current master password.  When the dialog is dismissed, master password
-   * UI is automatically updated.
-   */
-  _removeMasterPassword: function ()
-  {
-    const Cc = Components.classes, Ci = Components.interfaces;
-    var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"].
-                   getService(Ci.nsIPKCS11ModuleDB);
-    if (secmodDB.isFIPSEnabled) {
-      var promptService = Cc["@mozilla.org/embedcomp/prompt-service;1"].
-                          getService(Ci.nsIPromptService);
-      var bundle = document.getElementById("bundlePreferences");
-      promptService.alert(window,
-                          bundle.getString("pw_change_failed_title"),
-                          bundle.getString("pw_change2empty_in_fips_mode"));
-    }
-    else {
-      document.documentElement.openSubDialog("chrome://mozapps/content/preferences/removemp.xul",
-                                             "", null);
-    }
-    this._initMasterPasswordUI();
-  },
-
-  /**
-   * Displays a dialog in which the master password may be changed.
-   */
-  changeMasterPassword: function ()
-  {
-    document.documentElement.openSubDialog("chrome://mozapps/content/preferences/changemp.xul",
-                                           "", null);
-    this._initMasterPasswordUI();
-  },
-
-  /**
-   * Shows the sites where the user has saved passwords and the associated login
-   * information.
-   */
-  showPasswords: function ()
-  {
-    document.documentElement.openWindow("Toolkit:PasswordManager",
-                                        "chrome://passwordmgr/content/passwordManager.xul",
-                                        "resizable", null);
-  }
-
-};
deleted file mode 100644
--- a/browser/components/preferences/security.xul
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
-<!-- 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 overlay [
-  <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-  <!ENTITY % securityDTD SYSTEM "chrome://browser/locale/preferences/security.dtd">
-  %brandDTD;
-  %securityDTD;
-]>
-
-<overlay id="SecurityPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneSecurity"
-            onpaneload="gSecurityPane.init();"
-            helpTopic="prefs-security">
-
-    <preferences id="securityPreferences">
-      <!-- XXX buttons -->
-      <preference id="pref.privacy.disable_button.view_passwords"
-                  name="pref.privacy.disable_button.view_passwords"
-                  type="bool"/>
-      <preference id="pref.privacy.disable_button.view_passwords_exceptions"
-                  name="pref.privacy.disable_button.view_passwords_exceptions"
-                  type="bool"/>
-
-      <!-- Add-ons, malware, phishing -->
-      <preference id="xpinstall.whitelist.required"
-                  name="xpinstall.whitelist.required"
-                  type="bool"/>
-      <preference id="browser.safebrowsing.malware.enabled"
-                  name="browser.safebrowsing.malware.enabled"
-                  type="bool"/>
-      <preference id="browser.safebrowsing.enabled"
-                  name="browser.safebrowsing.enabled"
-                  type="bool"/>
-
-      <!-- Passwords -->
-      <preference id="signon.rememberSignons" name="signon.rememberSignons" type="bool"/>
-
-    </preferences>
-    
-    <script type="application/javascript" src="chrome://browser/content/preferences/security.js"/>
-    
-    <stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
-
-    <!-- addons, forgery (phishing) UI -->
-    <groupbox id="addonsPhishingGroup">
-      <hbox id="addonInstallBox">
-        <checkbox id="warnAddonInstall" flex="1"
-                  label="&warnAddonInstall.label;"
-                  accesskey="&warnAddonInstall.accesskey;"
-                  preference="xpinstall.whitelist.required"
-                  onsyncfrompreference="return gSecurityPane.readWarnAddonInstall();"/>
-        <button id="addonExceptions"
-                label="&addonExceptions.label;"
-                accesskey="&addonExceptions.accesskey;"
-                oncommand="gSecurityPane.showAddonExceptions();"/>
-      </hbox>
-
-      <separator class="thin"/>
-      <checkbox id="blockAttackSites"
-                label="&blockAttackSites.label;"
-                accesskey="&blockAttackSites.accesskey;"
-                preference="browser.safebrowsing.malware.enabled" />
-      <checkbox id="blockWebForgeries"
-                label="&blockWebForgeries.label;"
-                accesskey="&blockWebForgeries.accesskey;"
-                preference="browser.safebrowsing.enabled" />
-    </groupbox>
-
-    <!-- Passwords -->
-    <groupbox id="passwordsGroup" orient="vertical">
-      <caption label="&passwords.label;"/>
-
-      <hbox id="savePasswordsBox">
-        <checkbox id="savePasswords" flex="1"
-                  label="&rememberPasswords.label;" accesskey="&rememberPasswords.accesskey;"
-                  preference="signon.rememberSignons"
-                  onsyncfrompreference="return gSecurityPane.readSavePasswords();"/>
-        <button id="passwordExceptions"
-                label="&passwordExceptions.label;"
-                accesskey="&passwordExceptions.accesskey;"
-                oncommand="gSecurityPane.showPasswordExceptions();"
-                preference="pref.privacy.disable_button.view_passwords_exceptions"/>
-      </hbox>
-      <hbox id="masterPasswordBox">
-        <checkbox id="useMasterPassword" flex="1"
-                  oncommand="gSecurityPane.updateMasterPasswordButton();"
-                  label="&useMasterPassword.label;"
-                  accesskey="&useMasterPassword.accesskey;"/>
-        <button id="changeMasterPassword"
-                label="&changeMasterPassword.label;"
-                accesskey="&changeMasterPassword.accesskey;"
-                oncommand="gSecurityPane.changeMasterPassword();"/>
-      </hbox>
-
-      <hbox id="showPasswordsBox">
-        <spacer flex="1"/>
-        <button id="showPasswords"
-                label="&savedPasswords.label;" accesskey="&savedPasswords.accesskey;"
-                oncommand="gSecurityPane.showPasswords();"
-                preference="pref.privacy.disable_button.view_passwords"/>
-      </hbox>
-    </groupbox>
-
-  </prefpane>
-
-</overlay>
deleted file mode 100644
--- a/browser/components/preferences/sync.js
+++ /dev/null
@@ -1,513 +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/. */
-
-Components.utils.import("resource://services-sync/main.js");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-XPCOMUtils.defineLazyGetter(this, "FxAccountsCommon", function () {
-  return Components.utils.import("resource://gre/modules/FxAccountsCommon.js", {});
-});
-
-XPCOMUtils.defineLazyModuleGetter(this, "fxAccounts",
-  "resource://gre/modules/FxAccounts.jsm");
-
-XPCOMUtils.defineLazyModuleGetter(this, "fxaMigrator",
-  "resource://services-sync/FxaMigrator.jsm");
-
-const PAGE_NO_ACCOUNT = 0;
-const PAGE_HAS_ACCOUNT = 1;
-const PAGE_NEEDS_UPDATE = 2;
-const PAGE_PLEASE_WAIT = 3;
-const FXA_PAGE_LOGGED_OUT = 4;
-const FXA_PAGE_LOGGED_IN = 5;
-
-// Indexes into the "login status" deck.
-// We are in a successful verified state - everything should work!
-const FXA_LOGIN_VERIFIED = 0;
-// We have logged in to an unverified account.
-const FXA_LOGIN_UNVERIFIED = 1;
-// We are logged in locally, but the server rejected our credentials.
-const FXA_LOGIN_FAILED = 2;
-
-let gSyncPane = {
-  prefArray: ["engine.bookmarks", "engine.passwords", "engine.prefs",
-              "engine.tabs", "engine.history"],
-
-  get page() {
-    return document.getElementById("weavePrefsDeck").selectedIndex;
-  },
-
-  set page(val) {
-    document.getElementById("weavePrefsDeck").selectedIndex = val;
-  },
-
-  get _usingCustomServer() {
-    return Weave.Svc.Prefs.isSet("serverURL");
-  },
-
-  needsUpdate: function () {
-    this.page = PAGE_NEEDS_UPDATE;
-    let label = document.getElementById("loginError");
-    label.value = Weave.Utils.getErrorString(Weave.Status.login);
-    label.className = "error";
-  },
-
-  init: function () {
-    // We use a preference observer to notice changes to the Sync engines
-    // enabled state - other techniques are problematic due to the window
-    // being instant-apply on Mac etc but modal on Windows.
-    let prefObserver = () => {
-      // If all our Sync engines are disabled we flip the "master" Sync-enabled pref.
-      let prefElts = document.querySelectorAll("#syncEnginePrefs > preference");
-      let syncEnabled = false;
-      for (let elt of prefElts) {
-        if (elt.name.startsWith("services.sync.") && elt.value) {
-          syncEnabled = true;
-          break;
-        }
-      }
-      Services.prefs.setBoolPref("services.sync.enabled", syncEnabled);
-    }
-    Services.prefs.addObserver("services.sync.engine.", prefObserver, false);
-    window.addEventListener("unload", () => {
-      Services.prefs.removeObserver("services.sync.engine.", prefObserver);
-    }, false);
-
-    // If the Service hasn't finished initializing, wait for it.
-    let xps = Components.classes["@mozilla.org/weave/service;1"]
-                                .getService(Components.interfaces.nsISupports)
-                                .wrappedJSObject;
-
-    if (xps.ready) {
-      this._init();
-      return;
-    }
-
-    // it may take some time before we can determine what provider to use
-    // and the state of that provider, so show the "please wait" page.
-    this.page = PAGE_PLEASE_WAIT;
-
-    let onUnload = function () {
-      window.removeEventListener("unload", onUnload, false);
-      try {
-        Services.obs.removeObserver(onReady, "weave:service:ready");
-      } catch (e) {}
-    };
-
-    let onReady = function () {
-      Services.obs.removeObserver(onReady, "weave:service:ready");
-      window.removeEventListener("unload", onUnload, false);
-      this._init();
-    }.bind(this);
-
-    Services.obs.addObserver(onReady, "weave:service:ready", false);
-    window.addEventListener("unload", onUnload, false);
-
-    xps.ensureLoaded();
-  },
-
-  _init: function () {
-    let topics = ["weave:service:login:error",
-                  "weave:service:login:finish",
-                  "weave:service:start-over:finish",
-                  "weave:service:setup-complete",
-                  "weave:service:logout:finish",
-                  FxAccountsCommon.ONVERIFIED_NOTIFICATION];
-    let migrateTopic = "fxa-migration:state-changed";
-
-    // Add the observers now and remove them on unload
-    //XXXzpao This should use Services.obs.* but Weave's Obs does nice handling
-    //        of `this`. Fix in a followup. (bug 583347)
-    topics.forEach(function (topic) {
-      Weave.Svc.Obs.add(topic, this.updateWeavePrefs, this);
-    }, this);
-    // The FxA migration observer is a special case.
-    Weave.Svc.Obs.add(migrateTopic, this.updateMigrationState, this);
-
-    window.addEventListener("unload", function() {
-      topics.forEach(topic => {
-        Weave.Svc.Obs.remove(topic, this.updateWeavePrefs, this);
-      });
-      Weave.Svc.Obs.remove(migrateTopic, this.updateMigrationState, this);
-    }.bind(this), false);
-
-    XPCOMUtils.defineLazyGetter(this, '_stringBundle', () => {
-      return Services.strings.createBundle("chrome://browser/locale/preferences/preferences.properties");
-    });
-
-    XPCOMUtils.defineLazyGetter(this, '_accountsStringBundle', () => {
-      return Services.strings.createBundle("chrome://browser/locale/accounts.properties");
-    });
-
-    this.updateWeavePrefs();
-  },
-
-  updateWeavePrefs: function () {
-    // ask the migration module to broadcast its current state (and nothing will
-    // happen if it's not loaded - which is good, as that means no migration
-    // is pending/necessary) - we don't want to suck that module in just to
-    // find there's nothing to do.
-    Services.obs.notifyObservers(null, "fxa-migration:state-request", null);
-
-    let service = Components.classes["@mozilla.org/weave/service;1"]
-                  .getService(Components.interfaces.nsISupports)
-                  .wrappedJSObject;
-    // service.fxAccountsEnabled is false iff sync is already configured for
-    // the legacy provider.
-    if (service.fxAccountsEnabled) {
-      // determine the fxa status...
-      this.page = PAGE_PLEASE_WAIT;
-      fxAccounts.getSignedInUser().then(data => {
-        if (!data) {
-          this.page = FXA_PAGE_LOGGED_OUT;
-          return;
-        }
-        this.page = FXA_PAGE_LOGGED_IN;
-        // We are logged in locally, but maybe we are in a state where the
-        // server rejected our credentials (eg, password changed on the server)
-        let fxaLoginStatus = document.getElementById("fxaLoginStatus");
-        let enginesListDisabled;
-        // Not Verfied implies login error state, so check that first.
-        if (!data.verified) {
-          fxaLoginStatus.selectedIndex = FXA_LOGIN_UNVERIFIED;
-          enginesListDisabled = true;
-        // So we think we are logged in, so login problems are next.
-        // (Although if the Sync identity manager is still initializing, we
-        // ignore login errors and assume all will eventually be good.)
-        // LOGIN_FAILED_LOGIN_REJECTED explicitly means "you must log back in".
-        // All other login failures are assumed to be transient and should go
-        // away by themselves, so aren't reflected here.
-        } else if (Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED) {
-          fxaLoginStatus.selectedIndex = FXA_LOGIN_FAILED;
-          enginesListDisabled = true;
-        // Else we must be golden (or in an error state we expect to magically
-        // resolve itself)
-        } else {
-          fxaLoginStatus.selectedIndex = FXA_LOGIN_VERIFIED;
-          enginesListDisabled = false;
-        }
-        document.getElementById("fxaEmailAddress1").textContent = data.email;
-        document.getElementById("fxaEmailAddress2").textContent = data.email;
-        document.getElementById("fxaEmailAddress3").textContent = data.email;
-        document.getElementById("fxaSyncComputerName").value = Weave.Service.clientsEngine.localName;
-        let engines = document.getElementById("fxaSyncEngines")
-        for (let checkbox of engines.querySelectorAll("checkbox")) {
-          checkbox.disabled = enginesListDisabled;
-        }
-      });
-    // If fxAccountEnabled is false and we are in a "not configured" state,
-    // then fxAccounts is probably fully disabled rather than just unconfigured,
-    // so handle this case.  This block can be removed once we remove support
-    // for fxAccounts being disabled.
-    } else if (Weave.Status.service == Weave.CLIENT_NOT_CONFIGURED ||
-               Weave.Svc.Prefs.get("firstSync", "") == "notReady") {
-      this.page = PAGE_NO_ACCOUNT;
-    // else: sync was previously configured for the legacy provider, so we
-    // make the "old" panels available.
-    } else if (Weave.Status.login == Weave.LOGIN_FAILED_INVALID_PASSPHRASE ||
-               Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED) {
-      this.needsUpdate();
-    } else {
-      this.page = PAGE_HAS_ACCOUNT;
-      document.getElementById("accountName").value = Weave.Service.identity.account;
-      document.getElementById("syncComputerName").value = Weave.Service.clientsEngine.localName;
-      document.getElementById("tosPP-normal").hidden = this._usingCustomServer;
-    }
-  },
-
-  updateMigrationState: function(subject, state) {
-    let selIndex;
-    let container = document.getElementById("sync-migration");
-    switch (state) {
-      case fxaMigrator.STATE_USER_FXA: {
-        let sb = this._accountsStringBundle;
-        // There are 2 cases here - no email address means it is an offer on
-        // the first device (so the user is prompted to create an account).
-        // If there is an email address it is the "join the party" flow, so the
-        // user is prompted to sign in with the address they previously used.
-        let email = subject ? subject.QueryInterface(Components.interfaces.nsISupportsString).data : null;
-        let elt = document.getElementById("sync-migrate-upgrade-description");
-        elt.textContent = email ?
-                          sb.formatStringFromName("signInAfterUpgradeOnOtherDevice.description",
-                                                  [email], 1) :
-                          sb.GetStringFromName("needUserLong");
-
-        // The "Learn more" link.
-        if (!email) {
-          let learnMoreLink = document.createElement("label");
-          learnMoreLink.className = "text-link";
-          let { text, href } = fxaMigrator.learnMoreLink;
-          learnMoreLink.setAttribute("value", text);
-          learnMoreLink.href = href;
-          elt.appendChild(learnMoreLink);
-        }
-
-        // The "upgrade" button.
-        let button = document.getElementById("sync-migrate-upgrade");
-        button.setAttribute("label",
-                            sb.GetStringFromName(email
-                                                 ? "signInAfterUpgradeOnOtherDevice.label"
-                                                 : "upgradeToFxA.label"));
-        button.setAttribute("accesskey",
-                            sb.GetStringFromName(email
-                                                 ? "signInAfterUpgradeOnOtherDevice.accessKey"
-                                                 : "upgradeToFxA.accessKey"));
-        // The "unlink" button - this is only shown for first migration
-        button = document.getElementById("sync-migrate-unlink");
-        if (email) {
-          button.hidden = true;
-        } else {
-          button.setAttribute("label", sb.GetStringFromName("unlinkMigration.label"));
-          button.setAttribute("accesskey", sb.GetStringFromName("unlinkMigration.accessKey"));
-        }
-        selIndex = 0;
-        break;
-      }
-      case fxaMigrator.STATE_USER_FXA_VERIFIED: {
-        let sb = this._accountsStringBundle;
-        let email = subject.QueryInterface(Components.interfaces.nsISupportsString).data;
-        let label = sb.formatStringFromName("needVerifiedUserLong", [email], 1);
-        let elt = document.getElementById("sync-migrate-verify-description");
-        elt.textContent = label;
-        // The "resend" button.
-        let button = document.getElementById("sync-migrate-resend");
-        button.setAttribute("label", sb.GetStringFromName("resendVerificationEmail.label"));
-        button.setAttribute("accesskey", sb.GetStringFromName("resendVerificationEmail.accessKey"));
-        // The "forget" button.
-        button = document.getElementById("sync-migrate-forget");
-        button.setAttribute("label", sb.GetStringFromName("forgetMigration.label"));
-        button.setAttribute("accesskey", sb.GetStringFromName("forgetMigration.accessKey"));
-        selIndex = 1;
-        break;
-      }
-      default:
-        if (state) { // |null| is expected, but everything else is not.
-          Cu.reportError("updateMigrationState has unknown state: " + state);
-        }
-        if (!container.hidden) {
-          window.innerHeight -= container.clientHeight;
-          container.hidden = true;
-        }
-        return;
-    }
-    document.getElementById("sync-migration-deck").selectedIndex = selIndex;
-    if (container.hidden) {
-      container.hidden = false;
-      window.innerHeight += container.clientHeight;
-    }
-  },
-
-  startOver: function (showDialog) {
-    if (showDialog) {
-      let flags = Services.prompt.BUTTON_POS_0 * Services.prompt.BUTTON_TITLE_IS_STRING +
-                  Services.prompt.BUTTON_POS_1 * Services.prompt.BUTTON_TITLE_CANCEL + 
-                  Services.prompt.BUTTON_POS_1_DEFAULT;
-      let buttonChoice =
-        Services.prompt.confirmEx(window,
-                                  this._stringBundle.GetStringFromName("syncUnlink.title"),
-                                  this._stringBundle.GetStringFromName("syncUnlink.label"),
-                                  flags,
-                                  this._stringBundle.GetStringFromName("syncUnlinkConfirm.label"),
-                                  null, null, null, {});
-
-      // If the user selects cancel, just bail
-      if (buttonChoice == 1) {
-        return;
-      }
-    }
-
-    Weave.Service.startOver();
-    this.updateWeavePrefs();
-  },
-
-  updatePass: function () {
-    if (Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED) {
-      gSyncUtils.changePassword();
-    } else {
-      gSyncUtils.updatePassphrase();
-    }
-  },
-
-  resetPass: function () {
-    if (Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED) {
-      gSyncUtils.resetPassword();
-    } else {
-      gSyncUtils.resetPassphrase();
-    }
-  },
-
-  /**
-   * Invoke the Sync setup wizard.
-   *
-   * @param wizardType
-   *        Indicates type of wizard to launch:
-   *          null    -- regular set up wizard
-   *          "pair"  -- pair a device first
-   *          "reset" -- reset sync
-   */
-  openSetup: function (wizardType) {
-    let service = Components.classes["@mozilla.org/weave/service;1"]
-                  .getService(Components.interfaces.nsISupports)
-                  .wrappedJSObject;
-
-    if (service.fxAccountsEnabled) {
-      this.openContentInBrowser("about:accounts?entrypoint=preferences", {
-        replaceQueryString: true
-      });
-    } else {
-      let win = Services.wm.getMostRecentWindow("Weave:AccountSetup");
-      if (win) {
-        win.focus();
-      } else {
-        window.openDialog("chrome://browser/content/sync/setup.xul",
-                          "weaveSetup", "centerscreen,chrome,resizable=no",
-                          wizardType);
-      }
-    }
-  },
-
-  openContentInBrowser: function(url, options) {
-    let win = Services.wm.getMostRecentWindow("navigator:browser");
-    if (!win) {
-      // no window to use, so use _openLink to create a new one.  We don't
-      // always use that as it prefers to open a new window rather than use
-      // an existing one.
-      gSyncUtils._openLink(url);
-      return;
-    }
-    win.switchToTabHavingURI(url, true, options);
-    // seeing as we are doing this in a tab we close the prefs dialog.
-    window.close();
-  },
-
-  signUp: function() {
-    this.openContentInBrowser("about:accounts?action=signup&entrypoint=preferences", {
-      replaceQueryString: true
-    });
-  },
-
-  signIn: function() {
-    this.openContentInBrowser("about:accounts?action=signin&entrypoint=preferences", {
-      replaceQueryString: true
-    });
-  },
-
-  reSignIn: function() {
-    this.openContentInBrowser("about:accounts?action=reauth&entrypoint=preferences", {
-      replaceQueryString: true
-    });
-  },
-
-  manageFirefoxAccount: function() {
-    fxAccounts.promiseAccountsManageURI()
-      .then(url => {
-        this.openContentInBrowser(url, {
-          replaceQueryString: true
-        });
-      });
-  },
-
-  verifyFirefoxAccount: function() {
-    fxAccounts.resendVerificationEmail().then(() => {
-      fxAccounts.getSignedInUser().then(data => {
-        let sb = Services.strings.createBundle("chrome://browser/locale/accounts.properties");
-        let title = sb.GetStringFromName("verificationSentTitle");
-        let heading = sb.formatStringFromName("verificationSentHeading",
-                                              [data.email], 1);
-        let description = sb.GetStringFromName("verificationSentDescription");
-
-        Services.prompt.alert(window, title, heading + "\n\n" + description);
-      });
-    });
-  },
-
-  openOldSyncSupportPage: function() {
-    let url = Services.urlFormatter.formatURLPref('app.support.baseURL') + "old-sync"
-    this.openContentInBrowser(url);
-  },
-
-  unlinkFirefoxAccount: function(confirm) {
-    if (confirm) {
-      // We use a string bundle shared with aboutAccounts.
-      let sb = Services.strings.createBundle("chrome://browser/locale/syncSetup.properties");
-      let continueLabel = sb.GetStringFromName("continue.label");
-      let title = sb.GetStringFromName("disconnect.verify.title");
-      let brandBundle = Services.strings.createBundle("chrome://branding/locale/brand.properties");
-      let brandShortName = brandBundle.GetStringFromName("brandShortName");
-      let body = sb.GetStringFromName("disconnect.verify.heading") +
-                 "\n\n" +
-                 sb.formatStringFromName("disconnect.verify.description",
-                                         [brandShortName], 1);
-      let ps = Services.prompt;
-      let buttonFlags = (ps.BUTTON_POS_0 * ps.BUTTON_TITLE_IS_STRING) +
-                        (ps.BUTTON_POS_1 * ps.BUTTON_TITLE_CANCEL) +
-                        ps.BUTTON_POS_1_DEFAULT;
-      let pressed = Services.prompt.confirmEx(window, title, body, buttonFlags,
-                                              continueLabel, null, null, null, {});
-      if (pressed != 0) { // 0 is the "continue" button
-        return;
-      }
-    }
-    fxAccounts.signOut().then(() => {
-      this.updateWeavePrefs();
-    });
-  },
-
-  openAddDevice: function () {
-    if (!Weave.Utils.ensureMPUnlocked()) {
-      return;
-    }
-
-    let win = Services.wm.getMostRecentWindow("Sync:AddDevice");
-    if (win) {
-      win.focus();
-    } else {
-      window.openDialog("chrome://browser/content/sync/addDevice.xul",
-                        "syncAddDevice", "centerscreen,chrome,resizable=no");
-    }
-  },
-
-  resetSync: function () {
-    this.openSetup("reset");
-  },
-
-  // click handlers for the FxA migration.
-  migrateUpgrade: function() {
-    fxaMigrator.getFxAccountCreationOptions().then(({url, options}) => {
-      this.openContentInBrowser(url, options);
-    });
-  },
-
-  migrateForget: function() {
-    fxaMigrator.forgetFxAccount();
-  },
-
-  migrateResend: function() {
-    fxaMigrator.resendVerificationMail(window);
-  },
-
-  // When the "Unlink" button in the migration header is selected we display
-  // a slightly different message.
-  startOverMigration: function () {
-    let flags = Services.prompt.BUTTON_POS_0 * Services.prompt.BUTTON_TITLE_IS_STRING +
-                Services.prompt.BUTTON_POS_1 * Services.prompt.BUTTON_TITLE_CANCEL +
-                Services.prompt.BUTTON_POS_1_DEFAULT;
-    let sb = this._accountsStringBundle;
-    let buttonChoice =
-      Services.prompt.confirmEx(window,
-                                sb.GetStringFromName("unlinkVerificationTitle"),
-                                sb.GetStringFromName("unlinkVerificationDescription"),
-                                flags,
-                                sb.GetStringFromName("unlinkVerificationConfirm"),
-                                null, null, null, {});
-
-    // If the user selects cancel, just bail
-    if (buttonChoice == 1)
-      return;
-
-    Weave.Service.startOver();
-    this.updateWeavePrefs();
-  },
-};
-
deleted file mode 100644
--- a/browser/components/preferences/sync.xul
+++ /dev/null
@@ -1,330 +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 overlay [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-<!ENTITY % syncBrandDTD SYSTEM "chrome://browser/locale/syncBrand.dtd">
-<!ENTITY % syncDTD SYSTEM "chrome://browser/locale/preferences/sync.dtd">
-%brandDTD;
-%syncBrandDTD;
-%syncDTD;
-]>
-
-<overlay id="SyncPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         xmlns:html="http://www.w3.org/1999/xhtml">
-
-  <prefpane id="paneSync"
-            helpTopic="prefs-weave"
-            onpaneload="gSyncPane.init()">
-
-    <preferences id="syncEnginePrefs">
-      <preference id="engine.addons"    name="services.sync.engine.addons"    type="bool"/>
-      <preference id="engine.bookmarks" name="services.sync.engine.bookmarks" type="bool"/>
-      <preference id="engine.history"   name="services.sync.engine.history"   type="bool"/>
-      <preference id="engine.tabs"      name="services.sync.engine.tabs"      type="bool"/>
-      <preference id="engine.prefs"     name="services.sync.engine.prefs"     type="bool"/>
-      <preference id="engine.passwords" name="services.sync.engine.passwords" type="bool"/>
-    </preferences>
-
-
-    <script type="application/javascript"
-            src="chrome://browser/content/preferences/sync.js"/>
-    <script type="application/javascript"
-            src="chrome://browser/content/sync/utils.js"/>
-
-      <vbox id="sync-migration" flex="1" hidden="true">
-
-        <deck id="sync-migration-deck">
-          <!-- When we are in the "need FxA user" state -->
-          <hbox align="center">
-            <description id="sync-migrate-upgrade-description" flex="1"/>
-            <spacer flex="1"/>
-            <button id="sync-migrate-unlink"
-                    onclick="event.stopPropagation(); gSyncPane.startOverMigration();"/>
-            <button id="sync-migrate-upgrade"
-                    onclick="event.stopPropagation(); gSyncPane.migrateUpgrade();"/>
-          </hbox>
-
-          <!-- When we are in the "need the user to be verified" state -->
-          <hbox align="center">
-            <description id="sync-migrate-verify-description" flex="1"/>
-            <spacer flex="1"/>
-            <button id="sync-migrate-forget"
-                    onclick="event.stopPropagation(); gSyncPane.migrateForget();"/>
-            <button id="sync-migrate-resend"
-                    onclick="event.stopPropagation(); gSyncPane.migrateResend();"/>
-          </hbox>
-        </deck>
-      </vbox>
-
-      <deck id="weavePrefsDeck">
-
-        <!-- These panels are for the "legacy" sync provider -->
-        <vbox id="noAccount" align="center">
-          <spacer flex="1"/>
-          <description id="syncDesc">
-            &weaveDesc.label;
-          </description>
-          <separator/>
-          <label class="text-link"
-                 onclick="event.stopPropagation(); gSyncPane.openSetup(null);"
-                 value="&setupButton.label;"/>
-          <vbox id="pairDevice">
-            <separator/>
-            <label class="text-link"
-                   onclick="event.stopPropagation(); gSyncPane.openSetup('pair');"
-                   value="&pairDevice.label;"/>
-          </vbox>
-          <spacer flex="3"/>
-        </vbox>
-
-        <vbox id="hasAccount">
-          <groupbox class="syncGroupBox">
-            <!-- label is set to account name -->
-            <caption id="accountCaption" align="center">
-              <image id="accountCaptionImage"/>
-              <label id="accountName" value=""/>
-            </caption>
-
-            <hbox>
-              <button type="menu"
-                      label="&manageAccount.label;"
-                      accesskey="&manageAccount.accesskey;">
-                <menupopup>
-                  <menuitem label="&changePassword2.label;"
-                            oncommand="gSyncUtils.changePassword();"/>
-                  <menuitem label="&myRecoveryKey.label;"
-                            oncommand="gSyncUtils.resetPassphrase();"/>
-                  <menuseparator/>
-                  <menuitem label="&resetSync2.label;"
-                            oncommand="gSyncPane.resetSync();"/>
-                </menupopup>
-              </button>
-            </hbox>
-
-            <hbox>
-              <label id="syncAddDeviceLabel"
-                     class="text-link"
-                     onclick="gSyncPane.openAddDevice(); return false;"
-                     value="&pairDevice.label;"/>
-            </hbox>
-
-            <vbox>
-              <label value="&syncMy.label;" />
-              <richlistbox id="syncEnginesList"
-                           orient="vertical"
-                           onselect="if (this.selectedCount) this.clearSelection();">
-                <richlistitem>
-                  <checkbox label="&engine.addons.label;"
-                            accesskey="&engine.addons.accesskey;"
-                            preference="engine.addons"/>
-                </richlistitem>
-                <richlistitem>
-                  <checkbox label="&engine.bookmarks.label;"
-                            accesskey="&engine.bookmarks.accesskey;"
-                            preference="engine.bookmarks"/>
-                </richlistitem>
-                <richlistitem>
-                  <checkbox label="&engine.passwords.label;"
-                            accesskey="&engine.passwords.accesskey;"
-                            preference="engine.passwords"/>
-                </richlistitem>
-                <richlistitem>
-                  <checkbox label="&engine.prefs.label;"
-                            accesskey="&engine.prefs.accesskey;"
-                            preference="engine.prefs"/>
-                </richlistitem>
-                <richlistitem>
-                  <checkbox label="&engine.history.label;"
-                            accesskey="&engine.history.accesskey;"
-                            preference="engine.history"/>
-                </richlistitem>
-                <richlistitem>
-                  <checkbox label="&engine.tabs.label;"
-                            accesskey="&engine.tabs.accesskey;"
-                            preference="engine.tabs"/>
-                </richlistitem>
-              </richlistbox>
-            </vbox>
-          </groupbox>
-
-          <groupbox class="syncGroupBox">
-            <grid>
-              <columns>
-                <column/>
-                <column flex="1"/>
-              </columns>
-              <rows>
-                <row align="center">
-                  <label value="&syncDeviceName.label;"
-                         accesskey="&syncDeviceName.accesskey;"
-                         control="syncComputerName"/>
-                  <textbox id="syncComputerName"
-                           onchange="gSyncUtils.changeName(this)"/>
-                </row>
-              </rows>
-            </grid>
-            <hbox>
-              <label class="text-link"
-                     onclick="gSyncPane.startOver(true); return false;"
-                     value="&unlinkDevice.label;"/>
-            </hbox>
-          </groupbox>
-          <hbox id="tosPP-normal" pack="center">
-            <label class="text-link"
-                   onclick="event.stopPropagation();gSyncUtils.openToS();"
-                   value="&prefs.tosLink.label;"/>
-            <label class="text-link"
-                   onclick="event.stopPropagation();gSyncUtils.openPrivacyPolicy();"
-                   value="&prefs.ppLink.label;"/>
-          </hbox>
-        </vbox>
-
-        <vbox id="needsUpdate" align="center" pack="center">
-          <hbox>
-            <label id="loginError" value=""/>
-            <label class="text-link"
-                   onclick="gSyncPane.updatePass(); return false;"
-                   value="&updatePass.label;"/>
-            <label class="text-link"
-                   onclick="gSyncPane.resetPass(); return false;"
-                   value="&resetPass.label;"/>
-          </hbox>
-          <label class="text-link"
-                 onclick="gSyncPane.startOver(true); return false;"
-                 value="&unlinkDevice.label;"/>
-        </vbox>
-
-        <!-- These panels are for the Firefox Accounts identity provider -->
-        <vbox id="fxaDeterminingStatus" align="center">
-          <spacer flex="1"/>
-          <p>&determiningAcctStatus.label;</p>
-          <spacer flex="1"/>
-        </vbox>
-
-        <vbox id="noFxaAccount" align="start">
-          <label>&welcome.description;</label>
-            <label class="text-link"
-                   onclick="gSyncPane.signUp(); return false;"
-                   value="&welcome.createAccount.label;"/>
-            <label class="text-link"
-                   onclick="gSyncPane.signIn(); return false;"
-                   value="&welcome.signIn.label;"/>
-            <separator/>
-            <label class="text-link"
-                   onclick="gSyncPane.openOldSyncSupportPage(); return false;"
-                   value="&welcome.useOldSync.label;"/>
-        </vbox>
-
-        <vbox id="hasFxaAccount">
-          <groupbox id="fxaGroup">
-            <caption label="&syncBrand.fxAccount.label;"/>
-
-            <deck id="fxaLoginStatus">
-
-              <!-- logged in and verified and all is good -->
-              <hbox>
-                <label id="fxaEmailAddress1"/>
-                <vbox>
-                  <label class="text-link"
-                         onclick="gSyncPane.manageFirefoxAccount();"/>
-                </vbox>
-                <spacer flex="1"/>
-                <vbox>
-                  <button id="fxaUnlinkButton"
-                          oncommand="gSyncPane.unlinkFirefoxAccount(true);"
-                          label="&disconnect.label;"/>
-                </vbox>
-              </hbox>
-
-              <!-- logged in to an unverified account -->
-              <hbox flex="1">
-                <description flex="1">
-                  &signedInUnverified.beforename.label;
-                  <span id="fxaEmailAddress2"></span>
-                  &signedInUnverified.aftername.label;
-                </description>
-                <vbox align="end">
-                  <button oncommand="gSyncPane.verifyFirefoxAccount();"
-                          label="&verify.label;"/>
-                  <label class="text-link"
-                         onclick="/* no warning as account can't have previously synced */ gSyncPane.unlinkFirefoxAccount(false);"
-                         value="&forget.label;"/>
-                </vbox>
-              </hbox>
-
-              <!-- logged in locally but server rejected credentials -->
-              <hbox flex="1">
-                <description flex="1">
-                  &signedInLoginFailure.beforename.label;
-                  <span id="fxaEmailAddress3"></span>
-                  &signedInLoginFailure.aftername.label;
-                </description>
-                <vbox align="end">
-                  <button oncommand="gSyncPane.reSignIn();"
-                         label="&signIn.label;"/>
-                  <label class="text-link"
-                         onclick="gSyncPane.unlinkFirefoxAccount(true);"
-                         value="&forget.label;"/>
-                </vbox>
-              </hbox>
-            </deck>
-          </groupbox>
-
-          <groupbox id="syncOptions">
-            <caption label="&syncBrand.shortName.label;"/>
-            <hbox id="fxaSyncEngines">
-              <vbox>
-                <checkbox label="&engine.tabs.label;"
-                          accesskey="&engine.tabs.accesskey;"
-                          onsynctopreference="gSyncPane.onPreferenceChanged();"
-                          preference="engine.tabs"/>
-                <checkbox label="&engine.bookmarks.label;"
-                          accesskey="&engine.bookmarks.accesskey;"
-                          onsynctopreference="gSyncPane.onPreferenceChanged();"
-                          preference="engine.bookmarks"/>
-                <checkbox label="&engine.passwords.label;"
-                          accesskey="&engine.passwords.accesskey;"
-                          onsynctopreference="gSyncPane.onPreferenceChanged();"
-                          preference="engine.passwords"/>
-                <checkbox label="&engine.history.label;"
-                          accesskey="&engine.history.accesskey;"
-                          onsynctopreference="gSyncPane.onPreferenceChanged(this);"
-                          preference="engine.history"/>
-                <checkbox label="&engine.addons.label;"
-                          accesskey="&engine.addons.accesskey;"
-                          onsynctopreference="gSyncPane.onPreferenceChanged();"
-                          preference="engine.addons"/>
-                <checkbox label="&engine.prefs.label;"
-                          accesskey="&engine.prefs.accesskey;"
-                          onsynctopreference="gSyncPane.onPreferenceChanged();"
-                          preference="engine.prefs"/>
-              </vbox>
-              <spacer/>
-            </hbox>
-          </groupbox>
-          <hbox align="center">
-            <label value="&syncDeviceName.label;"
-                   accesskey="&syncDeviceName.accesskey;"
-                   control="syncComputerName"/>
-            <textbox id="fxaSyncComputerName"
-                     flex="1"
-                     onchange="gSyncUtils.changeName(this)"/>
-          </hbox>
-          <spacer flex="1"/>
-          <hbox id="tosPP-small" pack="center">
-            <label class="text-link small"
-                   onclick="event.stopPropagation();gSyncUtils.openToS();"
-                   value="&prefs.tosLink.label;"/>
-            <label class="text-link small"
-                   onclick="event.stopPropagation();gSyncUtils.openPrivacyPolicy();"
-                   value="&fxaPrivacyNotice.link.label;"/>
-          </hbox>
-        </vbox>
-      </deck>
-  </prefpane>
-</overlay>
deleted file mode 100644
--- a/browser/components/preferences/tabs.js
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- indent-tabs-mode: nil; js-indent-level: 4 -*-
-# 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/.
-
-var gTabsPane = {
-
-  /*
-   * Preferences:
-   *
-   * browser.link.open_newwindow
-   * - determines where pages which would open in a new window are opened:
-   *     1 opens such links in the most recent window or tab,
-   *     2 opens such links in a new window,
-   *     3 opens such links in a new tab
-   * browser.tabs.loadInBackground
-   * - true if display should switch to a new tab which has been opened from a
-   *   link, false if display shouldn't switch
-   * browser.tabs.warnOnClose
-   * - true if when closing a window with multiple tabs the user is warned and
-   *   allowed to cancel the action, false to just close the window
-   * browser.tabs.warnOnOpen
-   * - true if the user should be warned if he attempts to open a lot of tabs at
-   *   once (e.g. a large folder of bookmarks), false otherwise
-   * browser.taskbar.previews.enable
-   * - true if tabs are to be shown in the Windows 7 taskbar
-   */
-
-  init: function () {
-#ifdef XP_WIN
-    const Cc = Components.classes;
-    const Ci = Components.interfaces;
-    try {
-      let sysInfo = Cc["@mozilla.org/system-info;1"].
-                    getService(Ci.nsIPropertyBag2);
-      let ver = parseFloat(sysInfo.getProperty("version"));
-      let showTabsInTaskbar = document.getElementById("showTabsInTaskbar");
-      showTabsInTaskbar.hidden = ver < 6.1;
-    } catch (ex) {}
-#endif
-
-    // The "closing multiple tabs" and "opening multiple tabs might slow down
-    // &brandShortName;" warnings provide options for not showing these
-    // warnings again. When the user disabled them, we provide checkboxes to
-    // re-enable the warnings.
-    let TransientPrefs =
-      Components.utils.import("resource:///modules/TransientPrefs.jsm", {})
-                .TransientPrefs;
-    if (!TransientPrefs.prefShouldBeVisible("browser.tabs.warnOnClose"))
-      document.getElementById("warnCloseMultiple").hidden = true;
-    if (!TransientPrefs.prefShouldBeVisible("browser.tabs.warnOnOpen"))
-      document.getElementById("warnOpenMany").hidden = true;
-  },
-
-  /**
-   * Determines where a link which opens a new window will open.
-   *
-   * @returns |true| if such links should be opened in new tabs
-   */
-  readLinkTarget: function() {
-    var openNewWindow = document.getElementById("browser.link.open_newwindow");
-    return openNewWindow.value != 2;
-  },
-
-  /**
-   * Determines where a link which opens a new window will open.
-   *
-   * @returns 2 if such links should be opened in new windows,
-   *          3 if such links should be opened in new tabs
-   */
-  writeLinkTarget: function() {
-    var linkTargeting = document.getElementById("linkTargeting");
-    return linkTargeting.checked ? 3 : 2;
-  }
-};
deleted file mode 100644
--- a/browser/components/preferences/tabs.xul
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0"?>
-
-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-# 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 overlay [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
-%brandDTD;
-<!ENTITY % tabsDTD SYSTEM "chrome://browser/locale/preferences/tabs.dtd">
-%tabsDTD;
-]>
-
-<overlay id="TabsPaneOverlay"
-         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
-  <prefpane id="paneTabs"
-            onpaneload="gTabsPane.init();"
-            helpTopic="prefs-tabs">
-
-    <preferences i