Merge m-c to b2g-inbound.
authorRyan VanderMeulen <ryanvm@gmail.com>
Tue, 06 Aug 2013 17:08:14 -0400
changeset 141690 c3b23d6af64f79ae649cce603a57f9d4500f8a63
parent 141689 97a40e4da22c86c9e3edcc460f4d68906be8ac3b (current diff)
parent 141585 1fb5d14e8348b16014fafa5d746e0a8823df8187 (diff)
child 141691 360a47186e212b644ad7d1483d2d29cd5a10fe97
push id32205
push useremorley@mozilla.com
push dateWed, 07 Aug 2013 23:19:13 +0000
treeherdermozilla-inbound@56912957f3e9 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone26.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-c to b2g-inbound.
browser/devtools/styleinspector/css-logic.js
browser/metro/base/content/prompt/alert.xul
browser/metro/base/content/prompt/confirm.xul
browser/metro/base/content/prompt/prompt.js
browser/metro/base/content/prompt/prompt.xul
browser/metro/base/content/prompt/promptPassword.xul
browser/metro/base/content/prompt/select.xul
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -6,16 +6,18 @@
 let Cc = Components.classes;
 let Ci = Components.interfaces;
 let Cu = Components.utils;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this,
   "LoginManagerContent", "resource://gre/modules/LoginManagerContent.jsm");
+XPCOMUtils.defineLazyModuleGetter(this,
+  "InsecurePasswordUtils", "resource://gre/modules/InsecurePasswordUtils.jsm");
 
 // Bug 671101 - directly using webNavigation in this context
 // causes docshells to leak
 this.__defineGetter__("webNavigation", function () {
   return docShell.QueryInterface(Ci.nsIWebNavigation);
 });
 
 addMessageListener("WebNavigation:LoadURI", function (message) {
@@ -33,15 +35,18 @@ addMessageListener("Browser:HideSessionR
     container.hidden = true;
   }
 });
 
 if (!Services.prefs.getBoolPref("browser.tabs.remote")) {
   addEventListener("DOMContentLoaded", function(event) {
     LoginManagerContent.onContentLoaded(event);
   });
+  addEventListener("DOMFormHasPassword", function(event) {
+    InsecurePasswordUtils.checkForInsecurePasswords(event.target);
+  });
   addEventListener("DOMAutoComplete", function(event) {
     LoginManagerContent.onUsernameInput(event);
   });
   addEventListener("blur", function(event) {
     LoginManagerContent.onUsernameInput(event);
   });
 }
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -169,16 +169,20 @@
           // Force a style flush to ensure that our binding is attached.
           findBar.clientTop;
 
           findBar.browser = browser;
           findBar._findField.value = this._lastFindValue;
 
           aTab._findBar = findBar;
 
+          let event = document.createEvent("Events");
+          event.initEvent("TabFindInitialized", true, false);
+          aTab.dispatchEvent(event);
+
           return findBar;
         ]]></body>
       </method>
 
       <method name="updateWindowResizers">
         <body><![CDATA[
           if (!window.gShowPageResizers)
             return;
--- a/browser/base/content/test/browser_bug537013.js
+++ b/browser/base/content/test/browser_bug537013.js
@@ -39,36 +39,44 @@ function test() {
   gBrowser.selectedTab = tabs[0];
 
   setFindString(texts[0]);
   // Turn on highlight for testing bug 891638
   gFindBar.getElement("highlight").checked = true;
 
   // Make sure the second tab is correct, then set it up
   gBrowser.selectedTab = tabs[1];
+  gBrowser.selectedTab.addEventListener("TabFindInitialized", continueTests1);
+  // Initialize the findbar
+  gFindBar;
+}
+function continueTests1() {
+  gBrowser.selectedTab.removeEventListener("TabFindInitialized",
+                                           continueTests1);
+  ok(true, "'TabFindInitialized' event properly dispatched!");
   ok(gFindBar.hidden, "Second tab doesn't show find bar!");
   gFindBar.open();
   is(gFindBar._findField.value, texts[0],
      "Second tab kept old find value for new initialization!");
   setFindString(texts[1]);
 
   // Confirm the first tab is still correct, ensure re-hiding works as expected
   gBrowser.selectedTab = tabs[0];
   ok(!gFindBar.hidden, "First tab shows find bar!");
   is(gFindBar._findField.value, texts[0], "First tab persists find value!");
   ok(gFindBar.getElement("highlight").checked,
      "Highlight button state persists!");
 
   // While we're here, let's test bug 253793
   gBrowser.reload();
-  gBrowser.addEventListener("DOMContentLoaded", continueTests, true);
+  gBrowser.addEventListener("DOMContentLoaded", continueTests2, true);
 }
 
-function continueTests() {
-  gBrowser.removeEventListener("DOMContentLoaded", continueTests, true);
+function continueTests2() {
+  gBrowser.removeEventListener("DOMContentLoaded", continueTests2, true);
   ok(!gFindBar.getElement("highlight").checked, "Highlight button reset!");
   gFindBar.close();
   ok(gFindBar.hidden, "First tab doesn't show find bar!");
   gBrowser.selectedTab = tabs[1];
   ok(!gFindBar.hidden, "Second tab shows find bar!");
   // Test for bug 892384
   is(gFindBar._findField.getAttribute("focused"), "true",
      "Open findbar refocused on tab change!");
--- a/browser/devtools/styleeditor/StyleEditorDebuggee.jsm
+++ b/browser/devtools/styleeditor/StyleEditorDebuggee.jsm
@@ -118,17 +118,17 @@ StyleEditorDebuggee.prototype = {
   },
 
   /**
    * request baseURIObject information from the document
    */
   _getBaseURI: function() {
     let message = { type: "getBaseURI" };
     this._sendRequest(message, (response) => {
-      this.baseURI = response.baseURI;
+      this.baseURI = Services.io.newURI(response.baseURI, null, null);
     });
   },
 
   /**
    * Handler for document load, forward event with
    * all the stylesheets available on load.
    *
    * @param  {string} type
--- a/browser/devtools/webconsole/test/Makefile.in
+++ b/browser/devtools/webconsole/test/Makefile.in
@@ -140,16 +140,18 @@ MOCHITEST_BROWSER_FILES = \
 	browser_console_keyboard_accessibility.js \
 	browser_console_filters.js \
 	browser_console_dead_objects.js \
 	browser_console_iframe_messages.js \
 	browser_console_variables_view_while_debugging_and_inspecting.js \
 	browser_webconsole_bug_686937_autocomplete_JSTerm_helpers.js \
 	browser_webconsole_cached_autocomplete.js \
 	browser_console_navigation_marker.js \
+	browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js \
+	browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js \
 	head.js \
 	$(NULL)
 
 ifeq ($(OS_ARCH), Darwin)
 MOCHITEST_BROWSER_FILES += \
 	browser_webconsole_bug_804845_ctrl_key_nav.js \
         $(NULL)
 endif
@@ -239,15 +241,19 @@ MOCHITEST_BROWSER_FILES += \
 	test-bug-821877-csperrors.html^headers^ \
 	test-bug-846918-hsts-invalid-headers.html \
 	test-bug-846918-hsts-invalid-headers.html^headers^ \
 	test-eval-in-stackframe.html \
 	test-bug-859170-longstring-hang.html \
 	test-bug-837351-security-errors.html \
 	test-bug-869003-top-window.html \
 	test-bug-869003-iframe.html \
+	test-iframe-762593-insecure-form-action.html \
+	test-iframe-762593-insecure-frame.html \
+	test-bug-762593-insecure-passwords-web-console-warning.html \
+	test-bug-762593-insecure-passwords-about-blank-web-console-warning.html \
 	test-consoleiframes.html \
 	test-iframe1.html \
 	test-iframe2.html \
 	test-iframe3.html \
 	$(NULL)
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js
@@ -0,0 +1,29 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+/*
+ * Tests that errors about insecure passwords are logged
+ * to the web console
+ */
+
+const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html";
+const INSECURE_PASSWORD_MSG = "Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen.";
+
+function test() {
+  addTab(TEST_URI);
+  browser.addEventListener("load", function onLoad(aEvent) {
+    browser.removeEventListener(aEvent.type, onLoad, true);
+    openConsole(null, function testInsecurePasswordErrorLogged (hud) {
+      waitForMessages({
+        webconsole: hud,
+        messages: [
+          {
+            name: "Insecure password error displayed successfully",
+            text: INSECURE_PASSWORD_MSG,
+            category: CATEGORY_SECURITY,
+            severity: SEVERITY_WARNING
+          },
+        ],
+      }).then(finishTest);
+    });
+  }, true);
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js
@@ -0,0 +1,68 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+/*
+ * Tests that errors about insecure passwords are logged
+ * to the web console
+ */
+
+const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html";
+const INSECURE_PASSWORD_MSG = "Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen.";
+const INSECURE_FORM_ACTION_MSG = "Password fields present in a form with an insecure (http://) form action. This is a security risk that allows user login credentials to be stolen.";
+const INSECURE_IFRAME_MSG = "Password fields present on an insecure (http://) iframe. This is a security risk that allows user login credentials to be stolen.";
+const INSECURE_PASSWORDS_URI = "https://developer.mozilla.org/en-US/docs/Security/InsecurePasswords";
+
+function test() {
+  addTab(TEST_URI);
+  browser.addEventListener("load", function onLoad(aEvent) {
+    browser.removeEventListener(aEvent.type, onLoad, true);
+    openConsole(null, function testInsecurePasswordErrorLogged (hud) {
+      waitForMessages({
+        webconsole: hud,
+        messages: [
+          {
+            name: "Insecure password error displayed successfully",
+            text: INSECURE_PASSWORD_MSG,
+            category: CATEGORY_SECURITY,
+            severity: SEVERITY_WARNING
+          },
+          {
+            name: "Insecure iframe error displayed successfully",
+            text: INSECURE_IFRAME_MSG,
+            category: CATEGORY_SECURITY,
+            severity: SEVERITY_WARNING
+          },
+          {
+            name: "Insecure form action error displayed successfully",
+            text: INSECURE_FORM_ACTION_MSG,
+            category: CATEGORY_SECURITY,
+            severity: SEVERITY_WARNING
+          },
+        ],
+      }).then( () => testClickOpenNewTab(hud));
+    });
+  }, true);
+}
+
+function testClickOpenNewTab(hud) {
+  let warningNode = hud.outputNode.querySelector(
+    ".webconsole-msg-body .webconsole-learn-more-link");
+
+  /*
+   * Invoke the click event and check if a new tab would open to the correct
+   * page
+   */
+  let linkOpened = false;
+  let oldOpenUILinkIn = window.openUILinkIn;
+  window.openUILinkIn = function(aLink) {
+    if (aLink == INSECURE_PASSWORDS_URI) {
+      linkOpened = true;
+    }
+  }
+
+  EventUtils.synthesizeMouse(warningNode, 2, 2, {},
+                             warningNode.ownerDocument.defaultView);
+  ok(linkOpened, "Clicking the Insecure Passwords Warning node opens the desired page");
+  window.openUILinkIn = oldOpenUILinkIn;
+
+  finishTest();
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-about-blank-web-console-warning.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>Bug 762593 - Add warning/error Message to Web Console when the
+      page includes Insecure Password fields</title>
+    <!-- Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ -->
+
+    <!-- This test tests the scenario where a javascript adds password fields to
+     an about:blank iframe inside an insecure web page. It ensures that
+     insecure password fields like those are detected and a warning is sent to
+     the web console. -->
+  </head>
+  <body>
+    <p>This insecure page is served with an about:blank iframe. A script then adds a
+    password field to it.</p>
+    <iframe id = "myiframe" width = "300" height="300" >
+    </iframe>
+    <script>
+      var doc = window.document;
+      var myIframe = doc.getElementById("myiframe");
+      myIframe.contentDocument.open();
+      myIframe.contentDocument.write("<form><input type = 'password' name='pwd' value='test'> </form>");
+      myIframe.contentDocument.close();
+    </script>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test-bug-762593-insecure-passwords-web-console-warning.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf8">
+    <title>Bug 762593 - Add warning/error Message to Web Console when the
+      page includes Insecure Password fields</title>
+    <!-- Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ -->
+  </head>
+  <body>
+    <p>This page is served with an iframe with insecure password field.</p>
+    <iframe src
+      ="http://example.com/browser/browser/devtools/webconsole/test/test-iframe-762593-insecure-frame.html">
+    </iframe>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test-iframe-762593-insecure-form-action.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+  <head>
+    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+    <!-- Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ -->
+  </head>
+  <body>
+    <h1>iframe 2</h1>
+    <p>This frame contains a password field inside a form with insecure action.</p>
+    <form action="http://test">
+      <input type="password" name="pwd">
+    </form>
+  </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test-iframe-762593-insecure-frame.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<html>
+  <head>
+    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
+    <!-- Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ -->
+  </head>
+  <body>
+    <h1>iframe 1</h1>
+    <p>This frame is served with an insecure password field.</p>
+    <iframe src=
+      "http://example.com/browser/browser/devtools/webconsole/test/test-iframe-762593-insecure-form-action.html">
+    </iframe>
+  </body>
+</html>
--- a/browser/devtools/webconsole/webconsole.js
+++ b/browser/devtools/webconsole/webconsole.js
@@ -34,16 +34,18 @@ const STRINGS_URI = "chrome://browser/lo
 let l10n = new WebConsoleUtils.l10n(STRINGS_URI);
 
 
 // The XUL namespace.
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
 const MIXED_CONTENT_LEARN_MORE = "https://developer.mozilla.org/en/Security/MixedContent";
 
+const INSECURE_PASSWORDS_LEARN_MORE = "https://developer.mozilla.org/en-US/docs/Security/InsecurePasswords";
+
 const HELP_URL = "https://developer.mozilla.org/docs/Tools/Web_Console/Helpers";
 
 const VARIABLES_VIEW_URL = "chrome://browser/content/devtools/widgets/VariablesView.xul";
 
 const CONSOLE_DIR_VIEW_HEIGHT = 0.6;
 
 const IGNORED_SOURCE_URLS = ["debugger eval code", "self-hosted"];
 
@@ -1236,16 +1238,22 @@ WebConsoleFrame.prototype = {
       errorMessage = errorMessage.initial;
     }
 
     let node = this.createMessageNode(aCategory, severity,
                                       errorMessage,
                                       aScriptError.sourceName,
                                       aScriptError.lineNumber, null, null,
                                       aScriptError.timeStamp);
+
+    // Select the body of the message node that is displayed in the console
+    let msgBody = node.querySelector(".webconsole-msg-body");
+    // Add the more info link node to messages that belong to certain categories
+    this.addMoreInfoLink(msgBody, aScriptError);
+
     if (aScriptError.private) {
       node.setAttribute("private", true);
     }
 
     if (objectActors.size > 0) {
       node._objectActors = objectActors;
     }
 
@@ -1407,16 +1415,69 @@ WebConsoleFrame.prototype = {
     mixedContentWarningNode.addEventListener("click", function(aEvent) {
       this.owner.openLink(MIXED_CONTENT_LEARN_MORE);
       aEvent.preventDefault();
       aEvent.stopPropagation();
     }.bind(this));
   },
 
   /**
+   * Adds a more info link node to messages based on the nsIScriptError object
+   * that we need to report to the console
+   *
+   * @param aNode
+   *        The node to which we will be adding the more info link node
+   * @param aScriptError
+   *        The script error object that we are reporting to the console
+   */
+  addMoreInfoLink: function WCF_addMoreInfoLink(aNode, aScriptError)
+  {
+    // We have a single category for now, but more are to be
+    // expected soon
+    if (aScriptError.category == "Insecure Password Field") {
+      this.addInsecurePasswordsWarningNode(aNode);
+    }
+  },
+
+  /*
+   * Appends a clickable insecure passwords warning node to the node passed
+   * as a parameter to the function. When a user clicks on the appended
+   * warning node, the browser navigates to a page where the user can learn
+   * more about security issues associated with insecure passwords.
+   */
+  addInsecurePasswordsWarningNode:
+  function WCF_addInsecurePasswordsWarningNode(aNode)
+  {
+    let moreInfoLabel =
+      "[" + l10n.getStr("webConsoleMoreInfoLabel") + "]";
+
+    // The node that holds the clickable warning node.
+    let linkNode = this.document.createElementNS(XUL_NS, "hbox");
+    linkNode.flex = 1;
+    linkNode.classList.add("webconsole-msg-body-piece");
+    linkNode.classList.add("webconsole-msg-link");
+    aNode.appendChild(linkNode);
+
+    // Create the actual insecure passwords warning node and make it clickable
+    let warningNode = this.document.createElement("label");
+    warningNode.setAttribute("value", moreInfoLabel);
+    warningNode.setAttribute("title", moreInfoLabel);
+    warningNode.classList.add("hud-clickable");
+    warningNode.classList.add("webconsole-learn-more-link");
+
+    warningNode.addEventListener("click", function(aEvent) {
+      this.owner.openLink(INSECURE_PASSWORDS_LEARN_MORE);
+      aEvent.preventDefault();
+      aEvent.stopPropagation();
+    }.bind(this));
+
+    linkNode.appendChild(warningNode);
+  },
+
+  /**
    * Log file activity.
    *
    * @param string aFileURI
    *        The file URI that was loaded.
    * @return nsIDOMElement|undefined
    *         The message element to display in the Web Console output.
    */
   logFileActivity: function WCF_logFileActivity(aFileURI)
@@ -4467,16 +4528,17 @@ var Utils = {
     switch (aScriptError.category) {
       case "CSS Parser":
       case "CSS Loader":
         return CATEGORY_CSS;
 
       case "Mixed Content Blocker":
       case "CSP":
       case "Invalid HSTS Headers":
+      case "Insecure Password Field":
         return CATEGORY_SECURITY;
 
       default:
         return CATEGORY_JS;
     }
   },
 
   /**
--- a/browser/installer/removed-files.in
+++ b/browser/installer/removed-files.in
@@ -1,96 +1,1554 @@
 # 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/.
-
-# The removed-files.in file specifies files and directories to be removed during
-# an application update that are not automatically removed by the application
-# update process. The application update process handles the vast majority of
-# file and directory removals automatically so this file should not be used in
-# the vast majority of cases.
-
-# When to use removed-files.in file to remove files and directories:
-# * Files and directories located in the installation's "distribution/" and
-#   "extensions/" directories that were added before Firefox 26. Files and
-#   directories located in these directories were not included in the
-#   application update file removals for a complete update prior to Firefox 26.
-# * Empty directories that were accidentally added to the installation
-#   directory.
-# * Third party files and directories that were added to the installation
-#   directory. Under normal circumstances this should only be done after release
-#   drivers have approved the removal of these third party files.
-
-# If you are not sure whether a file or directory should be removed using the
-# removed-files.in file please contact one of the developers that work on
-# application update.
-
-# Note: the "distribution/" and "browser/extensions/" directories should never
-# be removed recursively since these directories are used by Partner builds and
-# custom installations.
-
-# To specify a file to be removed add the path to the file.
-# * If the file doesn't exist the update will succeed.
-# * If the file exists and can't be removed (e.g. the file is locked) the
-#   update will fail.
-#
-# Example: path/to/file
-
-# To specify a directory to be removed only if it is empty add the path to the
-# directory with a trailing forward slash.
-# * If the directory doesn't exist the update will succeed.
-# * If the directory can't be removed (e.g. the directory is locked, contains
-#   files, etc.) the update will succeed.
-#
-# Example: path/to/dir/
-
-# To specify a directory that should be recursively removed add the path to the
-# directory with a trailing forward slash and "*".
-# * If the directory doesn't exist the update will succeed.
-# * If all of the files the directory contains can be removed but the directory
-#   or a subdirectory can't be removed (e.g. the directory is locked) the update
-#   will succeed.
-# * If a file within the directory can't be removed the update will fail.
-#
-# Example: path/to/dir/*
-
-# File Removals
-# This is located under the "distribution/" directory and it was added before
-# Firefox 26
+# Removed-files.in is processed at build time to create a list of files that
+# should be removed during an application update.
+# These files are in alphabetical order, except that files removed only on
+# certain platforms are after all of the regular files and obsolete Talkback and
+# Inspector files are at the very end.
+.autoreg
+@DLL_PREFIX@jsj@DLL_SUFFIX@
+@DLL_PREFIX@sqlite3@DLL_SUFFIX@
+@DLL_PREFIX@xpcom_compat@DLL_SUFFIX@
+@DLL_PREFIX@xpistub@DLL_SUFFIX@
+@DLL_PREFIX@zlib@DLL_SUFFIX@
+@DLL_PREFIX@jemalloc@DLL_SUFFIX@
+@DLL_PREFIX@mozutils@DLL_SUFFIX@
+#ifdef MOZ_STATIC_JS
+@DLL_PREFIX@mozjs@DLL_SUFFIX@
+#endif
+#ifdef MOZ_FOLD_LIBS
+@DLL_PREFIX@nspr4@DLL_SUFFIX@
+@DLL_PREFIX@plds4@DLL_SUFFIX@
+@DLL_PREFIX@plc4@DLL_SUFFIX@
+@DLL_PREFIX@ssl3@DLL_SUFFIX@
+@DLL_PREFIX@smime3@DLL_SUFFIX@
+@DLL_PREFIX@nssutil3@DLL_SUFFIX@
+@DLL_PREFIX@mozsqlite3@DLL_SUFFIX@
+#endif
+@DLL_PREFIX@xpcom@DLL_SUFFIX@
+LICENSE
+browserconfig.properties
+chrome/US.jar
+chrome/app-chrome.manifest
+chrome/browser.manifest
+chrome/chrome.rdf
+chrome/chromelist.txt
+chrome/classic.jar
+chrome/classic.manifest
+chrome/comm.jar
+chrome/comm.manifest
+chrome/en-win.jar
+chrome/help.jar
+chrome/installed-chrome.txt
+chrome/m3ffxtbr.jar
+chrome/m3ffxtbr.manifest
+chrome/overlayinfo/
+chrome/pippki.manifest
+chrome/reporter.jar
+chrome/reporter.manifest
+chrome/toolkit.manifest
+component.reg
+components/browser.manifest
+components/components.list
+components/@DLL_PREFIX@browserdirprovider@DLL_SUFFIX@
+components/@DLL_PREFIX@brwsrdir@DLL_SUFFIX@
+components/@DLL_PREFIX@myspell@DLL_SUFFIX@
+components/@DLL_PREFIX@spellchecker@DLL_SUFFIX@
+components/@DLL_PREFIX@spellchk@DLL_SUFFIX@
+#ifdef XP_MACOSX
+components/libalerts.dylib
+components/libalerts_s.dylib
+#endif
+components/aboutCertError.js
+components/aboutPrivateBrowsing.js
+components/aboutRights.js
+components/aboutRobots.js
+components/aboutSessionRestore.js
+components/autocomplete.xpt
+components/airbag.xpt
+components/bookmarks.xpt
+components/compreg.dat
+components/history.xpt
+components/microsummaries.xpt
+components/myspell/en-US.aff
+components/myspell/en-US.dic
+components/nsAddonRepository.js
+components/nsBackgroundUpdateService.js
+components/nsBookmarkTransactionManager.js
+components/nsCloseAllWindows.js
+components/nsDictionary.js
+components/nsExtensionManager.js
+components/nsInterfaceInfoToIDL.js
+components/nsScriptableIO.js
+components/nsUrlClassifierTable.js
+components/nsXmlRpcClient.js
+components/pluginGlue.js
+components/sidebar.xpt
+#ifdef MOZ_B2G_RIL
+components/dom_telephony.xpt
+components/dom_wifi.xpt
+components/dom_system_b2g.xpt
+#endif
+components/dom_sms.xpt
+components/dom_webspeech.xpt
+components/uconvd.dll
+components/WeaveCrypto.js
+components/WeaveCrypto.manifest
+components/xmlextras.xpt
+components/xpcom.xpt
+components/xpti.dat
+components/xptitemp.dat
+components/nsMicrosummaryService.js
+components/nsProxyAutoConfig.manifest
+components/nsProxyAutoConfig.js
+D3DCompiler_42.dll
+d3dx9_42.dll
+d3dx9_43.dll
+defaults/pref/all.js
+defaults/pref/bug259708.js
+defaults/pref/bug307259.js
+defaults/pref/reporter.js
+defaults/pref/security-prefs.js
+defaults/pref/services-aitc.js
+defaults/pref/winpref.js
+defaults/pref/xpinstall.js
+defaults/preferences/services-aitc.js
+defaults/preferences/services-notifications.js
+defaults/preferences/services-sync.js
+defaults/preferences/healthreport-prefs.js
+defaults/profile/US/
+defaults/profile/extensions/
+defaults/profile/extensions/Extensions.rdf
+defaults/profile/extensions/installed-extensions.txt
+defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/
+defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
+defaults/profile/search.rdf
+#ifndef SHIP_FEEDBACK
+# In the average case, this directory is only used by Test Pilot, and will get
+# removed by the updater. In some cases (eg, partner builds), distribution/
+# will have other files and/or directories in it. In these cases, the updater
+# will print a non-fatal error and continue on, because we're not appending
+# '*' to force a recursive removal.
+distribution/
+distribution/extensions/
 distribution/extensions/testpilot@labs.mozilla.com.xpi
-
-# Directory removals
-chrome/
+#endif
+extensions/talkback@mozilla.org/
+extensions/talkback@mozilla.org/chrome.manifest
+extensions/talkback@mozilla.org/components/@DLL_PREFIX@qfaservices@DLL_SUFFIX@
+extensions/talkback@mozilla.org/components/qfaservices.xpt
+extensions/talkback@mozilla.org/install.rdf
+extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/
+extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/install.rdf
+extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/preview.png
+extensions/testpilot@labs.mozilla.com/chrome.manifest
+extensions/testpilot@labs.mozilla.com/components/TestPilot.js
+extensions/testpilot@labs.mozilla.com/content/all-studies-window.js
+extensions/testpilot@labs.mozilla.com/content/all-studies-window.xul
+extensions/testpilot@labs.mozilla.com/content/browser.css
+extensions/testpilot@labs.mozilla.com/content/browser.js
+extensions/testpilot@labs.mozilla.com/content/debug.html
+extensions/testpilot@labs.mozilla.com/content/experiment-page.js
+extensions/testpilot@labs.mozilla.com/content/feedback-browser.xul
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.colorhelpers.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.colorhelpers.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.crosshair.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.crosshair.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.image.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.image.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.navigate.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.navigate.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.selection.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.selection.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.stack.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.stack.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.threshold.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.flot.threshold.min.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.js
+extensions/testpilot@labs.mozilla.com/content/flot/jquery.min.js
+extensions/testpilot@labs.mozilla.com/content/raw-data-dialog.js
+extensions/testpilot@labs.mozilla.com/content/raw-data-dialog.xul
+extensions/testpilot@labs.mozilla.com/content/screen.css
+extensions/testpilot@labs.mozilla.com/content/status-quit.html
+extensions/testpilot@labs.mozilla.com/content/status.html
+extensions/testpilot@labs.mozilla.com/content/survey-generator.js
+extensions/testpilot@labs.mozilla.com/content/take-survey.html
+extensions/testpilot@labs.mozilla.com/content/tp-browser.xul
+extensions/testpilot@labs.mozilla.com/content/welcome-page.js
+extensions/testpilot@labs.mozilla.com/content/welcome.html
+extensions/testpilot@labs.mozilla.com/content/window-utils.js
+extensions/testpilot@labs.mozilla.com/defaults/preferences/preferences.js
+extensions/testpilot@labs.mozilla.com/install.rdf
+extensions/testpilot@labs.mozilla.com/instrument/chrome.manifest
+extensions/testpilot@labs.mozilla.com/instrument/install.rdf
+extensions/testpilot@labs.mozilla.com/instrument/instrument.jsm
+extensions/testpilot@labs.mozilla.com/instrument/instrument.xul
+extensions/testpilot@labs.mozilla.com/modules/dbutils.js
+extensions/testpilot@labs.mozilla.com/modules/experiment_data_store.js
+extensions/testpilot@labs.mozilla.com/modules/extension-update.js
+extensions/testpilot@labs.mozilla.com/modules/feedback.js
+extensions/testpilot@labs.mozilla.com/modules/jar-code-store.js
+extensions/testpilot@labs.mozilla.com/modules/lib/cuddlefish.js
+extensions/testpilot@labs.mozilla.com/modules/lib/memory.js
+extensions/testpilot@labs.mozilla.com/modules/lib/observer-service.js
+extensions/testpilot@labs.mozilla.com/modules/lib/plain-text-console.js
+extensions/testpilot@labs.mozilla.com/modules/lib/preferences-service.js
+extensions/testpilot@labs.mozilla.com/modules/lib/securable-module.js
+extensions/testpilot@labs.mozilla.com/modules/lib/timer.js
+extensions/testpilot@labs.mozilla.com/modules/lib/traceback.js
+extensions/testpilot@labs.mozilla.com/modules/lib/unit-test.js
+extensions/testpilot@labs.mozilla.com/modules/lib/unload.js
+extensions/testpilot@labs.mozilla.com/modules/lib/url.js
+extensions/testpilot@labs.mozilla.com/modules/log4moz.js
+extensions/testpilot@labs.mozilla.com/modules/metadata.js
+extensions/testpilot@labs.mozilla.com/modules/Observers.js
+extensions/testpilot@labs.mozilla.com/modules/remote-experiment-loader.js
+extensions/testpilot@labs.mozilla.com/modules/setup.js
+extensions/testpilot@labs.mozilla.com/modules/string_sanitizer.js
+extensions/testpilot@labs.mozilla.com/modules/tasks.js
+extensions/testpilot@labs.mozilla.com/skin/all/badge-default.png
+extensions/testpilot@labs.mozilla.com/skin/all/bg.jpg
+extensions/testpilot@labs.mozilla.com/skin/all/css/screen-standalone.css
+extensions/testpilot@labs.mozilla.com/skin/all/dino_32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/bg-status.jpg
+extensions/testpilot@labs.mozilla.com/skin/all/images/callout.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/callout_continue.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/data1.jpg
+extensions/testpilot@labs.mozilla.com/skin/all/images/data2.jpg
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_comments.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_computer.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_continue.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_quit.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_results.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_twitter.png
+extensions/testpilot@labs.mozilla.com/skin/all/images/home_upcoming.png
+extensions/testpilot@labs.mozilla.com/skin/all/logo.png
+extensions/testpilot@labs.mozilla.com/skin/all/mozilla-logo.png
+extensions/testpilot@labs.mozilla.com/skin/all/status-completed.png
+extensions/testpilot@labs.mozilla.com/skin/all/status-ejected.png
+extensions/testpilot@labs.mozilla.com/skin/all/status-missed.png
+extensions/testpilot@labs.mozilla.com/skin/all/testpilot_16x16.png
+extensions/testpilot@labs.mozilla.com/skin/all/testPilot_200x200.png
+extensions/testpilot@labs.mozilla.com/skin/all/testpilot_32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-completedstudies-32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-currentstudies-32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-generic-32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-learned-32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-results-48x48.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-settings-32x32.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-study-48x48.png
+extensions/testpilot@labs.mozilla.com/skin/all/tp-submit-48x48.png
+extensions/testpilot@labs.mozilla.com/skin/linux/close_button.png
+extensions/testpilot@labs.mozilla.com/skin/linux/feedback-frown-16x16.png
+extensions/testpilot@labs.mozilla.com/skin/linux/feedback-smile-16x16.png
+extensions/testpilot@labs.mozilla.com/skin/linux/feedback.css
+extensions/testpilot@labs.mozilla.com/skin/mac/close_button.png
+extensions/testpilot@labs.mozilla.com/skin/mac/feedback-frown-16x16.png
+extensions/testpilot@labs.mozilla.com/skin/mac/feedback-smile-16x16.png
+extensions/testpilot@labs.mozilla.com/skin/mac/feedback.css
+extensions/testpilot@labs.mozilla.com/skin/mac/notification-tail-down.png
+extensions/testpilot@labs.mozilla.com/skin/mac/notification-tail-up.png
+extensions/testpilot@labs.mozilla.com/skin/win/close_button.png
+extensions/testpilot@labs.mozilla.com/skin/win/feedback-frown-16x16.png
+extensions/testpilot@labs.mozilla.com/skin/win/feedback-smile-16x16.png
+extensions/testpilot@labs.mozilla.com/skin/win/feedback.css
+extensions/testpilot@labs.mozilla.com/skin/win/notification-tail-down.png
+extensions/testpilot@labs.mozilla.com/skin/win/notification-tail-up.png
+extensions/testpilot@labs.mozilla.com/tests/test_data_store.js
+extensions/uriloader@pdf.js.xpi
+greprefs/all.js
+greprefs/security-prefs.js
+greprefs/xpinstall.js
+install.rdf
+modules/JSON.jsm
+modules/SpatialNavigation.js
+modules/utils.js
+mozilla-runtime@BIN_SUFFIX@
+old-homepage-default.properties
+README.txt
+res/arrow.gif
+res/arrowd.gif
+res/broken-image.gif
+res/broken-image.png
+res/charsetData.properties
+res/charsetalias.properties
+res/cmessage.txt
+res/fonts/fontEncoding.properties
+res/fonts/fontNameMap.properties
+res/fonts/mathfontCMEX10.properties
+res/fonts/mathfontCMSY10.properties
+res/fonts/mathfontMTExtra.properties
+res/fonts/mathfontMath1.properties
+res/fonts/mathfontMath2.properties
+res/fonts/mathfontMath4.properties
+res/fonts/mathfontPUA.properties
+res/fonts/pangoFontEncoding.properties
+res/forms.css
+res/full-screen-override.css
+res/hiddenWindow.html
+res/html.css
+res/html/gopher-audio.gif
+res/html/gopher-binary.gif
+res/html/gopher-find.gif
+res/html/gopher-image.gif
+res/html/gopher-menu.gif
+res/html/gopher-movie.gif
+res/html/gopher-sound.gif
+res/html/gopher-telnet.gif
+res/html/gopher-text.gif
+res/html/gopher-unknown.gif
+res/loading-image.gif
+res/loading-image.png
+res/maccharset.properties
+res/mathml.css
+res/os2charset.properties
+res/quirk.css
+res/ua.css
+res/unixcharset.properties
+res/viewsource.css
+res/wincharset.properties
+#ifdef XP_MACOSX
+run-mozilla.sh
+#endif
+searchplugins/DRAE.gif
+searchplugins/DRAE.png
+searchplugins/DRAE.src
+searchplugins/MediaDICO-fr.gif
+searchplugins/MediaDICO-fr.png
+searchplugins/MediaDICO-fr.src
+searchplugins/allegro-pl.gif
+searchplugins/allegro-pl.png
+searchplugins/allegro-pl.src
+searchplugins/amazon-de.gif
+searchplugins/amazon-de.png
+searchplugins/amazon-de.src
+searchplugins/amazon-en-GB.gif
+searchplugins/amazon-en-GB.png
+searchplugins/amazon-en-GB.src
+searchplugins/amazon-france.gif
+searchplugins/amazon-france.png
+searchplugins/amazon-france.src
+searchplugins/amazon-jp.gif
+searchplugins/amazon-jp.png
+searchplugins/amazon-jp.src
+searchplugins/amazondotcom-zh-TW.gif
+searchplugins/amazondotcom-zh-TW.png
+searchplugins/amazondotcom-zh-TW.src
+searchplugins/amazondotcom.gif
+searchplugins/amazondotcom.png
+searchplugins/amazondotcom.png
+searchplugins/amazondotcom.src
+searchplugins/amazondotcom.src
+searchplugins/answers.gif
+searchplugins/answers.png
+searchplugins/answers.png
+searchplugins/answers.src
+searchplugins/answers.src
+searchplugins/atlas-sk.gif
+searchplugins/atlas-sk.png
+searchplugins/atlas-sk.src
+searchplugins/baidu.gif
+searchplugins/baidu.png
+searchplugins/baidu.src
+searchplugins/bluu.xml
+searchplugins/bok-NO.gif
+searchplugins/bok-NO.png
+searchplugins/bok-NO.src
+searchplugins/bolcom-nl.gif
+searchplugins/bolcom-nl.png
+searchplugins/bolcom-nl.src
+searchplugins/bookplus-fi.gif
+searchplugins/bookplus-fi.png
+searchplugins/bookplus-fi.src
+searchplugins/caplex-NO.gif
+searchplugins/caplex-NO.png
+searchplugins/caplex-NO.src
+searchplugins/centrum-cz.gif
+searchplugins/centrum-cz.png
+searchplugins/centrum-cz.src
+searchplugins/centrum-cz.xml
+searchplugins/creativecommons-fi.gif
+searchplugins/creativecommons-fi.png
+searchplugins/creativecommons-fi.src
+searchplugins/creativecommons-it.gif
+searchplugins/creativecommons-it.png
+searchplugins/creativecommons-it.src
+searchplugins/creativecommons-zh-TW.gif
+searchplugins/creativecommons-zh-TW.png
+searchplugins/creativecommons-zh-TW.src
+searchplugins/creativecommons.gif
+searchplugins/creativecommons.png
+searchplugins/creativecommons.png
+searchplugins/creativecommons.src
+searchplugins/creativecommons.src
+searchplugins/daum-ko.gif
+searchplugins/daum-ko.png
+searchplugins/daum-ko.src
+searchplugins/demauro-it.gif
+searchplugins/demauro-it.png
+searchplugins/demauro-it.src
+searchplugins/dictionary-en-GB.gif
+searchplugins/dictionary-en-GB.png
+searchplugins/dictionary-en-GB.src
+searchplugins/dictionary.png
+searchplugins/dictionary.src
+searchplugins/dunaj-sk.gif
+searchplugins/dunaj-sk.png
+searchplugins/dunaj-sk.src
+searchplugins/eBay-de.gif
+searchplugins/eBay-de.png
+searchplugins/eBay-de.src
+searchplugins/eBay-en-GB.gif
+searchplugins/eBay-en-GB.png
+searchplugins/eBay-en-GB.src
+searchplugins/eBay-france.gif
+searchplugins/eBay-france.png
+searchplugins/eBay-france.src
+searchplugins/eBay-fy-NL.xml
+searchplugins/eBay-gu.gif
+searchplugins/eBay-gu.png
+searchplugins/eBay-gu.src
+searchplugins/eBay-nl.gif
+searchplugins/eBay-nl.png
+searchplugins/eBay-nl.src
+searchplugins/eBay-nl.xml
+searchplugins/eBay-zh-CN.gif
+searchplugins/eBay-zh-CN.png
+searchplugins/eBay-zh-CN.src
+searchplugins/eBay-zh-CN.xml
+searchplugins/eBay-zh-TW.gif
+searchplugins/eBay-zh-TW.png
+searchplugins/eBay-zh-TW.src
+searchplugins/eBay-zh-TW.xml
+searchplugins/eBay.gif
+searchplugins/eBay.gif
+searchplugins/eBay.png
+searchplugins/eBay.src
+searchplugins/eBay.src
+searchplugins/ebay-it.gif
+searchplugins/ebay-it.png
+searchplugins/ebay-it.src
+searchplugins/filesearchru.gif
+searchplugins/filesearchru.png
+searchplugins/filesearchru.src
+searchplugins/filesearchru.xml
+searchplugins/goo.gif
+searchplugins/goo.png
+searchplugins/goo.src
+searchplugins/goo.xml
+searchplugins/google-NO.gif
+searchplugins/google-NO.png
+searchplugins/google-NO.src
+searchplugins/google-ar.gif
+searchplugins/google-ar.png
+searchplugins/google-ar.src
+searchplugins/google-ar.xml
+searchplugins/google-bg.gif
+searchplugins/google-bg.png
+searchplugins/google-bg.src
+searchplugins/google-ca.gif
+searchplugins/google-ca.png
+searchplugins/google-ca.src
+searchplugins/google-de.gif
+searchplugins/google-de.png
+searchplugins/google-de.src
+searchplugins/google-dk.gif
+searchplugins/google-dk.png
+searchplugins/google-dk.src
+searchplugins/google-en-GB.gif
+searchplugins/google-en-GB.png
+searchplugins/google-en-GB.src
+searchplugins/google-es-ES.gif
+searchplugins/google-es-ES.png
+searchplugins/google-es-ES.src
+searchplugins/google-eu.gif
+searchplugins/google-eu.png
+searchplugins/google-eu.src
+searchplugins/google-fi.gif
+searchplugins/google-fi.png
+searchplugins/google-fi.src
+searchplugins/google-ga-IE.gif
+searchplugins/google-ga-IE.png
+searchplugins/google-ga-IE.src
+searchplugins/google-gu.gif
+searchplugins/google-gu.png
+searchplugins/google-gu.src
+searchplugins/google-it.gif
+searchplugins/google-it.png
+searchplugins/google-it.src
+searchplugins/google-jp.gif
+searchplugins/google-jp.png
+searchplugins/google-jp.src
+searchplugins/google-ko.gif
+searchplugins/google-ko.png
+searchplugins/google-ko.src
+searchplugins/google-lt.gif
+searchplugins/google-lt.png
+searchplugins/google-lt.src
+searchplugins/google-nl.gif
+searchplugins/google-nl.png
+searchplugins/google-nl.src
+searchplugins/google-pl.gif
+searchplugins/google-pl.png
+searchplugins/google-pl.src
+searchplugins/google-pt-BR.gif
+searchplugins/google-pt-BR.png
+searchplugins/google-pt-BR.src
+searchplugins/google-ro.gif
+searchplugins/google-ro.png
+searchplugins/google-ro.src
+searchplugins/google-ru.gif
+searchplugins/google-ru.png
+searchplugins/google-ru.src
+searchplugins/google-sl.gif
+searchplugins/google-sl.png
+searchplugins/google-sl.src
+searchplugins/google-zh-TW.gif
+searchplugins/google-zh-TW.png
+searchplugins/google-zh-TW.src
+searchplugins/google.gif
+searchplugins/google.gif
+searchplugins/google.png
+searchplugins/google.src
+searchplugins/google.src
+searchplugins/grandiccionari.gif
+searchplugins/grandiccionari.png
+searchplugins/grandiccionari.src
+searchplugins/grandiccionari.xml
+searchplugins/huuto-fi.gif
+searchplugins/huuto-fi.png
+searchplugins/huuto-fi.src
+searchplugins/jyxo-cz.gif
+searchplugins/jyxo-cz.png
+searchplugins/jyxo-cz.src
+searchplugins/lingvo.yandex.ru.gif
+searchplugins/lingvo.yandex.ru.png
+searchplugins/lingvo.yandex.ru.src
+searchplugins/lingvo.yandex.ru.xml
+searchplugins/llibres.gif
+searchplugins/llibres.png
+searchplugins/llibres.src
+searchplugins/mall-cz.gif
+searchplugins/mall-cz.png
+searchplugins/mall-cz.src
+searchplugins/mercadolivre-com-br.gif
+searchplugins/mercadolivre-com-br.png
+searchplugins/mercadolivre-com-br.src
+searchplugins/merlin-pl.gif
+searchplugins/merlin-pl.png
+searchplugins/merlin-pl.src
+searchplugins/najdi-si.gif
+searchplugins/najdi-si.png
+searchplugins/najdi-si.src
+searchplugins/nana.xml
+searchplugins/naver-ko.gif
+searchplugins/naver-ko.png
+searchplugins/naver-ko.src
+searchplugins/netex.xml
+searchplugins/nosaltres.gif
+searchplugins/nosaltres.png
+searchplugins/nosaltres.src
+searchplugins/nosaltres.xml
+searchplugins/pbi-pl.gif
+searchplugins/pbi-pl.png
+searchplugins/pbi-pl.src
+searchplugins/pbi-pl.xml
+searchplugins/priceru.gif
+searchplugins/priceru.png
+searchplugins/priceru.src
+searchplugins/pwn-pl.gif
+searchplugins/pwn-pl.png
+searchplugins/pwn-pl.src
+searchplugins/qxl-NO.gif
+searchplugins/qxl-NO.png
+searchplugins/qxl-NO.src
+searchplugins/rakuten.gif
+searchplugins/rakuten.png
+searchplugins/rakuten.src
+searchplugins/rambler.xml
+searchplugins/seznam-cz.gif
+searchplugins/seznam-cz.png
+searchplugins/seznam-cz.src
+searchplugins/sigov-gov-si.gif
+searchplugins/sigov-gov-si.png
+searchplugins/sigov-gov-si.src
+searchplugins/slunecnice-cz.gif
+searchplugins/slunecnice-cz.png
+searchplugins/slunecnice-cz.src
+searchplugins/submarino-com-br.gif
+searchplugins/submarino-com-br.png
+searchplugins/submarino-com-br.src
+searchplugins/taobao.gif
+searchplugins/taobao.png
+searchplugins/taobao.src
+searchplugins/taobao.xml
+searchplugins/telefonkatalogen-NO.gif
+searchplugins/telefonkatalogen-NO.png
+searchplugins/telefonkatalogen-NO.src
+searchplugins/termiadur.xml
+searchplugins/universal-pt.gif
+searchplugins/universal-pt.png
+searchplugins/universal-pt.src
+searchplugins/vandale-nl.gif
+searchplugins/vandale-nl.png
+searchplugins/vandale-nl.src
+searchplugins/walla_sites.gif
+searchplugins/walla_sites.png
+searchplugins/walla_sites.src
+searchplugins/wikipedia-bg.gif
+searchplugins/wikipedia-bg.png
+searchplugins/wikipedia-bg.src
+searchplugins/wikipedia-ca.gif
+searchplugins/wikipedia-ca.png
+searchplugins/wikipedia-ca.src
+searchplugins/wikipedia-de.gif
+searchplugins/wikipedia-de.png
+searchplugins/wikipedia-de.src
+searchplugins/wikipedia-en-CN.xml
+searchplugins/wikipedia-es-ES.gif
+searchplugins/wikipedia-es-ES.png
+searchplugins/wikipedia-es-ES.src
+searchplugins/wikipedia-eu.gif
+searchplugins/wikipedia-eu.png
+searchplugins/wikipedia-eu.src
+searchplugins/wikipedia-fi.gif
+searchplugins/wikipedia-fi.png
+searchplugins/wikipedia-fi.src
+searchplugins/wikipedia-fr.gif
+searchplugins/wikipedia-fr.png
+searchplugins/wikipedia-fr.src
+searchplugins/wikipedia-fy.gif
+searchplugins/wikipedia-fy.png
+searchplugins/wikipedia-fy.src
+searchplugins/wikipedia-he.gif
+searchplugins/wikipedia-he.png
+searchplugins/wikipedia-he.src
+searchplugins/wikipedia-it.gif
+searchplugins/wikipedia-it.png
+searchplugins/wikipedia-it.src
+searchplugins/wikipedia-lt.gif
+searchplugins/wikipedia-lt.png
+searchplugins/wikipedia-lt.src
+searchplugins/wikipedia-nl.gif
+searchplugins/wikipedia-nl.png
+searchplugins/wikipedia-nl.src
+searchplugins/wikipedia-pl.gif
+searchplugins/wikipedia-pl.png
+searchplugins/wikipedia-pl.src
+searchplugins/wikipedia-ru.gif
+searchplugins/wikipedia-ru.png
+searchplugins/wikipedia-ru.src
+searchplugins/wikipedia-sk.gif
+searchplugins/wikipedia-sk.png
+searchplugins/wikipedia-sk.src
+searchplugins/wikipedia-zh.xml
+searchplugins/wp-pl.gif
+searchplugins/wp-pl.png
+searchplugins/wp-pl.src
+searchplugins/yahoo-NO.gif
+searchplugins/yahoo-NO.png
+searchplugins/yahoo-NO.src
+searchplugins/yahoo-ar.gif
+searchplugins/yahoo-ar.png
+searchplugins/yahoo-ar.src
+searchplugins/yahoo-ca.gif
+searchplugins/yahoo-ca.png
+searchplugins/yahoo-ca.src
+searchplugins/yahoo-cn.gif
+searchplugins/yahoo-cn.png
+searchplugins/yahoo-cn.src
+searchplugins/yahoo-de.gif
+searchplugins/yahoo-de.png
+searchplugins/yahoo-de.src
+searchplugins/yahoo-dk.gif
+searchplugins/yahoo-dk.png
+searchplugins/yahoo-dk.src
+searchplugins/yahoo-en-GB.gif
+searchplugins/yahoo-en-GB.png
+searchplugins/yahoo-en-GB.src
+searchplugins/yahoo-es-ES.gif
+searchplugins/yahoo-es-ES.png
+searchplugins/yahoo-es-ES.src
+searchplugins/yahoo-fi.gif
+searchplugins/yahoo-fi.png
+searchplugins/yahoo-fi.src
+searchplugins/yahoo-france.gif
+searchplugins/yahoo-france.png
+searchplugins/yahoo-france.src
+searchplugins/yahoo-gu.gif
+searchplugins/yahoo-gu.png
+searchplugins/yahoo-gu.src
+searchplugins/yahoo-it.gif
+searchplugins/yahoo-it.png
+searchplugins/yahoo-it.src
+searchplugins/yahoo-jp-auctions.gif
+searchplugins/yahoo-jp-auctions.png
+searchplugins/yahoo-jp-auctions.src
+searchplugins/yahoo-jp-shopping.gif
+searchplugins/yahoo-jp-shopping.png
+searchplugins/yahoo-jp-shopping.src
+searchplugins/yahoo-jp-shopping.xml
+searchplugins/yahoo-jp.gif
+searchplugins/yahoo-jp.png
+searchplugins/yahoo-jp.src
+searchplugins/yahoo-kr.gif
+searchplugins/yahoo-kr.png
+searchplugins/yahoo-kr.src
+searchplugins/yahoo-nl.gif
+searchplugins/yahoo-nl.png
+searchplugins/yahoo-nl.src
+searchplugins/yahoo-pt-BR.gif
+searchplugins/yahoo-pt-BR.png
+searchplugins/yahoo-pt-BR.src
+searchplugins/yahoo-ru.xml
+searchplugins/yahoo-tw.gif
+searchplugins/yahoo-tw.png
+searchplugins/yahoo-tw.src
+searchplugins/yahoo-zh-CN.xml
+searchplugins/yahoo.gif
+searchplugins/yahoo.gif
+searchplugins/yahoo.png
+searchplugins/yahoo.src
+searchplugins/yahoo.src
+searchplugins/yandex.gif
+searchplugins/yandex.png
+searchplugins/yandex.src
+searchplugins/zoznam-sk.gif
+searchplugins/zoznam-sk.png
+searchplugins/zoznam-sk.src
+uninstall/UninstallDeerPark.exe
+uninstall/UninstallFirefox.exe
+uninstall/uninst.exe
+uninstall/uninstall.exe
+#ifndef MOZ_UPDATER
+  #ifdef XP_MACOSX
+    updater.app/
+  #else
+    updater@BIN_SUFFIX@
+  #endif
+  updater.ini
+#endif
+xpicleanup@BIN_SUFFIX@
+#ifdef MOZ_OMNIJAR
+  update.locale
+  omni.jar
+  chrome/af.jar
+  chrome/af.manifest
+  chrome/ar.jar
+  chrome/ar.manifest
+  chrome/as.jar
+  chrome/as.manifest
+  chrome/ast.jar
+  chrome/ast.manifest
+  chrome/be.jar
+  chrome/be.manifest
+  chrome/bg.jar
+  chrome/bg.manifest
+  chrome/bn-BD.jar
+  chrome/bn-BD.manifest
+  chrome/bn-IN.jar
+  chrome/bn-IN.manifest
+  chrome/ca.jar
+  chrome/ca.manifest
+  chrome/cs.jar
+  chrome/cs.manifest
+  chrome/cy.jar
+  chrome/cy.manifest
+  chrome/da.jar
+  chrome/da.manifest
+  chrome/de.jar
+  chrome/de.manifest
+  chrome/el.jar
+  chrome/el.manifest
+  chrome/en-GB.jar
+  chrome/en-GB.manifest
+  chrome/en-US.jar
+  chrome/en-US.manifest
+  chrome/eo.jar
+  chrome/eo.manifest
+  chrome/es-AR.jar
+  chrome/es-AR.manifest
+  chrome/es-CL.jar
+  chrome/es-CL.manifest
+  chrome/es-ES.jar
+  chrome/es-ES.manifest
+  chrome/es-MX.jar
+  chrome/es-MX.manifest
+  chrome/et.jar
+  chrome/et.manifest
+  chrome/eu.jar
+  chrome/eu.manifest
+  chrome/fa.jar
+  chrome/fa.manifest
+  chrome/fi.jar
+  chrome/fi.manifest
+  chrome/fr.jar
+  chrome/fr.manifest
+  chrome/fy-NL.jar
+  chrome/fy-NL.manifest
+  chrome/ga-IE.jar
+  chrome/ga-IE.manifest
+  chrome/gd.jar
+  chrome/gd.manifest
+  chrome/gl.jar
+  chrome/gl.manifest
+  chrome/gu-IN.jar
+  chrome/gu-IN.manifest
+  chrome/he.jar
+  chrome/he.manifest
+  chrome/hi-IN.jar
+  chrome/hi-IN.manifest
+  chrome/hr.jar
+  chrome/hr.manifest
+  chrome/hu.jar
+  chrome/hu.manifest
+  chrome/id.jar
+  chrome/id.manifest
+  chrome/is.jar
+  chrome/is.manifest
+  chrome/it.jar
+  chrome/it.manifest
+  chrome/ja-JP-mac.jar
+  chrome/ja-JP-mac.manifest
+  chrome/ja.jar
+  chrome/ja.manifest
+  chrome/ka.jar
+  chrome/ka.manifest
+  chrome/kk.jar
+  chrome/kk.manifest
+  chrome/kn.jar
+  chrome/kn.manifest
+  chrome/ko.jar
+  chrome/ko.manifest
+  chrome/ku.jar
+  chrome/ku.manifest
+  chrome/lt.jar
+  chrome/lt.manifest
+  chrome/lv.jar
+  chrome/lv.manifest
+  chrome/mk.jar
+  chrome/mk.manifest
+  chrome/ml.jar
+  chrome/ml.manifest
+  chrome/mn.jar
+  chrome/mn.manifest
+  chrome/mr.jar
+  chrome/mr.manifest
+  chrome/nb-NO.jar
+  chrome/nb-NO.manifest
+  chrome/nl.jar
+  chrome/nl.manifest
+  chrome/nn-NO.jar
+  chrome/nn-NO.manifest
+  chrome/oc.jar
+  chrome/oc.manifest
+  chrome/or.jar
+  chrome/or.manifest
+  chrome/pa-IN.jar
+  chrome/pa-IN.manifest
+  chrome/pl.jar
+  chrome/pl.manifest
+  chrome/pt-BR.jar
+  chrome/pt-BR.manifest
+  chrome/pt-PT.jar
+  chrome/pt-PT.manifest
+  chrome/rm.jar
+  chrome/rm.manifest
+  chrome/ro.jar
+  chrome/ro.manifest
+  chrome/ru.jar
+  chrome/ru.manifest
+  chrome/si.jar
+  chrome/si.manifest
+  chrome/sk.jar
+  chrome/sk.manifest
+  chrome/sl.jar
+  chrome/sl.manifest
+  chrome/sq.jar
+  chrome/sq.manifest
+  chrome/sr.jar
+  chrome/sr.manifest
+  chrome/sv-SE.jar
+  chrome/sv-SE.manifest
+  chrome/ta-LK.jar
+  chrome/ta-LK.manifest
+  chrome/ta.jar
+  chrome/ta.manifest
+  chrome/te.jar
+  chrome/te.manifest
+  chrome/th.jar
+  chrome/th.manifest
+  chrome/tr.jar
+  chrome/tr.manifest
+  chrome/uk.jar
+  chrome/uk.manifest
+  chrome/vi.jar
+  chrome/vi.manifest
+  chrome/zh-CN.jar
+  chrome/zh-CN.manifest
+  chrome/zh-TW.jar
+  chrome/zh-TW.manifest
+  chrome/browser.jar
+  chrome/localized.manifest
+  chrome/nonlocalized.manifest
+  chrome/pippki.jar
+  chrome/toolkit.jar
+  components/addonManager.js
+  components/Aitc.js
+  components/AitcComponents.manifest
+  components/amContentHandler.js
+  components/amWebInstallListener.js
+  components/binary.manifest
+  components/browser.xpt
+  components/BrowserElementParent.js
+  components/BrowserElementParent.manifest
+  components/BrowserElementPromptService.jsm
+  components/BrowserElementParent.jsm
+  components/contentAreaDropListener.js
+  components/contentSecurityPolicy.js
+  components/crypto-SDR.js
+  components/FeedConverter.js
+  components/FeedProcessor.js
+  components/FeedWriter.js
+  components/fuelApplication.js
+  components/GPSDGeolocationProvider.js
+  components/interfaces.manifest
+  components/jsconsole-clhandler.js
+  components/MetricsCollectionService.js
+  components/NetworkGeolocationProvider.js
+  components/NotificationsComponents.manifest
+  components/nsBadCertHandler.js
+  components/nsBlocklistService.js
+  components/nsBrowserContentHandler.js
+  components/nsBrowserGlue.js
+  components/nsContentDispatchChooser.js
+  components/nsContentPrefService.js
+  components/nsDefaultCLH.js
+  components/nsDownloadManagerUI.js
+  #ifdef XP_UNIX
+    #ifndef XP_MACOSX
+      components/nsFilePicker.js
+    #endif
+  #endif
+  components/nsFormAutoComplete.js
+  components/nsFormHistory.js
+  components/nsHandlerService.js
+  components/nsHelperAppDlg.js
+  components/nsINIProcessor.js
+  components/nsLivemarkService.js
+  components/nsLoginInfo.js
+  components/nsLoginManager.js
+  components/nsLoginManagerPrompter.js
+  components/nsPlacesAutoComplete.js
+  components/nsPlacesDBFlush.js
+  components/nsPlacesExpiration.js
+  components/nsPrivateBrowsingService.js
+  components/nsPrompter.js
+  components/nsProxyAutoConfig.manifest
+  components/nsProxyAutoConfig.js
+  components/nsSafebrowsingApplication.js
+  components/nsSearchService.js
+  components/nsSearchSuggestions.js
+  components/nsSessionStartup.js
+  components/nsSessionStore.js
+  components/nsSetDefaultBrowser.js
+  components/nsSidebar.js
+  components/nsTaggingService.js
+  components/nsTryToClose.js
+  components/nsUpdateService.js
+  components/nsUpdateServiceStub.js
+  components/nsUpdateTimerManager.js
+  components/nsUrlClassifierLib.js
+  components/nsUrlClassifierListManager.js
+  components/nsURLFormatter.js
+  components/nsWebHandlerApp.js
+  components/PlacesProtocolHandler.js
+  components/storage-Legacy.js
+  components/storage-mozStorage.js
+#ifdef MOZ_B2G_RIL
+  components/nsTelephonyWorker.manifest
+  components/nsTelephonyWorker.js
+  components/Telephony.manifest
+  components/Telephony.js
+  components/WifiWorker.js
+  components/WifiWorker.manifest
+  components/DOMWifiManager.js
+  components/DOMWifiManager.manifest
+#endif
+  components/txEXSLTRegExFunctions.js
+  components/Weave.js
+  components/Webapps.js
+  components/Webapps.manifest
+  components/WebContentConverter.js
+  defaults/autoconfig/platform.js
+  defaults/autoconfig/prefcalls.js
+  defaults/pref/firefox-branding.js
+  defaults/pref/firefox.js
+  defaults/pref/firefox-l10n.js
+  defaults/pref/services-sync.js
+  defaults/profile/bookmarks.html
+  defaults/profile/chrome/userChrome-example.css
+  defaults/profile/chrome/userContent-example.css
+  defaults/profile/localstore.rdf
+  defaults/profile/mimeTypes.rdf
+  defaults/profile/prefs.js
+  greprefs.js
+  hyphenation/
+  hyphenation/hyph_af.dic
+  hyphenation/hyph_bg.dic
+  hyphenation/hyph_ca.dic
+  hyphenation/hyph_cy.dic
+  hyphenation/hyph_da.dic
+  hyphenation/hyph_de-1901.dic
+  hyphenation/hyph_de-1996.dic
+  hyphenation/hyph_de-CH.dic
+  hyphenation/hyph_en_US.dic
+  hyphenation/hyph_eo.dic
+  hyphenation/hyph_es.dic
+  hyphenation/hyph_et.dic
+  hyphenation/hyph_fi.dic
+  hyphenation/hyph_fr.dic
+  hyphenation/hyph_gl.dic
+  hyphenation/hyph_hr.dic
+  hyphenation/hyph_hsb.dic
+  hyphenation/hyph_hu.dic
+  hyphenation/hyph_ia.dic
+  hyphenation/hyph_is.dic
+  hyphenation/hyph_it.dic
+  hyphenation/hyph_kmr.dic
+  hyphenation/hyph_la.dic
+  hyphenation/hyph_lt.dic
+  hyphenation/hyph_mn.dic
+  hyphenation/hyph_nb.dic
+  hyphenation/hyph_nl.dic
+  hyphenation/hyph_nn.dic
+  hyphenation/hyph_pt.dic
+  hyphenation/hyph_ru.dic
+  hyphenation/hyph_sh.dic
+  hyphenation/hyph_sl.dic
+  hyphenation/hyph_sv.dic
+  hyphenation/hyph_tr.dic
+  hyphenation/hyph_uk.dic
+  modules/AddonLogging.jsm
+  modules/AddonManager.jsm
+  modules/AddonRepository.jsm
+  modules/AddonUpdateChecker.jsm
+  modules/CertUtils.jsm
+  modules/CrashSubmit.jsm
+  modules/CSPUtils.jsm
+  modules/ctypes.jsm
+  modules/debug.js
+  modules/distribution.js
+  modules/DownloadLastDir.jsm
+  modules/DownloadPaths.jsm
+  #ifdef XP_WIN
+    modules/DownloadTaskbarProgress.jsm
+  #endif
+  modules/DownloadUtils.jsm
+  modules/FileUtils.jsm
+  modules/Geometry.jsm
+  modules/HUDService.jsm
+  modules/InlineSpellChecker.jsm
+  modules/ISO8601DateUtils.jsm
+  modules/LightweightThemeConsumer.jsm
+  modules/LightweightThemeManager.jsm
+  modules/Microformats.js
+  modules/NetUtil.jsm
+  modules/NetworkPrioritizer.jsm
+  modules/openLocationLastURL.jsm
+  modules/PerfMeasurement.jsm
+  modules/PlacesDBUtils.jsm
+  modules/PlacesUIUtils.jsm
+  modules/PlacesUtils.jsm
+  modules/PluginProvider.jsm
+  modules/PluralForm.jsm
+  modules/PopupNotifications.jsm
+  modules/reflect.jsm
+  modules/Services.jsm
+  modules/services-common/async.js
+  modules/services-common/log4moz.js
+  modules/services-common/observers.js
+  modules/services-common/preferences.js
+  modules/services-common/rest.js
+  modules/services-common/stringbundle.js
+  modules/services-common/utils.js
+  modules/services-notifications/service.js
+  modules/services-sync/auth.js
+  modules/services-sync/base_records/collection.js
+  modules/services-sync/base_records/crypto.js
+  modules/services-sync/base_records/keys.js
+  modules/services-sync/base_records/wbo.js
+  modules/services-sync/constants.js
+  modules/services-sync/engines/bookmarks.js
+  modules/services-sync/engines/clients.js
+  modules/services-sync/engines/forms.js
+  modules/services-sync/engines/history.js
+  modules/services-sync/engines.js
+  modules/services-sync/engines/passwords.js
+  modules/services-sync/engines/prefs.js
+  modules/services-sync/engines/tabs.js
+  modules/services-sync/ext/Observers.js
+  modules/services-sync/ext/Preferences.js
+  modules/services-sync/ext/StringBundle.js
+  modules/services-sync/ext/Sync.js
+  modules/services-sync/identity.js
+  modules/services-sync/log4moz.js
+  modules/services-sync/notifications.js
+  modules/services-sync/resource.js
+  modules/services-sync/service.js
+  modules/services-sync/status.js
+  modules/services-sync/stores.js
+  modules/services-sync/trackers.js
+  modules/services-sync/type_records/bookmark.js
+  modules/services-sync/type_records/clients.js
+  modules/services-sync/type_records/forms.js
+  modules/services-sync/type_records/history.js
+  modules/services-sync/type_records/passwords.js
+  modules/services-sync/type_records/prefs.js
+  modules/services-sync/type_records/tabs.js
+  modules/services-sync/util.js
+  modules/stylePanel.jsm
+  modules/tabview/AllTabs.jsm
+  modules/tabview/groups.jsm
+  modules/tabview/utils.jsm
+  modules/Webapps.jsm
+  modules/WindowDraggingUtils.jsm
+  #ifdef XP_WIN
+    modules/WindowsJumpLists.jsm
+    modules/WindowsPreviewPerTab.jsm
+  #endif
+  modules/XPCOMUtils.jsm
+  modules/XPIProvider.jsm
+  res/contenteditable.css
+  res/designmode.css
+  res/dtd/mathml.dtd
+  res/dtd/xhtml11.dtd
+  res/EditorOverride.css
+  res/entityTables/html40Latin1.properties
+  res/entityTables/html40Special.properties
+  res/entityTables/html40Symbols.properties
+  res/entityTables/htmlEntityVersions.properties
+  res/entityTables/mathml20.properties
+  res/entityTables/transliterate.properties
+  res/fonts/mathfont.properties
+  res/fonts/mathfontStandardSymbolsL.properties
+  res/fonts/mathfontSTIXNonUnicode.properties
+  res/fonts/mathfontSTIXSize1.properties
+  res/fonts/mathfontSTIXSizeOneSym.properties
+  #ifdef XP_WIN
+    res/fonts/mathfontSymbol.properties
+  #endif
+  res/fonts/mathfontUnicode.properties
+  res/grabber.gif
+  res/html/folder.png
+  res/langGroups.properties
+  res/language.properties
+  res/svg.css
+  res/table-add-column-after-active.gif
+  res/table-add-column-after.gif
+  res/table-add-column-after-hover.gif
+  res/table-add-column-before-active.gif
+  res/table-add-column-before.gif
+  res/table-add-column-before-hover.gif
+  res/table-add-row-after-active.gif
+  res/table-add-row-after.gif
+  res/table-add-row-after-hover.gif
+  res/table-add-row-before-active.gif
+  res/table-add-row-before.gif
+  res/table-add-row-before-hover.gif
+  res/table-remove-column-active.gif
+  res/table-remove-column.gif
+  res/table-remove-column-hover.gif
+  res/table-remove-row-active.gif
+  res/table-remove-row.gif
+  res/table-remove-row-hover.gif
+#else
+  components/binary.manifest
+  omni.jar
+  omni.ja
+#endif
+#ifdef XP_MACOSX
+  ../Plug-Ins/PrintPDE.plugin/Contents/Info.plist
+  ../Plug-Ins/PrintPDE.plugin/Contents/MacOS/PrintPDE
+  ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/Localizable.strings
+  ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/classes.nib
+  ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/info.nib
+  ../Plug-Ins/PrintPDE.plugin/Contents/Resources/English.lproj/PrintPDE.nib/objects.xib
+  ../Resources/firefox-bin.rsrc
+  components/accessibility.xpt
+  components/alerts.xpt
+  components/appshell.xpt
+  components/appstartup.xpt
+  components/autoconfig.xpt
+  components/browser-feeds.xpt
+  components/browsercompsbase.xpt
+  components/browsersearch.xpt
+  components/caps.xpt
+  components/chardet.xpt
+  components/chrome.xpt
+  components/commandhandler.xpt
+  components/commandlines.xpt
+  components/composer.xpt
+  components/content.xpt
+  components/content_base.xpt
+  components/content_html.xpt
+  components/content_htmldoc.xpt
+  components/content_xmldoc.xpt
+  components/content_xslt.xpt
+  components/content_xtf.xpt
+  components/contentprefs.xpt
+  components/cookie.xpt
+  components/crashreporter.xpt
+  components/directory.xpt
+  components/docshell.xpt
+  components/dom.xpt
+  components/dom_apps.xpt
+  components/dom_base.xpt
+#ifdef MOZ_B2G_RIL
+  components/dom_telephony.xpt
+  components/dom_wifi.xpt
+  components/dom_system_b2g.xpt
+#endif
+  components/dom_canvas.xpt
+  components/dom_core.xpt
+  components/dom_css.xpt
+  components/dom_events.xpt
+  components/dom_geolocation.xpt
+  components/dom_devicestorage.xpt
+  components/dom_html.xpt
+  components/dom_json.xpt
+  components/dom_loadsave.xpt
+  components/dom_offline.xpt
+  components/dom_push.xpt
+  components/dom_range.xpt
+  components/dom_sidebar.xpt
+  components/dom_smil.xpt
+  components/dom_storage.xpt
+  components/dom_stylesheets.xpt
+  components/dom_svg.xpt
+  components/dom_threads.xpt
+  components/dom_traversal.xpt
+  components/dom_views.xpt
+  components/dom_xbl.xpt
+  components/dom_xpath.xpt
+  components/dom_xul.xpt
+  components/downloads.xpt
+  components/editor.xpt
+  components/embed_base.xpt
+  components/extensions.xpt
+  components/exthandler.xpt
+  components/exthelper.xpt
+  components/fastfind.xpt
+  components/feeds.xpt
+  components/find.xpt
+  components/firefox.xpt
+  components/fuel.xpt
+  components/gfx.xpt
+  components/gksvgrenderer.xpt
+  components/html5.xpt
+  components/htmlparser.xpt
+  components/imgicon.xpt
+  components/imglib2.xpt
+  components/inspector.xpt
+  components/intl.xpt
+  components/jar.xpt
+  components/jsconsole.xpt
+  components/jsdservice.xpt
+  components/layout_base.xpt
+  components/layout_printing.xpt
+  components/layout_xul.xpt
+  components/layout_xul_tree.xpt
+  components/locale.xpt
+  components/loginmgr.xpt
+  components/lwbrk.xpt
+  components/migration.xpt
+  components/mimetype.xpt
+  components/mozbrwsr.xpt
+  components/mozfind.xpt
+  components/necko.xpt
+  components/necko_about.xpt
+  components/necko_cache.xpt
+  components/necko_cookie.xpt
+  components/necko_data.xpt
+  components/necko_dns.xpt
+  components/necko_file.xpt
+  components/necko_ftp.xpt
+  components/necko_http.xpt
+  components/necko_res.xpt
+  components/necko_socket.xpt
+  components/necko_strconv.xpt
+  components/necko_viewsource.xpt
+  components/necko_wifi.xpt
+  components/nsKillAll.js
+  components/nsProgressDialog.js
+  components/nsResetPref.js
+  components/oji.xpt
+  components/parentalcontrols.xpt
+  components/passwordmgr.xpt
+  components/pipboot.xpt
+  components/pipnss.xpt
+  components/pippki.xpt
+  components/places.xpt
+  components/plugin.xpt
+  components/pref.xpt
+  components/prefetch.xpt
+  components/profile.xpt
+  components/progressDlg.xpt
+  components/proxyObjInst.xpt
+  components/rdf.xpt
+  components/safebrowsing.xpt
+  components/satchel.xpt
+  components/saxparser.xpt
+  components/search.xpt
+  components/sessionstore.xpt
+  components/shellservice.xpt
+  components/shistory.xpt
+  components/spellchecker.xpt
+  components/storage.xpt
+  components/toolkitprofile.xpt
+  components/toolkitsearch.xpt
+  components/txmgr.xpt
+  components/txtsvc.xpt
+  components/uconv.xpt
+  components/unicharutil.xpt
+  components/update.xpt
+  components/uriloader.xpt
+  components/url-classifier.xpt
+  components/urlformatter.xpt
+  components/webBrowser_core.xpt
+  components/webbrowserpersist.xpt
+  components/webshell_idls.xpt
+  components/websrvcs.xpt
+  components/widget.xpt
+  components/widget_cocoa.xpt
+  components/widget_mac.xpt
+  components/windowds.xpt
+  components/windowwatcher.xpt
+  components/xml-rpc.xpt
+  components/xpcom_base.xpt
+  components/xpcom_components.xpt
+  components/xpcom_ds.xpt
+  components/xpcom_io.xpt
+  components/xpcom_obsolete.xpt
+  components/xpcom_system.xpt
+  components/xpcom_threads.xpt
+  components/xpcom_xpti.xpt
+  components/xpconnect.xpt
+  components/xpinstall.xpt
+  components/xulapp.xpt
+  components/xuldoc.xpt
+  components/xultmpl.xpt
+  components/zipwriter.xpt
+  extensions/inspector@mozilla.org/chrome/chromelist.txt
+  init.d/README
+  libwidget.rsrc
+  plugin-container
+  plugins/Default Plugin.plugin/Contents/Info.plist
+  plugins/Default Plugin.plugin/Contents/MacOS/Default Plugin
+  plugins/Default Plugin.plugin/Contents/PkgInfo
+  plugins/Default Plugin.plugin/Contents/Resources/Default Plugin.rsrc
+  plugins/Default Plugin.plugin/Contents/Resources/English.lproj/InfoPlist.strings
+  plugins/DefaultPlugin.plugin/Contents/Info.plist
+  plugins/DefaultPlugin.plugin/Contents/MacOS/DefaultPlugin
+  plugins/DefaultPlugin.plugin/Contents/Resources/English.lproj/InfoPlist.strings
+  plugins/DefaultPlugin.plugin/Contents/Resources/plugin.png
+  plugins/JavaEmbeddingPlugin.bundle/Contents/Info.plist
+  plugins/JavaEmbeddingPlugin.bundle/Contents/MacOS/JavaEmbeddingPlugin
+  plugins/JavaEmbeddingPlugin.bundle/Contents/MacOS/JavaEmbeddingPlugin.policy
+  plugins/JavaEmbeddingPlugin.bundle/Contents/PkgInfo
+  plugins/JavaEmbeddingPlugin.bundle/Contents/Resources/English.lproj/InfoPlist.strings
+  plugins/JavaEmbeddingPlugin.bundle/Contents/Resources/Java/JavaEmbeddingPlugin.jar
+  plugins/MRJPlugin.plugin/Contents/Info.plist
+  plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin
+  plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.jar
+  plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.policy
+  plugins/MRJPlugin.plugin/Contents/MacOS/MRJPlugin.properties
+  plugins/MRJPlugin.plugin/Contents/PkgInfo
+  plugins/MRJPlugin.plugin/Contents/Resources/English.lproj/InfoPlist.strings
+  plugins/MRJPlugin.plugin/Contents/Resources/MRJPlugin.rsrc
+  redo-prebinding.sh
+  res/bloatcycle.html
+  res/cursors/arrowN.tiff
+  res/cursors/arrowS.tiff
+  res/cursors/colResize.tiff
+  res/cursors/help.tiff
+  res/cursors/rowResize.tiff
+  res/cursors/sizeNE.tiff
+  res/cursors/sizeNESW.tiff
+  res/cursors/sizeNS.tiff
+  res/cursors/sizeNW.tiff
+  res/cursors/sizeNWSE.tiff
+  res/cursors/sizeSE.tiff
+  res/cursors/sizeSW.tiff
+  res/cursors/spin1.tiff
+  res/cursors/spin2.tiff
+  res/cursors/spin3.tiff
+  res/cursors/spin4.tiff
+  res/cursors/vtIBeam.tiff
+  res/cursors/zoomIn.tiff
+  res/cursors/zoomOut.tiff
+  res/cursors/CVS/Entries
+  res/cursors/CVS/Repository
+  res/cursors/CVS/Root
+  res/cursors/CVS/Tag
+  res/viewer.properties
+  updater.app/Contents/MacOS/updater.ini
+#endif
 #ifdef XP_UNIX
   #ifndef XP_MACOSX
-    chrome/icons/
-    chrome/icons/default/
+    chrome/icons/default/default.xpm
+    components/libimgicon.so
+    dictionaries/PL.aff
+    dictionaries/PL.dic
+    icons/document.png
+    icons/mozicon16.xpm
+    icons/mozicon50.xpm
+    plugins/libnullplugin.so
+    readme.txt
   #endif
 #endif
-chrome/overlayinfo/
-components/
-defaults/autoconfig/
-defaults/profile/
-defaults/profile/chrome/
-defaults/profile/US/*
-defaults/profile/extensions/
-defaults/profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/*
-distribution/
-distribution/extensions/
-extensions/
-extensions/inspector@mozilla.org/*
-extensions/reporter@mozilla.org/*
-extensions/talkback@mozilla.org/*
-extensions/testpilot@labs.mozilla.com/*
-extensions/{641d8d09-7dda-4850-8228-ac0ab65e2ac9}/*
-extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/*
-greprefs/
+#ifndef XP_WIN
+  res/fonts/mathfontSymbol.properties
+#endif
+#ifdef XP_WIN
+  components/brwsrcmp.dll
+  components/jsd3250.dll
+  components/nsPostUpdateWin.js
+  js3250.dll
+  mozcpp19.dll
+  mozcrt19.dll
+  #if MOZ_MSVC_REDIST != 1400
+    Microsoft.VC80.CRT.manifest
+    msvcm80.dll
+    msvcp80.dll
+    msvcr80.dll
+  #endif
+  #if MOZ_MSVC_REDIST != 1500
+    Microsoft.VC90.CRT.manifest
+    msvcm90.dll
+    msvcp90.dll
+    msvcr90.dll
+  #endif
+  #if MOZ_MSVC_REDIST != 1600
+    msvcp100.dll
+    msvcr100.dll
+  #endif
+  #if MOZ_MSVC_REDIST != 1700
+    msvcp110.dll
+    msvcr110.dll
+    #ifdef MOZ_METRO
+      vccorlib110.dll
+    #endif
+  #endif
+  #if MOZ_MSVC_REDIST != 1800
+    msvcp120.dll
+    msvcr120.dll
+    #ifdef MOZ_METRO
+      vccorlib120.dll
+    #endif
+  #endif
+  plugins/npnul32.dll
+#endif
+@DLL_PREFIX@xpcom_core@DLL_SUFFIX@
+components/@DLL_PREFIX@jar50@DLL_SUFFIX@
+#ifdef XP_WIN
+  components/xpinstal.dll
+#else
+  components/@DLL_PREFIX@jsd@DLL_SUFFIX@
+  components/@DLL_PREFIX@xpinstall@DLL_SUFFIX@
+#endif
+#ifndef MOZ_UPDATER
+  components/nsUpdateService.js
+  components/nsUpdateServiceStub.js
+#endif
+#Talkback
+#ifdef XP_WIN
+  extensions/talkback@mozilla.org/components/BrandRes.dll
+  extensions/talkback@mozilla.org/components/fullsoft.dll
+  extensions/talkback@mozilla.org/components/master.ini
+  extensions/talkback@mozilla.org/components/talkback-l10n.ini
+  extensions/talkback@mozilla.org/components/talkback.cnt
+  extensions/talkback@mozilla.org/components/talkback.exe
+  extensions/talkback@mozilla.org/components/talkback.hlp
+  extensions/talkback@mozilla.org/InstallDisabled
+#else
+  #ifdef XP_MACOSX
+    extensions/talkback@mozilla.org/components/talkback/master.ini
+    extensions/talkback@mozilla.org/components/talkback/talkback@DLL_SUFFIX@
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Info.plist
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/MacOS/Talkback
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/pbdevelopment.plist
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/PkgInfo
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/delete.tiff
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/disable.tiff
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/enable.tiff
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib/classes.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib/info.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ArchivingSettings.nib/objects.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/InfoPlist.strings
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib/classes.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib/info.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/IntroWizard.nib/objects.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/Localizable.strings
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib/classes.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib/info.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/MainMenu.nib/objects.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib/classes.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib/info.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/ProxySettings.nib/objects.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib/classes.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib/info.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/English.lproj/SendingSettings.nib/objects.nib
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/KeyInfoKeys.plist
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/KeyInfoSections.plist
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/send.tiff
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/sort_ascending.tiff
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/sort_descending.tiff
+    extensions/talkback@mozilla.org/components/talkback/Talkback.app/Contents/Resources/Talkback.icns
+  #else
+    extensions/talkback@mozilla.org/components/talkback/talkback
+    extensions/talkback@mozilla.org/components/talkback/XTalkback.ad
+    extensions/talkback@mozilla.org/components/talkback/master.ini
+    extensions/talkback@mozilla.org/components/talkback/talkback.so
+  #endif
+#endif
+#Remove Talkback files from old location (in case user updates from 1.0.x)
+components/BrandRes.dll
+components/fullsoft.dll
+components/master.ini
+components/qfaservices.dll
+components/qfaservices.xpt
+components/talkback-l10n.ini
+components/talkback.cnt
+components/talkback.exe
+components/talkback.hlp
+components/libqfaservices.so
+components/talkback/master.ini
+components/talkback/talkback
+components/talkback/talkback.so
+components/talkback/XTalkback.ad
+extensions/reporter@mozilla.org/install.rdf
+extensions/reporter@mozilla.org/chrome.manifest
+extensions/reporter@mozilla.org/chrome/reporter.jar
+extensions/reporter@mozilla.org/defaults/preferences/reporter.js
+#Remove Inspector (present from upgrades from Fx2/Fx3b3)
+extensions/inspector@mozilla.org/install.rdf
+extensions/inspector@mozilla.org/components/inspector-cmdline.js
+extensions/inspector@mozilla.org/chrome.manifest
+extensions/inspector@mozilla.org/chrome/inspector.jar
+extensions/inspector@mozilla.org/defaults/preferences/inspector.js
+extensions/inspector@mozilla.org/platform/WINNT/chrome/icons/default/winInspectorMain.ico
+extensions/inspector@mozilla.org/components/inspector.xpt
+extensions/inspector@mozilla.org/components/@DLL_PREFIX@inspector@DLL_SUFFIX@
+extensions/inspector@mozilla.org/chrome/icons/default/winInspectorMain.ico
+components/nsPlacesTransactionsService.js
+components/browserplaces.xpt
+components/nsPlacesDBFlush.js
+#ifndef MOZ_MAINTENANCE_SERVICE
+maintenanceservice.exe
+maintenanceservice_installer.exe
+#endif
 jssubloader/
-modules/
-#ifdef XP_MACOSX
-  plugins/Default Plugin.plugin/*
-  plugins/JavaEmbeddingPlugin.bundle/*
-  plugins/MRJPlugin.plugin/*
-  ../Plug-Ins/PrintPDE.plugin/*
-#endif
-res/*
-searchplugins/*
-webapprt/components/
--- a/browser/locales/en-US/chrome/browser/devtools/webconsole.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/webconsole.properties
@@ -70,16 +70,20 @@ ConsoleAPIDisabled=The Web Console loggi
 # the URL the correct direction. Parameters: %S is the web page URL.
 webConsoleWindowTitleAndURL=Web Console - %S
 
 # LOCALIZATION NOTE (webConsoleMixedContentWarning): the message displayed
 # after a URL in the Web Console that has been flagged for Mixed Content (i.e.
 # http content in an https page).
 webConsoleMixedContentWarning=Mixed Content
 
+# LOCALIZATION NOTE (webConsoleMoreInfoLabel): the more info tag displayed
+# after security related web console messages.
+webConsoleMoreInfoLabel=Learn More
+
 # LOCALIZATION NOTE (scratchpad.linkText): the text used in the right hand
 # side of the Web Console command line when JavaScript is being entered, to
 # indicate how to jump into scratchpad mode.
 scratchpad.linkText=Shift+RETURN - Open in Scratchpad
 
 # LOCALIZATION NOTE (gcliterm.instanceLabel): the console displays objects
 # using their type (from the constructor function) in this descriptive string.
 # Parameters: %S is the object type.
--- a/browser/metro/base/content/browser.xul
+++ b/browser/metro/base/content/browser.xul
@@ -286,25 +286,23 @@
             <toolbarbutton id="reload-button" class="urlbar-button"
                            oncommand="CommandUpdater.doCommand(
                                         event.shiftKey ? 'cmd_forceReload'
                                                        : 'cmd_reload');"/>
             <toolbarbutton id="stop-button" class="urlbar-button"
                            command="cmd_stop"/>
           </hbox>
 
-          <circularprogressindicator id="download-progress"
-                                     oncommand="Appbar.onDownloadButton()"/>
           <stack id="toolbar-contextual">
             <observes element="bcast_windowState" attribute="*"/>
             <observes element="bcast_urlbarState" attribute="*"/>
 
             <hbox id="toolbar-context-page" pack="end">
-              <toolbarbutton id="download-button" class="appbar-secondary"
-                             oncommand="Appbar.onDownloadButton()"/>
+              <circularprogressindicator id="download-progress"
+                                     oncommand="Appbar.onDownloadButton()"/>
               <toolbarbutton id="star-button" class="appbar-primary"
                              type="checkbox"
                              oncommand="Appbar.onStarButton()"/>
               <toolbarbutton id="pin-button" class="appbar-primary"
                              type="checkbox"
                              oncommand="Appbar.onPinButton()"/>
               <toolbarbutton id="menu-button" class="appbar-primary"
                              oncommand="Appbar.onMenuButton(event)"/>
@@ -716,21 +714,21 @@
           </deck>
         </hbox>
       </settings>
       <setting pref="signon.rememberSignons" title="&optionsHeader.privacy.passwords.label;" type="bool"/>
       <settings id="prefs-reporting" label="&optionsHeader.reporting.title;">
         <setting pref="app.crashreporter.autosubmit" type="bool" title="&optionsHeader.reporting.crashes.label;" oncommand="BrowserUI.crashReportingPrefChanged(this.value);"/>
       </settings>
       <settings id="prefs-telemetry" label="&optionsHeader.telemetry.title;">
-        <setting pref="toolkit.telemetry.enabled" type="bool" title="&optionsHeader.telemetry.label;" oncommand="FlyoutPanelsUI.PrefsFlyoutPanel.onTelemetryPreferenceChanged(this.value);"/>
+        <setting pref="toolkit.telemetry.enabled" type="bool" title="&optionsHeader.telemetry.label;"/>
       </settings>
       <settings id="prefs-dnt" label="&doNotTrack.title;">
         <description>&doNotTrack.desc;</description>
-        <setting id="prefs-dnt-value" pref="privacy.donottrackheader.value" onpreferencechanged="FlyoutPanelsUI.PrefsFlyoutPanel.onDNTPreferenceChanged();" type="radio" >
+        <setting id="prefs-dnt-value" pref="privacy.donottrackheader.value" type="radio" >
           <radiogroup id="prefs-dnt-options">
             <radio id="prefs-dnt-notrack" label="&doNotTrack.options.trackingNotOkay;" value="1"/>
             <radio id="prefs-dnt-nopref" label="&doNotTrack.options.noPreference;" value="-1"/>
             <radio id="prefs-dnt-oktrack" label="&doNotTrack.options.trackingOkay;" value="0"/>
           </radiogroup>
         </setting>
       </settings>
     </flyoutpanel>
--- a/browser/metro/base/content/flyoutpanels/FlyoutPanelsUI.js
+++ b/browser/metro/base/content/flyoutpanels/FlyoutPanelsUI.js
@@ -47,17 +47,17 @@ let FlyoutPanelsUI = {
       if (this._currentFlyout == this[aToShow]) {
         return;
       } else {
         this.hide();
       }
     }
 
     this._currentFlyout = this[aToShow];
-    if (this._currentFlyout.show) {
+    if (this._currentFlyout._show) {
       this._currentFlyout._show();
     } else {
       this._currentFlyout._topmostElement.show();
     }
     DialogUI.pushPopup(this, this._currentFlyout._topmostElement);
   },
 
   onBackButton: function() {
--- a/browser/metro/base/content/flyoutpanels/PrefsFlyoutPanel.js
+++ b/browser/metro/base/content/flyoutpanels/PrefsFlyoutPanel.js
@@ -17,40 +17,70 @@ let PrefsFlyoutPanel = {
 
     Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
     this._isInitialized = true;
     let self = this;
 
     this._elements = {};
     [
       ['PrefsFlyoutPanel',  'prefs-flyoutpanel'],
-      ['dntNoPref',    'prefs-dnt-nopref'],
-      ['telemetryPref','prefs-telemetry'],
     ].forEach(function(aElement) {
       let [name, id] = aElement;
       XPCOMUtils.defineLazyGetter(self._elements, name, function() {
         return document.getElementById(id);
       });
     });
 
+    this._prefObserver(null, null, "privacy.donottrackheader.value");
     this._topmostElement = this._elements.PrefsFlyoutPanel;
   },
 
   _show: function() {
     if (!this._hasShown) {
       SanitizeUI.init();
       this._hasShown = true;
+
+      Services.prefs.addObserver("privacy.donottrackheader.value",
+                                 this._prefObserver,
+                                 false);
+      Services.prefs.addObserver("privacy.donottrackheader.enabled",
+                                 this._prefObserver,
+                                 false);
     }
 
-    this._elements.PrefsFlyoutPanel.show();
+    this._topmostElement.show();
   },
 
-  onDNTPreferenceChanged: function onDNTPreferenceChanged() {
-    let selected = this._elements.dntNoPref.selected;
+  _prefObserver: function(subject, topic, data) {
+    let value = -1;
+    try {
+      value = Services.prefs.getIntPref("privacy.donottrackheader.value");
+    } catch(e) {
+    }
+
+    let isEnabled = Services.prefs.getBoolPref("privacy.donottrackheader.enabled");
 
-    // When "tell sites nothing about my preferences" is selected, disable do not track.
-    Services.prefs.setBoolPref("privacy.donottrackheader.enabled", !selected);
+    switch (data) {
+      case "privacy.donottrackheader.value":
+        // If the user has selected to explicitly tell sites that tracking
+        // is OK, or if the user has selected to explicitly tell sites that
+        // tracking is NOT OK, we must enable sending the dnt header
+        if (((1 == value) || (0 == value)) && !isEnabled) {
+          Services.prefs.setBoolPref('privacy.donottrackheader.enabled', true);
+        }
+
+        // If the user has made no selection about whether tracking
+        // is OK or not, we must diable the dnt header
+        if (((1 != value) && (0 != value)) && isEnabled) {
+          Services.prefs.setBoolPref('privacy.donottrackheader.enabled', false);
+        }
+        break;
+
+      case "privacy.donottrackheader.enabled":
+        // If someone or something modifies this pref, we should update the
+        // other pref as well so our UI doesn't give false information
+        if (((1 == value) || (0 == value)) && !isEnabled) {
+          Services.prefs.setIntPref('privacy.donottrackheader.value', -1);
+        }
+        break;
+    }
   },
-
-  onTelemetryPreferenceChanged: function onTelemetryPreferenceChanged(aBool) {
-    Services.prefs.setBoolPref("toolkit.telemetry.enabled", aBool);
-  }
 };
--- a/browser/themes/linux/devtools/debugger.css
+++ b/browser/themes/linux/devtools/debugger.css
@@ -52,25 +52,27 @@
 
 .side-menu-widget-item-checkbox:not([checked]) ~ .side-menu-widget-item-contents > .dbg-breakpoint {
   display: none;
 }
 
 /* Black box message */
 
 #black-boxed-message {
-  padding: 100px 50px;
-  background-color: rgb(61, 69, 76);
+  /* Prevent the container deck from aquiring the height from this message. */
+  min-height: 1px;
+  background-color: rgb(61,69,76);
+  padding: 25vh 0;
   color: white;
 }
 
 #black-boxed-message-label,
 #black-boxed-message-button {
   text-align: center;
-  font-size: 150%;
+  font-size: 120%;
 }
 
 #black-boxed-message-button {
   margin-top: 1em;
   padding: .25em;
 }
 
 /* ListWidget items */
--- a/browser/themes/osx/devtools/debugger.css
+++ b/browser/themes/osx/devtools/debugger.css
@@ -54,25 +54,27 @@
 
 .side-menu-widget-item-checkbox:not([checked]) ~ .side-menu-widget-item-contents > .dbg-breakpoint {
   display: none;
 }
 
 /* Black box message */
 
 #black-boxed-message {
-  padding: 100px 50px;
-  background-color: rgb(61, 69, 76);
+  /* Prevent the container deck from aquiring the height from this message. */
+  min-height: 1px;
+  background-color: rgb(61,69,76);
+  padding: 25vh 0;
   color: white;
 }
 
 #black-boxed-message-label,
 #black-boxed-message-button {
   text-align: center;
-  font-size: 150%;
+  font-size: 120%;
 }
 
 #black-boxed-message-button {
   margin-top: 1em;
   padding: .25em;
 }
 
 /* ListWidget items */
--- a/browser/themes/shared/devtools/webconsole.inc.css
+++ b/browser/themes/shared/devtools/webconsole.inc.css
@@ -74,16 +74,21 @@
   color: #FF0000;
 }
 
 .webconsole-mixed-content-link {
   color: #0000EE;
   margin: 0;
 }
 
+.webconsole-learn-more-link {
+  color: #0000EE;
+  margin: 0 0 0 4px;
+}
+
 .hud-msg-node[selected="true"] > .webconsole-timestamp,
 .hud-msg-node[selected="true"] > .webconsole-location {
   color: inherit;
 }
 
 .jsterm-input-container {
   background: white;
 }
--- a/browser/themes/windows/devtools/debugger.css
+++ b/browser/themes/windows/devtools/debugger.css
@@ -52,25 +52,27 @@
 
 .side-menu-widget-item-checkbox:not([checked]) ~ .side-menu-widget-item-contents > .dbg-breakpoint {
   display: none;
 }
 
 /* Black box message */
 
 #black-boxed-message {
-  padding: 100px 50px;
-  background-color: rgb(61, 69, 76);
+  /* Prevent the container deck from aquiring the height from this message. */
+  min-height: 1px;
+  background-color: rgb(61,69,76);
+  padding: 25vh 0;
   color: white;
 }
 
 #black-boxed-message-label,
 #black-boxed-message-button {
   text-align: center;
-  font-size: 150%;
+  font-size: 120%;
 }
 
 #black-boxed-message-button {
   margin-top: 1em;
   padding: .25em;
 }
 
 /* ListWidget items */
--- a/config/createprecomplete.py
+++ b/config/createprecomplete.py
@@ -6,33 +6,38 @@
 # longer present in a complete update. The current working directory is used for
 # the location to enumerate and to create the precomplete file.
 
 import sys
 import os
 
 def get_build_entries(root_path):
     """ Iterates through the root_path, creating a list for each file and
-        directory. Excludes any file paths ending with channel-prefs.js.
+        directory. Excludes any path starting with extensions or distribution
+        and paths ending with channel-prefs.js.
     """
     rel_file_path_set = set()
     rel_dir_path_set = set()
     for root, dirs, files in os.walk(root_path):
         for file_name in files:
             parent_dir_rel_path = root[len(root_path)+1:]
             rel_path_file = os.path.join(parent_dir_rel_path, file_name)
             rel_path_file = rel_path_file.replace("\\", "/")
-            if not (rel_path_file.endswith("channel-prefs.js")):
+            if not (rel_path_file.startswith("distribution/") or
+                    rel_path_file.startswith("extensions/") or
+                    rel_path_file.endswith("channel-prefs.js")):
                 rel_file_path_set.add(rel_path_file)
 
         for dir_name in dirs:
             parent_dir_rel_path = root[len(root_path)+1:]
             rel_path_dir = os.path.join(parent_dir_rel_path, dir_name)
             rel_path_dir = rel_path_dir.replace("\\", "/")+"/"
-            rel_dir_path_set.add(rel_path_dir)
+            if not (rel_path_dir.startswith("distribution/") or
+                    rel_path_dir.startswith("extensions/")):
+                rel_dir_path_set.add(rel_path_dir)
 
     rel_file_path_list = list(rel_file_path_set)
     rel_file_path_list.sort(reverse=True)
     rel_dir_path_list = list(rel_dir_path_set)
     rel_dir_path_list.sort(reverse=True)
 
     return rel_file_path_list, rel_dir_path_list
 
--- a/dom/locales/en-US/chrome/security/security.properties
+++ b/dom/locales/en-US/chrome/security/security.properties
@@ -6,8 +6,11 @@ BlockMixedActiveContent = Blocked loadin
 # CSP
 ReportOnlyCSPIgnored=Report-only CSP policy will be ignored because there are other non-report-only CSP policies applied.
 # LOCALIZATION NOTE: Do not translate "X-Content-Security-Policy", "X-Content-Security-Policy-Report-Only",  "Content-Security-Policy" or "Content-Security-Policy-Report-Only"
 OldCSPHeaderDeprecated=The X-Content-Security-Policy and X-Content-Security-Report-Only headers will be deprecated in the future. Please use the Content-Security-Policy and Content-Security-Report-Only headers with CSP spec compliant syntax instead.
 # LOCALIZATION NOTE: Do not translate "X-Content-Security-Policy/Report-Only" or "Content-Security-Policy/Report-Only"
 BothCSPHeadersPresent=This site specified both an X-Content-Security-Policy/Report-Only header and a Content-Security-Policy/Report-Only header. The X-Content-Security-Policy/Report-Only header(s) will be ignored.
 # LOCALIZATION NOTE: Do not translate "Strict-Transport-Security" or "HSTS"
 InvalidSTSHeaders=The site specified an invalid Strict-Transport-Security header.
+InsecurePasswordsPresentOnPage=Password fields present on an insecure (http://) page. This is a security risk that allows user login credentials to be stolen.
+InsecureFormActionPasswordsPresent=Password fields present in a form with an insecure (http://) form action. This is a security risk that allows user login credentials to be stolen.
+InsecurePasswordsPresentOnIframe=Password fields present on an insecure (http://) iframe. This is a security risk that allows user login credentials to be stolen.
--- a/layout/base/nsDocumentViewer.cpp
+++ b/layout/base/nsDocumentViewer.cpp
@@ -423,16 +423,17 @@ protected:
   unsigned      mStopped : 1;
   unsigned      mLoaded : 1;
   unsigned      mDeferredWindowClose : 1;
   // document management data
   //   these items are specific to markup documents (html and xml)
   //   may consider splitting these out into a subclass
   unsigned      mIsSticky : 1;
   unsigned      mInPermitUnload : 1;
+  unsigned      mInPermitUnloadPrompt: 1;
 
 #ifdef NS_PRINTING
   unsigned      mClosingWhilePrinting : 1;
 
 #if NS_PRINT_PREVIEW
   unsigned                         mPrintPreviewZoomed : 1;
 
   // These data members support delayed printing when the document is loading
@@ -1085,17 +1086,20 @@ nsDocumentViewer::LoadComplete(nsresult 
   return rv;
 }
 
 NS_IMETHODIMP
 nsDocumentViewer::PermitUnload(bool aCallerClosesWindow, bool *aPermitUnload)
 {
   *aPermitUnload = true;
 
-  if (!mDocument || mInPermitUnload || mCallerIsClosingWindow) {
+  if (!mDocument
+   || mInPermitUnload
+   || mCallerIsClosingWindow
+   || mInPermitUnloadPrompt) {
     return NS_OK;
   }
 
   // First, get the script global object from the document...
   nsPIDOMWindow *window = mDocument->GetWindow();
 
   if (!window) {
     // This is odd, but not fatal
@@ -1178,19 +1182,21 @@ nsDocumentViewer::PermitUnload(bool aCal
       // bool values through XPConnect.
       bool dummy = false;
       int32_t buttonPressed = 0;
       uint32_t buttonFlags = (nsIPrompt::BUTTON_POS_0_DEFAULT |
                              (nsIPrompt::BUTTON_TITLE_IS_STRING * nsIPrompt::BUTTON_POS_0) |
                              (nsIPrompt::BUTTON_TITLE_IS_STRING * nsIPrompt::BUTTON_POS_1));
 
       nsAutoSyncOperation sync(mDocument);
+      mInPermitUnloadPrompt = true;
       rv = prompt->ConfirmEx(title, message, buttonFlags,
                              leaveLabel, stayLabel, nullptr, nullptr,
                              &dummy, &buttonPressed);
+      mInPermitUnloadPrompt = false;
       NS_ENSURE_SUCCESS(rv, rv);
 
       // Button 0 == leave, button 1 == stay
       *aPermitUnload = (buttonPressed == 0);
     }
   }
 
   if (docShellNode) {
--- a/mobile/android/base/GeckoApp.java
+++ b/mobile/android/base/GeckoApp.java
@@ -686,17 +686,17 @@ abstract public class GeckoApp
                 GeckoAppShell.uninstallWebApp(origin);
             } else if (event.equals("Share:Text")) {
                 String text = message.getString("text");
                 GeckoAppShell.openUriExternal(text, "text/plain", "", "", Intent.ACTION_SEND, "");
             } else if (event.equals("Share:Image")) {
                 String src = message.getString("url");
                 String type = message.getString("mime");
                 GeckoAppShell.shareImage(src, type);
-            } else if (event.equals("Wallpaper:Set")) {
+            } else if (event.equals("Image:SetAs")) {
                 String src = message.getString("url");
                 setImageAs(src);
             } else if (event.equals("Sanitize:ClearHistory")) {
                 handleClearHistory();
             } else if (event.equals("Update:Check")) {
                 startService(new Intent(UpdateServiceHelper.ACTION_CHECK_FOR_UPDATE, null, this, UpdateService.class));
             } else if (event.equals("Update:Download")) {
                 startService(new Intent(UpdateServiceHelper.ACTION_DOWNLOAD_UPDATE, null, this, UpdateService.class));
@@ -1494,17 +1494,17 @@ abstract public class GeckoApp
         registerEventListener("Shortcut:Remove");
         registerEventListener("WebApps:Open");
         registerEventListener("WebApps:PreInstall");
         registerEventListener("WebApps:PostInstall");
         registerEventListener("WebApps:Install");
         registerEventListener("WebApps:Uninstall");
         registerEventListener("Share:Text");
         registerEventListener("Share:Image");
-        registerEventListener("Wallpaper:Set");
+        registerEventListener("Image:SetAs");
         registerEventListener("Sanitize:ClearHistory");
         registerEventListener("Update:Check");
         registerEventListener("Update:Download");
         registerEventListener("Update:Install");
         registerEventListener("PrivateBrowsing:Data");
         registerEventListener("Contact:Add");
 
         if (SmsManager.getInstance() != null) {
@@ -2048,17 +2048,17 @@ abstract public class GeckoApp
         unregisterEventListener("Shortcut:Remove");
         unregisterEventListener("WebApps:Open");
         unregisterEventListener("WebApps:PreInstall");
         unregisterEventListener("WebApps:PostInstall");
         unregisterEventListener("WebApps:Install");
         unregisterEventListener("WebApps:Uninstall");
         unregisterEventListener("Share:Text");
         unregisterEventListener("Share:Image");
-        unregisterEventListener("Wallpaper:Set");
+        unregisterEventListener("Image:SetAs");
         unregisterEventListener("Sanitize:ClearHistory");
         unregisterEventListener("Update:Check");
         unregisterEventListener("Update:Download");
         unregisterEventListener("Update:Install");
         unregisterEventListener("PrivateBrowsing:Data");
         unregisterEventListener("Contact:Add");
 
         deleteTempFiles();
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -595,17 +595,17 @@ var BrowserApp = {
                                       aTarget.ownerDocument);
       });
 
     NativeWindow.contextmenus.add(Strings.browser.GetStringFromName("contextmenu.setImageAs"),
       NativeWindow.contextmenus.imageSaveableContext,
       function(aTarget) {
         let src = aTarget.src;
         sendMessageToJava({
-          type: "Wallpaper:Set",
+          type: "Image:SetAs",
           url: src
         });
       });
 
     NativeWindow.contextmenus.add(
       function(aTarget) {
         if (aTarget instanceof HTMLVideoElement) {
           // If a video element is zero width or height, its essentially
new file mode 100644
--- /dev/null
+++ b/toolkit/components/passwordmgr/InsecurePasswordUtils.jsm
@@ -0,0 +1,146 @@
+/* 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/. */
+
+this.EXPORTED_SYMBOLS = [ "InsecurePasswordUtils" ];
+
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+const Cc = Components.classes;
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "devtools",
+                                  "resource://gre/modules/devtools/Loader.jsm");
+
+Object.defineProperty(this, "WebConsoleUtils", {
+  get: function() {
+    return devtools.require("devtools/toolkit/webconsole/utils").Utils;
+  },
+  configurable: true,
+  enumerable: true
+});
+
+const STRINGS_URI = "chrome://global/locale/security/security.properties";
+let l10n = new WebConsoleUtils.l10n(STRINGS_URI);
+
+this.InsecurePasswordUtils = {
+
+  _sendWebConsoleMessage : function (messageTag, domDoc) {
+    /*
+     * All web console messages are warnings for now so I decided to set the
+     * flag here and save a bit of the flag creation in the callers.
+     * It's easy to expose this later if needed
+     */
+
+    let  windowId = WebConsoleUtils.getInnerWindowId(domDoc.defaultView);
+    let category = "Insecure Password Field";
+    let flag = Ci.nsIScriptError.warningFlag;
+    let message = l10n.getStr(messageTag);
+    let consoleMsg = Cc["@mozilla.org/scripterror;1"]
+      .createInstance(Ci.nsIScriptError);
+
+    consoleMsg.initWithWindowID(
+      message, "", 0, 0, 0, flag, category, windowId);
+
+    Services.console.logMessage(consoleMsg);
+  },
+
+  /*
+   * Checks whether the passed uri is secure
+   * Check Protocol Flags to determine if scheme is secure:
+   * URI_DOES_NOT_RETURN_DATA - e.g.
+   *   "mailto"
+   * URI_IS_LOCAL_RESOURCE - e.g.
+   *   "data",
+   *   "resource",
+   *   "moz-icon"
+   * URI_INHERITS_SECURITY_CONTEXT - e.g.
+   *   "javascript"
+   * URI_SAFE_TO_LOAD_IN_SECURE_CONTEXT - e.g.
+   *   "https",
+   *   "moz-safe-about"
+   *
+   *   The use of this logic comes directly from nsMixedContentBlocker.cpp
+   *   At the time it was decided to include these protocols since a secure
+   *   uri for mixed content blocker means that the resource can't be
+   *   easily tampered with because 1) it is sent over an encrypted channel or
+   *   2) it is a local resource that never hits the network
+   *   or 3) it is a request sent without any response that could alter
+   *   the behavior of the page. It was decided to include the same logic
+   *   here both to be consistent with MCB and to make sure we cover all
+   *   "safe" protocols. Eventually, the code here and the code in MCB
+   *   will be moved to a common location that will be referenced from
+   *   both places. Look at
+   *   https://bugzilla.mozilla.org/show_bug.cgi?id=899099 for more info.
+   */
+  _checkIfURIisSecure : function(uri) {
+    let isSafe = false;
+    let netutil = Cc["@mozilla.org/network/util;1"].getService(Ci.nsINetUtil);
+    let ph = Ci.nsIProtocolHandler;
+
+    if (netutil.URIChainHasFlags(uri, ph.URI_IS_LOCAL_RESOURCE) ||
+        netutil.URIChainHasFlags(uri, ph.URI_DOES_NOT_RETURN_DATA) ||
+        netutil.URIChainHasFlags(uri, ph.URI_INHERITS_SECURITY_CONTEXT) ||
+        netutil.URIChainHasFlags(uri, ph.URI_SAFE_TO_LOAD_IN_SECURE_CONTEXT)) {
+
+      isSafe = true;
+    }
+
+    return isSafe;
+  },
+
+  /*
+   * Checks whether the passed nested document is insecure
+   * or is inside an insecure parent document.
+   *
+   * We check the chain of frame ancestors all the way until the top document
+   * because MITM attackers could replace https:// iframes if they are nested inside
+   * http:// documents with their own content, thus creating a security risk
+   * and potentially stealing user data. Under such scenario, a user might not
+   * get a Mixed Content Blocker message, if the main document is served over HTTP
+   * and framing an HTTPS page as it would under the reverse scenario (http
+   * inside https).
+   */
+  _checkForInsecureNestedDocuments : function(domDoc) {
+    let uri = domDoc.documentURIObject;
+    if (domDoc.defaultView == domDoc.defaultView.parent) {
+      // We are at the top, nothing to check here
+      return false;
+    }
+    if (!this._checkIfURIisSecure(uri)) {
+      // We are insecure
+      return true;
+    }
+    // I am secure, but check my parent
+    return this._checkForInsecureNestedDocuments(domDoc.defaultView.parent.document);
+  },
+
+
+  /*
+   * Checks if there are insecure password fields present on the form's document
+   * i.e. passwords inside forms with http action, inside iframes with http src,
+   * or on insecure web pages. If insecure password fields are present,
+   * a log message is sent to the web console to warn developers.
+   */
+  checkForInsecurePasswords : function (aForm) {
+    var domDoc = aForm.ownerDocument;
+    let pageURI = domDoc.defaultView.top.document.documentURIObject;
+    let isSafePage = this._checkIfURIisSecure(pageURI);
+
+    if (!isSafePage) {
+      this._sendWebConsoleMessage("InsecurePasswordsPresentOnPage", domDoc);
+    }
+
+    // Check if we are on an iframe with insecure src, or inside another
+    // insecure iframe or document.
+    if (this._checkForInsecureNestedDocuments(domDoc)) {
+      this._sendWebConsoleMessage("InsecurePasswordsPresentOnIframe", domDoc);
+    }
+
+    if (aForm.action.match(/^http:\/\//)) {
+      this._sendWebConsoleMessage("InsecureFormActionPasswordsPresent", domDoc);
+    }
+  },
+};
--- a/toolkit/components/passwordmgr/moz.build
+++ b/toolkit/components/passwordmgr/moz.build
@@ -27,10 +27,11 @@ EXTRA_COMPONENTS += [
     'storage-Legacy.js',
 ]
 
 EXTRA_PP_COMPONENTS += [
     'storage-mozStorage.js',
 ]
 
 EXTRA_JS_MODULES += [
+    'InsecurePasswordUtils.jsm',
     'LoginManagerContent.jsm',
 ]
--- a/toolkit/components/printing/content/printUtils.js
+++ b/toolkit/components/printing/content/printUtils.js
@@ -211,16 +211,23 @@ var PrintUtils = {
     if (printPreviewTB) {
       printPreviewTB.updateToolbar();
       var browser = this._callback.getPrintPreviewBrowser();
       browser.collapsed = false;
       browser.contentWindow.focus();
       return;
     }
 
+    // Set the original window as an active window so any mozPrintCallbacks can
+    // run without delayed setTimeouts.
+    var docShell = originalWindow.QueryInterface(Ci.nsIInterfaceRequestor)
+                                 .getInterface(Ci.nsIWebNavigation)
+                                 .QueryInterface(Ci.nsIDocShell);
+    docShell.isActive = true;
+
     // show the toolbar after we go into print preview mode so
     // that we can initialize the toolbar with total num pages
     var XUL_NS =
       "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
     printPreviewTB = document.createElementNS(XUL_NS, "toolbar");
     printPreviewTB.setAttribute("printpreview", true);
     printPreviewTB.id = "print-preview-toolbar";
     printPreviewTB.className = "toolbar-primary";
--- a/toolkit/devtools/Loader.jsm
+++ b/toolkit/devtools/Loader.jsm
@@ -46,16 +46,17 @@ var BuiltinProvider = {
         "toolkit/loader": loader
       },
       paths: {
         "": "resource://gre/modules/commonjs/",
         "main": "resource:///modules/devtools/main.js",
         "devtools": "resource:///modules/devtools",
         "devtools/server": "resource://gre/modules/devtools/server",
         "devtools/toolkit/webconsole": "resource://gre/modules/devtools/toolkit/webconsole",
+        "devtools/styleinspector/css-logic": "resource://gre/modules/devtools/styleinspector/css-logic",
 
         // Allow access to xpcshell test items from the loader.
         "xpcshell-test": "resource://test"
       },
       globals: loaderGlobals
     });
 
     return promise.resolve(undefined);
@@ -80,26 +81,29 @@ var SrcdirProvider = {
     let srcdir = Services.prefs.getComplexValue("devtools.loader.srcdir",
                                                 Ci.nsISupportsString);
     srcdir = OS.Path.normalize(srcdir.data.trim());
     let devtoolsDir = OS.Path.join(srcdir, "browser", "devtools");
     let devtoolsURI = this.fileURI(devtoolsDir);
     let toolkitURI = this.fileURI(OS.Path.join(srcdir, "toolkit", "devtools"));
     let serverURI = this.fileURI(OS.Path.join(srcdir, "toolkit", "devtools", "server"));
     let webconsoleURI = this.fileURI(OS.Path.join(srcdir, "toolkit", "devtools", "webconsole"));
+    let cssLogicURI = this.fileURI(OS.Path.join(toolkitURI, "styleinspector", "css-logic"));
+
     let mainURI = this.fileURI(OS.Path.join(srcdir, "browser", "devtools", "main.js"));
     this.loader = new loader.Loader({
       modules: {
         "toolkit/loader": loader
       },
       paths: {
         "": "resource://gre/modules/commonjs/",
         "devtools/server": serverURI,
         "devtools/toolkit/webconsole": webconsoleURI,
         "devtools": devtoolsURI,
+        "devtools/styleinspector/css-logic": cssLogicURI,
         "main": mainURI
       },
       globals: loaderGlobals
     });
 
     return this._writeManifest(devtoolsDir).then(null, Cu.reportError);
   },
 
--- a/toolkit/devtools/moz.build
+++ b/toolkit/devtools/moz.build
@@ -5,10 +5,11 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 PARALLEL_DIRS += [
     'server',
     'client',
     'gcli',
     'sourcemap',
     'webconsole',
-    'apps'
+    'apps',
+    'styleinspector'
 ]
--- a/toolkit/devtools/server/actors/inspector.js
+++ b/toolkit/devtools/server/actors/inspector.js
@@ -133,31 +133,35 @@ var NodeActor = protocol.ActorClass({
   /**
    * Instead of storing a connection object, the NodeActor gets its connection
    * from its associated walker.
    */
   get conn() this.walker.conn,
 
   // Returns the JSON representation of this object over the wire.
   form: function(detail) {
+    if (detail === "actorid") {
+      return this.actorID;
+    }
+
     let parentNode = this.walker.parentNode(this);
 
     // Estimate the number of children.
     let numChildren = this.rawNode.childNodes.length;
     if (numChildren === 0 &&
         (this.rawNode.contentDocument || this.rawNode.getSVGDocument)) {
       // This might be an iframe with virtual children.
       numChildren = 1;
     }
 
     let form = {
       actor: this.actorID,
       parent: parentNode ? parentNode.actorID : undefined,
       nodeType: this.rawNode.nodeType,
-      namespaceURI: this.namespaceURI,
+      namespaceURI: this.rawNode.namespaceURI,
       nodeName: this.rawNode.nodeName,
       numChildren: numChildren,
 
       // doctype attributes
       name: this.rawNode.name,
       publicId: this.rawNode.publicId,
       systemId: this.rawNode.systemId,
 
@@ -303,16 +307,20 @@ let NodeFront = protocol.FrontClass(Node
       this._observer = null;
     }
 
     protocol.Front.prototype.destroy.call(this);
   },
 
   // Update the object given a form representation off the wire.
   form: function(form, detail, ctx) {
+    if (detail === "actorid") {
+      this.actorID = form;
+      return;
+    }
     // Shallow copy of the form.  We could just store a reference, but
     // eventually we'll want to update some of the data.
     this._form = object.merge(form);
     this._form.attrs = this._form.attrs ? this._form.attrs.slice() : [];
 
     if (form.parent) {
       // Get the owner actor for this actor (the walker), and find the
       // parent node of this actor from it, creating a standin node if
--- a/toolkit/devtools/server/actors/styleeditor.js
+++ b/toolkit/devtools/server/actors/styleeditor.js
@@ -99,17 +99,17 @@ StyleEditorActor.prototype = {
   },
 
   /**
    * Get the BaseURI for the document.
    *
    * @return {object} JSON message to with BaseURI
    */
   onGetBaseURI: function() {
-    return { baseURI: this.document.baseURIObject };
+    return { baseURI: this.document.baseURIObject.spec };
   },
 
   /**
    * Called when target navigates to a new document.
    * Adds load listeners to document.
    */
   onNewDocument: function() {
     // delete previous document's actors
new file mode 100644
--- /dev/null
+++ b/toolkit/devtools/styleinspector/Makefile.in
@@ -0,0 +1,15 @@
+# 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/.
+
+DEPTH = ../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+
+include $(DEPTH)/config/autoconf.mk
+
+include $(topsrcdir)/config/rules.mk
+
+libs::
+	$(INSTALL) $(IFLAGS1) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/styleinspector
rename from browser/devtools/styleinspector/css-logic.js
rename to toolkit/devtools/styleinspector/css-logic.js
new file mode 100644
--- /dev/null
+++ b/toolkit/devtools/styleinspector/moz.build
@@ -0,0 +1,5 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
--- a/toolkit/mozapps/extensions/content/setting.xml
+++ b/toolkit/mozapps/extensions/content/setting.xml
@@ -458,21 +458,25 @@
               break;
             case Ci.nsIPrefBranch.PREF_BOOL:
               val = Services.prefs.getBoolPref(this.pref).toString();
               break;
             default:
               return;
           }
 
-          for (let i = 0; i < this.control.itemCount; i++) {
-            if (this.control.getItemAtIndex(i).value == val) {
-              this.control.selectedIndex = i;
-              break;
+          if ("itemCount" in this.control) {
+            for (let i = 0; i < this.control.itemCount; i++) {
+              if (this.control.getItemAtIndex(i).value == val) {
+                this.control.selectedIndex = i;
+                break;
+              }
             }
+          } else {
+            this.control.setAttribute("value", val);
           }
         ]]>
         </body>
       </method>
 
       <method name="valueToPreference">
         <body>
         <![CDATA[
--- a/toolkit/mozapps/extensions/test/browser/browser_inlinesettings.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_inlinesettings.js
@@ -134,17 +134,17 @@ function end_test() {
   Services.prefs.clearUserPref("extensions.inlinesettings3.radioBool");
   Services.prefs.clearUserPref("extensions.inlinesettings3.radioInt");
   Services.prefs.clearUserPref("extensions.inlinesettings3.radioString");
   Services.prefs.clearUserPref("extensions.inlinesettings3.menulist");
 
   MockFilePicker.cleanup();
 
   close_manager(gManagerWindow, function() {
-    observer.checkHidden("inlinesettings2@tests.mozilla.org");
+    observer.checkHidden("inlinesettings3@tests.mozilla.org");
     Services.obs.removeObserver(observer,
                                 AddonManager.OPTIONS_NOTIFICATION_HIDDEN);
 
     AddonManager.getAddonByID("inlinesettings1@tests.mozilla.org", function(aAddon) {
       aAddon.uninstall();
       finish();
     });
   });
@@ -570,8 +570,106 @@ add_test(function() {
     button = gManagerWindow.document.getElementById("detail-enable-btn");
     button.focus(); // make sure it's in view
     EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
     observer.checkNotDisplayed();
 
     gCategoryUtilities.openType("extension", run_next_test);
   });
 });
+
+// Tests bindings with existing prefs.
+add_test(function() {
+  observer.checkHidden("inlinesettings2@tests.mozilla.org");
+
+  // Ensure these prefs are set. They should be set above, but somebody might
+  // change the tests above.
+  var profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
+  Services.prefs.setBoolPref("extensions.inlinesettings1.bool", false);
+  Services.prefs.setIntPref("extensions.inlinesettings1.boolint", 1);
+  Services.prefs.setIntPref("extensions.inlinesettings1.integer", 12);
+  Services.prefs.setCharPref("extensions.inlinesettings1.string", "bar/");
+  Services.prefs.setCharPref("extensions.inlinesettings1.color", "#FF9900");
+  Services.prefs.setCharPref("extensions.inlinesettings1.file", profD.path);
+  Services.prefs.setCharPref("extensions.inlinesettings1.directory", profD.path);
+
+  var addon = get_addon_element(gManagerWindow, "inlinesettings1@tests.mozilla.org");
+  addon.parentNode.ensureElementIsVisible(addon);
+
+  var button = gManagerWindow.document.getAnonymousElementByAttribute(addon, "anonid", "preferences-btn");
+  EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
+
+  wait_for_view_load(gManagerWindow, function() {
+    observer.checkDisplayed("inlinesettings1@tests.mozilla.org");
+
+    var grid = gManagerWindow.document.getElementById("detail-grid");
+    var settings = grid.querySelectorAll("rows > setting");
+
+    var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[0], "anonid", "input");
+    is(input.checked, false, "Checkbox should have initial value");
+
+    var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[1], "anonid", "input");
+    is(input.checked, true, "Checkbox should have initial value");
+
+    var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[2], "anonid", "input");
+    is(input.value, "12", "Number box should have initial value");
+
+    var input = gManagerWindow.document.getAnonymousElementByAttribute(settings[3], "anonid", "input");
+    is(input.value, "bar/", "Text box should have initial value");
+
+    input = gManagerWindow.document.getAnonymousElementByAttribute(settings[5], "anonid", "input");
+    is(input.color, "#FF9900", "Color picker should have initial value");
+
+    input = gManagerWindow.document.getAnonymousElementByAttribute(settings[6], "anonid", "input");
+    is(input.value, profD.path, "Label should have initial value");
+    is(input.tooltipText, profD.path, "Label tooltip should have initial value");
+
+    input = gManagerWindow.document.getAnonymousElementByAttribute(settings[7], "anonid", "input");
+    is(input.value, profD.path, "Label value should have initial value");
+    is(input.tooltipText, profD.path, "Label tooltip should have initial value");
+
+    gCategoryUtilities.openType("extension", run_next_test);
+  });
+});
+
+// Tests bindings with existing prefs.
+add_test(function() {
+  observer.checkHidden("inlinesettings1@tests.mozilla.org");
+
+  // Ensure these prefs are set. They should be set above, but somebody might
+  // change the tests above.
+  Services.prefs.setBoolPref("extensions.inlinesettings3.radioBool", false);
+  Services.prefs.setIntPref("extensions.inlinesettings3.radioInt", 6);
+  Services.prefs.setCharPref("extensions.inlinesettings3.radioString", "kilo");
+  Services.prefs.setIntPref("extensions.inlinesettings3.menulist", 9);
+
+  var addon = get_addon_element(gManagerWindow, "inlinesettings3@tests.mozilla.org");
+  addon.parentNode.ensureElementIsVisible(addon);
+
+  var button = gManagerWindow.document.getAnonymousElementByAttribute(addon, "anonid", "preferences-btn");
+  EventUtils.synthesizeMouseAtCenter(button, { clickCount: 1 }, gManagerWindow);
+
+  wait_for_view_load(gManagerWindow, function() {
+    observer.checkDisplayed("inlinesettings3@tests.mozilla.org");
+
+    var grid = gManagerWindow.document.getElementById("detail-grid");
+    var settings = grid.querySelectorAll("rows > setting");
+
+    var radios = settings[0].getElementsByTagName("radio");
+    isnot(radios[0].selected, true, "Correct radio button should be selected");
+    is(radios[1].selected, true, "Correct radio button should be selected");
+
+    var radios = settings[1].getElementsByTagName("radio");
+    isnot(radios[0].selected, true, "Correct radio button should be selected");
+    isnot(radios[1].selected, true, "Correct radio button should be selected");
+    is(radios[2].selected, true, "Correct radio button should be selected");
+
+    var radios = settings[2].getElementsByTagName("radio");
+    isnot(radios[0].selected, true, "Correct radio button should be selected");
+    isnot(radios[1].selected, true, "Correct radio button should be selected");
+    is(radios[2].selected, true, "Correct radio button should be selected");
+
+    var input = settings[3].firstElementChild;
+    is(input.value, "9", "Menulist should have initial value");
+
+    gCategoryUtilities.openType("extension", run_next_test);
+  });
+});
--- a/widget/gtk2/nsWindow.cpp
+++ b/widget/gtk2/nsWindow.cpp
@@ -130,16 +130,17 @@ using mozilla::layers::LayerManagerOGL;
 // Don't put more than this many rects in the dirty region, just fluff
 // out to the bounding-box if there are more
 #define MAX_RECTS_IN_REGION 100
 
 const gint kEvents = GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK |
                      GDK_VISIBILITY_NOTIFY_MASK |
                      GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK |
                      GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+                     GDK_SCROLL_MASK |
 #ifdef MOZ_PLATFORM_MAEMO
                      GDK_POINTER_MOTION_HINT_MASK |
 #endif
                      GDK_POINTER_MOTION_MASK;
 
 /* utility functions */
 static bool       is_mouse_in_window(GdkWindow* aWindow,
                                      gdouble aMouseX, gdouble aMouseY);