Merge backout.
authorMs2ger <ms2ger@gmail.com>
Mon, 01 Oct 2012 14:16:20 +0200
changeset 108738 e352d9f243e7
parent 108737 a17579743ac9 (current diff)
parent 108736 e848e6427591 (diff)
child 108739 c61a2a4bc394
push id15656
push userMs2ger@gmail.com
push dateMon, 01 Oct 2012 12:16:41 +0000
treeherdermozilla-inbound@e352d9f243e7 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone18.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 backout.
dom/tests/mochitest/localstorage/test_app_uninstall.html
layout/reftests/bugs/solidblue.png
--- a/b2g/components/DirectoryProvider.js
+++ b/b2g/components/DirectoryProvider.js
@@ -5,18 +5,23 @@
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
+const XRE_OS_UPDATE_APPLY_TO_DIR = "OSUpdApplyToD"
 const LOCAL_DIR = "/data/local";
 
+XPCOMUtils.defineLazyServiceGetter(Services, "env",
+                                   "@mozilla.org/process/environment;1",
+                                   "nsIEnvironment");
+
 function DirectoryProvider() {
 }
 
 DirectoryProvider.prototype = {
   classID: Components.ID("{9181eb7c-6f87-11e1-90b1-4f59d80dd2e5}"),
 
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider]),
 
@@ -30,16 +35,46 @@ DirectoryProvider.prototype = {
       file.initWithPath(LOCAL_DIR);
       persistent.value = true;
       return file;
     } else if (prop == "coreAppsDir") {
       let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
       file.initWithPath("/system/b2g");
       persistent.value = true;
       return file;
+    } else if (prop == XRE_OS_UPDATE_APPLY_TO_DIR) {
+      return this.getOSUpdateApplyToDir(persistent);
     }
 #endif
 
     return null;
+  },
+
+  getOSUpdateApplyToDir: function dp_getOSUpdateApplyToDir(persistent) {
+    // TODO add logic to check available storage space,
+    // and iterate through pref(s) to find alternative dirs if
+    // necessary.
+
+    let path = Services.env.get("EXTERNAL_STORAGE");
+    if (!path) {
+      path = LOCAL_PATH;
+    }
+
+    let dir = Cc["@mozilla.org/file/local;1"]
+                 .createInstance(Ci.nsILocalFile)
+    dir.initWithPath(path);
+
+    if (!dir.exists() && path != LOCAL_PATH) {
+      // Fallback to LOCAL_PATH if we didn't fallback earlier
+      dir.initWithPath(LOCAL_PATH);
+
+      if (!dir.exists()) {
+        throw Cr.NS_ERROR_FILE_NOT_FOUND;
+      }
+    }
+
+    dir.appendRelativePath("updates");
+    persistent.value = false;
+    return dir;
   }
 };
 
 const NSGetFactory = XPCOMUtils.generateNSGetFactory([DirectoryProvider]);
--- a/b2g/components/UpdatePrompt.js
+++ b/b2g/components/UpdatePrompt.js
@@ -163,47 +163,89 @@ UpdatePrompt.prototype = {
 
     switch (aDetail.result) {
       case "wait":
         // Wait for a fixed period of time, allowing the user to temporarily
         // postpone applying an update
         this._applyWaitTimer = this.createTimer(APPLY_WAIT_TIMEOUT);
         break;
       case "restart":
-        this.restartProcess();
+        this.finishUpdate();
         break;
     }
   },
 
   downloadUpdate: function UP_downloadUpdate(aUpdate) {
     Services.aus.downloadUpdate(aUpdate, true);
     Services.aus.addDownloadListener(this);
   },
 
+  finishUpdate: function UP_finishUpdate() {
+    if (!this._update.isOSUpdate) {
+      // Standard gecko+gaia updates will just need to restart the process
+      this.restartProcess();
+      return;
+    }
+
+    let osApplyToDir;
+    try {
+      this._update.QueryInterface(Ci.nsIWritablePropertyBag);
+      osApplyToDir = this._update.getProperty("osApplyToDir");
+    } catch (e) {}
+
+    if (!osApplyToDir) {
+      log("Error: Update has no osApplyToDir");
+      return;
+    }
+
+    let updateFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+    updateFile.initWithPath(osApplyToDir + "/update.zip");
+    if (!updateFile.exists()) {
+      log("Error: FOTA update not found at " + updateFile.path);
+      return;
+    }
+
+    this.finishOSUpdate(updateFile.path);
+  },
+
   restartProcess: function UP_restartProcess() {
     log("Update downloaded, restarting to apply it");
 
     let appStartup = Cc["@mozilla.org/toolkit/app-startup;1"]
                        .getService(Ci.nsIAppStartup);
     // NB: on Gonk, we rely on the system process manager to restart
     // us.  Trying to restart here would conflict with the process
     // manager.  We should be using a runtime check to detect Gonk
     // instead of this gross ifdef, but the ifdef works for now.
     appStartup.quit(appStartup.eForceQuit
 #ifndef ANDROID
                     | appStartup.eRestart
 #endif
       );
   },
 
+  finishOSUpdate: function UP_finishOSUpdate(aOsUpdatePath) {
+    let recoveryService = Cc["@mozilla.org/recovery-service;1"]
+                            .getService(Ci.nsIRecoveryService);
+
+    log("Rebooting into recovery to apply FOTA update: " + aOsUpdatePath);
+
+    try {
+      recoveryService.installFotaUpdate(aOsUpdatePath);
+    } catch(e) {
+      log("Error: Couldn't reboot into recovery to apply FOTA update " +
+          aOsUpdatePath);
+    }
+  },
+
   notify: function UP_notify(aTimer) {
     if (aTimer == this._applyPromptTimer) {
       log("Timed out waiting for result, restarting");
       this._applyPromptTimer = null;
-      this.restartProcess();
+      this.finishUpdate();
     } else if (aTimer == this._applyWaitTimer) {
       this._applyWaitTimer = null;
       this.showUpdatePrompt();
     }
   },
 
   createTimer: function UP_createTimer(aTimeoutMs) {
     let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
--- a/browser/base/content/abouthome/aboutHome.css
+++ b/browser/base/content/abouthome/aboutHome.css
@@ -76,17 +76,17 @@ a {
   border: 1px solid;
   border-color: hsla(210,54%,20%,.15) hsla(210,54%,20%,.17) hsla(210,54%,20%,.2);
   box-shadow: 0 1px 0 hsla(210,65%,9%,.02) inset,
               0 0 2px hsla(210,65%,9%,.1) inset,
               0 1px 0 hsla(0,0%,100%,.2);
   border-radius: 2.5px 0 0 2.5px;
 }
 
-#searchText:dir(rtl) {
+#searchText:-moz-dir(rtl) {
   border-radius: 0 2.5px 2.5px 0;
 }
 
 #searchText:focus,
 #searchText[autofocus] {
   border-color: hsla(206,100%,60%,.6) hsla(206,76%,52%,.6) hsla(204,100%,40%,.6);
 }
 
@@ -100,17 +100,17 @@ a {
   border-radius: 0 2.5px 2.5px 0;
   box-shadow: 0 0 2px hsla(0,0%,100%,.5) inset,
               0 1px 0 hsla(0,0%,100%,.2);
   cursor: pointer;
   transition-property: background-color, border-color, box-shadow;
   transition-duration: 150ms;
 }
 
-#searchSubmit:dir(rtl) {
+#searchSubmit:-moz-dir(rtl) {
   border-radius: 2.5px 0 0 2.5px;
 }
 
 #searchText:focus + #searchSubmit,
 #searchText + #searchSubmit:hover,
 #searchText[autofocus] + #searchSubmit {
   border-color: #59b5fc #45a3e7 #3294d5;
   color: white;
@@ -142,18 +142,18 @@ a {
 #defaultSnippet2 {
   display: block;
   min-height: 38px;
   background: 30px center no-repeat;
   padding: 6px 0;
   -moz-padding-start: 79px;
 }
 
-#defaultSnippet1:dir(rtl),
-#defaultSnippet2:dir(rtl) {
+#defaultSnippet1:-moz-dir(rtl),
+#defaultSnippet2:-moz-dir(rtl) {
   background-position: right 30px center;
 }
 
 #defaultSnippet1 {
   background-image: url("chrome://browser/content/abouthome/snippet1.png");
 }
 
 #defaultSnippet2 {
@@ -307,17 +307,17 @@ body[narrow] #restorePreviousSession {
   height: 48px;
   width: 48px;
   display: inline-block; /* display on same line as text label */
   vertical-align: middle;
   margin-bottom: 0;
   -moz-margin-end: 8px;
 }
 
-#restorePreviousSession:dir(rtl)::before {
+#restorePreviousSession:-moz-dir(rtl)::before {
   transform: scaleX(-1);
 }
 
 body[narrow] #restorePreviousSession::before {
   content: url("chrome://browser/content/abouthome/restore.png");
   height: 32px;
   width: 32px;
 }
--- a/browser/devtools/layoutview/view.css
+++ b/browser/devtools/layoutview/view.css
@@ -17,29 +17,29 @@ body {
   -moz-box-sizing: border-box;
   font: 12px/16px monospace;
   width: 100%;
   padding: 6px 9px;
   display: -moz-box;
   vertical-align: top;
 }
 
-#header:dir(rtl) {
+#header:-moz-dir(rtl) {
   -moz-box-direction: reverse;
 }
 
 #header > span {
   display: -moz-box;
 }
 
 #element-size {
   -moz-box-flex: 1;
 }
 
-#element-size:dir(rtl) {
+#element-size:-moz-dir(rtl) {
   -moz-box-pack: end;
 }
 
 #header:focus {
   outline: none;
 }
 
 #main {
--- a/browser/devtools/webconsole/test/Makefile.in
+++ b/browser/devtools/webconsole/test/Makefile.in
@@ -102,16 +102,18 @@ MOCHITEST_BROWSER_FILES = \
 	browser_webconsole_bug_651501_document_body_autocomplete.js \
 	browser_webconsole_bug_653531_highlighter_console_helper.js \
 	browser_webconsole_bug_659907_console_dir.js \
 	browser_webconsole_bug_664131_console_group.js \
 	browser_webconsole_bug_704295.js \
 	browser_webconsole_bug_658368_time_methods.js \
 	browser_webconsole_bug_764572_output_open_url.js \
 	browser_webconsole_bug_622303_persistent_filters.js \
+        browser_webconsole_bug_770099_bad_policyuri.js \
+        browser_webconsole_bug_770099_violation.js \
 	browser_webconsole_window_zombie.js \
 	browser_cached_messages.js \
 	browser_bug664688_sandbox_update_after_navigation.js \
 	browser_webconsole_menustatus.js \
 	browser_result_format_as_string.js \
 	browser_webconsole_bug_737873_mixedcontent.js \
 	browser_output_breaks_after_console_dir_uninspectable.js \
 	browser_console_log_inspectable_object.js \
@@ -183,13 +185,17 @@ MOCHITEST_BROWSER_FILES += \
 	test-bug-585956-console-trace.html \
 	test-bug-644419-log-limits.html \
 	test-bug-632275-getters.html \
 	test-bug-646025-console-file-location.html \
 	test-file-location.js \
 	test-bug-658368-time-methods.html \
 	test-webconsole-error-observer.html \
 	test-for-of.html \
+        test_bug_770099_violation.html \
+        test_bug_770099_violation.html^headers^ \
+        test_bug_770099_bad_policy_uri.html \
+        test_bug_770099_bad_policy_uri.html^headers^ \
 	test-result-format-as-string.html \
 	test-bug-737873-mixedcontent.html \
 	$(NULL)
 
 include $(topsrcdir)/config/rules.mk
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_770099_bad_policyuri.js
@@ -0,0 +1,55 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+// Tests that the Web Console CSP messages are displayed
+
+const TEST_BAD_POLICY_URI = "https://example.com/browser/browser/devtools/webconsole/test/test_bug_770099_bad_policy_uri.html";
+
+let hud = undefined;
+
+function test() {
+  addTab("data:text/html;charset=utf8,Web Console CSP bad policy URI test");
+  browser.addEventListener("load", function _onLoad() {
+    browser.removeEventListener("load", _onLoad, true);
+    openConsole(null, loadDocument);
+  }, true);
+}
+
+function loadDocument(theHud) {
+  hud = theHud;
+  hud.jsterm.clearOutput();
+  browser.addEventListener("load", onLoad, true);
+  content.location = TEST_BAD_POLICY_URI;
+}
+
+function onLoad(aEvent) {
+  browser.removeEventListener("load", onLoad, true);
+  testPolicyURIMessage();
+}
+
+function testPolicyURIMessage() {
+  let aOutputNode = hud.outputNode;
+ 
+  waitForSuccess(
+    {
+      name: "CSP policy URI warning displayed successfully",
+      validatorFn: function() {
+        return aOutputNode.querySelector(".webconsole-msg-error");
+      },
+
+      successFn: function() {
+        //tests on the urlnode
+        let node = aOutputNode.querySelector(".webconsole-msg-error");
+        isnot(node.textContent.indexOf("can't fetch policy"), -1,
+                                       "CSP Policy URI message found");
+        finishTest();
+      },
+
+      failureFn: finishTest,
+    }
+  );
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/browser_webconsole_bug_770099_violation.js
@@ -0,0 +1,55 @@
+/* vim:set ts=2 sw=2 sts=2 et: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+// Tests that the Web Console CSP messages are displayed
+
+const TEST_VIOLATION = "https://example.com/browser/browser/devtools/webconsole/test/test_bug_770099_violation.html";
+
+let hud = undefined;
+
+function test() {
+  addTab("data:text/html;charset=utf8,Web Console CSP violation test");
+  browser.addEventListener("load", function _onLoad() {
+    browser.removeEventListener("load", _onLoad, true);
+    openConsole(null, loadDocument);
+  }, true);
+}
+
+function loadDocument(theHud){
+  hud = theHud;
+  hud.jsterm.clearOutput()
+  browser.addEventListener("load", onLoad, true);
+  content.location = TEST_VIOLATION;
+}
+
+function onLoad(aEvent) {
+  browser.removeEventListener("load", onLoad, true);
+  testViolationMessage();
+}
+
+function testViolationMessage(){
+  let aOutputNode = hud.outputNode;
+
+  waitForSuccess(
+    {
+      name: "CSP policy URI warning displayed successfully",
+      validatorFn: function() {
+        return aOutputNode.querySelector(".webconsole-msg-warn");
+      },
+
+      successFn: function() {
+        //tests on the urlnode
+        let node = aOutputNode.querySelector(".webconsole-msg-warn");
+        isnot(node.textContent.indexOf("violated"), -1,
+                                       "CSP violation message found");
+        finishTest();
+      },
+
+      failureFn: finishTest,
+    }
+  );
+}
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test_bug_770099_bad_policy_uri.html
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="UTF-8">
+  <title>Test for Bug 770099 - bad policy-uri</title>
+<!-- Any copyright is dedicated to the Public Domain.
+     http://creativecommons.org/publicdomain/zero/1.0/ -->
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=770099">Mozilla Bug 770099</a>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test_bug_770099_bad_policy_uri.html^headers^
@@ -0,0 +1,2 @@
+X-Content-Security-Policy: policy-uri http://example.com/some_policy
+Content-type: text/html; charset=utf-8
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test_bug_770099_violation.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <meta charset="UTF-8">
+  <title>Test for Bug 770099 - policy violation</title>
+<!-- Any copyright is dedicated to the Public Domain.
+     http://creativecommons.org/publicdomain/zero/1.0/ -->
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=770099">Mozilla Bug 770099</a>
+<img src="http://some.example.com/test.png">
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/devtools/webconsole/test/test_bug_770099_violation.html^headers^
@@ -0,0 +1,1 @@
+X-Content-Security-Policy: default-src 'self'
--- a/browser/themes/gnomestripe/aboutCertError.css
+++ b/browser/themes/gnomestripe/aboutCertError.css
@@ -32,17 +32,17 @@ h2 {
   border: 1px solid #FFBD09; /* pale yellow extracted from yellow passport icon */
   border-radius: 10px;
   padding: 3em;
   -moz-padding-start: 30px;
   background: url("chrome://global/skin/icons/sslWarning.png") left 0 no-repeat -moz-Field;
   background-origin: content-box;
 }
 
-#errorPageContainer:dir(rtl) {
+#errorPageContainer:-moz-dir(rtl) {
   background-position: right 0;
 }
 
 #errorTitle {
   -moz-margin-start: 80px;
 }
 
 #errorLongContent {
@@ -54,19 +54,19 @@ h2 {
   -moz-margin-start: -20px;
   background: url("chrome://browser/skin/aboutCertError_sectionExpanded.png") left center no-repeat;
   border: none;
   font: inherit;
   color: inherit;
   cursor: pointer;
 }
 
-.expander > button:dir(rtl) {
+.expander > button:-moz-dir(rtl) {
   background-position: right center;
 }
 
 .expander[collapsed] > button {
   background-image: url("chrome://browser/skin/aboutCertError_sectionCollapsed.png");
 }
 
-.expander[collapsed] > button:dir(rtl) {
+.expander[collapsed] > button:-moz-dir(rtl) {
   background-image: url("chrome://browser/skin/aboutCertError_sectionCollapsed-rtl.png");
 }
--- a/browser/themes/gnomestripe/aboutPrivateBrowsing.css
+++ b/browser/themes/gnomestripe/aboutPrivateBrowsing.css
@@ -29,17 +29,17 @@ body.normal > #errorPageContainer {
 }
 
 #moreInfo {
   font-size: 110%; /* to match the value set in chrome://global/skin/netError.css */
   -moz-padding-start: 25px;
   background: url("moz-icon://stock/gtk-dialog-info?size=menu") no-repeat top left;
 }
 
-#moreInfo:dir(rtl) {
+#moreInfo:-moz-dir(rtl) {
   background-position: top right;
 }
 
 #moreInfoText {
   margin-bottom: 0;
 }
 
 #moreInfoLinkContainer {
index a40cc1bb9ab74689fc3b7fdcffb3c9258387e4f4..54ef8f8eae7221735fe774a2d6cfc4c68c1e342e
GIT binary patch
literal 312
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`|2<tCLn>}9J?*%vDM94u$IYDS
zJH=yNY~rmm#G^W9c64~`TqmCRLa*pf?ek{i3H@x2&GIpP|GN_<_BFl!`igty0(&F(
z@10Kjk3TJn{JpTXM=s^w-T)_o1@Egpob+dDUP@!i-8{=h`a<d4%?s6iMFftp2(5_x
z!n`H-^_-I$YHM;>wKv}CYFL&z$GW$LzxNm8t6gPhHY-<r%ePvvO6$0dbyNEPWz45G
zmE@TS*_pgz*XTNAIXTcL;wD#^(pFK%%6Zn(RhL{C9eorUXSv!R_*l`R@@3IXrChZO
zW-C3nFt#5~)P*|gg1%#e&gmM(xi8$*%ySpsSN6TU{tt8I%AdK_V&6M}LBZhZ>gTe~
HDWM4f3@d|D
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..314089368457780f64af9b7107edfda1d8f37ebc
GIT binary patch
literal 666
zc$@*60%iS)P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80007ENkl<Zc-pnj
zJ5F0s6oui%O#_iV3N9015HJKgnE~%N;{BGeqbQ<GfHnzjW??Gg0pxKzFs+GVH#>iE
zkdC%4&c!mtR~+r7wT@0sPKqj_f{$q64u69?G{UVCvMQoTD8&WZu!7pSKnnGu<KyF}
z45Nk)tWO=(LznXC=;$cVC~jZ_a)T7|^2Wz;3(Jw=6caFKGTeT`ywExB_jGu87)#ND
zIT_yI6%?4GAPLzF=CqK;n>si+cr=3VFy|Y}kYkRV628EkX4n#>{r&w%b(nL81j=EK
zatz@E%&9}rV{jB*7rF`s>f;0c6IU+VMG9$eZ%?>@MKYA29?Ve>C1fst32AqCw~RI{
z@)jDfs@rIzteu^m3M}#)2{d3y=(b2j+uPgcut*JhAvL#kuC1-D1}riOy^u+_)zIeV
z<~^(cJ(Cr1uZ@k34y*t@lNHd>`uchYR)C(#3g~EUZS5XbfS$<;xYz3HY6BLTfL_R?
z+iGZKW#t?esX;HK=C;nYyu4h2MSdZH1}q8P7O7}yX{n4hEK-FAtm-x%P}bt&qHqa|
zWGF#Bn4=y_$Xxys(!#=mkfIBVe8mv-1ap*+4!T^ni!n&^^Yf4DFy{;jl*1h57{Ys)
z^A3XI@CceP=Nrm>e4vESFsF&v5Tv=exmb!8%*jwi0tMzMNJ2J)IW45|re<eny>Z;a
za%4Eg1k9NTw;wPsbdLKy&CJZ?NzsH2NHcWGiyz)F>gdAy)I~jXDUYV7r~hXR7kGdb
z^aqz1gL=`_)KpO=RPhPdXrUXla2;;dkW~@?02aAW9_}4~KL7v#07*qoM6N<$f;@aM
A9smFU
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..411db1a5a455401d5df6a5fd3bca39bd3b3bca77
GIT binary patch
literal 26989
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
Q9RL6T07*qoM6N<$f>=WD@c;k-
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a12c4133f83c46a2ac4ed3ffd516d69413a64958
GIT binary patch
literal 545
zc$@(t0^a?JP)<h;3K|Lk000e1NJLTq000~S000~a1^@s6at+^<0005#Nkl<Zc-pno
zyKWOv5XNz&uqU#}b3lh(q}bQU1sd}LwD^9JFY<NQE^v4Unw$sNf|h4MD1{@%Ee&bB
zG?Q<viF9;wd|0!j_{sK+XaABVzo=9yxe(Dod=FFb9=^gFQn-g7Jd>UJU%@lD0rHXW
zoF5ddR;#8Xh=2|h@olDHtyVKdK>sMp6s*_lk1l~MDXbub6A{WR1+rZJHP~o0n1VYX
z!v;#ccah!3aihG!X0yr4K!y}bvhyjz*1G-R4Ypb>b`4~>;(10_)~)si+wC^H1u}#@
z&nUERZ@s}zr^B{D2F3G?j;-6&8|-$w>^G1>@jRmw>((Fa^?K|lkRjxGMxk}<|4IA(
zKD!1otazT$%DUCw;9xLdWgx>Ain8;03tQ{f|F;+phfKj8kYNKQ*}D{B<G4BY21ldO
zqjx}-6h6Z#yb`A}OMxukq2LXU$753rlv4tQy}`+3Vmg8^KshB)a0aK-smlf20Qtyw
zzU|p1P<RrY&1U;3D1(MI{1I!=vQrSqXL3kDq7t0X=eZCOzXqUz91=iOf>9LZA`jyC
z0caqH1k^4V$8jzaWc)b*4dn1?7hEhBxtKxVSpXWy67Pb`<uVsL2s{r!1BqYo=GlT0
jeF+~ShSxlMrl8*gMbfs1T)RnW00000NkvXXu0mjf4;}b7
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..59d75d1377a34c338cb194eb01b6a1f5c3500548
GIT binary patch
literal 1423
zc$@)`1#tR_P)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000G6Nkl<Zc-qyO
z>q})-7{-rXp@}K!u8lP~MSnn06ZWAXiEhxhiXnpP!xRlcA4&-v@Av!tem4yi1r>uq
z1wpcl27xB2j6%p5jh8X=0`8ulxMOoVo!0T3)7c3RXP^D7_g&Ak*1OhOd+V_*>wk@)
z6J%y)+Ti=0LX1Dq#t{>710YJcA90<Xov#!Z7nc<j6invj<y{l@0N31uQ=3<5OAN7*
zHgM0u!9i?oZS98=IbTvzV%5~tSk2ANR(pH9)z#GnxaQswN1Oco{Q2tY>PtI2I}ej1
zQU+oM2M5n<WWTMbsIXdFTM=sn+A0Pk-wg~5B#`UBHV~r`eY3Eza7&+vIuVF1Dk}QD
zv9a;ONllzcJRPc@_bCn4bWl(Z%Ict@q2V2Jhugq?eSLk;mzI|9baZt5qaaG8rKN?>
z8{qgF&Swm{l=F|Co}NVY@j$o?M6Io@#c9fC5ksdAAP&)##y4YQW2qY(8?P(o1;F+A
z_;{+guW3VD?|5=5_rmh>@>#{)91a5yY2kgYss3B%ZEbCczdkuR`I*{1BRneHnvs#=
z0bC1@z^Torv?aznk4n=jFE7ssq?C+De`{;&jFPXaV@A*h;#rKp&CSidt#*$i*dJ)K
zw6yewVt)0NtE{Z-`s(T`W^W3mfxFb<TZ}#(InmVAbf{7Nm{GSy8kmTinwt86Snqty
zLS0?m`)U&%N&_*Km6a_r!6*T{Y*>U7;vY*-Pxk}>a-P$gxIzx^oK;m-U(#nt4JhgN
z_HJTBBWMi|4}T*5?zFTtPXHk2>5-9<j~H=hPWsTV^jydd=(zBUw*g8@<@22Q+fQKN
zmf6|ar^rDr2RL%9hr_@o2Ars`ueUZgH{)64si~=+KtPNTr+T-%^XlGqI1FsF2At46
zQC4ga2FOb;C&Fidns<WE;Sh8A@?}pTa2oKDHzWp5k;De0;@uI`4;Ku`;UlkYz{aUS
z4RBO`Iy*bNTl@CUdUCp|q=)PnPOt{xv@M<p#FE21FMYw$HyY4_CQ}2adwY8mlwe)I
zitGqXDLalYz|kg980SR;TF`_x69X~1xw&6yFJ^>Y0kohAZAJ!k*59Ev-2^n57>J^g
z4sA@KtAHkZ$1^eDU9U{zp^g(bbfi9l&PF@>{%>3;co3KY7LJlIbyxLC2Yf%&*(Jq(
zNLgQBe@&gh`{RfWng?hyHlWA5BgZo{GZ*x^O(LLeZL7b(|Ge7VD?B(oJ$=M$)O>LU
zv1UB8fhJ=Eyt@$yI6E{nl%n86L^29Gi2b;-vcePB9ZudKM{JNhdW;RQ3t564@Py9k
zU)ZyvS1Fc$gj(T<aq><sDJjY0FBaZ3H|Ee|Y(Nj!mS6|mw!6FgB+mnML^Az4!e8{}
z86}%Dh&ARBj~-(Kj08d5-QCX~zr&1PTwHuf0<Y1Lz;tgr`Gtjrm*EB9oOi4_AB!Gf
zY(TFIErg_`r2M46_~XOWnTd&si%PUF4ukOXzIa9p&QGi{Z|ecZ2K3JI$beqhS~~jL
z&!-?>XObd1@W<=VAl95mJerIR5KJPFm6c^_!Tkk2j8KmTykE|kPfkwe9)^q!aF`>=
zRX~%mft;Ki7LBWbCSwC^Wz?OUfTlnUuxQ+bzznc>STt?|nv4zT5spRUDxk^OfKG-i
z8dm{L#s+ktqUKx$G?^FxF*=LvQFCqrn$TwYR$>~*)SVlE7Bra}h}PrXdpd{g%QdwZ
zQ6L^I()2FcObmc?qobpjw0LF|yr+|)6(Q_N!w+cTuovjN(O4ltNEBX-5E9XVmZ1O1
d7YUeX`xASu@XDv6%@qIu002ovPDHLkV1n<?r3?T7
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..156dbefdec89cf8818f9a2f0ba27c971784108cf
GIT binary patch
literal 17375
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
N002ovPDHLkV1jE&&ISMg
--- a/browser/themes/pinstripe/aboutCertError.css
+++ b/browser/themes/pinstripe/aboutCertError.css
@@ -32,17 +32,17 @@ h2 {
   border: 1px solid #FFBD09; /* pale yellow extracted from yellow passport icon */
   border-radius: 10px;
   padding: 3em;
   -moz-padding-start: 30px;
   background: url("chrome://global/skin/icons/sslWarning.png") left 0 no-repeat -moz-Field;
   background-origin: content-box;
 }
 
-#errorPageContainer:dir(rtl) {
+#errorPageContainer:-moz-dir(rtl) {
   background-position: right 0;
 }
 
 #errorTitle {
   -moz-margin-start: 80px;
 }
 
 #errorLongContent {
@@ -54,19 +54,19 @@ h2 {
   -moz-margin-start: -20px;
   background: url("chrome://browser/skin/aboutCertError_sectionExpanded.png") left center no-repeat;
   border: none;
   font: inherit;
   color: inherit;
   cursor: pointer;
 }
 
-.expander > button:dir(rtl) {
+.expander > button:-moz-dir(rtl) {
   background-position: right center;
 }
 
 .expander[collapsed] > button {
   background-image: url("chrome://browser/skin/aboutCertError_sectionCollapsed.png");
 }
 
-.expander[collapsed] > button:dir(rtl) {
+.expander[collapsed] > button:-moz-dir(rtl) {
   background-image: url("chrome://browser/skin/aboutCertError_sectionCollapsed-rtl.png");
 }
--- a/browser/themes/pinstripe/aboutPrivateBrowsing.css
+++ b/browser/themes/pinstripe/aboutPrivateBrowsing.css
@@ -29,17 +29,17 @@ body.normal > #errorPageContainer {
 }
 
 #moreInfo {
   font-size: 110%; /* to match the value set in chrome://global/skin/netError.css */
   -moz-padding-start: 25px;
   background: url("chrome://global/skin/icons/information-16.png") no-repeat top left;
 }
 
-#moreInfo:dir(rtl) {
+#moreInfo:-moz-dir(rtl) {
   background-position: top right;
 }
 
 #moreInfoText {
   margin-bottom: 0;
 }
 
 #moreInfoLinkContainer {
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f53fdda5733fa693ddfc6073c8092afc8edb5505
GIT binary patch
literal 1371
zc$@)S1*H0kP)<h;3K|Lk000e1NJLTq002M$001lq1^@s6)nC5<000FdNkl<Zc-rNc
zS!i5U9LCQ`GpV-42gRx-Rv%geVrhL)C@qLsCR?+RgzWnc+4t=|Bw(sm5c(>;GwI9)
zp%f9dVj4+onx-~2N{C5FlNj4K(<V|w;`hM>CbwrMkj#HZ@Zpz%IcL7#x!;_7=0=s2
zl<2U5bCs2q{k65VuDZH9b2sp_%wQHX{kVEDkMlzcoph_>;$j^&4Gj(M_V#vHS67$O
z-QB$__*rH!i<vrCO-+rdafm}F-Kwal$jVtX<mv3}baGNKU=}l(ZS_@GSDP5;ypTdC
z-KwCVU>jv+Wj!q|Ev}A^4kMT_li3y@OXx*8ZjNKOaIPqH&_yTQeNPooRaIrQwY70#
zP+=ys>97z1qRY$6dm0-X2YlQjYiMd}a#d7RT!8Z=u&cbhJYQIV+1lD_NWg45{1Ax}
zE@FXBDL=Du@t5E_u;o=bIXT<F1hcuh*^q$QbOgYG`|^sApNHN69Or$VDmy#d7oGto
zwxS^cv*`%HD=5h$<;PF58;&EsPL-LNxsB4&QnS9k-jIOVbOc}@=6D4C9ysj2PL+|7
z;R}D8`H)~pz-)^z?0%J=p1zI3!a@`Gp&<dYExxe(RcdOgFZ=TI^F92zl7QK8*y-{E
zPi9lf&upttrKF_z@-ilQa1a>+umCq4N9giLZf>qA<!83lr;?MCeQ{usS8!Sz0`MVd
z0FLu?`GF_1DdlIj)u$2@6Ss)OJ#i6_hfe&LWJthl96XocIzXoep3J6{pV?NQN=QhE
z0MWP~day+Xa8PieA|RXhp$o1HaGnHqpnTxL#CalaW?Oyy(~ED#jf;0-`*WL$LI+)R
z(j6ZkuY5^LO6uWwu)WM=w$;azkk98_SV*Ch?zp%(W#KHoDG$b-L3BBp$!x2SCn2BD
z*-%KKlkV8qSf!yhEiKKRm6hefygfOX!7OI#Tq-6erWdCne;z^#opAR7rNIWy;TGw~
zJl7r^E@m)`nL3wpI2`|L)aK@9IQh>OU<0|}d$0%|?2<)hFpHUfTwj5QoF8Hy((SK+
zPr#pG2`uiBC1x>G>+%*ACLZV(lmh+$_k#>GQ#8J1j)#e5T>)3UgY!Y=KC`X9l}C@h
z^X`%b0cW7KEWv&KsRA}OHh#zJoCM6a`l3&qe(SQ+lZwTB!^Lr)F!QUcYd5Z5`#R^;
zdmp^5+W`w;Mu-KgFXG^<QQ-KyXB;Qi*8U#Bd$WT6*(Xo_8IMoSeuqxFbp_0WX(8q{
z1=zrT5H)uD=O!*v&_8>3VzL9Squ@EZbp_0UDIw-G1#DsK>;LQw7b)nU{pjP*--qj&
zEx)dS8StwRGyV!7AI7G>DD6+nDtU?CKm|;LUxb(rPymUL_QPS{sembPSBR+{3b0B0
z=?GLn1o#cy5rWx~{t6%=@T))tyyo31w}oK#8#@#*Dd?XJSit)FdX~4TQ6cWYQLsY+
z_XPd-0u}Hqp46^+C;lYFC>-D7^-zEUCItNxx&rLr6!-#+f?;9kFu`fC-%<c~A;(7q
zyd%uk6>u4hd8I#wh!HyJwifW$%8G~M5>9683K$1B!o;|>fWe{RV!VF~3<c3M#7t)E
z3K#=Fgo!ar0VHZ^Y57x(-SjSea1Z%|%wQHXnQbkATh8=0J{n?f(XA=q(7_j8e{<yK
zSk>dlt6$>K9Nw*ipJfKKn8|Ew0Tdn&GfKl@0ncGxu&#ipFkU>}$`8+jqu|&c@{cit
dS-e;s{{ly`>rF95EY<)3002ovPDHLkV1jTLmG=Mu
--- a/browser/themes/pinstripe/browser.css
+++ b/browser/themes/pinstripe/browser.css
@@ -116,16 +116,26 @@ toolbarbutton.chevron > .toolbarbutton-t
 toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
   display: -moz-box; /* display chevron icon in text mode */
 }
 
 toolbarbutton.chevron:-moz-locale-dir(rtl) > .toolbarbutton-icon {
   transform: scaleX(-1);
 }
 
+@media (min-resolution: 2dppx) {
+  toolbarbutton.chevron {
+    list-style-image: url("chrome://global/skin/icons/chevron@2x.png");
+  }
+
+  toolbarbutton.chevron > .toolbarbutton-icon {
+    width: 13px;
+  }
+}
+
 /* ----- BOOKMARK BUTTONS ----- */
 
 toolbarbutton.bookmark-item {
   font-weight: bold;
   color: #222;
   border: 0;
   border-radius: 10000px;
   padding: 1px 8px;
@@ -135,16 +145,27 @@ toolbarbutton.bookmark-item {
 .bookmark-item > .toolbarbutton-menu-dropmarker {
   list-style-image: url("chrome://browser/skin/places/folderDropArrow.png");
   -moz-image-region: rect(0, 7px, 5px, 0);
   margin-top: 1px;
   -moz-margin-start: 3px;
   -moz-margin-end: -2px;
 }
 
+@media (min-resolution: 2dppx) {
+  .bookmark-item > .toolbarbutton-menu-dropmarker {
+    list-style-image: url("chrome://browser/skin/places/folderDropArrow@2x.png");
+    -moz-image-region: rect(0, 14px, 10px, 0);
+  }
+
+  .bookmark-item > .toolbarbutton-menu-dropmarker > .dropmarker-icon {
+    width: 7px;
+  }
+}
+
 .bookmark-item > .toolbarbutton-text {
   display: -moz-box !important; /* prevent [mode="icons"] from hiding the label */
   margin: 0 !important;
 }
 
 toolbarbutton.bookmark-item:hover,
 toolbarbutton.bookmark-item[open="true"] {
   background-color: rgba(0, 0, 0, .205);
@@ -156,16 +177,23 @@ toolbarbutton.bookmark-item[open="true"]
   text-shadow: 0 1px rgba(0, 0, 0, .4) !important;
 }
 
 .bookmark-item:hover > .toolbarbutton-menu-dropmarker,
 .bookmark-item[open="true"] > .toolbarbutton-menu-dropmarker {
   -moz-image-region: rect(5px, 7px, 10px, 0);
 }
 
+@media (min-resolution: 2dppx) {
+  .bookmark-item:hover > .toolbarbutton-menu-dropmarker,
+  .bookmark-item[open="true"] > .toolbarbutton-menu-dropmarker {
+    -moz-image-region: rect(10px, 14px, 20px, 0);
+  }
+}
+
 toolbarbutton.bookmark-item:active:hover,
 toolbarbutton.bookmark-item[open="true"] {
   box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.4), 0 1px rgba(255, 255, 255, 0.4);
   background-color: rgba(0, 0, 0, .5);
 }
 
 toolbarbutton.bookmark-item > menupopup {
   margin-top: 2px;
@@ -215,16 +243,50 @@ toolbarbutton.bookmark-item > menupopup 
 .bookmark-item[query][hostContainer] {
   list-style-image: url("chrome://global/skin/tree/folder.png");
 }
 
 .bookmark-item[query][hostContainer][open] {
   list-style-image: url("chrome://global/skin/tree/folder.png");
 }
 
+@media (min-resolution: 2dppx) {
+  .bookmark-item[container] {
+    list-style-image: url("chrome://global/skin/tree/folder@2x.png");
+  }
+
+  .bookmark-item[container][livemark] {
+    list-style-image: url("chrome://browser/skin/page-livemarks@2x.png");
+  }
+
+  .bookmark-item[container][livemark] .bookmark-item {
+    list-style-image: url("chrome://browser/skin/places/livemark-item.png");
+  }
+
+  .bookmark-item[container][query] {
+    list-style-image: url("chrome://browser/skin/places/query@2x.png");
+  }
+
+  .bookmark-item[query][tagContainer] {
+    list-style-image: url("chrome://browser/skin/places/tag@2x.png");
+  }
+
+  .bookmark-item[query][dayContainer] {
+    list-style-image: url("chrome://browser/skin/places/history@2x.png");
+  }
+
+  .bookmark-item[query][hostContainer] {
+    list-style-image: url("chrome://global/skin/tree/folder@2x.png");
+  }
+
+  .bookmark-item[query][hostContainer][open] {
+    list-style-image: url("chrome://global/skin/tree/folder@2x.png");
+  }
+}
+
 /* Workaround for native menubar inheritance */
 .openintabs-menuitem,
 .openlivemarksite-menuitem,
 .livemarkstatus-menuitem {
   list-style-image: none;
 }
 
 .bookmark-item[cutting] > .toolbarbutton-icon,
@@ -241,32 +303,58 @@ toolbarbutton.bookmark-item > menupopup 
   background: url("chrome://browser/skin/places/bookmarksToolbar.png") no-repeat center;
 }
 
 .bookmarks-toolbar-customize {
   max-width: 15em !important;
   list-style-image: url("chrome://browser/skin/places/bookmarksToolbar.png") !important;
 }
 
+@media (min-resolution: 2dppx) {
+  #wrapper-personal-bookmarks[place="palette"] > .toolbarpaletteitem-box {
+    background-image: url("chrome://browser/skin/places/bookmarksToolbar@2x.png");
+    background-size: 16px;
+  }
+
+  .bookmarks-toolbar-customize {
+    list-style-image: url("chrome://browser/skin/places/bookmarksToolbar@2x.png") !important;
+  }
+
+  .bookmarks-toolbar-customize > .toolbarbutton-icon {
+    width: 16px;
+  }
+}
+
 /* ----- BOOKMARK MENUS ----- */
 
 .bookmark-item > .menu-iconic-left > .menu-iconic-icon {
   width: 16px;
   height: 16px;
 }
 
 #bookmarksToolbarFolderMenu,
 #BMB_bookmarksToolbar {
   list-style-image: url("chrome://browser/skin/places/bookmarksToolbar.png");
 }
 
 #BMB_unsortedBookmarks {
   list-style-image: url("chrome://browser/skin/places/unfiledBookmarks.png");
 }
 
+@media (min-resolution: 2dppx) {
+  #bookmarksToolbarFolderMenu,
+  #BMB_bookmarksToolbar {
+    list-style-image: url("chrome://browser/skin/places/bookmarksToolbar@2x.png");
+  }
+
+  #BMB_unsortedBookmarks {
+    list-style-image: url("chrome://browser/skin/places/unfiledBookmarks@2x.png");
+  }
+}
+
 /* ----- PRIMARY TOOLBAR BUTTONS ----- */
 
 .toolbarbutton-1:not([type="menu-button"]),
 .toolbarbutton-1 > .toolbarbutton-menubutton-button,
 .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker,
 #restore-button {
   -moz-box-orient: vertical;
   -moz-appearance: toolbarbutton;
@@ -305,16 +393,28 @@ toolbarbutton.bookmark-item > menupopup 
 }
 
 .toolbarbutton-1,
 #restore-button {
   margin: 0 4px;
   list-style-image: url("chrome://browser/skin/Toolbar.png");
 }
 
+@media (min-resolution: 2dppx) {
+  /* Whitelist built-in buttons, instead of .toolbarbutton-1,
+     to avoid potentially breaking add-on toolbar buttons. */
+  :-moz-any(@primaryToolbarButtons@):not(#tabview-button) {
+    list-style-image: url("chrome://browser/skin/Toolbar@2x.png");
+  }
+
+  :-moz-any(@primaryToolbarButtons@):not(#tabview-button) > .toolbarbutton-icon {
+    width: 20px;
+  }
+}
+
 toolbar:not([mode="icons"]) .toolbarbutton-1:not([type="menu-button"]),
 toolbar:not([mode="icons"]) .toolbarbutton-1 > .toolbarbutton-menubutton-button,
 toolbar:not([mode="icons"]) .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker,
 toolbar:not([mode="icons"]) #restore-button {
   -moz-appearance: none;
   padding: 0;
   height: auto;
   border: none;
@@ -366,16 +466,28 @@ toolbar:not([mode="icons"]) #restore-but
   }
 }
 
 .toolbarbutton-1 > .toolbarbutton-menu-dropmarker,
 .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
   list-style-image: url(chrome://browser/skin/toolbarbutton-dropmarker.png);
 }
 
+@media (min-resolution: 2dppx) {
+  .toolbarbutton-1 > .toolbarbutton-menu-dropmarker,
+  .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
+    list-style-image: url(chrome://browser/skin/toolbarbutton-dropmarker@2x.png);
+  }
+
+  .toolbarbutton-1 > .toolbarbutton-menu-dropmarker > .dropmarker-icon,
+  .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
+    width: 7px;
+  }
+}
+
 .toolbarbutton-1 > .toolbarbutton-menu-dropmarker {
   -moz-margin-end: 1px;
 }
 
 .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
   width: 14px;
   padding-top: 2px;
   -moz-border-start: none !important;
@@ -443,23 +555,40 @@ toolbar[mode="icons"] .toolbarbutton-1 >
 }
 
 #back-button,
 #forward-button:-moz-locale-dir(rtl),
 toolbar[mode="icons"] #back-button:-moz-locale-dir(rtl):-moz-lwtheme {
   -moz-image-region: rect(0, 40px, 20px, 20px);
 }
 
+@media (min-resolution: 2dppx) {
+  #back-button,
+  #forward-button:-moz-locale-dir(rtl),
+  toolbar[mode="icons"] #back-button:-moz-locale-dir(rtl):-moz-lwtheme {
+    -moz-image-region: rect(0, 80px, 40px, 40px);
+  }
+}
+
 #forward-button,
 #back-button:-moz-locale-dir(rtl),
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #forward-button:-moz-locale-dir(rtl),
 toolbar[mode="icons"] #forward-button:-moz-locale-dir(rtl):-moz-lwtheme {
   -moz-image-region: rect(0, 60px, 20px, 40px);
 }
 
+@media (min-resolution: 2dppx) {
+  #forward-button,
+  #back-button:-moz-locale-dir(rtl),
+  #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #forward-button:-moz-locale-dir(rtl),
+  toolbar[mode="icons"] #forward-button:-moz-locale-dir(rtl):-moz-lwtheme {
+    -moz-image-region: rect(0, 120px, 40px, 80px);
+  }
+}
+
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button:-moz-locale-dir(rtl),
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #forward-button:-moz-locale-dir(rtl),
 toolbar[mode="icons"] #back-button:-moz-locale-dir(rtl):-moz-lwtheme,
 toolbar[mode="icons"] #forward-button:-moz-locale-dir(rtl):-moz-lwtheme {
   transform: scaleX(-1);
 }
 
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button {
@@ -469,24 +598,37 @@ toolbar[mode="icons"] #forward-button:-m
   z-index: 1;
   -moz-image-region: rect(0, 20px, 20px, 0);
   width: 30px;
   height: 30px;
   padding: 4px 5px 4px 3px;
   border-radius: 10000px;
 }
 
+@media (min-resolution: 2dppx) {
+  #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button {
+    -moz-image-region: rect(0, 40px, 40px, 0);
+  }
+}
+
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button:not(:-moz-lwtheme) {
   height: 31px;
   padding: 4px 5px 5px 3px;
   margin-bottom: -1px;
   background: url(chrome://browser/skin/keyhole-circle.png) 0 0 no-repeat;
   border-radius: 0;
 }
 
+@media (min-resolution: 2dppx) {
+  #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button:not(:-moz-lwtheme) {
+    background-image: url(chrome://browser/skin/keyhole-circle@2x.png);
+    background-size: 90px;
+  }
+}
+
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button:-moz-window-inactive:not(:-moz-lwtheme) {
   background-position: -60px 0;
 }
 
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button:not([disabled="true"]):active:hover:not(:-moz-lwtheme),
 #navigator-toolbox[iconsize="large"][mode="icons"] > #nav-bar #back-button[open="true"]:not(:-moz-lwtheme) {
   background-position: -30px 0;
 }
@@ -607,22 +749,34 @@ toolbar[mode="icons"] #forward-button:-m
 
 
 /* reload button */
 
 #reload-button {
   -moz-image-region: rect(0, 80px, 20px, 60px);
 }
 
+@media (min-resolution: 2dppx) {
+  #reload-button {
+    -moz-image-region: rect(0, 160px, 40px, 120px);
+  }
+}
+
 /* stop button */
 
 #stop-button {
   -moz-image-region: rect(0, 100px, 20px, 80px);
 }
 
+@media (min-resolution: 2dppx) {
+  #stop-button {
+    -moz-image-region: rect(0, 200px, 40px, 160px);
+  }
+}
+
 /* home button */
 
 #home-button {
   -moz-image-region: rect(0, 120px, 20px, 100px);
 }
 
 #home-button.bookmark-item {
   list-style-image: url("chrome://browser/skin/home.png");
@@ -634,16 +788,22 @@ toolbar[mode="icons"] #forward-button:-m
 }
 
 #home-button.bookmark-item > .toolbarbutton-icon {
   display: -moz-box !important;
   -moz-margin-start: -2px;
   -moz-margin-end: 3px;
 }
 
+@media (min-resolution: 2dppx) {
+  #home-button:not(.bookmark-item) {
+    -moz-image-region: rect(0, 240px, 40px, 200px);
+  }
+}
+
 /* tabview button */
 
 #tabview-button,
 #menu_tabview {
   list-style-image: url(chrome://browser/skin/tabview/tabview.png);
 }
 
 #tabview-button {
@@ -687,113 +847,212 @@ toolbar[mode="icons"] #forward-button:-m
 }
 
 /* download manager button */
 
 #downloads-button {
   -moz-image-region: rect(0, 140px, 20px, 120px);
 }
 
+@media (min-resolution: 2dppx) {
+  #downloads-button {
+    -moz-image-region: rect(0, 280px, 40px, 240px);
+  }
+}
+
 /* history sidebar button */
 
 #history-button {
   -moz-image-region: rect(0, 160px, 20px, 140px);
 }
 
 #history-button[checked="true"] {
   -moz-image-region: rect(20px, 160px, 40px, 140px);
 }
 
+@media (min-resolution: 2dppx) {
+  #history-button {
+    -moz-image-region: rect(0, 320px, 40px, 280px);
+  }
+
+  #history-button[checked="true"] {
+    -moz-image-region: rect(40px, 320px, 80px, 280px);
+  }
+}
+
 /* bookmark sidebar & menu buttons */
 
 #bookmarks-button,
 #bookmarks-menu-button {
   -moz-image-region: rect(0, 180px, 20px, 160px);
 }
 
 #bookmarks-button[checked="true"] {
   -moz-image-region: rect(20px, 180px, 40px, 160px);
 }
 
 #bookmarks-menu-button.bookmark-item {
   -moz-image-region: rect(2px, 178px, 18px, 162px);
   list-style-image: url("chrome://browser/skin/Toolbar.png");
 }
 
+@media (min-resolution: 2dppx) {
+  #bookmarks-button,
+  #bookmarks-menu-button {
+    -moz-image-region: rect(0, 360px, 40px, 320px);
+  }
+
+  #bookmarks-button[checked="true"] {
+    -moz-image-region: rect(40px, 360px, 80px, 320px);
+  }
+
+  #bookmarks-menu-button.bookmark-item {
+    -moz-image-region: rect(4px, 356px, 36px, 324px);
+    list-style-image: url("chrome://browser/skin/Toolbar@2x.png");
+  }
+
+  #bookmarks-menu-button.bookmark-item > .toolbarbutton-icon {
+    width: 16px;
+  }
+}
+
 #bookmarks-menu-button.toolbarbutton-1 {
   -moz-box-orient: horizontal;
 }
 
 /* print button */
 
 #print-button {
   -moz-image-region: rect(0, 200px, 20px, 180px);
 }
 
+@media (min-resolution: 2dppx) {
+  #print-button {
+    -moz-image-region: rect(0, 400px, 40px, 360px);
+  }
+}
+
 /* toolbar new tab button */
 
 #new-tab-button {
   -moz-image-region: rect(0, 220px, 20px, 200px);
 }
 
+@media (min-resolution: 2dppx) {
+  #new-tab-button {
+    -moz-image-region: rect(0, 440px, 40px, 400px);
+  }
+}
+
 /* new window button */
 
 #new-window-button {
   -moz-image-region: rect(0, 240px, 20px, 220px);
 }
 
+@media (min-resolution: 2dppx) {
+  #new-window-button {
+    -moz-image-region: rect(0, 480px, 40px, 440px);
+  }
+}
+
 /* cut button */
 
 #cut-button {
   -moz-image-region: rect(0, 260px, 20px, 240px);
 }
 
+@media (min-resolution: 2dppx) {
+  #cut-button {
+    -moz-image-region: rect(0, 520px, 40px, 480px);
+  }
+}
+
 /* copy button */
 
 #copy-button {
   -moz-image-region: rect(0, 280px, 20px, 260px);
 }
 
+@media (min-resolution: 2dppx) {
+  #copy-button {
+    -moz-image-region: rect(0, 560px, 40px, 520px);
+  }
+}
+
 /* paste button */
 
 #paste-button {
   -moz-image-region: rect(0, 300px, 20px, 280px);
 }
 
+@media (min-resolution: 2dppx) {
+  #paste-button {
+    -moz-image-region: rect(0, 600px, 40px, 560px);
+  }
+}
+
 /* alltabs button */
 
 #alltabs-button {
   -moz-image-region: rect(0, 380px, 20px, 360px);
 }
 
+@media (min-resolution: 2dppx) {
+  #alltabs-button {
+    -moz-image-region: rect(0, 760px, 40px, 720px);
+  }
+}
+
 /* fullscreen button */
 
 #fullscreen-button {
   -moz-image-region: rect(0, 340px, 20px, 320px);
 }
 
 #fullscreen-button[checked="true"],
 #restore-button {
   -moz-image-region: rect(0, 360px, 20px, 340px);
 }
 
+@media (min-resolution: 2dppx) {
+  #fullscreen-button {
+    -moz-image-region: rect(0, 680px, 40px, 640px);
+  }
+
+  #fullscreen-button[checked="true"],
+  #restore-button {
+    -moz-image-region: rect(0, 720px, 40px, 680px);
+  }
+}
+
 /* zoom controls */
 
 #zoom-controls {
   -moz-box-align: center;
 }
 
 #zoom-out-button {
   -moz-image-region: rect(0, 400px, 20px, 380px);
 }
 
 #zoom-in-button {
   -moz-image-region: rect(0, 420px, 20px, 400px);
 }
 
+@media (min-resolution: 2dppx) {
+  #zoom-out-button {
+    -moz-image-region: rect(0, 800px, 40px, 760px);
+  }
+
+  #zoom-in-button {
+    -moz-image-region: rect(0, 480px, 40px, 440px);
+  }
+}
+
 toolbar[mode="icons"] #zoom-out-button {
   -moz-margin-end: 0;
 }
 
 toolbar[mode="icons"] #zoom-in-button {
   -moz-border-start: none;
   -moz-margin-start: 0;
 }
@@ -816,22 +1075,34 @@ toolbar[mode="icons"] #zoom-in-button {
   -moz-image-region: rect(0, 440px, 20px, 420px);
 }
 
 #sync-button[status="active"] {
   list-style-image: url("chrome://browser/skin/sync-throbber.png");
   -moz-image-region: rect(0, 20px, 20px, 0px);
 }
 
+@media (min-resolution: 2dppx) {
+  #sync-button:not([status="active"]) {
+    -moz-image-region: rect(0, 880px, 40px, 840px);
+  }
+}
+
 /* feed button */
 
 #feed-button {
   -moz-image-region: rect(0, 460px, 20px, 440px);
 }
 
+@media (min-resolution: 2dppx) {
+  #feed-button {
+    -moz-image-region: rect(0, 920px, 40px, 880px);
+  }
+}
+
 
 /* ----- FULLSCREEN WINDOW CONTROLS ----- */
 
 #minimize-button,
 #close-button,
 #fullscreen-button ~ #window-controls > #restore-button {
   display: none;
 }
@@ -1022,16 +1293,32 @@ toolbar[mode="icons"] #zoom-in-button {
 }
 
 .urlbar-history-dropmarker[open="true"],
 .urlbar-history-dropmarker:hover:active {
   -moz-image-region: rect(0px, 22px, 14px, 11px);
   background-image: -moz-radial-gradient(center, circle closest-side, hsla(205,100%,70%,.3), hsla(205,100%,70%,0));
 }
 
+@media (min-resolution: 2dppx) {
+  .urlbar-history-dropmarker {
+    list-style-image: url("chrome://browser/skin/urlbar-history-dropmarker@2x.png");
+    -moz-image-region: rect(0px, 22px, 28px, 0px);
+  }
+
+  .urlbar-history-dropmarker[open="true"],
+  .urlbar-history-dropmarker:hover:active {
+    -moz-image-region: rect(0px, 44px, 28px, 22px);
+  }
+
+  .urlbar-history-dropmarker > .dropmarker-icon {
+    width: 11px;
+  }
+}
+
 #urlbar-icons {
   -moz-box-align: center;
 }
 
 .urlbar-icon {
   padding: 2px 3px;
 }
 
@@ -1066,16 +1353,36 @@ toolbar[mode="icons"] #zoom-in-button {
   list-style-image: url(chrome://browser/skin/identity-icons-https-ev.png);
 }
 
 #identity-box:hover:active > #page-proxy-favicon,
 #identity-box[open=true] > #page-proxy-favicon {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
+@media (min-resolution: 2dppx) {
+  #page-proxy-favicon {
+    list-style-image: url(chrome://browser/skin/identity-icons-generic@2x.png);
+    -moz-image-region: rect(0, 32px, 32px, 0);
+  }
+
+  .verifiedDomain > #page-proxy-favicon[pageproxystate="valid"] {
+    list-style-image: url(chrome://browser/skin/identity-icons-https@2x.png);
+  }
+
+  .verifiedIdentity > #page-proxy-favicon[pageproxystate="valid"] {
+    list-style-image: url(chrome://browser/skin/identity-icons-https-ev@2x.png);
+  }
+
+  #identity-box:hover:active > #page-proxy-favicon,
+  #identity-box[open=true] > #page-proxy-favicon {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+}
+
 #page-proxy-favicon[pageproxystate="invalid"] {
   opacity: 0.3;
 }
 
 #wrapper-urlbar-container[place="palette"] {
   max-width: 20em;
 }
 
@@ -1150,16 +1457,50 @@ richlistitem[type~="action"][actiontype=
 window[tabsontop="false"] richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-icon {
   -moz-image-region: rect(0, 32px, 11px, 16px);
 }
 
 window[tabsontop="false"] richlistitem[type~="action"][actiontype="switchtab"][selected="true"] > .ac-url-box > .ac-action-icon {
   -moz-image-region: rect(11px, 32px, 22px, 16px);
 }
 
+@media (min-resolution: 2dppx) {
+  .ac-result-type-bookmark {
+    list-style-image: url("chrome://browser/skin/places/star-icons@2x.png");
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+
+  richlistitem[selected="true"][current="true"] > .ac-title-box > .ac-result-type-bookmark {
+    list-style-image: url("chrome://browser/skin/places/star-icons@2x.png");
+    -moz-image-region: rect(0, 128px, 32px, 96px);
+  }
+
+  .ac-result-type-tag {
+    list-style-image: url("chrome://browser/skin/places/tag@2x.png");
+  }
+
+  richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-icon {
+    list-style-image: url("chrome://browser/skin/actionicon-tab@2x.png");
+    -moz-image-region: rect(0, 32px, 22px, 0);
+    width: 16px;
+  }
+
+  richlistitem[type~="action"][actiontype="switchtab"][selected="true"] > .ac-url-box > .ac-action-icon {
+    -moz-image-region: rect(22px, 32px, 44px, 0);
+  }
+
+  window[tabsontop="false"] richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-icon {
+    -moz-image-region: rect(0, 64px, 22px, 32px);
+  }
+
+  window[tabsontop="false"] richlistitem[type~="action"][actiontype="switchtab"][selected="true"] > .ac-url-box > .ac-action-icon {
+    -moz-image-region: rect(22px, 64px, 44px, 32px);
+  }
+}
+
 .autocomplete-treebody::-moz-tree-cell-text(treecolAutoCompleteComment) {
   color: GrayText;
 }
 
 .ac-comment[selected="true"],
 .ac-url-text[selected="true"],
 .ac-action-text[selected="true"] {
   color: inherit !important;
@@ -1226,27 +1567,78 @@ window[tabsontop="false"] richlistitem[t
 #urlbar-stop-button {
   -moz-image-region: rect(0, 28px, 14px, 14px);
 }
 
 #urlbar-stop-button:hover:active {
   -moz-image-region: rect(14px, 28px, 28px, 14px);
 }
 
+@media (min-resolution: 2dppx) {
+  #go-button,
+  #urlbar > toolbarbutton {
+    list-style-image: url("chrome://browser/skin/reload-stop-go@2x.png");
+  }
+
+  #go-button,
+  #urlbar-go-button {
+    -moz-image-region: rect(0, 84px, 28px, 56px);
+  }
+
+  #go-button:hover:active,
+  #urlbar-go-button:hover:active {
+    -moz-image-region: rect(28px, 84px, 56px, 56px);
+  }
+
+  #urlbar-reload-button {
+    -moz-image-region: rect(0, 28px, 28px, 0);
+  }
+
+  #urlbar-reload-button:not([disabled]):hover:active {
+    -moz-image-region: rect(28px, 28px, 56px, 0);
+  }
+
+  #urlbar-stop-button {
+    -moz-image-region: rect(0, 56px, 28px, 28px);
+  }
+
+  #urlbar-stop-button:hover:active {
+    -moz-image-region: rect(28px, 56px, 56px, 28px);
+  }
+
+  #go-button > .toolbarbutton-icon,
+  #urlbar > toolbarbutton > .toolbarbutton-icon {
+    width: 14px;
+  }
+}
+
 /* POPUP BLOCKER BUTTON */
 #page-report-button {
   list-style-image: url("chrome://browser/skin/urlbar-popup-blocked.png");
   -moz-image-region: rect(0, 16px, 16px, 0);
 }
 
 #page-report-button:hover:active,
 #page-report-button[open="true"] {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
+@media (min-resolution: 2dppx) {
+  #page-report-button {
+    list-style-image: url("chrome://browser/skin/urlbar-popup-blocked@2x.png");
+    -moz-image-region: rect(0, 32px, 32px, 0);
+    width: 22px;
+  }
+
+  #page-report-button:hover:active,
+  #page-report-button[open="true"] {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+}
+
 /* social recommending panel */
 
 #share-button {
   width: 16px;
   height: 16px;
 }
 
 #socialUserPortrait {
@@ -1298,16 +1690,33 @@ window[tabsontop="false"] richlistitem[t
 #star-button[starred="true"] {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
 #star-button:hover:active[starred="true"] {
   -moz-image-region: rect(0, 48px, 16px, 32px);
 }
 
+@media (min-resolution: 2dppx) {
+  #star-button {
+    list-style-image: url("chrome://browser/skin/places/star-icons@2x.png");
+    -moz-image-region: rect(0, 32px, 32px, 0);
+    width: 22px;
+  }
+
+  #star-button:hover:active,
+  #star-button[starred="true"] {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+
+  #star-button:hover:active[starred="true"] {
+    -moz-image-region: rect(0, 96px, 32px, 64px);
+  }
+}
+
 /* BOOKMARKING PANEL */
 #editBookmarkPanelStarIcon {
   list-style-image: url("chrome://browser/skin/places/starred48.png");
   width: 48px;
   height: 48px;
 }
 
 #editBookmarkPanelStarIcon[unstarred] {
@@ -1525,16 +1934,31 @@ window[tabsontop="false"] richlistitem[t
   margin: 1px 0 0;
 }
 
 #editBookmarkPanel .expander-up > .button-box > .button-text,
 #editBookmarkPanel .expander-down > .button-box > .button-text {
   display: none;
 }
 
+@media (min-resolution: 2dppx) {
+  #editBookmarkPanel .expander-up {
+    list-style-image: url("chrome://browser/skin/panel-expander-open@2x.png");
+  }
+
+  #editBookmarkPanel .expander-down {
+    list-style-image: url("chrome://browser/skin/panel-expander-closed@2x.png");
+  }
+
+  #editBookmarkPanel .expander-up > .button-box > .button-icon,
+  #editBookmarkPanel .expander-down > .button-box > .button-icon {
+    width: 9px;
+  }
+}
+
 #editBMPanel_tagsField > .autocomplete-textbox-container > .textbox-input-box > html|*.textbox-input:-moz-placeholder {
   color: #bbb;
 }
 
 .editBMPanel_rowLabel {
   text-align: end;
 }
 
@@ -1570,16 +1994,35 @@ window[tabsontop="false"] richlistitem[t
   -moz-image-region: rect(0, 48px, 16px, 32px);
 }
 
 .panel-promo-closebutton > .toolbarbutton-text {
   padding: 0;
   margin: 0;
 }
 
+@media (min-resolution: 2dppx) {
+  .panel-promo-closebutton {
+    list-style-image: url("chrome://global/skin/icons/close@2x.png");
+    -moz-image-region: rect(0, 32px, 32px, 0);
+  }
+
+  .panel-promo-closebutton:hover {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+
+  .panel-promo-closebutton:hover:active {
+    -moz-image-region: rect(0, 96px, 32px, 64px);
+  }
+
+  .panel-promo-closebutton > .toolbarbutton-icon {
+    width: 16px;
+  }
+}
+
 /* ----- SIDEBAR ELEMENTS ----- */
 
 #sidebar,
 sidebarheader {
   background-color: #d4dde5;
 }
 
 #sidebar:-moz-window-inactive,
@@ -1648,16 +2091,26 @@ sidebarheader > .tabs-closebutton > .too
 toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
   display: none;
 }
 
 .bookmark-item {
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
+@media (min-resolution: 2dppx) {
+  .bookmark-item {
+    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
+  }
+
+  image.bookmark-item {
+    width: 16px;
+  }
+}
+
 .openintabs-menuitem {
   list-style-image: none;
 }
 
 /* ::::: tabbrowser ::::: */
 
 .tabbrowser-tabbox {
   margin: 0;
@@ -1673,16 +2126,31 @@ toolbarbutton.chevron > .toolbarbutton-m
 .tab-throbber {
   list-style-image: url("chrome://browser/skin/tabbrowser/connecting.png");
 }
 
 .tab-throbber[progress] {
   list-style-image: url("chrome://browser/skin/tabbrowser/loading.png");
 }
 
+@media (min-resolution: 2dppx) {
+  .tab-throbber,
+  .tab-icon-image {
+    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
+  }
+
+  .tab-throbber {
+    list-style-image: url("chrome://browser/skin/tabbrowser/connecting@2x.png");
+  }
+
+  .tab-throbber[progress] {
+    list-style-image: url("chrome://browser/skin/tabbrowser/loading@2x.png");
+  }
+}
+
 .tabbrowser-tab:not(:hover) > .tab-stack > .tab-content > .tab-icon-image:not([selected="true"]) {
   opacity: .8;
 }
 
 .tabbrowser-tab:not([pinned]):not([fadein]) {
   transition: min-width 200ms ease-out /* copied from browser/base/content/browser.css */,
               max-width 250ms ease-out /* copied from browser/base/content/browser.css */,
               opacity 50ms ease-out 100ms /* hide the tab for the last 100ms of the max-width transition */;
@@ -1839,16 +2307,32 @@ toolbarbutton.chevron > .toolbarbutton-m
   -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-top-selected-active.png) 0 11 fill repeat stretch;
 }
 
 @TABSONBOTTOM_TAB_STACK@ > .tab-content,
 @TABSONBOTTOM_NEWTAB_BUTTON@ > .toolbarbutton-icon {
   -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-bottom-normal-active.png) 0 11 fill repeat stretch;
 }
 
+@media (min-resolution: 2dppx) {
+  @TABSONTOP_TAB_STACK@ > .tab-content,
+  @TABSONTOP_NEWTAB_BUTTON@ > .toolbarbutton-icon {
+    -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-top-normal-active@2x.png) 0 22 fill repeat stretch;
+  }
+
+  @TABSONTOP_TAB@:hover > .tab-stack > .tab-content:not([selected="true"]),
+  @TABSONTOP_NEWTAB_BUTTON@:hover > .toolbarbutton-icon {
+    -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-top-hover-active@2x.png) 0 22 fill repeat stretch;
+  }
+
+  @TABSONTOP_TAB_STACK@ > .tab-content[selected="true"] {
+    -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-top-selected-active@2x.png) 0 22 fill repeat stretch;
+  }
+}
+
 @TABSONBOTTOM_TAB@:hover > .tab-stack > .tab-content:not([selected="true"]),
 @TABSONBOTTOM_NEWTAB_BUTTON@:hover > .toolbarbutton-icon {
   -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-bottom-hover-active.png) 0 11 fill repeat stretch;
 }
 
 @TABSONBOTTOM_TAB_STACK@ > .tab-content[selected="true"] {
   -moz-border-image: url(chrome://browser/skin/tabbrowser/tab-bottom-selected-active.png) 0 11 fill repeat stretch;
 }
@@ -1865,16 +2349,34 @@ toolbarbutton.chevron > .toolbarbutton-m
     url(chrome://browser/skin/tabbrowser/tab-bottom-hover-active.png),
     url(chrome://browser/skin/tabbrowser/tab-bottom-selected-active.png),
     url(chrome://browser/skin/tabbrowser/tabbar-top-bg-active.png),
     url(chrome://browser/skin/tabbrowser/tabbar-top-bg-inactive.png),
     url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-active.png),
     url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-inactive.png);
 }
 
+@media (min-resolution: 2dppx) {
+  #TabsToolbar::after {
+    content: '';
+    display: block;
+    background-image:
+      url(chrome://browser/skin/tabbrowser/tab-top-normal-active@2x.png),
+      url(chrome://browser/skin/tabbrowser/tab-top-hover-active@2x.png),
+      url(chrome://browser/skin/tabbrowser/tab-top-selected-active@2x.png),
+      url(chrome://browser/skin/tabbrowser/tab-bottom-normal-active.png),
+      url(chrome://browser/skin/tabbrowser/tab-bottom-hover-active.png),
+      url(chrome://browser/skin/tabbrowser/tab-bottom-selected-active.png),
+      url(chrome://browser/skin/tabbrowser/tabbar-top-bg-active.png),
+      url(chrome://browser/skin/tabbrowser/tabbar-top-bg-inactive.png),
+      url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-active.png),
+      url(chrome://browser/skin/tabbrowser/tabbar-bottom-bg-inactive.png);
+  }
+}
+
 .tabbrowser-tab:focus > .tab-stack {
   box-shadow: @focusRingShadow@;
 }
 
 .tabbrowser-tab:not([selected="true"]):not(:hover):not(:-moz-lwtheme) {
   color: #222;
 }
 
@@ -1972,16 +2474,23 @@ toolbarbutton.chevron > .toolbarbutton-m
  * Tab Drag and Drop
  */
 
 .tab-drop-indicator {
   list-style-image: url(chrome://browser/skin/tabbrowser/tabDragIndicator.png);
   margin-bottom: -8px;
 }
 
+@media (min-resolution: 2dppx) {
+  .tab-drop-indicator {
+    list-style-image: url(chrome://browser/skin/tabbrowser/tabDragIndicator@2x.png);
+    width: 12px;
+  }
+}
+
 /**
  * In-tab close button
  */
 
 .tab-close-button > .toolbarbutton-icon {
   -moz-margin-end: 0px !important;
 }
 
@@ -1999,16 +2508,35 @@ toolbarbutton.chevron > .toolbarbutton-m
 .tab-close-button:hover {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
 .tab-close-button:hover:active {
   -moz-image-region: rect(0, 48px, 16px, 32px);
 }
 
+@media (min-resolution: 2dppx) {
+  .tab-close-button {
+    list-style-image: url("chrome://global/skin/icons/close@2x.png");
+    -moz-image-region: rect(0, 32px, 32px, 0);
+  }
+
+  .tab-close-button:hover {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+
+  .tab-close-button:hover:active {
+    -moz-image-region: rect(0, 96px, 32px, 64px);
+  }
+
+  .tab-close-button > .toolbarbutton-icon {
+    width: 16px;
+  }
+}
+
 .tabbrowser-arrowscrollbox > .scrollbutton-up,
 .tabbrowser-arrowscrollbox > .scrollbutton-down {
   -moz-image-region: rect(0, 13px, 20px, 0);
   margin: 0;
   padding: 0 4px;
   border: none;
 }
 
@@ -2054,16 +2582,53 @@ toolbarbutton.chevron > .toolbarbutton-m
 }
 
 .tabbrowser-arrowscrollbox > .scrollbutton-up[disabled] > .toolbarbutton-icon,
 .tabbrowser-arrowscrollbox > .scrollbutton-down[disabled] > .toolbarbutton-icon {
   -moz-image-region: rect(0, 13px, 20px, 0) !important;
   opacity: .5;
 }
 
+@media (min-resolution: 2dppx) {
+  .tabbrowser-arrowscrollbox > .scrollbutton-up,
+  .tabbrowser-arrowscrollbox > .scrollbutton-down {
+    -moz-image-region: rect(0, 26px, 40px, 0);
+  }
+
+  .tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(ltr),
+  .tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(rtl) {
+    list-style-image: url("chrome://browser/skin/tabbrowser/tab-arrow-left@2x.png");
+  }
+
+  .tabbrowser-arrowscrollbox > .scrollbutton-down:-moz-locale-dir(ltr),
+  .tabbrowser-arrowscrollbox > .scrollbutton-up:-moz-locale-dir(rtl) {
+    list-style-image: url("chrome://browser/skin/tabbrowser/tab-arrow-right@2x.png");
+  }
+
+  .tabbrowser-arrowscrollbox > .scrollbutton-up:hover,
+  .tabbrowser-arrowscrollbox > .scrollbutton-down:hover {
+    -moz-image-region: rect(0, 52px, 40px, 26px);
+  }
+
+  .tabbrowser-arrowscrollbox > .scrollbutton-up:hover:active,
+  .tabbrowser-arrowscrollbox > .scrollbutton-down:hover:active {
+    -moz-image-region: rect(0, 78px, 40px, 52px);
+  }
+
+  .tabbrowser-arrowscrollbox > .scrollbutton-up[disabled] > .toolbarbutton-icon,
+  .tabbrowser-arrowscrollbox > .scrollbutton-down[disabled] > .toolbarbutton-icon {
+    -moz-image-region: rect(0, 26px, 40px, 0) !important;
+  }
+
+  .tabbrowser-arrowscrollbox > .scrollbutton-up > .toolbarbutton-icon,
+  .tabbrowser-arrowscrollbox > .scrollbutton-down > .toolbarbutton-icon {
+    width: 13px;
+  }
+}
+
 .tabbrowser-arrowscrollbox > .scrollbutton-up:not([disabled]):-moz-locale-dir(ltr),
 .tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):-moz-locale-dir(rtl) {
   border-width: 0 2px 0 0;
   border-style: solid;
   -moz-border-image: url("chrome://browser/skin/tabbrowser/tab-overflow-border.png") 0 2 0 2 fill;
 }
 
 .tabbrowser-arrowscrollbox > .scrollbutton-down:not([disabled]):-moz-locale-dir(ltr),
@@ -2126,43 +2691,97 @@ toolbarbutton.chevron > .toolbarbutton-m
   -moz-image-region: rect(0, 36px, 20px, 18px);
 }
 
 .tabs-newtab-button:hover:active,
 #TabsToolbar > #new-tab-button:hover:active {
   -moz-image-region: rect(0, 54px, 20px, 36px);
 }
 
+@media (min-resolution: 2dppx) {
+  .tabs-newtab-button,
+  #TabsToolbar > #new-tab-button,
+  #TabsToolbar > toolbarpaletteitem > #new-tab-button {
+    list-style-image: url(chrome://browser/skin/tabbrowser/newtab@2x.png);
+    -moz-image-region: rect(0, 36px, 40px, 0);
+  }
+
+  .tabs-newtab-button:hover,
+  #TabsToolbar > #new-tab-button:hover {
+    -moz-image-region: rect(0, 72px, 40px, 36px);
+  }
+
+  .tabs-newtab-button:hover:active,
+  #TabsToolbar > #new-tab-button:hover:active {
+    -moz-image-region: rect(0, 108px, 40px, 72px);
+  }
+
+  .tabs-newtab-button > .toolbarbutton-icon {
+    width: 40px;
+  }
+
+  #TabsToolbar > #new-tab-button > .toolbarbutton-icon,
+  #TabsToolbar > toolbarpaletteitem > #new-tab-button > .toolbarbutton-icon {
+    width: 18px;
+  }
+}
+
 #TabsToolbar #alltabs-button {
   list-style-image: url(chrome://browser/skin/tabbrowser/alltabs-box-bkgnd-icon.png);
   -moz-image-region: rect(0, 17px, 20px, 0);
 }
 
 #TabsToolbar > #alltabs-button:not([disabled="true"]):hover {
   -moz-image-region: rect(0, 34px, 20px, 17px);
 }
 
 #TabsToolbar > #alltabs-button[type="menu"][open="true"]:not([disabled="true"]),
 #TabsToolbar > #alltabs-button:not([disabled="true"]):hover:active {
   -moz-image-region: rect(0, 51px, 20px, 34px);
 }
 
+@media (min-resolution: 2dppx) {
+  #TabsToolbar #alltabs-button {
+    list-style-image: url(chrome://browser/skin/tabbrowser/alltabs-box-bkgnd-icon@2x.png);
+    -moz-image-region: rect(0, 34px, 40px, 0);
+  }
+
+  #TabsToolbar > #alltabs-button:not([disabled="true"]):hover {
+    -moz-image-region: rect(0, 68px, 40px, 34px);
+  }
+
+  #TabsToolbar > #alltabs-button[type="menu"][open="true"]:not([disabled="true"]),
+  #TabsToolbar > #alltabs-button:not([disabled="true"]):hover:active {
+    -moz-image-region: rect(0, 102px, 40px, 68px);
+  }
+
+  #TabsToolbar #alltabs-button > .toolbarbutton-icon {
+    width: 17px;
+  }
+}
+
 #alltabs-button[type="menu"] > .toolbarbutton-menu-dropmarker {
   display: none;
 }
 
 #alltabs-button > .toolbarbutton-icon {
   -moz-margin-end: 2px;
 }
 
 /* All Tabs Menupopup */
 .alltabs-item > .menu-iconic-left > .menu-iconic-icon {
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
+@media (min-resolution: 2dppx) {
+  .alltabs-item > .menu-iconic-left > .menu-iconic-icon {
+    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
+  }
+}
+
 .alltabs-item[busy] > .menu-iconic-left > .menu-iconic-icon {
   list-style-image: url("chrome://global/skin/icons/loading_16.png") !important;
 }
 
 .alltabs-item[tabIsVisible] {
   /* box-shadow instead of background-color to work around native styling */
   box-shadow: inset -5px 0 ThreeDShadow;
 }
@@ -2182,16 +2801,35 @@ toolbarbutton.chevron > .toolbarbutton-m
 .tabs-closebutton:hover {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
 .tabs-closebutton:hover:active {
   -moz-image-region: rect(0, 48px, 16px, 32px);
 }
 
+@media (min-resolution: 2dppx) {
+  :not(#sidebar-header) > .tabs-closebutton {
+    list-style-image: url("chrome://global/skin/icons/close@2x.png");
+    -moz-image-region: rect(0, 32px, 32px, 0);
+  }
+
+  :not(#sidebar-header) > .tabs-closebutton:hover {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+
+  :not(#sidebar-header) > .tabs-closebutton:hover:active {
+    -moz-image-region: rect(0, 96px, 32px, 64px);
+  }
+
+  :not(#sidebar-header) > .tabs-closebutton > .toolbarbutton-icon {
+    width: 16px;
+  }
+}
+
 /* Bookmarks toolbar */
 #PlacesToolbarDropIndicator {
   list-style-image: url(chrome://browser/skin/places/toolbarDropMarker.png);
 }
 
 /* Bookmark drag and drop styles */
 
 .bookmark-item[dragover-into="true"] {
@@ -2230,16 +2868,31 @@ toolbarbutton.chevron > .toolbarbutton-m
 #identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
   -moz-image-region: rect(64px, 64px, 128px, 0px);
 }
 
 #identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
   -moz-image-region: rect(128px, 64px, 192px, 0px);
 }
 
+@media (min-resolution: 2dppx) {
+  #identity-popup-icon {
+    list-style-image: url("chrome://browser/skin/identity@2x.png");
+    -moz-image-region: rect(0px, 128px, 128px, 0px);
+  }
+
+  #identity-popup.verifiedDomain > #identity-popup-container > #identity-popup-icon {
+    -moz-image-region: rect(128px, 128px, 256px, 0px);
+  }
+
+  #identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
+    -moz-image-region: rect(256px, 128px, 384px, 0px);
+  }
+}
+
 /* Popup Body Text */
 .identity-popup-description {
   white-space: pre-wrap;
   -moz-padding-start: 15px;
   margin: 2px 0 4px;
 }
 
 .identity-popup-label {
@@ -2274,28 +2927,42 @@ toolbarbutton.chevron > .toolbarbutton-m
 }
 
 #identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
 #identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
   margin-top: 5px;
   list-style-image: url("chrome://browser/skin/Secure-Glyph.png");
 }
 
+@media (min-resolution: 2dppx) {
+  #identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
+  #identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
+    list-style-image: url("chrome://browser/skin/Secure-Glyph@2x.png");
+    width: 24px;
+  }
+}
+
 #notification-popup-box {
   position: relative;
   background-color: #fff;
   background-clip: padding-box;
   padding-left: 3px;
   border-radius: 2px 0 0 2px;
   border-width: 0 8px 0 0;
   border-style: solid;
   -moz-border-image: url("chrome://browser/skin/urlbar-arrow.png") 0 8 0 0 fill;
   -moz-margin-end: -8px;
 }
 
+@media (min-resolution: 2dppx) {
+  #notification-popup-box {
+    -moz-border-image: url("chrome://browser/skin/urlbar-arrow@2x.png") 0 16 0 0 fill;
+  }
+}
+
 @conditionalForwardWithUrlbar@[forwarddisabled] + #urlbar-container > #urlbar > #notification-popup-box {
   padding-left: 7px;
 }
 
 #notification-popup-box:-moz-locale-dir(rtl),
 .notification-anchor-icon:-moz-locale-dir(rtl) {
   transform: scaleX(-1);
 }
@@ -2318,16 +2985,22 @@ toolbarbutton.chevron > .toolbarbutton-m
 #identity-notification-icon {
   list-style-image: url(chrome://mozapps/skin/profile/profileicon.png);
 }
 
 #geo-notification-icon {
   list-style-image: url(chrome://browser/skin/Geolocation-16.png);
 }
 
+@media (min-resolution: 2dppx) {
+  #geo-notification-icon {
+    list-style-image: url(chrome://browser/skin/Geolocation-16@2x.png);
+  }
+}
+
 #notification-popup .text-link, .panel-arrowcontent .text-link {
   color: #0073e6;
   text-decoration: none;
 }
 
 .geolocation-text-link {
   -moz-margin-start: 0; /* override default label margin to match description margin */
 }
@@ -2339,30 +3012,42 @@ toolbarbutton.chevron > .toolbarbutton-m
 #password-notification-icon {
   list-style-image: url(chrome://mozapps/skin/passwordmgr/key-16.png);
 }
 
 #webapps-notification-icon {
   list-style-image: url(chrome://browser/skin/webapps-16.png);
 }
 
+@media (min-resolution: 2dppx) {
+  #webapps-notification-icon {
+    list-style-image: url(chrome://browser/skin/webapps-16@2x.png);
+  }
+}
+
 #plugins-notification-icon {
   list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric-16.png);
 }
 
 .popup-notification-icon {
   width: 64px;
   height: 64px;
   -moz-margin-end: 10px;
 }
 
 .popup-notification-icon[popupid="geolocation"] {
   list-style-image: url(chrome://browser/skin/Geolocation-64.png);
 }
 
+@media (min-resolution: 2dppx) {
+  .popup-notification-icon[popupid="geolocation"] {
+    list-style-image: url(chrome://browser/skin/Geolocation-64@2x.png);
+  }
+}
+
 .popup-notification-icon[popupid="xpinstall-disabled"],
 .popup-notification-icon[popupid="addon-progress"],
 .popup-notification-icon[popupid="addon-install-cancelled"],
 .popup-notification-icon[popupid="addon-install-blocked"],
 .popup-notification-icon[popupid="addon-install-failed"],
 .popup-notification-icon[popupid="addon-install-complete"] {
   list-style-image: url(chrome://mozapps/skin/extensions/extensionGeneric.png);
   width: 32px;
@@ -2624,16 +3309,35 @@ toolbarbutton.chevron > .toolbarbutton-m
 #addonbar-closebutton:hover {
   -moz-image-region: rect(0, 32px, 16px, 16px);
 }
 
 #addonbar-closebutton:hover:active {
   -moz-image-region: rect(0, 48px, 16px, 32px);
 }
 
+@media (min-resolution: 2dppx) {
+  #addonbar-closebutton {
+    list-style-image: url("chrome://global/skin/icons/close@2x.png");
+    -moz-image-region: rect(0, 32px, 32px, 0);
+  }
+
+  #addonbar-closebutton:hover {
+    -moz-image-region: rect(0, 64px, 32px, 32px);
+  }
+
+  #addonbar-closebutton:hover:active {
+    -moz-image-region: rect(0, 96px, 32px, 64px);
+  }
+
+  #addonbar-closebutton > .toolbarbutton-icon {
+    width: 16px;
+  }
+}
+
 /* Status panel */
 
 .statuspanel-label {
   margin: 0;
   padding: 2px 4px;
   background: -moz-linear-gradient(white, #ddd);
   border: 1px none #ccc;
   border-top-style: solid;
@@ -3363,16 +4067,22 @@ html|*#gcli-output-frame {
   padding: 2px;
   margin: 0px;
   min-width: 20px;
   max-width: 32px;
   max-height: 20px;
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
+@media (min-resolution: 2dppx) {
+  .social-notification-icon-image {
+    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
+  }
+}
+
 /* === end of social toolbar button === */
 
 /* === social toolbar provider menu  === */
 
 #social-statusarea-user {
   cursor: default;
   font-family: "lucida grande",tahoma,verdana,arial,sans-serif;
   font-size: 12px;
--- a/browser/themes/pinstripe/devtools/debugger.css
+++ b/browser/themes/pinstripe/devtools/debugger.css
@@ -294,16 +294,24 @@
   content: " ";
   display: inline-block;
   width: 16px;
   height: 16px;
   background: url("chrome://browser/skin/identity-icons-https.png") no-repeat;
   opacity: 0.5;
 }
 
+@media (min-resolution: 2dppx) {
+  .variable[non-writable] > .title:after,
+  .property[non-writable] > .title:after {
+    background-image: url("chrome://browser/skin/identity-icons-https@2x.png");
+    background-size: 32px;
+  }
+}
+
 #element-tooltip > label {
   margin: 0 2px 0 2px;
 }
 
 #element-tooltip > label[non-enumerable],
 #element-tooltip > label[non-configurable],
 #element-tooltip > label[non-writable]{
   text-decoration: line-through;
--- a/browser/themes/pinstripe/downloads/downloads.css
+++ b/browser/themes/pinstripe/downloads/downloads.css
@@ -201,16 +201,27 @@ richlistitem[type="download"][state="1"]
 }
 
 #downloads-indicator:not([counter])[attention]
 #downloads-indicator-counter {
   background-image: -moz-image-rect(url("chrome://browser/skin/downloads/download-glow.png"),
                                     14, 34, 34, 14);
 }
 
+@media (min-resolution: 2dppx) {
+  #downloads-indicator-icon:not(:-moz-lwtheme-brighttext) {
+    background-image: -moz-image-rect(url("chrome://browser/skin/Toolbar@2x.png"), 0, 280, 40, 240);
+    background-size: 20px;
+  }
+
+  #downloads-indicator:not([counter]) #downloads-indicator-counter {
+    background-image: -moz-image-rect(url("chrome://browser/skin/Toolbar@2x.png"), 0, 280, 40, 240);
+  }
+}
+
 /*** Event notification ***/
 
 #downloads-indicator-notification {
   opacity: 0;
   background: url("chrome://browser/skin/downloads/download-notification.png")
               center no-repeat;
   background-size: 16px;
 }
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5cce49f892e81a5f8036cce30df6be00e991452d
GIT binary patch
literal 1235
zc$@*#1T6cBP)<h;3K|Lk000e1NJLTq002M$001Be1ONa42$Z%D000D<Nkl<ZcwW`l
z?QfN50mt#r-E*H7`gowFDFeDuFoi+8)v|0X=*F^$89s~{7c)&v^bIfOOZ*Fb3~E9k
znTykH$wu^rS+<a6#3<2Xrb8%n;7~fYcCEBs%V}BZ0orqJ-<({@xzm$r`oj2q|4Dwi
z?ibg6MK4)dA6Qv6{)bf`kg?AZXXGUkd1oB4Pezqi;-eR(iXC)Fr*w=u?B|wJpJ0VP
zdO<}y9oGY^+%2PMN|(IRvh$9oU93JJc=fi+S~RA|q<^?m#n%YoNq^N-W2=2SbXcp-
zymothNfzjF#sL+jea8L1X|pctHJH`ufP?C)_~=(cU-ny>R*$K7%{i^c&7;x7hFujZ
z`l?sM38egbU(@7$f6(DQvuN=}7rax&N52H<^_Kc>ed;jfygt8oTL>AAZn@2Z-G+dX
z3g7Qh^%!%?UcXilLM&&&LWPf>2eJn3==2z1QBmxo^D4VfqjL&e(q|Dy2)^4>fIAk|
zddnYG_8B>+%m+{O3*Z??V_&fvK*4o+=af{|?H(uLJC4Cf@LA7j1Tb&HM@}iKtlxGo
z2Tz<p#v!&?B?07}kabHsrgcf+kY^PMUayAWr#!FDf^>}AS>fXZ9@j}r;Nw;+DOj%S
zavFV1r^lTnc<X|HPot8XmTOYGoP6+c3HC!yQs(D1TC#j41NJ*<hA)Hx`w0UK8PK9=
z`IfxyTV8Rk?BfJ>leNwTdAChkGN*bCvbG!GAt-ybHaKlc!Kg(us@JT}F0Yq;oWNG@
z7&Bu+LG_?TyF{&otx)!E8#ZCYyy`)lO%khvkB$*3`44;0U0N{Z4XBZf{#X8Uy0l`<
zOJyH_l5Ny(!31c~q*;PQ*-1X}#5VfaC}_6U+Okgo(GkeYNtLzAO(oRZ;0oy13%KGm
zv)1ro6<?>`oD!OBHUu8^Fkr}uvX2uOwo7QI7Jt)igMvS4QycacC4dPD!;tnosMRTb
zy4>`dyVM~8OTmu>AD7_mFhGZXv|3}<yGr`x{RME{q;VT%3@h<ABq_hiUUX<T<E+FZ
zCjAaDZOm0$#4bt7KKd!_^QQ7)eM+;CL8Gn%$coVIk`jF0NydU_jct0Z6*AzTrU2B6
z(C3U|@X=2o<9(ZGa<6+;mU!8ckbA_2VN{nQW5JWN%dWKdGmApDiCqky=y149Ao6KF
zLb&CGc>rtVd>{#z31cb$h=+tw@S-^Y>$JIC;o}5&&Otj!ylb0S$PM?KHwdz3MM`kV
zb3odk)h8=t+8%QTK%HqdDIfi~;)eouctB-;b_L|L%ln9e-7Wy*Y3~7hRraPK&}M@v
z*D8GUBcZ1pm!ZLvYK7eJnk9WUy6v<DioWhQgaIkv<lE|m<h@|g9$OT=VLs)f9}026
zajRJGKJ98SZ_;Hq^vk*ID%|q4SB1u<J$Kt}qZ-T^Gbrz~+6?-8+9Udbih8|bC&bn%
znpP5NRAUaf=o>DO9+38AtygqSNu*h9rizcgzud#(yEaM3hYowz5~%?z@-@;eIcBpb
x9Cg+lm~+-qPuT2enzK?Leb37J*Z=$L_}_|I(s$=3_QwDK002ovPDHLkV1h%aV~zj-
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b8d54de6582bfe6cdb473273a47fb7bc4ad479a6
GIT binary patch
literal 1162
zc$@)>1a<p~P)<h;3K|Lk000e1NJLTq002M$001Be1^@s6qMd$(000D0Nkl<ZXx`OX
zT}TvB6uvV%vuajrMTLTt61loX5fY*)BngUdn)TG1(BDf^y;StpQ)E2_Wly~o5j`YD
zl;%%nkf}tr64-<NKo4Q!{<uFgox9yx&)l8eo!w^L@xsSl@7#OtobR4<=6J54sw&B6
zyZ`e<x+wzcMb=}`rgBhNPf%~zBx3I-AjK&hT#pH$N=La~L9*1fMgXrkeOH<F5+Z>h
zr6UYs)?*?BBNC)FpuDEI6Hvf<jR;JDrg#Xj%zBLo!dXN11Y8_(*Fe_|XaiKR;W@x_
zz`g5@-WdzcUSbLtYMA}>wdUviucN_0s6kPbGP*z%#qWhh&au++ZI7xv6*I^}G#7~^
ziwT0+Ab4@uO<$xJa2hesH_CD!pyzs%H;`oz6p+c&J&P#(zM$*f@YH4KJ5%jnw65?;
zZNr{x8(r&v!`}gh5ON8f!lEhVhd_Ci^aIWU#Dti;0{ZME;Aw1)MW;`dA9*!#*XIj%
z!8T&@?TP632Rq&lP2YhvCCqA^$X)Q4!#n|CBsT#^sIiztGoUw17tn&9%zVCZd}!)Q
zcsYD91@St-+*(+3i4jo1WI2rVO-sOqLAQsUD&FJ^pcCL?=wxGf&Z*ei?5rT}0^W~v
z9^X=+gSx5)@cD0L<y)^dwbZs#(BE_n&w(|abS<&~2Y>pef*{E1W{b5p3#hx%>|H=(
zkIxUd2cRDZRIxD!3zj`uME|%2{FwjM6>}|3sN|ThKfM1;$>xoJm`{@fb)MG?zZWOR
z2B&UEBhhm0aOqn2-pU#DRS@~lp=g4DR?fUHamvRU9iz{<xvg0$ulc_-;1AVfncGXZ
z^nvnA>=U=l5T;}F8J<hmYI3;TK`<W!6jB*aCH~=Min%Yixs_Q2KTJSDG@_JYrFK>C
znBcO%c-p($v-3TkOV^^@fhRyPYXMFyw712(m~1XQTjDIh`5)#VJ2^F~N|;pFruBa0
zzA{RR$Ocz&0MCuBU9kY!$O6*G041{smg#&00&wOhtI7YD(UjNkpEzGO$R35XiO{)c
z)g#ayvM9A3z18-)F-0PzDNfC`7~txEIQ$?SitMvubJ;0Pw;yXd4nJw&^s%@>6C*`R
zagtUkPfQTW`@b9tTBAH|OqOgE2&EjD^8dPkBL?fs6poByKpyHOx_^Jw+z=p|4}!|7
zE3YFV2NuXHFWAunP;kzz{PZrc`Y|9cEx8Niw^mA4t5|DW3s|lF?Gyu4U5;=4{)VOU
z6fPj-LwO}$;kBLszErN-(E{S-?Ht4aTqZYT0eK@J!ipDGH?1(Lm@0_C0gPr)15AfE
z8Js>XbOfRD^TDe9LDnRd$z<!SK(NW(pn&QCGC}tM2E`1s0WXTIDTok8M5uPU8B*Cx
z3G77`_M(QRtW4qwS-CMvxErt|0a$@B%HhQf<te(aiXOHjKsESWMM>gihLE8=d|j@P
c#9IXN7ryS1^94Aj;Q#;t07*qoM6N<$g7=#$8UO$Q
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2ca81aa61c5962197aa2dbb6f005e54ade6c35b7
GIT binary patch
literal 1077
zc$@(>1j_q~P)<h;3K|Lk000e1NJLTq002M$001Be1^@s6qMd$(000C0Nkl<ZXx`PC
zJxmi}7{_~e?G^9~`IsDt#1IODaj{4sCdPq5ClVzNx<HVW0T%}c9ZVb~!Nn$pK{peY
zPDqH-FjSM8)TseuT+oHJfqqf?;qx@lOCB!m^{&06$0fgTzVGwV_y0Wad%Y@`%Vk$9
ziO1vhkO&!205{+PR1F@QQ^;2M>Bg5`&b}l9Kc@n?0S}-8UZRcusx;>&TbcRSyyP>q
zc(HI?a654h=wSbDV?r1bK|Z64@1VsC&NCrQiC|iQm6eqtU<vpI<cJ*_8?tHfUa|1)
z?d|JZTU)O;HZ~&b>+3rR+<(O}oMS?Gjfh}afaT?76?hK^R|0qj3<6%lM`H=F2?6aE
zh#=E`u2epqPG5{fB5!tgch@qR%;RFQcop)g2;BGM7|wys+hj6%nRSAj3D8&vghC-q
z^ce^Mvd*cFbF;u2`dF~|O7&Bz)P-m?`Z1f$KB|`=Y#zj7u@C6Ox}c^Ah6I4X?|{1|
z9&dMmC9C#6Ea+9CP`G6@2-y0;=cSRepsoPHU~srpD$N2e#vfo3xI|3S7`J(fzRh+(
zB9Rz|_I}7?!}YJXxA*zz=;&<(?{SRVfX@{AHr)YG$!S1g)%^|J3<LsUV4n!%7|jVg
z^qFpO@#2}U?(OYO@wS&``R~Zc$P>TczuDE*l|=9!$8e5s2lQp<fKp9_x&nZj6Pn7t
zn4h0dYVB|g=QOqx&3@_0<#OXZW_NdYu&1Zz06QHxA__Q$bKDkv>wP&gB0#@pQJXrp
zUo^J;O&)+A*w0t^`7$st@Iy2wrX=v*<@5Ps+!lRBoLbw!$QDp}(1nGC{aUs#m(m=D
zYJ=4m2cQRHcz8^xa+-WZmx$`RIy*Zvn*1InfKsgsjC6oYa{yUtUt|9tS4}6Lo1XP;
zbYCmKTO)#OXbUVZE=GZ}HXx4aQNuoJV)2#AhQr}ctE;PVZ9E*)qnbU&Vx4kA1X-t&
zW7=R%FlP1%kk99DSoO+{v1&aDWTUOzEGEu@N|kKLFRCv&Q2>4jR{q+MU)JQ1oYn!n
zD3aB`Jh8<a`zF{T0Yqy`HsqHyIb2TdfK$!ySOIL<0_Frbtq<T>0b0}nWq}R(%M8a0
zP_iL^$&>)6yajl5iuihKL;eEAKG6wIIs?S(ZIRybt-g*Zc8Pa^o&eu06yUoF0kBee
zMN#5b<%d{5F($<}CIGy_jRTTJjG3(d;mpj;{kgfhKHwTK2n+$k1{oqB^zDOK_b_I)
zE^yNS42k_;q-y1W43GlwC$N2!9FT8@V&z%<`W?`M#S02z8_);O0_g_Hvc-$I#ty+2
vT_tu79MK0qB!n17$T7dX_~DerKfeA0R8}{cfW~}=00000NkvXXu0mjf1kC)p
index 2480f5b74746945efe535d32820ce45fa8965b86..99db29c752183a9c74aa6d757299633ed6c471d7
GIT binary patch
literal 13607
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
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f95b18ae98695daacec9fc5c3b545a858456098e
GIT binary patch
literal 33250
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
--- a/browser/themes/pinstripe/jar.mn
+++ b/browser/themes/pinstripe/jar.mn
@@ -12,88 +12,113 @@ browser.jar:
   skin/classic/browser/aboutCertError_sectionCollapsed.png
   skin/classic/browser/aboutCertError_sectionCollapsed-rtl.png
   skin/classic/browser/aboutCertError_sectionExpanded.png
   skin/classic/browser/aboutSocialError.css
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
+  skin/classic/browser/actionicon-tab@2x.png
 * skin/classic/browser/browser.css                          (browser.css)
 * skin/classic/browser/engineManager.css                    (engineManager.css)
   skin/classic/browser/Geolocation-16.png
+  skin/classic/browser/Geolocation-16@2x.png
   skin/classic/browser/Geolocation-64.png
+  skin/classic/browser/Geolocation-64@2x.png
   skin/classic/browser/home.png
   skin/classic/browser/identity.png
+  skin/classic/browser/identity@2x.png
   skin/classic/browser/identity-icons-generic.png
+  skin/classic/browser/identity-icons-generic@2x.png
   skin/classic/browser/identity-icons-https.png
+  skin/classic/browser/identity-icons-https@2x.png
   skin/classic/browser/identity-icons-https-ev.png
+  skin/classic/browser/identity-icons-https-ev@2x.png
   skin/classic/browser/Info.png
   skin/classic/browser/KUI-background.png
   skin/classic/browser/KUI-close.png
   skin/classic/browser/menu-back.png
   skin/classic/browser/menu-forward.png
   skin/classic/browser/panel-expander-closed.png
+  skin/classic/browser/panel-expander-closed@2x.png
   skin/classic/browser/panel-expander-open.png
+  skin/classic/browser/panel-expander-open@2x.png
   skin/classic/browser/panel-plus-sign.png
   skin/classic/browser/page-livemarks.png
+  skin/classic/browser/page-livemarks@2x.png
   skin/classic/browser/pageInfo.css
   skin/classic/browser/Privacy-16.png
   skin/classic/browser/Privacy-48.png
   skin/classic/browser/reload-stop-go.png
+  skin/classic/browser/reload-stop-go@2x.png
   skin/classic/browser/searchbar-dropmarker.png
+  skin/classic/browser/searchbar-dropmarker@2x.png
   skin/classic/browser/searchbar.css
   skin/classic/browser/Search.png
+  skin/classic/browser/Search@2x.png
   skin/classic/browser/Secure-Glyph.png
+  skin/classic/browser/Secure-Glyph@2x.png
   skin/classic/browser/keyhole-circle.png
   skin/classic/browser/Toolbar.png
   skin/classic/browser/toolbarbutton-dropmarker.png
   skin/classic/browser/urlbar-history-dropmarker.png
+  skin/classic/browser/urlbar-history-dropmarker@2x.png
   skin/classic/browser/urlbar-arrow.png
+  skin/classic/browser/urlbar-arrow@2x.png
   skin/classic/browser/urlbar-popup-blocked.png
+  skin/classic/browser/urlbar-popup-blocked@2x.png
   skin/classic/browser/downloads/buttons.png                (downloads/buttons.png)
   skin/classic/browser/downloads/download-glow.png          (downloads/download-glow.png)
   skin/classic/browser/downloads/download-notification.png  (downloads/download-notification.png)
   skin/classic/browser/downloads/downloads.css              (downloads/downloads.css)
   skin/classic/browser/feeds/subscribe.css                  (feeds/subscribe.css)
   skin/classic/browser/feeds/subscribe-ui.css               (feeds/subscribe-ui.css)
   skin/classic/browser/feeds/feedIcon.png                   (feeds/feedIcon.png)
   skin/classic/browser/feeds/feedIcon16.png                 (feeds/feedIcon16.png)
   skin/classic/browser/feeds/videoFeedIcon.png              (feeds/feedIcon.png)
   skin/classic/browser/feeds/videoFeedIcon16.png            (feeds/feedIcon16.png)
   skin/classic/browser/feeds/audioFeedIcon.png              (feeds/feedIcon.png)
   skin/classic/browser/feeds/audioFeedIcon16.png            (feeds/feedIcon16.png)
   skin/classic/browser/newtab/newTab.css                    (newtab/newTab.css)
   skin/classic/browser/newtab/controls.png                  (newtab/controls.png)
+  skin/classic/browser/newtab/controls@2x.png               (newtab/controls@2x.png)
   skin/classic/browser/newtab/noise.png                     (newtab/noise.png)
   skin/classic/browser/setDesktopBackground.css
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
   skin/classic/browser/places/allBookmarks.png              (places/allBookmarks.png)
 * skin/classic/browser/places/places.css                    (places/places.css)
 * skin/classic/browser/places/organizer.css                 (places/organizer.css)
   skin/classic/browser/places/query.png                     (places/query.png)
+  skin/classic/browser/places/query@2x.png                  (places/query@2x.png)
   skin/classic/browser/places/bookmarksMenu.png             (places/bookmarksMenu.png)
   skin/classic/browser/places/bookmarksToolbar.png          (places/bookmarksToolbar.png)
+  skin/classic/browser/places/bookmarksToolbar@2x.png       (places/bookmarksToolbar@2x.png)
   skin/classic/browser/places/history.png                   (places/history.png)
+  skin/classic/browser/places/history@2x.png                (places/history@2x.png)
   skin/classic/browser/places/star-icons.png                (places/star-icons.png)
+  skin/classic/browser/places/star-icons@2x.png             (places/star-icons@2x.png)
   skin/classic/browser/places/toolbar.png                   (places/toolbar.png)
   skin/classic/browser/places/toolbarDropMarker.png         (places/toolbarDropMarker.png)
   skin/classic/browser/places/folderDropArrow.png           (places/folderDropArrow.png)
+  skin/classic/browser/places/folderDropArrow@2x.png        (places/folderDropArrow@2x.png)
   skin/classic/browser/places/editBookmarkOverlay.css       (places/editBookmarkOverlay.css)
   skin/classic/browser/places/minus.png                     (places/minus.png)
   skin/classic/browser/places/minus-active.png              (places/minus-active.png)
   skin/classic/browser/places/plus.png                      (places/plus.png)
   skin/classic/browser/places/plus-active.png               (places/plus-active.png)
   skin/classic/browser/places/starred48.png                 (places/starred48.png)
   skin/classic/browser/places/unstarred48.png               (places/unstarred48.png)
   skin/classic/browser/places/unfiledBookmarks.png          (places/unfiledBookmarks.png)
+  skin/classic/browser/places/unfiledBookmarks@2x.png       (places/unfiledBookmarks@2x.png)
   skin/classic/browser/places/twisty-open.gif               (places/twisty-open.gif)
   skin/classic/browser/places/twisty-closed.gif             (places/twisty-closed.gif)
   skin/classic/browser/places/tag.png                       (places/tag.png)
+  skin/classic/browser/places/tag@2x.png                    (places/tag@2x.png)
   skin/classic/browser/places/downloads.png                 (places/downloads.png)
   skin/classic/browser/places/expander-closed-active.png    (places/expander-closed-active.png)
   skin/classic/browser/places/expander-closed.png           (places/expander-closed.png)
   skin/classic/browser/places/expander-open-active.png      (places/expander-open-active.png)
   skin/classic/browser/places/expander-open.png             (places/expander-open.png)
   skin/classic/browser/places/livemark-item.png             (places/livemark-item.png)
   skin/classic/browser/preferences/alwaysAsk.png            (preferences/alwaysAsk.png)
   skin/classic/browser/preferences/application.png          (preferences/application.png)
@@ -105,32 +130,41 @@ browser.jar:
 * skin/classic/browser/preferences/preferences.css          (preferences/preferences.css)
   skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css)
   skin/classic/browser/preferences/applications.css         (preferences/applications.css)
   skin/classic/browser/preferences/aboutPermissions.css     (preferences/aboutPermissions.css)
   skin/classic/browser/social/social.png                    (social/social.png)
   skin/classic/browser/social/chat-close.png                             (social/chat-close.png)
   skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon.png             (tabbrowser/alltabs-box-bkgnd-icon.png)
   skin/classic/browser/tabbrowser/newtab.png                             (tabbrowser/newtab.png)
+  skin/classic/browser/tabbrowser/newtab@2x.png                          (tabbrowser/newtab@2x.png)
   skin/classic/browser/tabbrowser/connecting.png                         (tabbrowser/connecting.png)
+  skin/classic/browser/tabbrowser/connecting@2x.png                      (tabbrowser/connecting@2x.png)
   skin/classic/browser/tabbrowser/loading.png                            (tabbrowser/loading.png)
+  skin/classic/browser/tabbrowser/loading@2x.png                         (tabbrowser/loading@2x.png)
   skin/classic/browser/tabbrowser/tab-arrow-left.png                     (tabbrowser/tab-arrow-left.png)
+  skin/classic/browser/tabbrowser/tab-arrow-left@2x.png                  (tabbrowser/tab-arrow-left@2x.png)
   skin/classic/browser/tabbrowser/tab-arrow-right.png                    (tabbrowser/tab-arrow-right.png)
+  skin/classic/browser/tabbrowser/tab-arrow-right@2x.png                 (tabbrowser/tab-arrow-right@2x.png)
   skin/classic/browser/tabbrowser/tabbar-bottom-bg-active.png            (tabbrowser/tabbar-bottom-bg-active.png)
   skin/classic/browser/tabbrowser/tabbar-bottom-bg-inactive.png          (tabbrowser/tabbar-bottom-bg-inactive.png)
   skin/classic/browser/tabbrowser/tab-bottom-normal-active.png           (tabbrowser/tab-bottom-normal-active.png)
   skin/classic/browser/tabbrowser/tab-bottom-hover-active.png            (tabbrowser/tab-bottom-hover-active.png)
   skin/classic/browser/tabbrowser/tab-bottom-selected-active.png         (tabbrowser/tab-bottom-selected-active.png)
   skin/classic/browser/tabbrowser/tabbar-top-bg-active.png               (tabbrowser/tabbar-top-bg-active.png)
   skin/classic/browser/tabbrowser/tabbar-top-bg-inactive.png             (tabbrowser/tabbar-top-bg-inactive.png)
   skin/classic/browser/tabbrowser/tab-top-normal-active.png              (tabbrowser/tab-top-normal-active.png)
+  skin/classic/browser/tabbrowser/tab-top-normal-active@2x.png           (tabbrowser/tab-top-normal-active@2x.png)
   skin/classic/browser/tabbrowser/tab-top-hover-active.png               (tabbrowser/tab-top-hover-active.png)
+  skin/classic/browser/tabbrowser/tab-top-hover-active@2x.png            (tabbrowser/tab-top-hover-active@2x.png)
   skin/classic/browser/tabbrowser/tab-top-selected-active.png            (tabbrowser/tab-top-selected-active.png)
+  skin/classic/browser/tabbrowser/tab-top-selected-active@2x.png         (tabbrowser/tab-top-selected-active@2x.png)
   skin/classic/browser/tabbrowser/tab-overflow-border.png                (tabbrowser/tab-overflow-border.png)
   skin/classic/browser/tabbrowser/tabDragIndicator.png                   (tabbrowser/tabDragIndicator.png)
+  skin/classic/browser/tabbrowser/tabDragIndicator@2x.png                (tabbrowser/tabDragIndicator.png)
   skin/classic/browser/tabview/close.png                    (tabview/close.png)
   skin/classic/browser/tabview/edit-light.png               (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png                   (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png           (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png                  (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css                  (tabview/tabview.css)
 * skin/classic/browser/devtools/common.css                  (devtools/common.css)
   skin/classic/browser/devtools/arrows.png                  (devtools/arrows.png)
@@ -211,22 +245,27 @@ browser.jar:
   skin/classic/browser/sync-mobileIcon.png
   skin/classic/browser/sync-notification-24.png
   skin/classic/browser/syncSetup.css
   skin/classic/browser/syncCommon.css
   skin/classic/browser/syncQuota.css
   skin/classic/browser/syncProgress.css
 #endif
   skin/classic/browser/lion/keyhole-circle.png              (keyhole-circle-lion.png)
+  skin/classic/browser/keyhole-circle@2x.png                (keyhole-circle-lion@2x.png)
   skin/classic/browser/lion/Toolbar.png                     (Toolbar-lion.png)
+  skin/classic/browser/Toolbar@2x.png                       (Toolbar-lion@2x.png)
   skin/classic/browser/lion/toolbarbutton-dropmarker.png    (toolbarbutton-dropmarker-lion.png)
+  skin/classic/browser/toolbarbutton-dropmarker@2x.png      (toolbarbutton-dropmarker-lion@2x.png)
   skin/classic/browser/lion/tabbrowser/alltabs-box-bkgnd-icon.png      (tabbrowser/alltabs-box-bkgnd-icon-lion.png)
+  skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon@2x.png        (tabbrowser/alltabs-box-bkgnd-icon-lion@2x.png)
   skin/classic/browser/lion/tabview/tabview.png                        (tabview/tabview-lion.png)
   skin/classic/browser/lion/places/toolbar.png              (places/toolbar-lion.png)
   skin/classic/browser/webapps-16.png
+  skin/classic/browser/webapps-16@2x.png
   skin/classic/browser/webapps-64.png
 
 % override chrome://browser/skin/keyhole-circle.png                        chrome://browser/skin/lion/keyhole-circle.png                           os=Darwin osversion>=10.7
 % override chrome://browser/skin/Toolbar.png                               chrome://browser/skin/lion/Toolbar.png                                  os=Darwin osversion>=10.7
 % override chrome://browser/skin/toolbarbutton-dropmarker.png              chrome://browser/skin/lion/toolbarbutton-dropmarker.png                 os=Darwin osversion>=10.7
 % override chrome://browser/skin/tabbrowser/alltabs-box-bkgnd-icon.png     chrome://browser/skin/lion/tabbrowser/alltabs-box-bkgnd-icon.png        os=Darwin osversion>=10.7
 % override chrome://browser/skin/tabview/tabview.png                       chrome://browser/skin/lion/tabview/tabview.png                          os=Darwin osversion>=10.7
 % override chrome://browser/skin/places/toolbar.png                        chrome://browser/skin/lion/places/toolbar.png                           os=Darwin osversion>=10.7
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bfd4b7d09471c94ecb3d99e840c0ac8438bbf181
GIT binary patch
literal 5642
zc$@(W7WL_gP)<h;3K|Lk000e1NJLTq006WA002G+1ONa4DDU|P000%yNkl<ZcwWt%
zdvsLQy~n?MpL6D&OePufA`b`<AUu4_yFw7b)<=EZ)+O3rZ*8lsw;-r(t-aT~td*jI
zZE0<9wY|1#Yg=utPs+mwLIOyDKtdoPKtd8Sc@8tlyw2YH?m06!r74eunOS~+>v#S<
zpS3^hxAvTwIp+`zBP;Egf{7S|0=VIT6+i%f^q?I_aS(M+4`3Mi^m9Rw0jEJULxlo>
zK}X1-d*Oo^#;MLz@hB|7XQXDQEGulV{1bQpURibc5br<j!7%da<id<ma3Ke0PY?Rg
zg;0`2ubhtCFb8=UMVtlRiJp=`9?#G;Rn-7J648B;PTFEUnA_nLUWx6*R=o1`UR-bz
zTsTEPKPoyz5BDPi9e@grI!F#FpkqiDlFEe(qv3{(g?u4%QTF(Z0&|whtXL=z<RR7{
z?g%ycHuV1SWKbA@ZnUBA0!6R57<XY7DOTK5I%avsTB33xAcmZUM5P}IR^`?eux`<c
zD*R^69*i&vF5LVW+bdc~L?VPN$OwZ70YPLzXrx5Bh?XJ=Tx6q2Hk|Z3dDrGo%&<rZ
znC!%wiBSqjkR0^Ab7EDemjmd<aoHmiy&?zq;5v-6Iu|s~6DAcL0$~IZkw+$r1E5f3
znV`WUj|4QVZz1nZ2zYTAZ{ingdN9l+xNx$M`Nv9#a4M)EkSz<RVrb?>fJcv%nd#-q
z<+uPYR7^k~FhTp#n8o=v0UZq8=t3WS7(^Hm02)lNAp<Uqf*T6dL9+hDw~sbP0Cb`e
z`mjZ>n2(1rNh?}>Xr53hxJ3C80K=K1zzPR!pgP||)|W?)qXDbeypQ1|&P5Tg79Z2F
zA|)$QGv&lkefmU4HA~r)6GmiHZX%b{nHUilxflm?4*kve#d#)%Fpi-G9f;t}(NKUA
zl)@BN)_303)WZ?NVR(iidWDK_;C56@^4;EPH$jIN{a`r1D9C~n>R{-l{Dw@_;blC#
zCW7-wf-8E(8+1V73Rk5^L$n}*CN>Y8+Bi65%VI=OU8<I4r`MC5;c;aqAs=`+_kjs6
zfkD*c5JEV=m{E=j*!t;{hkob*Z~_hIDSCwskKr1%{HBJP6gv83aSSgME?H_d|H~x3
z5u5PH8XwM@1Q+G}Lt3LSRSK4>4b9QHCWuL<0!BEA%Z4$_gvB%yoic@AOy}dgxlk|}
zZYO<hVx=2{s6_)J7+y3?!gSc)>$$1H%h8PkVCNLQA`3sl0!Q(G*11*qaUua7Has7W
zZvCfI{H^#953K3OkPPLbSiGcmt5UNREt`sH6DaZhnII7n-=~=&Tc^=xRF9UTyU9|V
z7Z)bALeIL${Px9#3XWns1~9VNF#}`T*=P6c4XOQlJ;G-deZL)R$<^7p%NiU&7kY4E
z$wsapKc3X<5gT#;+A}O6!G#;YRehSFSu;c{BBq!clI8KVa3YLjOgA$`M-0^wMbE&O
z(0wj06m_cZT4a0WVpjw^(0~ieBwX32eR0o*LA6h>gMLQQ_p4Zq&t(-oRBvH8h5#-+
zR+I*n)fN56@fIFhn?PeI7lq1mYCvNeGc?Omg~FqH>1mtB>8gSFbq82{myQ^srD`j?
z8|`P~0_rq9XMyc+mpV>jBYJS*$-&kB%o}Rn8&rGreP<TE9Cv4wJy`3|(Tp&X6BEk(
z>XXxb&3JC@GZ>mU7h~1uH95_usAi@LmB%)XSf84R(=YEJ6QAjL8yg3al4)3xvK{)}
zIC5q#CZga9%lb=P{a6n_k`o6O_qi6=><pp<2mht$`{!eoa>)ZVd0{jmg5*WR_)gPP
zm$KdX&f1|DT?QAIXus7w8k3^AiA85wO<X+>Q49>x9T#n=CQND$8&e(0jeH4b;35|l
zPFjCi;Q-!50LhCL*R|U#c6mAK;Ta<Oem7pgyju^?_8ONq$&DH1+nj$Mj}P(hYrA0N
zbgr_^@^MtMS&wcTv1z6tvWG}Mqio|+FFw@~*&#J5J9s&p^RKwj)GKt;rpc8W-hdy;
zjRV(jjx0Q&hV`ANMpi{UWVx7J?w>s%H4h-!(Q#;YMXm49WU>s8Af5!5^jddm+{~rw
zA)1N6xg!8UD7c_RHdh1%1sDY(WY@qXF_a72#6i>db1R+rD||?HeE56i=f9u(m`76f
zpC)?wC48Ya`i^R}!i!YIi=%h2$7X~VE`RNr8ptHLD75}u<0hstGt;DO<H|W9`8-2}
zYy!c-KtPym00JPE*9N~K{)vn1L3g3LavZjz8>vV)wym7=>z+0@veBCm4f+*cR(Z(L
zhZdwNEe^+m#`R_NKVXPXaFy-m0ZlhWHAhABVQWrA2tq*xBQ$2&IEaDJb~fpBZbpd@
z&yIB-Lmg6;I%m<(%WiCxq=e|@)A{9=tjc}HccRp#q0;d|dGLzm)1RpYPH~ats50?b
zX~Hx_^9WUgazY3fL=bRCm3JmjaDi-J)&y;d3+o|}x_q?wixafQEV$4Y7fo&#C36m%
zTHr@26EU^SIk>5q+zvx@jH~T1hc#wsmaPf`HKBRLssSp%0YPLj5!QA@#wEB}#r;@a
zV%nSH_4>`Vt4eQa$|~uPiC&h)XV6g#_M#aPq&Ce93N}yXGnQrjxIe~)+y0^&)y!lW
z+lH)!<`Jt_1t)~Zw+_OYy{d19h;yO&vmIFE#M=-^ZE6=!aS(qtG(=QDS;X?oJoaN4
zM5+_9A1m`T<tvNurx;ghvjjA*F-^p-oRtgLEJFk#L;x!1gbU6Xu>_Ph7Uwz&{9@TC
z`vC-y>ICcumboAAlEfAjz<lJ+s5j<0^=Y2b+*Bcne~NJ}o26zE-J7Lq(Ac(-1dIR$
zKp+I9Y$iCjd^}JY<67K)+?<PQ2&6vyZ@%I2E=g=rzh&1e)QqV|;7bcwpL#@@p;vs%
z4(Jsm!*NK7&NElJA}cxboY+1X;SkUWV>)ph8n`ja{YjuZ(@86Q@FN}ZSNNQ?I}=n@
zr|DUvyw+m~BQ3EW8+EcHOPvPjS+v(2j!v}HEHt4c<~eCI4IzZeHL7!SnD#NrEj!qZ
zTQe<<U`R)prSaCh=ljc?s%eUzS=@y-M3A1e6?-}|P16L|GqqM#7`roM4cVWQG1CNG
z7LycRXe}&To0{1T%+0{Z5J*p2=Z=5AKQl+gc-XU#BLE%gNg%rm6Ho>YyLKSDVHm$|
zFh!8$iiVJ-KxG1qC`92}XK*yevYkL7M-b^sP}0EcD$5tv+zv#*kf!8zh>KW0W5Q}W
zp$P?wG0PNcQZ>s6N_0@;{0cN-Iw5S4ydDdXI{=opiDr_99*e4H!89r=nj<~ol4jOj
zg280(Q-o@0P+@EwNNxlaAqYp5q6>Rpx0z>qRUl^&9O(*|G<a22*q~*2phKh!oY@6M
zSh#>@3K;VYYG_V{XknZ`Mll7Ua7#!5Y<=mR=*(U?LW;^vP+T5FkhWxbpfEE4#T2HW
z{L3wm$zQq<L_pz`ND9}&P=r;dK#mUr>56a;z@bysAO^vZu8=`pfH0u|1T;R)u}Xd@
z#3uw$$<+-&D2<|tHw36ql`vx-EtjVaO}aHONhN|Y6V<68h*v6L@uGr)sbDmua-DYY
z0+K$}9sp*cDnS<MaO5&@q$jl32Bt=&=7?^lgA^1gp6GZn3m5`U(SxH}0ZHF_`&7Wf
zRkJ@FK3;m!fwXNNq^$@c%`ZYM95nuYpyE`eMs)nlB9w)Y>dTDuD95d!X<ILCvjUkB
z)zW)1&^Z=7ec;ZqV$jk{Lcu^Fk2Fz$q<EqY0>NOu7&Q0hg^yTT?MUC&L5^5~ys(;i
z!ZXlc3_wSEqDfjHvojd*4g~W-1R;oa^qB0K=JE4J8zhv6K*ouZa5XwCP!U3UqDmS{
z!fO7prjxy60WhQ~lGc`gG!i*}GFSovfY4}*)XX#^0E`ZnqJ4BL@&D1iSAmLjMU^ym
zsb9Tv-&U`8N^54Z4;-lvZFPFHNd4veA$EAfQz9lSBM<<IsZMq{ficw}A#>P84$L@c
z>wko7VeO_ulAiT;n71&MEbUjzS~FU_)7CG(`!{KsX=VL2+~;f=-vU^g2B#gLG`WTY
zAc6=PP?1c@LJ$xE!XZTaMB%eGmAAk*aj?$%hwK&Jv}_*Q?_EJm87%Ut@Rl|1?mDs<
zFQi2@m87n+MtFhJh67zaGsPakIpG8;`9S2c8z70GJu}f&+5j(MUk}z<-*l|d5KM>Y
zHyyy-AYm$Dja7TD_Rii{IIS_|s+F1|Zwc8pzlt#6U`<13V7AX@@_`5l*+eAo1CbMg
zQ#VyJ;<E>e$hK>0qTH`}p3kn*4mc(crhdH#995c1zUKKQRA79)yUA1j=GUiv8)2k2
zruARt-MLNU>mgI#kg?xe-gK4gEf#z1M~Ec;utdOPw?0bEoHTugcRTl&H$djnuFJ<%
zo7d(3tRI7^UhlfxAZ7(F?E+K)p1Ip!o7TSI(5Uj3l+LtrXjJ<G?47$E9s}UHYUkgs
z=$RGRXbuQN4S^z%lzo~LMF>Iw2rv>b_sqiHt9Hh?L|^Bv&VAYTaK`9RYS-JA@v;qA
zdXngdXrhbiO>@1af4=|W2U0rIrdOA<erLng)lsm)t=U*RSXy5>>upXUy%0e_L6bDk
zu?r4P1*xy({kGaAH8C#m&6ZcPx2QiX_?a)IGi_d#-%sZ0-)y-LhG?1Q`P*Ng(7tf<
z#LB(Uk(#KRC$?RU-B)c#GZHt{RKGQ)Yj)p9CNC2rsv1NdsYt>X6&YbX0nnG(H5<F<
zS0}i{|Ln;v*}t~l>6#fz-FmBC&)I<6PZB?5)EHP)RZZ{Ad-uu8>!E`q`JphsyPCD<
z)h?-yf#ckot<(GRb}e1<tns{{fYhuAT##x`6bJ%vW12bHwUo8Hc3!tT!3FL)vf1?~
zy0T!a555$w*S@kKNdHaTbM)TR?vHM~^Mkcxe6v<R_|Oj!gg|mbU|Rj4uRz&$=Lcv+
zB9eR8N6$>~&Dk|))<?Qfso@C}BUddo$IMYqb)wT<b9}k<qq{yjolAU&Pi!mPX8xbz
z|2~XB3f3#nyv;nCtm+^q5f>c?i<-)!4bG!WU)b^Gw-8A(+Vs0?jxNQX%1z^HPJut+
z*3NtP1J{vj^Nvnz)u9VY8K+{TsyU(HU_=;_8Eq~;axM1Edv`+Z>0F@f$P>k1(pNdB
z=HJqWaI)9?YW^xG@Ptx!1W1UErTOOSrh+4mkJq?5ZrF)%GO=%5vSW>C8e4U9VxL5U
zd)w|qc^!_OU&~xm+^Z8+D1^sv-KApq*BV?NK{#~6NQZ0ZS4C67=G%4;<&v=2v-gUp
z1NRn;j?C;#?s}_p?=1+DmDW3Vl5j$F0=(}&=VPvZZR1O(o0jZL(o_>@>nk?AtRHvo
zx^FY~CBXm4eK7O;?g8z+<%^#xI7vY{p^O`v$@$CXBz9!rl#wuvD4m(_E!U6Rs~+4o
zlxvW?MazlNFNJR|euH1;N#1(*yKgS;qPJ^LwUBOLh-iTHiP~lMCoKb}w_ff4@@?A?
zhPZI-A7*X+zetyT_wsjbwWJS2VsQ7Zw5_s*=DfRd(N9ad6%ek_*jGCRG1=#qtbl<K
zKuFCIsrk5j<9(qn^UjqUt^4BKp{f7*D8KqTZYX()&hJdhdQI==EiLL$ZdBLls0W6K
zj;AHxwnAAW1}@w3vUl0nUq=x9!mc!ad1LL5*>PLViZ}B2q6KG4OM&e{`lJZWSifS<
zFQ&GDfD1rS5RkLWHY8K9_!C(XDLE{wzGUk?daG&2gKrk>J2RIEvF-Uq!0WiF<T>q@
zjtgF|<<)|_3;OAG>hosT1|o)vPJkOntKVZk3VN^Dv+mIakFLZ>@97~>V1IOV=NCj{
z=B}0N^Y-D;>EM6n7ODRwo(TG9efW*Gjf*z|f`Dt{lx!HX6S@<dg#hA`qng7s+JCQX
zx<)kGs~_5!S9dn9v2nfk`-S&}ejC26@IL$6WAI<VdL8$du5;?-4()#})=lK>&w>L&
z#iYQbXJ#Ioiwdjfvit7Xf#H8qRbYPc%3bRMd8jMhx~$sPfCEIw*<x@9Cp~p(dnGEe
zdKUbyq)+2!<E{@)Ha*KD%CSl2gpm-9&=%KwclNtcSGf6s8r#8ha{*z)!iU8Ze&EW`
z6YZ7VBU|rg_je0-n1Sy)en_#244lVnB!q(T82{Rojg`Ed6lK4&@R7>aD0~>u;!Qv3
zT_W1(p{qCFT!+JGI+x}I_m%M<T+7R8QOTD18?pl?PNB-y1Tf_9TVsj=DH%HD2-9Bc
z`-@uUa>>2woi8?>FBcG2%-dxDO8+ro5qJ2%*EYsCy!9T<czpDWjvy%|zj7_|V+#qK
z=ZjGUK{3X)jCuaz&MPsFI<q#+di45cgwJt@9)$+e8)a3G_AlaI9M0W&_wJITQgbU2
zIA;>vW5vI^sCzcXDbA8@^ET%CRVi2*a=~Y42EdG8=XBz6Y`MB+Hj`X;)mQhFwho62
z2o0C|OTOp-NdR#0+Xn7Cagp!**1I=jUH%{JehPfc`nbc<f*KMT)~kMm3*%6*dF-3h
z2d9f-;x-@6dG(4HuWg4ei-AMP0tl#V1uE2c3U}Vob4zH9=q9bUeb?1iHlqWFNgsxj
zICn$QJD0_{S*>MTFWH|RJoOL}MJ)W2y}8%2dusEX{$hh$yJXij$4A7aD8<z6<~80w
zMgUb@7W$m;*51j3iS<V5;vd#~!1m|tw=#B_bpm`rTj87$LLH70KJ1rQ2@OTEMr|7X
z?xd5`kqbARTCcU<vd><h(=euOQD42e&fQtyA2U!9oD!H4$-zl<!IN3Lq+wwjx^NuF
zNd&`8g1aGa!&I-qB~DwPt2yV`sLoM6u0cmQOnv5)_C9A<UQbD1*<iLXxX#)|`xkYN
zoC^piCZljWeb)CvD5hXs<l^weU|DcnurxB3`AMsKSnD)3TMk<Gm=0?(dtWx+n=yl<
z9S4Ya#IIu$87M?9at^!S&TSeOEJGGDVTBDQXixw!L}Ufwmy-J}&EpS$)-$dfJ@BBN
z_%OmGxJ|Bi3Yy0U%7pXGT;jDhmo;76F}^PeT#5pWh1+NOYv7H6zc5|kj8Vx=%Jufo
zTQh>_#u0Q74vb86LUtb9$UtVVW1HiEvpXk{&Fsu7EC2~A0cF72>+YHCo$b$#>h?)&
z=Y>cf%I$GfWi+}x*@IcSgU7ivp!#k7xxEwmX8CfG%T<w!Lb#Brn-7JzhxSAcvZK6{
z`=P>tJX%C2Di>=rOyy=ZB)NTPhll7%dS#|C!6nN98>}!JQ>B0c;9$mdg%H3X{1V$o
z!Wc$ArCb6ha%4Ns!u7+89(d31BbN*dufQ(L3KLYQaj-5cEU^O^APmFFr=Lq;GgMok
k8C((P1`W-FMBu#h|K?vfMIg5DAOHXW07*qoM6N<$f|KjC`Tzg`
index 14f382fbdd18a1209f3dcd63831014b5ad2fc428..f42794644f4dc2b4ae69534a8c8cce352afc0092
GIT binary patch
literal 4671
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
BXxab(
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..abbee1f6b23c7624e4a9c73b48be08397e5f21fb
GIT binary patch
literal 15928
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
ax%@xuNsIghG&*$v0000<MNUMnLSTa03Asc7
--- a/browser/themes/pinstripe/newtab/newTab.css
+++ b/browser/themes/pinstripe/newtab/newTab.css
@@ -23,16 +23,23 @@
   border: none;
   background: -216px 0 transparent url(chrome://browser/skin/newtab/controls.png);
 }
 
 #newtab-toggle[page-disabled] {
   background-position: -232px 0;
 }
 
+@media (min-resolution: 2dppx) {
+  #newtab-toggle {
+    background-image: url(chrome://browser/skin/newtab/controls@2x.png);
+    background-size: 248px;
+  }
+}
+
 /* ROWS */
 .newtab-row {
   margin-bottom: 20px;
 }
 
 .newtab-row:last-child {
   margin-bottom: 0;
 }
@@ -97,16 +104,23 @@
 .newtab-control {
   width: 24px;
   height: 24px;
   padding: 1px 2px 3px;
   border: none;
   background: transparent url(chrome://browser/skin/newtab/controls.png);
 }
 
+@media (min-resolution: 2dppx) {
+  .newtab-control {
+    background-image: url(chrome://browser/skin/newtab/controls@2x.png);
+    background-size: 248px;
+  }
+}
+
 .newtab-control-pin:hover {
   background-position: -24px 0;
 }
 
 .newtab-control-pin:active {
   background-position: -48px 0;
 }
 
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7b170897cc04d914e4163b915d155b804a45625c
GIT binary patch
literal 1167
zc$@)`1aSL_P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000D5Nkl<Zc-qa=
zT~L%&9LMo<>2%pNW8+0#b5&TDO1^<_WF<x*pddIVY9Oo#h`^vCiZG^_%49?~jOCz!
zNCJ%$HN{{_q_Cmw0ug}=EV~OVJi8C<%dc||oHI2K1yW!aAC~98=bZ0>*(Dox);>}H
zs|y5DCJHlPq?Y_A7g!%tBbX>Wh9Sy_BL4<iA6+AWNjm44R_K8yOs;RGo}$QXk#+RP
zf~VhPuV8d%9n(rYqaY~m4kq_pX8UJj9lyYi>Oji0Ea+3L2`fWH^3O98n%IQpTS`Fp
z%?fL>Hd#x5p|G09gX0<zo}`~Cww~`>N)LQotjXFWAgUV7#qu$f)Q-;w-V$9B5P1vK
ze8nZvCH~uQfyuw3;`n71X@yRtT$mH=Y}Vi{(IsoPeE}x>6O~Io@6@mid7(JH=y>Eo
zU6Tui6=VEBxn|~MM|9-{j(+T9ru^Q!J<zZYdr?(Cj>Cm)&5X&8yuj*+DlkWioZNu|
zhsJk5T3{MbG429f?!Owedr@39Ce}_zc0`w~3a<i_b;-#ko^fdG%rqi0^*(lGG~v`o
zMtpPE0*BL!v2jSZ@4BGV?A4GR(IqRxZi31D(829Lt!N}nzQ*U<u_vbw(HREBA8$sZ
zeh?1TE7dfNvvvPOc0`w~*m@I8`b7s9m#1hvGJDW#@t~o_h2lyTy7v|AJ2`}?)K*k|
z-G@<!S1PF<6Z@tjJEBWggjRw%bY9{1=8kF%k9z-%U*<}UihcCGs5B$KtRIl?nQb1V
zejv`#kR8z_uZ2{CNhwgc*ql*~YqcgcJs3g1)eW27D}DQu3wuw{OB^yl-=@fUO@k`-
zYKV^L62EtDfH`<}l-rd(q7j~KL`Xt2!gP(uFKS1}?<y>V9`5s6CtYJla-IPLwuxEq
zfE(|fn({2!5nZx8xB`ss^e7i|WaMu}XAL7FwHq;MEiiPd^grT3Prn;+G!~g|#_a|x
zn{fr7DN~&xJEBXLy<Gt&A#a4+k!jb+DN>+sccHbzjoe}dk%z6wI@bo%fQP$Orto#g
zE_BJ+jk+n%k{!_{OShDRiO(J3wx`=Q9(1_qU+Uo={_5hht;s#O|BHjqzWQF_vzQDM
zy89;9{h)VDb(ZXiE_pSm9L%0<JH-wj*3cWB=rXyv)^=6SORLR%X6PJ87<~>+vZ2K=
zv9`0vh456(S+XO#<dw~3py=&~xy|u|8c8P%Xf~+0_t1%hCk=9*S7bs*H@kof!HE;I
zsyZ8=>5VFabvDgeq9eLw$y?XKY)cv9Htx1*tc~uXpV&KGK=f~N?jPAkKS=cqeYW!1
z%CLLvnXYZXhIcKRvqVR9$;)qC2NRMw$oWTG=aTG*E_rFwH87iEtq9(4!>UNjTw)F0
z5?!)5@M{0!*Gusv(6*WQ_#NBryYZ^oH?S1*i8gzE{Eo(wXBIAcj(U;uoo6pl&$A0G
hpq`}`&9jB9{RcDB(eT=9a9;ob002ovPDHLkV1f)$HIe`T
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0e7ded50f4143b22ec7ecbd831f33b07f8d3a339
GIT binary patch
literal 362
zc$@)h0hRuVP)<h;3K|Lk000e1NJLTq000sI000aK1ONa4#Tz9z0003oNkl<Z7#VfJ
zJxc-s00!Xq?ou(&Lmf^X1kq|Rlc=UFAqomAGa`iW6O;%EH4wThhiq)n22*TvkQS$Q
z|3O=8bEAv<TTxI_Jr8K5N;g%?l<)&3%2es5N-MlY^wC9c`IL5w_(GBPl>&O`qVFwY
z<n-6jL>--2k_tt<qevx|L<e;={k4%3bPXf3mnc9J+u1$J6ev*6?}%+^C<HHt5xN1;
z^Rn*Ik%KPXl{RRhrMhZpLPvf|dtIXkA1KiGwB@QG1<llGg<E0sEp((^mFG?RDBu$%
z&J3cq65=?Quazt4IC2yRQBG6DHyRjtI5Zt2hBC@HkWU`>8Q=uQ(a2CEA*Hd6T|@Rh
z&LEBWjgwrcW{{LpHwn(ujK5LgQa*E*;38%Gj}C@7M;pex0osjr2JJ-x4*&oF07*qo
IM6N<$g0z^D<NyEw
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..391337030cd9eef9b0deb9509653bc3d5d8e2c20
GIT binary patch
literal 356
zc$@)b0h|7bP)<h;3K|Lk000e1NJLTq000sI000aK1ONa4#Tz9z0003iNkl<Z7*}=A
zze@rE0LAg=o#&}}bvNWt1`UZ|77Ev3(%2Fjh{74B`Ge4NDnjnEYzZ4ADi9;0S_9XX
zX8(cy0RIgCfY($g<#+xJ?*UU$q=#;bm>mUbF>|{_mBMVYuz!SC;Voxy{$EB1m3&rs
zhJ}{!beyD*j=#ivwktm39ET|2QtG#N=$&G8(0#ilKfpr4-&i(LL~HK;PN#c<Q67Yq
zE^HX;$uKj_sHZr<h0+~_DgO}H=bCl{3u(Fbo@IpVA8DV7EbPVWuT@F_=o|%>u3#f2
zmHK&Z(nS|HUUE_yDcCFRQGia2{h=l-?7`?18KV~f=wY-|gn=aNP;=}@u#6sRs5Gk7
zsr;_=QEyaHK^?td8B`cyf^kNvO&kU_Mj2;<5h~v@1#mNpUWG>h0000<MNUMnLSTYb
CPnNU*
index f89101f60390319fd4878abe63bc0a38c0410f5c..2047bffe5464843e5d6ad56768a83f6b6d601f8d
GIT binary patch
literal 524
zc$@(Y0`vWeP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0005gNkl<ZILoC|
z&r2IY6#iyrH!De$LPZd)0ozNHv;`3_){`fXN)bf#572W@z4hLsKR`TtvzHvi(z8E6
zrJw<o929%2nq3XaCfTI(O`M3gRv&!qW9Pl^eeb;)kw|vpIVSN;b2NrE(i*Y<%&ltV
zNs!GSA1z5KJs|{$X0zFnC#CTT>o*z=6QjT3+jM501YWIHBOV1a=;wX`uA?yeKGja<
z8O_ti4+$g>qbO=uW}s3IR)3r#<_L^rU$xKb^|~QvJab8)DwPVtFl<Q^3fDmir@xE1
z>`FuEyxi^?GX33nk@OIcDcDw->)1`ODs6r-heD|XPR{_m)S&tI?cf(`o7;Gks9<?v
z+*DUeJt$!RR6v<)pQrG3>l}L+fQ%<w!*sJ4eI3V_u|Aai8&lnNU86u+0`^7~x5X=b
zN+$rJTk?bf{i#gSBr~R3ty;x~KvEJ(2p(+g9HSW)@zOsrp#Ob44_k=eM?<uXToD5<
z?;^~k0!+T^HNCDMT;Q<K+LYZ^xm<1!G1C2nx-ZY(ftA^hrb-YLxo=E==*8SnKYZUe
z^6xKM$XuZx(*$qh6W#@fa72Q*cDgn6<RJbrnYXH>@rMMsyA7WF8vg>qJ@<%!#0gpe
O0000<MNUMnLSTYHl<f5Y
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..dd458981e276b8144fd2db789f8e637857f51990
GIT binary patch
literal 1179
zc$}Tm`CHNl90zb7oQ3D(nVg1Bw;}qhr|VgVr3<H&nIKtDZA&l=o1__e7FrWYpAJY(
zw5XxzuoNOu1QZ2Dl*1E5Xj&?*ty*SlT2Hy{yZ(f|p3m{i=cmu}u1HRb_i~53gFqlJ
zd;*RLZ1jH(aRDYySUCtR7$fd5BPBb7kx$O0f?|(nQ>bV>oqU2yq>_&po*t&|1cAWr
z$%&*m;Ml{{>;IL0XvknN@OX86KHra2?N6%mC*Srb{}e!J45W7lo{|NgQm>;3g7SKU
z^7?`b^g)HgK};)@E{0}HpiC>QKnW{U!AeG97slcHa^dF{@DdfA{RqKSAy~bLaub3*
zf?(Sam!=UFGl<IzNTw3W(jd$Gkn92E)p^tv1L}$q#TiF&oG8u{6!$TTJBQ-_8qA#t
zzVX}o`e*1{^JxA8`p%1x#>G%VerVH6OjaW{tMSX6s!h4o(Jb+9Rx6=^M=Y#6RCM!5
zUe)(ZKDqctPQ`7;Wx?61ru>@bqFT{8UQ3yv^O8`0rMZhEkZ>C$+$JfvMR~osv%0Oj
zM$}$=SHZil7IqCZD|D@Lbz57TSS*%EB=-S|Ua3_2;K76T_I8;}*3r??+1V+V%ew%*
zdWAxv1Zam;DphxPcMm{2s0Qc^YMrqcFfi2D*Qe2Fv|4R{fB(S1fKI0y930f^fyWOG
z4-W&+HyVv5lgVs0kBp3r0wyNM#>U106CX`}WU*Q-7OT}dH8o|k*`}wb?RLAv;h343
znVXxNpPye?Sa3R>HD|s$0i*%SASR`NAa2Ouu<(e;s118?1S08lF2BL)Tw20Vk$ymO
zT=2M95)`J>L|;oJL)Sch|BiPiBX7Ef17TH)Qo|5BKVQD#+St3e2m*E$47cM*q6FOU
zJ9gwP-`ckLe%EN!o1>M_!GG`eJ*&Y_Ppq0gb?5kiNPFEw3;_{KIpIb<ChcTpSyeI-
z{YfV1j|<p6UzlVvpD@V&&s-12-i^SsV^U}^FfAO?6z2MjW{&Tm-G%d_CyTfJ)nrT*
z%7eYlZU;}y2>qS?9`+uzmwx*`8!krb=4;q&!HoATuI}GTvT3)w!UM+OsTvq#dFcs-
z`O1!M_{Ng8<uNTQH1osj%t-1k{rElc(QjwT($de76F$!b2TJO*`GIfNm(z+@;=x(o
z@jjfi*&_9%3QD<0Ppt*}RX68Ygu;Z`*0m4U#0VZO&K{;haPG*kh(xE2sg7pv_Fl>U
z2eQ>>DFd_WBKsM#^~;CypZ<VxDNXgfy746c=c_Guh_CcZ5C05T`Z{V$T|{(G8f9nO
z*%!YY@H%oXVRCOwh;R9ZYNm7UwZp1Axv8~{LPn(in4X5uP|}?rbUhv4m8{mSIvmO>
zKNlp%+~?_dx%`$MWyGo`gUro@gC5AJ^BcEJtxM1J^STbBL>)a=o0CCoJT^M<oQtI<
zv)76^7r9%D^Ji|#6$-0&hFzuI+#~QWCJG-CHTa=)0^co3TmN>2>5}y{$<?%2x*doN
N2p^Y(6Mvm{@n4|`IR*d#
--- a/browser/themes/pinstripe/places/editBookmarkOverlay.css
+++ b/browser/themes/pinstripe/places/editBookmarkOverlay.css
@@ -15,16 +15,22 @@
 .folder-icon > .menu-iconic-left {
   display: -moz-box;
 }
 
 .folder-icon {
   list-style-image: url("chrome://global/skin/tree/folder.png") !important;
 }
 
+@media (min-resolution: 2dppx) {
+  .folder-icon {
+    list-style-image: url("chrome://global/skin/tree/folder@2x.png") !important;
+  }
+}
+
 .menulist-icon {
   margin: 0 !important;
 }
 
 /**** expanders ****/
 
 .expander-up,
 .expander-down {
@@ -80,8 +86,20 @@
 #editBMPanel_bmRootItem {
   list-style-image: url("chrome://browser/skin/places/bookmarksMenu.png") !important;  
 }
 
 #editBMPanel_folderMenuList[selectedIndex="2"],
 #editBMPanel_unfiledRootItem {
   list-style-image: url("chrome://browser/skin/places/unfiledBookmarks.png") !important;  
 }
+
+@media (min-resolution: 2dppx) {
+  #editBMPanel_folderMenuList[selectedIndex="0"],
+  #editBMPanel_toolbarFolderItem {
+    list-style-image: url("chrome://browser/skin/places/bookmarksToolbar@2x.png") !important;
+  }
+
+  #editBMPanel_folderMenuList[selectedIndex="2"],
+  #editBMPanel_unfiledRootItem {
+    list-style-image: url("chrome://browser/skin/places/unfiledBookmarks@2x.png") !important;
+  }
+}
index 61a85c5d6b90d29a7b2a515bb8ce38b840618ac1..8d722ccd5e6e62e89c00097c32d17ace829e4d0a
GIT binary patch
literal 201
zc%17D@N?(olHy`uVBq!ia0vp^>_E)L!2%>N9qnlYQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jin2Xj978ywlP}Cluetqd*HzQiua9lt`podp^{;oN_Sq+v
zKdC#v_J66Qgv7tu$IkTK6Wa7>za}%wpX+CHT8j@bc^Mp=_Mc-zYvaMkS9|}<JAAmx
z%f>&UX+pO3|NC`?J&G*Lt|mW@VPR)Eqaebd7jIs8fITn~Xf1=MtDnm{r-UW|hfGh?
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9efb6d95d8b33ac99aa364126b568b954fe01960
GIT binary patch
literal 443
zc$@*d0Yv_ZP)<h;3K|Lk000e1NJLTq000gE000yS1ONa47YxLw0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzT}ebiR47wz&^s(-0ThSv?{aZnuj>&r
z))>VQf{etYu$6*@*xW?ICJe^JBxqHLLZLyY(+Gux(8**wg<7K!ugFBaLZR70vdQ`@
zgqgwj>&~gpL8kKMQQ0RR705)EZ<<{;SWmLSj(7e#8<}V2-ep!;OtRu#y70*a<h$(f
z&k!ZVAcKS$^UR)issaER3hcYi6a)0q%YZYr?<ydJx0J5ht^TZWT-=O_&3@I%B#|-|
zTnIDD=t5YH$|N<}YKcao5w*zXYjPA+P=(*D092%+)QL@iHrhY=Ni{i8eDp`(bb63m
z3i&x*hiCei>iDw6r2s4%{4?=e{Y|*Oub86|3rx!Bsb77#(c_z^yVf;+@dFbe13!IT
z+s|=b>FPP&y~A%R`FMmy6~iNY|4&{{BQe5MV<pZpu&HBwF}4(Al6q_mk}}Ani4a3H
llb5;zNW-Cq8XVHzN3Xn=u=mUC%ohLv002ovPDHLkV1hHG%8&p6
index 0918714221c6d4e602dee063292c2503c2e8bf06..e5a00b56d38ca5af9b9d912e6ee2121ebfc90bbf
GIT binary patch
literal 843
zc$@)C1GM~!P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0009LNkl<Zc-mc)
zTTGH+7{^)KrI)qUeO<P-uG?yJ^FrBjMV?QnXh15NXU%4%PF)ADa<g375=BtK6CjFb
zO)^D1;|ULlf`XvH_Zd&m`^~xZ+kShWJ@5bdzt8s`SO9Q=%>38akRU{e6rLeC%U!#y
zKM!8y75gE<rB&4xQ+k8e;W#p%o}N+!5|bR6Lk%0bdci=HTjYntDY{gRG)=pGJ|FB`
zZLnlqfrTX_n0GDU_ITm=_{1acR5qeEp46NhWaJdGyVM$~4?nx(2viy^G|5__t-XUl
zV$Ah{*|G-?r^|;XEm#x67^G$8UoR=Is-kdZhtml%xdN1G4One9aJgLI^?I3ZR6QDK
zk+(A@yL<bdqLQ+Yq?RSj%nQ*?P7VIWwtEMLNHG>sK+&gQn4Kddfyt@Vz0f~20()rK
z-P1e97v->70#VM(gM&l!q1_H*X$!7q1viR46b%xojEn@5Bb_jsy?ra_XXh-*{EPzD
zvy7~AilW?$%SMp4%E4}TfCt5dx9>{NV}#71Mgi+46D+T+dg4<A)vT1X%nD+lH_SnE
ziyYl;xZ@N<a0nX`xQUQoPzVj;CfG4s7|q&-iJXo%HYxQJD_JPYwb~AL=N1;>r$k1a
z!FhZFCm!zwNY1#r#%Oje7Wk$6ZHr3ay<sKs(?dtcCq@^SmZ4MG1B#Ar*xoUN({&6d
zZV!RPB*)D44~}3bX86(2G#MVljbm|BpWnzXDE_>@Ve*bo=s<#JE^qIIMZ7?!&20jS
zG1mpsHU(^MZNcpPJk1lPe}BY@xW!zgc%I;?SRzx7P3U|>W8>tApuV9A#LY5>di;NN
zpBC0|^NcI2zRC~P+9#2*ygPUAU11F3lKK8fTFsX_rAFKD9T*;g=@|pe;5{(R&%^5a
zI<f(O^m@9q@_ipCGVay=hk*eX9#d>$sy`B*Cd&R+Q(HIPrszD-^!3vNL&J2pN^^)g
zJvT)lejFane-IcHaQQW!6T?lp8J)lj!wo76i;Dk>tJQKMVk@yQi5<$hP1^on{|{sR
V@W4oA(0l*@002ovPDHLkV1m;SkPrX>
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..684b374ff5732cfa75ec8d81201874eaaef679a9
GIT binary patch
literal 1872
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
KMNUMnLSTa2xs%oa
--- a/browser/themes/pinstripe/places/organizer.css
+++ b/browser/themes/pinstripe/places/organizer.css
@@ -103,16 +103,26 @@
 
 #placesToolbar > toolbarbutton[type="menu"] > .toolbarbutton-menu-dropmarker {
   list-style-image: url(chrome://browser/skin/toolbarbutton-dropmarker.png);
   padding: 0;
   margin-top: 1px;
   -moz-margin-end: 2px;
 }
 
+@media (min-resolution: 2dppx) {
+  #placesToolbar > toolbarbutton[type="menu"] > .toolbarbutton-menu-dropmarker {
+    list-style-image: url(chrome://browser/skin/toolbarbutton-dropmarker@2x.png);
+  }
+
+  #placesToolbar > toolbarbutton[type="menu"] > .toolbarbutton-menu-dropmarker > .dropmarker-icon {
+    width: 7px;
+  }
+}
+
 @media (-moz-mac-lion-theme) {
   #placesToolbar > toolbarbutton[disabled="true"] > .toolbarbutton-icon,
   #placesToolbar > toolbarbutton:not(:hover):-moz-window-inactive > .toolbarbutton-icon,
   #placesToolbar > toolbarbutton[type="menu"][disabled="true"] > .toolbarbutton-menu-dropmarker,
   #placesToolbar > toolbarbutton:not(:hover):-moz-window-inactive[type="menu"] > .toolbarbutton-menu-dropmarker {
     opacity: .5;
   }
 
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..20b458aaca5ec3f06510c9d12ea1ffb70a48fe67
GIT binary patch
literal 1055
zc$@(r1mOFLP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000B#Nkl<Zc-qaD
z-%p!W7{_~Qyf&HPLa)72W7HV0jFQ<b=yZmamX@{yx_01fVMrLX9l?PcTf3DN${1}a
zY_wFml!3rNSmuu@kxUTSU>j^kjC$jL@b!64@}7{iFDr9^7oWG!d(Ly7&$ov(L1Q(v
z?JEDP09s<5Kn^SuuRqlQQl2~i5HCH=0AQk>^N*$0nNUJ35YPU{00B*2-fR2`CK8%|
zEa8qhI2|$WXCi$5Nnp3eVhCu7^#dPxQBu^3CeKh#G}I>X$^J&rxhI01?ABQHfpr2V
zT`P_si=)Y%&Kd6Ka|a5%TZWzN<^W)R`hFdY^MCIM>{7fk0B!6f8v~pNbL+d`@$K|)
zn7aNDlVfY!0?%d#yA-bsaC7RBU}AJNXWo9Rh}p^+>B$IiWAc$;d}LLX6YdxSzG3;U
zEA%q*z4gmMxa-54&5#}$z)TNjdg7sA?An8@G<tfmH~$C<_Bm1QY=^$kjY>zCK(BMd
zb+nE4T+r^VfVZJXZI1K^uLw|d4$L>>Yl5%S_p{Q`HV&iyB<!{h9J2VuXYH|sz+nra
z)N&4v!yy<AEx6P<r8Y-;6t4_0Il3kozIrb!W5W+{vN3_GqkX8Uio^A3FDmR^4A;CS
z_L`dp_?xQDk)DhI*GE<bLxU@-SWGQ&k;F;D&#NOC8Cqhv<~6Zrrk+h^NY91<elVky
znz=f#oWYxK9K=3t6%LsLsCFe#X1#z^avtfgRv4~%P3&3C=ed{9WSb>DidR!Y4`w8N
zUoaTIn?e4&4w#D1&~-=Ys*@-w_Mta2EBE`TrZwK<9`5Bc*=9+P;*|lerS1s^F5k&u
zVsuSlFAvgH_oLL>4zsZt;fpiq4*keAuhHHW>S>q#S!OAo4FPn1FzMuqARb#%rLHE1
zO1l7h-6{IXxfrg+TE*cWG}QHNHbZ(8F9q;{NhR(IE=Lx!;;D<{;}1P>lt*yH7KOd6
z8@AFehHIA7UYL5^_`;h~n<G7nR|ZI4xg&^O`ZX(`Rfg~p1uz+W@YD~W%yNOQJ1Qu%
z2H`%QfU(Gj{RM8+xFTwEq(=rY(SzylSrT-&&t;`Qx=4S5UIhKqh*MuGz6?X5pW#|u
zumAKoy!CPVri*HGq(|{mfU_Xv|9e5-tSS-Ozu0zLzQ6a5lacRT!Cw##&22VAdK9n5
zbdU<7GjLnrYo5uOzVHIGl{3<#cx8a#*;&D<6SuY#>DdtA3>bgQ3<9TrMzi~eZG|1|
zQoNet!qz{HRO|-i{!63HuPo<c7vz7upI>RyJhvzB1>zOr)g9(#;zbVd4DmdXx5MmV
Z_rJhNzO~NC{we?f002ovPDHLkV1l@m15*G1
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a6b1100148c4c956301096f5e66e0a18e1ca8a93
GIT binary patch
literal 4458
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
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..673814bb5c3ce861368b9bfce05176ee9c3144be
GIT binary patch
literal 1593
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
Jd~WU$@jrSI`||(*
index cf97942445c8413dfe678f9fca452a187e65f047..69495dac0f98c528bc1f12514de6f61ec41ed2d4
GIT binary patch
literal 586
zc$@)B0=4~#P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006JNkl<Zc-p1T
z-Ahw(90u^;eSe8vL?C$8g?15%F)fxT7VB*0nlg)CXlu4Lo#q>83)^DrB1SJ-v=V}}
z=)EOz%EC7=a9PtacaHA$xaIWed<Pp1Mj>8&;NkiHp2J}+?KgLX{S*>8R2XFZe;EGW
z<U_O7S#s6&Xjabn7kVSV-JSoyFENpI%5uXr_HjD=bYdF&8%;%dKTKit{kO2zJY>%8
zSYS2Dnl2CRYVCAQ`d6Zx&7Dq^R;!EB*&LV+h?}i8*CcId%a+%YtkHB`dHczmMLDCa
znnOwX;iAeE92Qn$xaEDdsJUc6N?R6+N{lmJyEo$xN~3Q-V{c^xxb8b>8h8ku{V}0T
zUH0aE&Ew1WfONtzI80lnx;U`M=6o<0j-{YB_F`Y19`$AyR9zlu`tB3T)Mam+p$GD>
zqr)*WM_YF6e81)8rx`(rr%+mT92J}qH5Ue<G&xXbaTCha(JlKX7?ChOF(ovd>$9@@
zv%Sy7`1)2PnL^IpXFgQwdr)<zpHQZbZh1mX+LE^~SncU<J|?B{BNV~>l9=`G>paTU
zZK%+g31#Z&R)Drlsqf+w>uLByYk3Pn5hLS1aBcRi;V~a|bSpqxcBI9|OX&?Puf_}b
z<-w8=C6sf00ot+}UAsGykTOCniR}oA(TqZS#lsX@>p_`Y#&5@=lNQebm9dun-pK68
YALCNB{B;sWHvj+t07*qoM6N<$g5rr8=>Px#
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..44efd6aba3ac683c3fe49b32bd4665489d652cd4
GIT binary patch
literal 1289
zc$@(V1@`)hP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000EgNkl<Zc-qaC
z>r<3v7>A!e<{wZqP5(g6G&Pz{Q<IuBBxeypP)@tTF2_L52Ze`&vVfdc5OEk$5>m6s
z#=>!$aZ+pgkcZ0YpaBWUvMjso!Y)uc+}*!-dYO%OkwZowu9;`<!}YuO#Ti9vdE1)u
zzdqm@M$5=mqJ_)r0V!q2yphPre~HAwai{QvxA2#-Xzc23;~`oN>^Ke=oE{HImaU$M
zX5{tn`fjZD065@+)8he2rAHU?EF*JkPFD4s9l!r#veSjH@6fwxmCFJ<*o6ZwIN=_$
zI)ytzUvhLI{*3Ioa`R%pd6Mp$9F$StNt-qK%K|&tg##`)nSddyOSmI+2U-@A%*Y=H
z$42jsItch^^Xc`7)MeqrN2vQh4O&LwgnQWL67Gn^{mt&IXJm6%Z#({eeYpPWEm|KO
zzap>;2VBkFz3p%#V`Rc5R767Y5qDx3`OTgFTfbSRsDEsdbfrdm$v1LEU>6R!;Dj3)
ze>*^1WK?;Mky(ZlhC%Dp!vS6buLW!9g)N~gVk3VA)dOdCb%y~N$THcd1rVCTCY2yY
zUc7p<ci85n`{Ps8^X0dS=oP<ciZ^u8-rBRIt3OZr#*Zo4_z5K+xuB55Z`9Dk3}&%|
zT{z%^6K-T6%j}pIK*Sd`f~S~NM)r-^#s;lU0(*-NE0WF8SrmJ)leE>{lu&n$bPXR-
zQd19(0C=N@9%e9$9c5QrR7<Ll-4<jpX~;BB&Il2g-vBl;vZcHC#Hf9muXQQB8W^ic
z{8K7uw``}_%2T9KzQh?ytosnZ7~qW>dYDmW{ZlKj3&*?<?v@WObs!6wmdRNmVsh(1
zEF*9HeE)ls-9`M5gFgN1^S`(?jCSN2DWa&AqDtB+y8I;n!uR<zcax_248R*T^e}^2
z>|hrTxD+Sc$Uqh{$EWy!=$ymPGjd;5d(D_*`jLsR1eyYavb-T!OCj0y6q?&aI}2NA
z*MT;Q;$OI@yn~`EP6518Lk}~U#SV5AhbG@Zsuvl^LMF1s?(AAWM)qF6eVIQAnH@6<
z8v<gK<u@ZUC?LI>wrAI~w1GnNj1<Np;l;-&Vt*UJ8#VMW!?ShR!7dzd&3lo7EMy{E
zL}k_J898jRTPIwzWcR{=$x43d1`5cmrJ#Lv6wE;(IgJ2s)X>8WX1#il!C5wBGD#vb
zvpR>7cIWJzgPWePJ7;LnY@>Jd<>Z^p|JkG-qHSqaw2i|6-l(C68O&nGn-5vYM7D^?
zFi2o=xae1tjqX0M{)2lXRvNO{$yZ-SZzq(})<nsak&jLRZ`9Dk3}&(8(S;0TsktKj
zy($U%%@b&P<$-mQPJecd-ij-vO>srEDZbbp)Rf-o&#z&2Q5Uk*T(L9#kOTu<T#O-$
zgGN|<{QMWRCBBH>*pufDYUp7`nSGp3%@tv32PMGL<A5Ce&^Ju2XD?AfLnpu+wfX*1
zTxzb^ky<Iih;53N00I_esU9^~gr-zTV75DHshB(*g4%K%YOdIxT%N<o@k!SlL(9Pe
z@LoQ1$V9dXNh%9x<mIn!U$ITi%rW$YnL`#bnFtZAFI&fCGV(tr6WJn2FTuKi#FD5$
zU1=V_<&%Unaye@kzn}i&;Uggeb#g6P`vd+29PtP&ubU;^00000NkvXXu0mjfMw)Hk
--- a/browser/themes/pinstripe/preferences/aboutPermissions.css
+++ b/browser/themes/pinstripe/preferences/aboutPermissions.css
@@ -31,16 +31,22 @@
 
 .site-favicon {
   height: 16px;
   width: 16px;
   -moz-margin-end: 4px;
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
+@media (min-resolution: 2dppx) {
+  .site-favicon {
+    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
+  }
+}
+
 #all-sites-item > .site-container > .site-favicon {
   list-style-image: none;
 }
 
 /* permissions box */
 
 #permissions-box {
   padding: 10px;
@@ -97,16 +103,22 @@
 }
 .pref-icon[type="plugins"] {
   list-style-image: url(chrome://mozapps/skin/plugins/pluginGeneric.png);
 }
 .pref-icon[type="fullscreen"] {
   list-style-image: url(chrome://global/skin/icons/question-64.png);
 }
 
+@media (min-resolution: 2dppx) {
+  .pref-icon[type="geo"] {
+    list-style-image: url(chrome://browser/skin/Geolocation-64@2x.png);
+  }
+}
+
 .pref-title {
   font-size: 125%;
   margin-bottom: 0;
   font-weight: bold;
 }
 
 .pref-menulist {
   margin-left: 6px;
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..704c7a894af75b78a5016c08623da06ad64a31f3
GIT binary patch
literal 1850
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
Z(3&<r@#$SJF7PLUd_4Tz8?fOy{{fd1b8r9v
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4e677b0e63ce18cc67033e4211c823747e4efa0a
GIT binary patch
literal 189
zc%17D@N?(olHy`uVBq!ia0vp^d_c^>!3HEx3Z6Ryq*^>(978H@O+CGl_mF`I%LV<5
z7t^^Tl(JJMUYVw|v*6*OuBV2ZT+0$Tqon$*H3L}OCp?;~^WS>)R=<{JHSMKyGSvQL
zUOUDRaqg!N_rrGA*jyh)&82;LEwZ~x-|u^*e5_)jb)s{9c<C%>PQ@=@6i)nlx83%r
p`1`*O=dWIPr7>$x@!~gk<E>0}BOUblB!KQ=@O1TaS?83{1ONhnONRge
--- a/browser/themes/pinstripe/searchbar.css
+++ b/browser/themes/pinstripe/searchbar.css
@@ -40,8 +40,24 @@
 .search-go-container {
   -moz-box-align: center;
   -moz-padding-end: 6px;
 }
 
 .search-go-button {
   list-style-image: url("chrome://browser/skin/Search.png");
 }
+
+@media (min-resolution: 2dppx) {
+  .searchbar-engine-image {
+    list-style-image: url("chrome://mozapps/skin/places/defaultFavicon@2x.png");
+  }
+
+  .searchbar-dropmarker-image {
+    list-style-image: url("chrome://browser/skin/searchbar-dropmarker@2x.png");
+    width: 7px;
+  }
+
+  .search-go-button {
+    list-style-image: url("chrome://browser/skin/Search@2x.png");
+    width: 14px;
+  }
+}
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..875f73c5e2080b247f9345f10677fdf42f33039a
GIT binary patch
literal 1350
zc$@)71-bf(P)<h;3K|Lk000e1NJLTq003qH001Zm1^@s642_R|000FINkl<ZXx{CZ
zO-Ni<6vyv;Iinc^8Z}PEDXC<U%%Uk23nhy}x)DU`s?dmwG6cGC)y1?39YYr(b|FGZ
z5ld;a>Y^1S&@}yk23ydYU=v%^IHPEjT9w2wZFC&x&FlHgeQ>?J=jhCPI@o*QhsX2I
zy`Fi0&;1y;uIo%udbpXgk~AfZ5=NO4MhSED?D9{gff7b_%#kpcfV)7%Ig~Iqh~YL7
z#KZA&d=f_7$dd(fTZyEE$uEjor-*_WB9vJmiX;jocaBR5Q~dHJb_rg-Um(B{V`WnJ
z<XzU3F#8io>=v<0@bb$o@Jrnzca7R(Z0s1XAWT3Ip+drl2Lxffs$=ZkW8`JbCv;0d
z5at-CLJ-9-2_r9OYL6*E6lSvV8^TzLVkM3&jLYQj>`NF-cAPj#g!afuKE`X~%Q}oY
zT)PNUCJ7^VOohc#=CNxj^ENg%zT<Mat`S#>D|tZ9HH@)anELwq%QW|G;#=Zo9*}bz
zV{E8n$5Qt32bVs)`fkT$Z!G$2?|YX<h#!et#5bH<JT`(H<YJ7;QdZRFpPiVPxE>CN
zACR9SR)}Q_@GON~jKNqNg~^VOkAD;jh3=BSPCO;nEWopM<YG*bb;$P_cl7<fE5Q??
z5ns(I<`11AA{Lxs$U!c~<l9^JElf>KjeBft?7OC>rX~7)j`*FJlt63_ImpEryM>`H
zbd8RVe%8>?FipSD5ci1RBoLcH4stQ3$U1a6aK7nS<0rlGuWRe-7Rp0sS@2Xd3%>Bm
zPAG<F$U!c~n9Qdadt81*OTzr{@bDe_S;=FYM4AJi;Tg}F#~24T<ww+w$)Ta4ud1u7
zef)!^C3HMP4sva(Ll>F&n=O=;2UlWmzwv3MYvXbG@oE;V4HM6E!VEDyLk@B=MxMv6
zd(2`a5}6+y983g*!74uSCPznXU|=AL9OOE9Vp?o&Zl3M$@Bcm!2vo{-AlBE{_XBc@
zs6#gsgp<>9Oq*O`iMqPlrHijeKKG;+(mra+fWK@T_=sJ+5cvW*$i*0pwU~29_v}{~
zOgh)v+WLS#_^Qw6tKzX7e8k$?+GhAtmvc~<?K(O-I_~%M^o)5t9-O-Hp*8r3b#`{%
zv!M=IoSgA@urzLIY;$UrO`kh^I@$7K?R8gbQS*Cp48TY1T;y~DImqS9sWCohB}$?9
z7)(AFjYg;9@py*(697J9{AFaB^R`__EEXH@>gr06kAIRX_=wq9hbW2x=G`JP=`4FT
z|CCK%c=e_GFF(h=%&aDL03R_tLk@EJ7)_eXbV)1pg1JE?y1TpoATc}uK4SdYLD_a4
z)TuwWx3@0?_zu+}cgz-l*_&${?8(Cvn|ib5{4Y%vYc~LV#PEzSv4${Nsbg&auIyhT
zN&C%R0H4PW+P3SUjs7NZpbp(+DKk38IQ(oZ{lk`5*V%N}TP-&Le8l)ah;cYF6UNq#
zF%0*Ghn%%T{QAVHI&`U9WMMLfFt{_#K4yQWHdz9|=XWhb7_*Ma*}2Ea_JniT=2RV4
z9g`7Gf@v<ovpavWSpc8M(n4P5pgQLNV!B1whytaB?%9y;cNrmH%eV0>VG0*VlTT;j
zVL;mK#U(6faa2~qI3SRCN;5;-<?h0iFwX2ZatCQ9LTFO1z87(nFgAQ|W^w^FyFluD
z?G`1BGXm|#o=pi;qNapV!YEV16k+k#N&_W~>KJ88m?L2S0cs2?Tl1;c0RR9107*qo
IM6N<$f|C1(vH$=8
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..97e2b2eb67ecc58e98dd839187143ab6870699e5
GIT binary patch
literal 30143
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
F{{wruD^UOd
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ac928c585372bd72707d895c37c9e11931b327bd
GIT binary patch
literal 40165
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
FzW@#|vGM=_
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ffde5f05086c366c5873e0d5fa383f45982ae002
GIT binary patch
literal 1742
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
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..20bf78db21347a968e519564dc6aa39f4cc5fa78
GIT binary patch
literal 2768
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
W%1!dCU^AQm0000<MNUMnLSTZhvqmuh
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d319accc51cf1b9d0dc2cf4224f1349def1eeab6
GIT binary patch
literal 2732
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
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a8215a283d57a01334bd53c4a864ad373cfc4cd8
GIT binary patch
literal 891
zc$@)y1BCpEP)<h;3K|Lk000e1NJLTq001@s001-y1^@s6!Hvt-0009*Nkl<ZXx{Bw
z(M}ps5Z!xsy9icEL1PRL7L&H|0r&@FjQFSzeuS?+@Bt=%gP*_?KhlIi`qYxP35J?h
z5~D`j7<W6z%q9Z?VPV-#=}vO8T*A&dvom*gmwUDAy2d<08^V-QejrT?m=i+!kT$j^
zX+43BX^PLo(Ii-mR|K1nlfXOI^Jn&P`7-S@ASK8=0T7g6EHIKj;hpFCv4wx##~o;3
zO8njw0j(0=61E6Mfr3xSbGO*%stC{&T2;^)lR+&K-V^eKEMM(O%6bsT0{hG}$KrtC
z0trl(ADk}}J`i57tgNWBvoovNY}(y!cY(UmRDciof=~Dc2Xifpz{V;`?W0-1af+~s
zD|m2lV6|GUM5R)(3Wb8sWHM8y3qIfrKH(c2oUKjfHpguy+DEoPuz}8XczCF*)vA?F
zryUw!6Mhidgzr<L&AzVT8yw)`Zn-g_nFNxtH-sgW$octs!m_Lf8eec=e+W+j%&{l-
z1)mq-02i0#5^K;wmLf_ZjluEpv6anc@95(t3vp)z_`U=eI9W?t+}{E#MNDM1x3`D!
zl@Xp@F{jr|0xd<wH%=p;&)?F)2{AB-IStkjcvpPBQnqd18zCEW_UH(r6nih9<2=rA
zUJV3uj?^~kBh@opyc2|M%<1cSQ5$n=abU7CBErny$D*>CypPRwDax)GD*C!&T#9ii
zGNS5=amM1n;;tBX#kdqhDaE<JkIn5Io4ePRxD@}jQjEJ|T#6BwVvn;3OL3^CIAf!-
z7O_qJPp~p3*oF{d=3dk_&Z303Osf)!gh6n^o@3wyH|vqhwZ1YY7yIN+0V9{oImu))
z^hF79f}4kO2f@%qKs_Q;CSx66Zf|ctMim&idAKfg4b7Y$GBIV=-VrjXRLVFxIk}5!
zVu2ePpoKN{XG;wY%w^*`#_pJ+m#x#&)BClxwYyHIqoV-0p+RJ=$Qmu7`{h!k-(X7u
zQvZvt(k<<jdD!3If2!B(zZ;E)9R<J*4bTEj&<2gHb^NYKCtMM})M~YF<#M^(ZnuAu
zxi>dAW)uK7G(Zb9K^rtqe1qQI-ThiBl|Jt5?0h;pI{F+XpaEK->A!ut{|kuaLIcUb
R+(7^U002ovPDHLkV1gobpZWj*
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..658b291d3940b0a53d321f54ff86e2ade53cf82f
GIT binary patch
literal 968
zc$@*q12_DMP)<h;3K|Lk000e1NJLTq001@s001-y1^@s6!Hvt-000AzNkl<Zc-rln
zu}<4i7=^Ko?Igs;K-$7kAyo<sv{HlALP|qI)25*<bjd3q!HC4d!aMK+?2K%PfdPaV
zcml-00t;`zLjO}8WHmyCVBdQYilq-JQuLqm+1D3EcF)bt&9mg64;>yBAT}V*Be4Oo
zVjg@X6KfOc6<om+d?Aw%pR-)fjztxUS>#s8W0^i75JDj$1052PkhA(Y+lvL6pR$-m
z9KmI1UU)5x3m=3Tp^}gp&Kl?JJhNP8TOe&Qhi5P=3<)KaQA~+hS!O%wiN(v$Wxy+;
zjNl*$KCiB>P8}Q^OkQ4ImSo2JBwz++VJ2o%u8d4(yX;~m7mM$y4A0&)0&BI}r>m<g
z%A^lwBZG3&%+9cjokXmC3Fd_orOMaW*C_B#7!_U!kq{&#;;d23Mh3DdS7L{FNhT8G
z)#A-O8%0s&;^G2VYD@@)ydpwmAPbquW(Qui<YF$j-w6y~US6J-?-miRi6Sy7Ho-1#
zQZbvCJ`kpa>dwy2WPGKx5F!)V>=3Y%om9*hLY}ee>FMbk1nLBt6q{uiKMk>r5D7JK
zc6Rnsw-_>!O(JwkD(19{ot&KX%Xj;9g3LR_oHWD+ggJ10d>rZ)LngAxKv%32vBSed
z{3Ffj1esm2M~Hm^#>AMfOl*IDA6sx%C&*MORtLt!n6E<YD=;R;d}U(0ySvzeGde-0
zO0jRim>BcBVx5Y~PY7(mzD|&-Qmg@ti7{V=*mqz|jQPsMwzs#j1$#O{rb@9UFeb))
zWnx=fTiB^wogh=C*gP;M#{8~Wr(&C%o7ky(b%IQlVn2W}G3Kif`w5JRF<+V3#>NJ=
zU`Hp&R4Mig7!zZDnqt`}D3(oAYym7SEny3`b%M;>{ItaepODyKGO_rfUrrc$Dq`%C
zV>j!uVi=g`!|g@i_ZM2N7S_F`6J#PA9ngiH+)l+T;t0ObFBCC!czAeTZe&}x7&4Jf
zu_8P9>}Y|9irG9PIj-pnhBg|F83dUC*%Yg=Q;r?&hlp8syeaTe_>H9??_i9X5<@mR
zpbI*+zd-=*6SH}lM}#s4fwi@@sq^#mk!rQtYXW4W1G<nhJNoE+zgT<}gretpb1N$=
z<)fpcx6NiV#1b$8ve5xu&<Wkxk;nhVoWFk@r>9UT^wjHhPksxH?CtFp*Vota95^ru
qI-m<Wp&L4)D-Wk#>^brL#r^;aVB9|VL(Vk-0000<MNUMnLSTZo*|tRh
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7de41e77b273e66b7578c11c96efbe054b1655fc
GIT binary patch
literal 1098
zc$@)B1hxB#P)<h;3K|Lk000e1NJLTq001@s001-y1^@s6!Hvt-000CLNkl<ZXx{Bw
zO-LI-6yBL^^J9pyq0y9DgqA{W)rzsj(nG--C`fwrBJ|K>@tRxdwFn-1@72<K%_$Um
z@Z>=~6h)*69@9gGVinpn>HF*(9oNk!n^iZ|9r&2tVfTCAoA+jRVV*QxG%2O9fl~`L
zfKxkR%av9)PHDHe7PVSU5>y}3U@}4tVE5c1r?OK=gEz;lv!xjh(JgRELxd4_3H6@N
zr5sgG+UoHfG36A$1BXl&0AW!=OzS&bB4*(TGq=gMr0$&Oh-ovUW=)S$n8tbuLxe|!
zaYBwTL3rX46a4NtbAhv0b1=jaRO#6;EoC!n3hAIZg;`9}*aPZE2-gV-9{1Wz<^tyk
z+em7W3$d1lYfidIKNYbQjXk73-QV9IFO^Eq%H{H_{r&y7H2%&DzyU6Bf*Us2R!XI0
zvuP<CrJ&Y>xRXflW1-K^&JL}vuD;3Ta{2D=?!IU=8uuD5aDWS(;D!y@Vw;_;;h461
zQIid#CG^dL?gwCKZf@>gp-^}kiA1ml%7m|kb;1{qSZA&>xM2gf*tr4AW+J@qih_wU
z)L$7K9E{J*%)Agn?9%-PJGMutU@knO!d&3ofDPD!P1t4)QvbHK;+W8$!7TM)jAn40
zX7d+aZxMbIs%HdnZ^0I9vYsAotr<=Z%4YsBnCvnJhKGmmQn!5y(P<XjY|~&3p=SO_
zWD{wq*4e@4kV>V@Gmg}W$gxd>HJtd>YITiC%{gJ3=I%L0>i}$1ShSqVFO@z!d*>J}
zg}pjjT6Rp>kX3wetkOV}r=MVz*EOFYnvIr|V@@PhpWsSoD-rX{u~UhdQ){P)1&#%&
z_&-MMk53397Ob(0vfcZ&#)4D~A{J~O!3R3{KnD>EB6blXCfabj7iW=*!3VnCKhRb}
zzc&xzIu&hBEo2*S9*)|j8nhhG3d{LeyG2aeY1REeX^-PcCIiJKBArf${c?<L3)Ui?
zPB!6_thcpWN+57*Z;XwNCH+c8wrv<k6$Gj@!uAuO*Fqh;=7a2m>KnShffuKyrf&Kb
zF}5vOi>lf&?X=@sTGo=aoG3~UWvRbPEt1dYZ~5gIY(oRIu%@VCDNEAVp5!AMJrz}y
zGF)HLhXuK?u<$gQOn&prG1!I%-W>X%jjIThb9yQsmgA}Nx)`B@fYbSFC_%_%GLfaF
zrF=G<MJg=&xZN*91GGRBv_T`ZvgVjxCMb>LRcvTxS65eca&j_0KR<tGb93|g=;-Ke
z8ZQxk__*D}b_rUb3EH3$T8*PRuEVN1L~N1pned76ac5`eL$O$VJv}}BIFU&Fqz8+}
zzp9z4&wz#^G(j6QLMt?D`r*r>H0oE#d?&0B-V@f^z$t|_*0jPJZ7YKQ0=|nxD8hth
Q`2YX_07*qoM6N<$f{=0vr2qf`
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..631fb1352eb5c64e6840cc082bcabf48ff7304d6
GIT binary patch
literal 286
zc$@(q0pb3MP)<h;3K|Lk000e1NJLTq000gE000UI1ONa4F3_h;0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyz)3_wR2b7^kSS+a%dm)H0UBJyuofuu
z&01#y!xV-thE62d#V|##{k0^+f34?^%GC@R46zI`P#DXQAyIl>;Xf<Gf4ToUSKK8^
zfkL4SAwU?)5Gzo)N#j2|0|Uc<=Ko6n^)?6c<N+mofiQ$Ur`!BL=YK{95ctpjU-iHK
z>`2yB25$y$=9DtW|2$ABur$|y_5VgK@eFYcamn8Q`TjF8AOoO)#($H5Fz0~(f@o4;
kX`%n3K$|%KGcyne0KZ&E_-Ym1ZU6uP07*qoM6N<$g4Tz0M*si-
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..59b5118ff601cb8f98ca52a9a28703cc2ce0240e
GIT binary patch
literal 362
zc$@)h0hRuVP)<h;3K|Lk000e1NJLTq000mG001lq1^@s6Y)d$|0003oNkl<Zc-p;|
zJ!*zP5QZhB&JA*i@Es%M9v?YLZjuA22#UBC7NQ`C@u#y%tSo|s9~iUQ3|LJeuLHgy
zRz8e7&+d+uWtp~ZTbE_|X5JS1So1t<&-1kJ`#){lKEeQP()T@8k)~;N1VBlWgdkN_
zT@L}KY0|Fi>M#s%UDrLJ0E+pLs>t&^Is{nPRYy@omDF|pi~=a*I8qgH9DkdN?oa^5
zI6;u2DBceNmSxdF5d8b`+ceD+3ZM+bKvkIbe!_q)Omh^#G)Dnka~!}m#{pb(48S#4
z0ANS+J;0vkAb@L*1GwfF5WqE;0=~q*AYDYfjgI4NZM=s?Qc7(iy@*s6Zzjohew7?3
zAL1kJtV5OSD!o`PqO0x9%a!XY88DQ1#5r%sV!EC^Xo^SOKU%wdS+xUyr~m)}07*qo
IM6N<$g2d35#{d8T
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e7d4937b8d15d764dde4440cc0abd2f7152b9610
GIT binary patch
literal 807
zc$@(z1K9kDP)<h;3K|Lk000e1NJLTq001li000~a1^@s68vb3Z0008+Nkl<Zc-rmP
zT}V@590u?+M@lFN3oMngR0=ALqL3`23ok6_s_3Sx=prJzO_DCW2r4L|n*zJ&B0>-%
zw`o}x&6GfC-(T*Gv$?bFZ0I6WM~>F{_q?$aG1=FdguyO;V>{>F;bG@F@B5A;qW?-I
za3ydh@IS`A9M+ek61bSaT9_Iie@7ooCNh~ORAJv8d-IlXts!>d_7^K!m;zcSL%#zL
z>kXX2IMOybIkoI^xybAFs^WAyX=37|glp-PU!!eksSTEa$|QkKdFV87&|<aSce_0l
z3WZ1%#gfd;%^|Q$c6&U%M6?e$MeE?V%Rpt2;q;$M=nV$;X0t5ICoC50Gz%P$$BPz=
z#V8mI(r2^9NJL$*2{^^BXJ0k&8c3yq><%Nek$q@NBob#GPUli25-mD#I2<Os-65?c
zlc$Ji3vk(XK20>j7oZXeP`4&9>#=cUlpW}Bd%XQT&$C~yU|30#$U8gxQwRjE5z!vt
za%mZuKMz!bG#t-0ttr*0hGVG4`yhIW(0Qv62m}aY2Z^W?w7})F<57GNs7QAU&BIDH
z8WtB9&)_yEB9TbWz@iu?tIZ~?uBN()s2;dNwm+0~5Ctm00X6voXIEpdkLR!Ze7ua?
zz9wum8YPd%`y(WZmoT;!xMDTm3-^EwltT&*6ur{1(3vOwsM&1Mvl&3ChEfGV5D3%Y
z6O1_mRlt>^=}zb|P!4^iF3n0cbjf70$7ZufFcbV$1(EgEl}@KmVoV)yrE0tttOY+%
zmQSEnwU@w(#Rlva0>P_nCScWIRdBoA-z6z_0q0sWV^rDJFLXf~C}RcM)oy;2YG|R;
zY_UFPHQ@bzayXn1aO@ChGGkQRdeeU!DC0`GyESF1t52m;-P1EO!ZcpkipW+*oGW{`
z)^LNb20M&_Mn&M9)o2yN;fwPN3+LF1h>ow@_OhYZw;!5S?1%GKqY4f~$H?d_c1$_H
lq5mS)LQUmAT_x}a^9x6Q`jGJYHVps(002ovPDHLkV1nR^Y}Eh&
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4d6aa6f2009e0f025f4b759ed3014c199de36ee0
GIT binary patch
literal 769
zc$@(N1OEJpP)<h;3K|Lk000e1NJLTq002M$001Be1^@s6qMd$(0008WNkl<ZcwXh%
zPe>GT7>Ds48_l$f2Q4zF4&8zbO{ENttO&EB^dfc<EQGq`K~L2#U7|mRP|Jp41Vx5X
z9m>ceFrtJYi=d;mqGlaBL>Sr5^js!hrX7DY?(!ab;B)@M>+CYDRw9vzXm+-wRdwG+
zx^l4;ndlpS!H~|r?YgcUD90JpA_ti$g{SDm+lVjieH&gIFoFVPvPG!JGgRX}#07Ns
zt#~}{4Gg0m+3XJX%Yk#nt*ZO-BT$2ESLYva9o>B!Uirv&MIga()%N8RpvHBy_RR-)
zh&D_kOv}-S1_bA5?VAtKA;!b_gf`3=o&cqN^8r3!p?$__9K;I40TlML^Bs^2SG;|7
z;{-Yo1qmsI{R|%<2Tf>34VJ;h3`TGh_izFC|9%1-)qSg{r$@e%$t;-Kh|4I$e7!<D
z#vtM<OIlR-Z72L+U^fP_7^W)l98DPVeFrG+hyMtaVIW|94i;?43NVN&yz>U!l-7Ru
z16b%o0c8E?#T!I$635dVp&ylCm>j+Rum{+Ka>&}z2d};8p679_$1r#T9JT$h2WW=u
zMw;<k$U{)ge-7Yi?T0@=9b~<R@f5D$5WH$ZNa^jH4zLOz;ja|3F~fK}Zp#D6w=%tb
z^8w;Gj0wnoARk_qVZ0wjkj;7{+WYbV-%$v!T}Z-fB_=U}weUKHqk-duD#)fma2(Zr
zd4OT;Ls086iBaDHIzfTs7P=sNAzp-3_vHaPu?ZzeR|6j4Dq2A>kDo^!WY<7&boZ@T
zEG9=*BZjRggzPKUVHS_E4gRj93l=JI44WZ)gq_~t#km&MeJdJ`Mnbd(qbSC|^aU02
zvwi7ji|W3OFpZ-TLns0nO`#D<-#<na_A~Q)z$nU*z;*=X;x3M03M4qX`!*KRICh{K
z2e1XD$U_oOFo4&==h5A_k%?XcAyVGY!GGOvvX^pLD+X0H00000NkvXXu0mjfOv+qA
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..95dd0c90ebab375affc051166e25e5c2c953a1d8
GIT binary patch
literal 481
zc$@*@0UrK|P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80004~Nkl<Zc-rmP
zJ4+l<9ENelCL|yhCP)x$wh-)Wv{Mk5G+J4>UqB=T@e7Ev_X~Sv@0}r~ooO~7LIe>k
zRxHw}D}qf5Z}aylPB9F#yPVy#D*=mNbKaRbPdg(b@}~aZfO@^Yj3zFyGSq-tt>(uA
zM0vp4Py)DU26qsbd-w((P_0&fL)!Q=(11#%vIObEKd^vux!izs(J&sME}zB=#KFRz
z>+A(zjR%xUrCo@_DaMo&*S2jupja#(K^y{(ZNs%48Vx8E3ZrO2lv_+=4zrlTjblGI
z8j#QDLl6x%wu}Via=9R+2R6R<6_CwlEl3}1{OBnllgaEu46w1I9gt3^#UNWdAeBmq
zN!kI)WKs;$4@e{uVvv47JRTQ=^aEnCn6z=#VY_a(X$M53QSs2kXIy%0m-vEHk4--y
z5{ZaQ3qG}Ndh7wUO`+-9^aH}-usHm~g4(*`Ssz*uML!@E3W@TJb&vfRi&(|6$3BmH
z2s#F63kHLe5G>;xY)o`|$8^9aJmL(0@r3c=1Spne6(P!jIv;Al2mHcMeC+i*?|;Xy
XVUtHDW|gfX00000NkvXXu0mjfaw*F#
--- a/browser/themes/winstripe/aboutCertError.css
+++ b/browser/themes/winstripe/aboutCertError.css
@@ -32,17 +32,17 @@ h2 {
   border: 1px solid #FFBD09; /* pale yellow extracted from yellow passport icon */
   border-radius: 10px;
   padding: 3em;
   -moz-padding-start: 30px;
   background: url("chrome://global/skin/icons/sslWarning.png") left 0 no-repeat -moz-Field;
   background-origin: content-box;
 }
 
-#errorPageContainer:dir(rtl) {
+#errorPageContainer:-moz-dir(rtl) {
   background-position: right 0;
 }
 
 #errorTitle {
   -moz-margin-start: 80px;
 }
 
 #errorLongContent {
@@ -54,19 +54,19 @@ h2 {
   -moz-margin-start: -20px;
   background: url("chrome://browser/skin/aboutCertError_sectionExpanded.png") left center no-repeat;
   border: none;
   font: inherit;
   color: inherit;
   cursor: pointer;
 }
 
-.expander > button:dir(rtl) {
+.expander > button:-moz-dir(rtl) {
   background-position: right center;
 }
 
 .expander[collapsed] > button {
   background-image: url("chrome://browser/skin/aboutCertError_sectionCollapsed.png");
 }
 
-.expander[collapsed] > button:dir(rtl) {
+.expander[collapsed] > button:-moz-dir(rtl) {
   background-image: url("chrome://browser/skin/aboutCertError_sectionCollapsed-rtl.png");
 }
--- a/browser/themes/winstripe/aboutPrivateBrowsing.css
+++ b/browser/themes/winstripe/aboutPrivateBrowsing.css
@@ -29,17 +29,17 @@ body.normal > #errorPageContainer {
 }
 
 #moreInfo {
   font-size: 110%; /* to match the value set in chrome://global/skin/netError.css */
   -moz-padding-start: 25px;
   background: url("chrome://global/skin/icons/information-16.png") no-repeat top left;
 }
 
-#moreInfo:dir(rtl) {
+#moreInfo:-moz-dir(rtl) {
   background-position: top right;
 }
 
 #moreInfoText {
   margin-bottom: 0;
 }
 
 #moreInfoLinkContainer {
--- a/build/automation.py.in
+++ b/build/automation.py.in
@@ -444,16 +444,19 @@ user_pref("extensions.webservice.discove
 user_pref("extensions.getAddons.maxResults", 0);
 user_pref("extensions.getAddons.get.url", "http://%(server)s/extensions-dummy/repositoryGetURL");
 user_pref("extensions.getAddons.getWithPerformance.url", "http://%(server)s/extensions-dummy/repositoryGetWithPerformanceURL");
 user_pref("extensions.getAddons.search.browseURL", "http://%(server)s/extensions-dummy/repositoryBrowseURL");
 user_pref("extensions.getAddons.search.url", "http://%(server)s/extensions-dummy/repositorySearchURL");
 
 // Make enablePrivilege continue to work for test code. :-(
 user_pref("security.enablePrivilege.enable_for_tests", true);
+
+// Get network events.
+user_pref("network.activity.blipIntervalMilliseconds", 250);
 """ % { "server" : self.webServer + ":" + str(self.httpPort) }
     prefs.append(part)
 
     if useServerLocations:
       # We need to proxy every server but the primary one.
       origins = ["'%s://%s:%s'" % (l.scheme, l.host, l.port)
                 for l in filter(lambda l: "primary" not in l.options, locations)]
       origins = ", ".join(origins)
--- a/build/valgrind/cross-architecture.sup
+++ b/build/valgrind/cross-architecture.sup
@@ -246,24 +246,8 @@
 {
    Bug 794374
    Memcheck:Leak
    fun:malloc
    fun:moz_xmalloc
    fun:_ZN22nsComponentManagerImpl17ManifestComponentERNS_25ManifestProcessingContextEiPKPc
    ...
 }
-{
-   Bug 795395
-   Memcheck:Addr4
-   fun:PR_UnloadLibrary
-   fun:_ZN18nsGSettingsServiceD1Ev
-   fun:_ZN18nsGSettingsService7ReleaseEv
-   fun:_ZL29nsGSettingsServiceConstructorP11nsISupportsRK4nsIDPPv
-   ...
-}
-{
-   Bug 795631
-   Memcheck:Cond
-   fun:_ZN7mozilla17FrameLayerBuilder18ClippedDisplayItemD1Ev
-   fun:_ZN12nsTHashtableIN7mozilla17FrameLayerBuilder21ThebesLayerItemsEntryEE12s_ClearEntryEP12PLDHashTableP15PLDHashEntryHdr
-   ...
-}
--- a/content/base/public/FragmentOrElement.h
+++ b/content/base/public/FragmentOrElement.h
@@ -343,16 +343,18 @@ public:
   {
   public:
     nsDOMSlots();
     virtual ~nsDOMSlots();
 
     void Traverse(nsCycleCollectionTraversalCallback &cb, bool aIsXUL);
     void Unlink(bool aIsXUL);
 
+    size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+
     /**
      * The .style attribute (an interface that forwards to the actual
      * style rules)
      * @see nsGenericHTMLElement::GetStyle
      */
     nsCOMPtr<nsICSSDeclaration> mStyle;
 
     /**
--- a/content/base/src/CSPUtils.jsm
+++ b/content/base/src/CSPUtils.jsm
@@ -6,36 +6,36 @@
  * Content Security Policy Utilities
  *
  * Overview
  * This contains a set of classes and utilities for CSP.  It is in this
  * separate file for testing purposes.
  */
 
 const Cu = Components.utils;
+const Ci = Components.interfaces;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "Services",
                                   "resource://gre/modules/Services.jsm");
 
 // Module stuff
 var EXPORTED_SYMBOLS = ["CSPRep", "CSPSourceList", "CSPSource", "CSPHost",
-                        "CSPWarning", "CSPError", "CSPdebug",
-                        "CSPViolationReportListener", "CSPLocalizer"];
+                        "CSPdebug", "CSPViolationReportListener", "CSPLocalizer"];
 
 var STRINGS_URI = "chrome://global/locale/security/csp.properties";
 
 // these are not exported
 var gIoService = Components.classes["@mozilla.org/network/io-service;1"]
-                 .getService(Components.interfaces.nsIIOService);
+                 .getService(Ci.nsIIOService);
 
 var gETLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"]
-                   .getService(Components.interfaces.nsIEffectiveTLDService);
+                   .getService(Ci.nsIEffectiveTLDService);
 
 // These regexps represent the concrete syntax on the w3 spec as of 7-5-2012
 // scheme          = <scheme production from RFC 3986>
 const R_SCHEME     = new RegExp ("([a-zA-Z0-9\\-]+)", 'i');
 const R_GETSCHEME  = new RegExp ("^" + R_SCHEME.source + "(?=\\:)", 'i');
 
 // scheme-source   = scheme ":"
 const R_SCHEMESRC  = new RegExp ("^" + R_SCHEME.source + "\\:$", 'i');
@@ -71,100 +71,72 @@ var gPrefObserver = {
   get debugEnabled () {
     if (!this._branch)
       this._initialize();
     return this._debugEnabled;
   },
 
   _initialize: function() {
     var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]
-                    .getService(Components.interfaces.nsIPrefService);
+                    .getService(Ci.nsIPrefService);
     this._branch = prefSvc.getBranch("security.csp.");
     this._branch.addObserver("", this, false);
     this._debugEnabled = this._branch.getBoolPref("debug");
   },
 
   unregister: function() {
-    if(!this._branch) return;
+    if (!this._branch) return;
     this._branch.removeObserver("", this);
   },
 
   observe: function(aSubject, aTopic, aData) {
-    if(aTopic != "nsPref:changed") return;
-    if(aData === "debug")
+    if (aTopic != "nsPref:changed") return;
+    if (aData === "debug")
       this._debugEnabled = this._branch.getBoolPref("debug");
   },
-
 };
 
-
-function CSPWarning(aMsg, aWindowID, aSource, aScriptSample, aLineNum) {
-  var textMessage = 'CSP WARN:  ' + aMsg + "\n";
-
-  var consoleMsg = Components.classes["@mozilla.org/scripterror;1"]
-                    .createInstance(Components.interfaces.nsIScriptError);
-  consoleMsg.initWithWindowID(textMessage, aSource, aScriptSample, aLineNum, 0,
-                  Components.interfaces.nsIScriptError.warningFlag,
-                  "Content Security Policy", aWindowID);
-  Components.classes["@mozilla.org/consoleservice;1"]
-                    .getService(Components.interfaces.nsIConsoleService)
-                    .logMessage(consoleMsg);
-}
-
-function CSPError(aMsg, aWindowID) {
-  var textMessage = 'CSP ERROR:  ' + aMsg + "\n";
-
-  var consoleMsg = Components.classes["@mozilla.org/scripterror;1"]
-                    .createInstance(Components.interfaces.nsIScriptError);
-  consoleMsg.initWithWindowID(textMessage, null, null, 0, 0,
-                  Components.interfaces.nsIScriptError.errorFlag,
-                  "Content Security Policy", aWindowID);
-  Components.classes["@mozilla.org/consoleservice;1"]
-                    .getService(Components.interfaces.nsIConsoleService)
-                    .logMessage(consoleMsg);
-}
-
 function CSPdebug(aMsg) {
   if (!gPrefObserver.debugEnabled) return;
 
   aMsg = 'CSP debug: ' + aMsg + "\n";
   Components.classes["@mozilla.org/consoleservice;1"]
-                    .getService(Components.interfaces.nsIConsoleService)
+                    .getService(Ci.nsIConsoleService)
                     .logStringMessage(aMsg);
 }
 
 // Callback to resume a request once the policy-uri has been fetched
 function CSPPolicyURIListener(policyURI, docRequest, csp) {
   this._policyURI = policyURI;    // location of remote policy
   this._docRequest = docRequest;  // the parent document request
   this._csp = csp;                // parent document's CSP
   this._policy = "";              // contents fetched from policyURI
   this._wrapper = null;           // nsIScriptableInputStream
-  this._docURI = docRequest.QueryInterface(Components.interfaces.nsIChannel)
+  this._docURI = docRequest.QueryInterface(Ci.nsIChannel)
                  .URI;    // parent document URI (to be used as 'self')
 }
 
 CSPPolicyURIListener.prototype = {
 
   QueryInterface: function(iid) {
-    if (iid.equals(Components.interfaces.nsIStreamListener) ||
-        iid.equals(Components.interfaces.nsIRequestObserver) ||
-        iid.equals(Components.interfaces.nsISupports))
+    if (iid.equals(Ci.nsIStreamListener) ||
+        iid.equals(Ci.nsIRequestObserver) ||
+        iid.equals(Ci.nsISupports))
       return this;
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
 
   onStartRequest:
   function(request, context) {},
 
   onDataAvailable:
   function(request, context, inputStream, offset, count) {
     if (this._wrapper == null) {
       this._wrapper = Components.classes["@mozilla.org/scriptableinputstream;1"]
-                      .createInstance(Components.interfaces.nsIScriptableInputStream);
+                      .createInstance(Ci.nsIScriptableInputStream);
       this._wrapper.init(inputStream);
     }
     // store the remote policy as it becomes available
     this._policy += this._wrapper.read(count);
   },
 
   onStopRequest:
   function(request, context, status) {
@@ -236,83 +208,88 @@ CSPRep.ALLOW_DIRECTIVE   = "allow";
   * @returns
   *        an instance of CSPRep
   */
 CSPRep.fromString = function(aStr, self, docRequest, csp) {
   var SD = CSPRep.SRC_DIRECTIVES;
   var UD = CSPRep.URI_DIRECTIVES;
   var aCSPR = new CSPRep();
   aCSPR._originalText = aStr;
+  aCSPR._innerWindowID = innerWindowFromRequest(docRequest);
 
   var selfUri = null;
-  if (self instanceof Components.interfaces.nsIURI)
+  if (self instanceof Ci.nsIURI)
     selfUri = self.clone();
 
   var dirs = aStr.split(";");
 
   directive:
   for each(var dir in dirs) {
     dir = dir.trim();
     if (dir.length < 1) continue;
 
     var dirname = dir.split(/\s+/)[0];
     var dirvalue = dir.substring(dirname.length).trim();
 
     if (aCSPR._directives.hasOwnProperty(dirname)) {
       // Check for (most) duplicate directives
-      CSPError(CSPLocalizer.getFormatStr("duplicateDirective", [dirname]));
+      cspError(aCSPR, CSPLocalizer.getFormatStr("duplicateDirective",
+                                                [dirname]));
       CSPdebug("Skipping duplicate directive: \"" + dir + "\"");
       continue directive;
     }
 
     // OPTIONS DIRECTIVE ////////////////////////////////////////////////
     if (dirname === CSPRep.OPTIONS_DIRECTIVE) {
       if (aCSPR._allowInlineScripts || aCSPR._allowEval) {
         // Check for duplicate options directives
-        CSPError(CSPLocalizer.getFormatStr("duplicateDirective", [dirname]));
+        cspError(aCSPR, CSPLocalizer.getFormatStr("duplicateDirective",
+                                                  [dirname]));
         CSPdebug("Skipping duplicate directive: \"" + dir + "\"");
         continue directive;
       }
 
       // grab value tokens and interpret them
       var options = dirvalue.split(/\s+/);
       for each (var opt in options) {
         if (opt === "inline-script")
           aCSPR._allowInlineScripts = true;
         else if (opt === "eval-script")
           aCSPR._allowEval = true;
         else
-          CSPWarning(CSPLocalizer.getFormatStr("doNotUnderstandOption", [opt]));
+          cspWarn(aCSPR, CSPLocalizer.getFormatStr("doNotUnderstandOption",
+                                                   [opt]));
       }
       continue directive;
     }
 
     // ALLOW DIRECTIVE //////////////////////////////////////////////////
     // parse "allow" as equivalent to "default-src", at least until the spec
     // stabilizes, at which time we can stop parsing "allow"
     if (dirname === CSPRep.ALLOW_DIRECTIVE) {
-      CSPWarning(CSPLocalizer.getStr("allowDirectiveDeprecated"));
+      cspWarn(aCSPR, CSPLocalizer.getStr("allowDirectiveDeprecated"));
       if (aCSPR._directives.hasOwnProperty(SD.DEFAULT_SRC)) {
         // Check for duplicate default-src and allow directives
-        CSPError(CSPLocalizer.getFormatStr("duplicateDirective", [dirname]));
+        cspError(aCSPR, CSPLocalizer.getFormatStr("duplicateDirective",
+                                                  [dirname]));
         CSPdebug("Skipping duplicate directive: \"" + dir + "\"");
         continue directive;
       }
-      var dv = CSPSourceList.fromString(dirvalue, self, true);
+      var dv = CSPSourceList.fromString(dirvalue, aCSPR, self, true);
       if (dv) {
         aCSPR._directives[SD.DEFAULT_SRC] = dv;
         continue directive;
       }
     }
 
     // SOURCE DIRECTIVES ////////////////////////////////////////////////
     for each(var sdi in SD) {
       if (dirname === sdi) {
         // process dirs, and enforce that 'self' is defined.
-        var dv = CSPSourceList.fromString(dirvalue, self, true);
+        var dv = CSPSourceList.fromString(dirvalue, aCSPR, self, true);
         if (dv) {
           aCSPR._directives[sdi] = dv;
           continue directive;
         }
       }
     }
 
     // REPORT URI ///////////////////////////////////////////////////////
@@ -335,116 +312,124 @@ CSPRep.fromString = function(aStr, self,
           uri.host;
 
           // Verify that each report URI is in the same etld + 1 and that the
           // scheme and port match "self" if "self" is defined, and just that
           // it's valid otherwise.
           if (self) {
             if (gETLDService.getBaseDomain(uri) !==
                 gETLDService.getBaseDomain(selfUri)) {
-              CSPWarning(CSPLocalizer.getFormatStr("notETLDPlus1",
-                         [gETLDService.getBaseDomain(uri)]));
+              cspWarn(aCSPR,
+                      CSPLocalizer.getFormatStr("notETLDPlus1",
+                                            [gETLDService.getBaseDomain(uri)]));
               continue;
             }
             if (!uri.schemeIs(selfUri.scheme)) {
-              CSPWarning(CSPLocalizer.getFormatStr("notSameScheme",
-                         [uri.asciiSpec]));
+              cspWarn(aCSPR, CSPLocalizer.getFormatStr("notSameScheme",
+                                                       [uri.asciiSpec]));
               continue;
             }
             if (uri.port && uri.port !== selfUri.port) {
-              CSPWarning(CSPLocalizer.getFormatStr("notSamePort",
-                         [uri.asciiSpec]));
+              cspWarn(aCSPR, CSPLocalizer.getFormatStr("notSamePort",
+                                                       [uri.asciiSpec]));
               continue;
             }
           }
         } catch(e) {
           switch (e.result) {
             case Components.results.NS_ERROR_INSUFFICIENT_DOMAIN_LEVELS:
             case Components.results.NS_ERROR_HOST_IS_IP_ADDRESS:
               if (uri.host !== selfUri.host) {
-                CSPWarning(CSPLocalizer.getFormatStr("pageCannotSendReportsTo",
-                         [selfUri.host, uri.host]));
+                cspWarn(aCSPR,
+                        CSPLocalizer.getFormatStr("pageCannotSendReportsTo",
+                                                  [selfUri.host, uri.host]));
                 continue;
               }
               break;
 
             default:
-              CSPWarning(CSPLocalizer.getFormatStr("couldNotParseReportURI",
-                        [uriStrings[i]]));
+              cspWarn(aCSPR, CSPLocalizer.getFormatStr("couldNotParseReportURI",
+                                                       [uriStrings[i]]));
               continue;
           }
         }
         // all verification passed: same ETLD+1, scheme, and port.
         okUriStrings.push(uri.asciiSpec);
       }
       aCSPR._directives[UD.REPORT_URI] = okUriStrings.join(' ');
       continue directive;
     }
 
     // POLICY URI //////////////////////////////////////////////////////////
     if (dirname === UD.POLICY_URI) {
       // POLICY_URI can only be alone
       if (aCSPR._directives.length > 0 || dirs.length > 1) {
-        CSPError(CSPLocalizer.getStr("policyURINotAlone"));
+        cspError(aCSPR, CSPLocalizer.getStr("policyURINotAlone"));
         return CSPRep.fromString("default-src 'none'");
       }
       // if we were called without a reference to the parent document request
       // we won't be able to suspend it while we fetch the policy -> fail closed
       if (!docRequest || !csp) {
-        CSPError(CSPLocalizer.getStr("noParentRequest"));
+        cspError(aCSPR, CSPLocalizer.getStr("noParentRequest"));
         return CSPRep.fromString("default-src 'none'");
       }
 
       var uri = '';
       try {
         uri = gIoService.newURI(dirvalue, null, selfUri);
       } catch(e) {
-        CSPError(CSPLocalizer.getFormatStr("policyURIParseError", [dirvalue]));
+        cspError(aCSPR, CSPLocalizer.getFormatStr("policyURIParseError",
+                                                  [dirvalue]));
         return CSPRep.fromString("default-src 'none'");
       }
 
       // Verify that policy URI comes from the same origin
       if (selfUri) {
-        if (selfUri.host !== uri.host){
-          CSPError(CSPLocalizer.getFormatStr("nonMatchingHost", [uri.host]));
+        if (selfUri.host !== uri.host) {
+          cspError(aCSPR, CSPLocalizer.getFormatStr("nonMatchingHost",
+                                                    [uri.host]));
           return CSPRep.fromString("default-src 'none'");
         }
-        if (selfUri.port !== uri.port){
-          CSPError(CSPLocalizer.getFormatStr("nonMatchingPort", [uri.port.toString()]));
+        if (selfUri.port !== uri.port) {
+          cspError(aCSPR, CSPLocalizer.getFormatStr("nonMatchingPort",
+                                                    [uri.port.toString()]));
           return CSPRep.fromString("default-src 'none'");
         }
-        if (selfUri.scheme !== uri.scheme){
-          CSPError(CSPLocalizer.getFormatStr("nonMatchingScheme", [uri.scheme]));
+        if (selfUri.scheme !== uri.scheme) {
+          cspError(aCSPR, CSPLocalizer.getFormatStr("nonMatchingScheme",
+                                                    [uri.scheme]));
           return CSPRep.fromString("default-src 'none'");
         }
       }
 
       // suspend the parent document request while we fetch the policy-uri
       try {
         docRequest.suspend();
         var chan = gIoService.newChannel(uri.asciiSpec, null, null);
         // make request anonymous (no cookies, etc.) so the request for the
         // policy-uri can't be abused for CSRF
-        chan.loadFlags |= Components.interfaces.nsIChannel.LOAD_ANONYMOUS;
+        chan.loadFlags |= Ci.nsIChannel.LOAD_ANONYMOUS;
         chan.asyncOpen(new CSPPolicyURIListener(uri, docRequest, csp), null);
       }
       catch (e) {
         // resume the document request and apply most restrictive policy
         docRequest.resume();
-        CSPError(CSPLocalizer.getFormatStr("errorFetchingPolicy", [e.toString()]));
+        cspError(aCSPR, CSPLocalizer.getFormatStr("errorFetchingPolicy",
+                                                  [e.toString()]));
         return CSPRep.fromString("default-src 'none'");
       }
 
       // return a fully-open policy to be intersected with the contents of the
       // policy-uri when it returns
       return CSPRep.fromString("default-src *");
     }
 
     // UNIDENTIFIED DIRECTIVE /////////////////////////////////////////////
-    CSPWarning(CSPLocalizer.getFormatStr("couldNotProcessUnknownDirective", [dirname]));
+    cspWarn(aCSPR, CSPLocalizer.getFormatStr("couldNotProcessUnknownDirective",
+                                             [dirname]));
 
   } // end directive: loop
 
   // if makeExplicit fails for any reason, default to default-src 'none'.  This
   // includes the case where "default-src" is not present.
   if (aCSPR.makeExplicit())
     return aCSPR;
   return CSPRep.fromString("default-src 'none'", self);
@@ -506,17 +491,17 @@ CSPRep.prototype = {
    */
   permits:
   function csp_permits(aURI, aContext) {
     if (!aURI) return false;
 
     // GLOBALLY ALLOW "about:" SCHEME
     if (aURI instanceof String && aURI.substring(0,6) === "about:")
       return true;
-    if (aURI instanceof Components.interfaces.nsIURI && aURI.scheme === "about")
+    if (aURI instanceof Ci.nsIURI && aURI.scheme === "about")
       return true;
 
     // make sure the context is valid
     for (var i in CSPRep.SRC_DIRECTIVES) {
       if (CSPRep.SRC_DIRECTIVES[i] === aContext) {
         return this._directives[aContext].permits(aURI);
       }
     }
@@ -558,43 +543,46 @@ CSPRep.prototype = {
       newRep._directives[reportURIDir] = aCSPRep._directives[reportURIDir].concat();
     }
 
     newRep._allowEval =          this.allowsEvalInScripts
                            && aCSPRep.allowsEvalInScripts;
 
     newRep._allowInlineScripts = this.allowsInlineScripts
                            && aCSPRep.allowsInlineScripts;
+ 
+    newRep._innerWindowID = this._innerWindowID ?
+                              this._innerWindowID : aCSPRep._innerWindowID;
 
     return newRep;
   },
 
   /**
    * Copies default source list to each unspecified directive.
    * @returns
    *      true  if the makeExplicit succeeds
    *      false if it fails (for some weird reason)
    */
   makeExplicit:
   function cspsd_makeExplicit() {
     var SD = CSPRep.SRC_DIRECTIVES;
     var defaultSrcDir = this._directives[SD.DEFAULT_SRC];
     if (!defaultSrcDir) {
-      CSPWarning(CSPLocalizer.getStr("allowOrDefaultSrcRequired"));
+      this.warn(CSPLocalizer.getStr("allowOrDefaultSrcRequired"));
       return false;
     }
 
     for (var dir in SD) {
       var dirv = SD[dir];
       if (dirv === SD.DEFAULT_SRC) continue;
       if (!this._directives[dirv]) {
         // implicit directive, make explicit.
         // All but frame-ancestors directive inherit from 'allow' (bug 555068)
         if (dirv === SD.FRAME_ANCESTORS)
-          this._directives[dirv] = CSPSourceList.fromString("*");
+          this._directives[dirv] = CSPSourceList.fromString("*",this);
         else
           this._directives[dirv] = defaultSrcDir.clone();
         this._directives[dirv]._isImplicit = true;
       }
     }
     this._isInitialized = true;
     return true;
   },
@@ -608,16 +596,72 @@ CSPRep.prototype = {
 
   /**
    * Returns true if inline scripts are enabled through the "inline"
    * keyword.
    */
   get allowsInlineScripts () {
     return this._allowInlineScripts;
   },
+
+  /**
+   * Sends a warning message to the error console and web developer console.
+   * @param aMsg
+   *        The message to send
+   * @param aSource (optional)
+   *        The URL of the file in which the error occurred
+   * @param aScriptLine (optional)
+   *        The line in the source file which the error occurred
+   * @param aLineNum (optional)
+   *        The number of the line where the error occurred
+   */
+  warn:
+  function cspd_warn(aMsg, aSource, aScriptLine, aLineNum) {
+    var textMessage = 'CSP WARN:  ' + aMsg + "\n";
+
+    var consoleMsg = Components.classes["@mozilla.org/scripterror;1"]
+                               .createInstance(Ci.nsIScriptError);
+    if (this._innerWindowID) {
+      consoleMsg.initWithWindowID(textMessage, aSource, aScriptLine, aLineNum,
+                                  0, Ci.nsIScriptError.warningFlag,
+                                  "Content Security Policy",
+                                  this._innerWindowID);
+    } else {
+      consoleMsg.init(textMessage, aSource, aScriptLine, aLineNum, 0,
+                      Ci.nsIScriptError.warningFlag,
+                      "Content Security Policy");
+    }
+    Components.classes["@mozilla.org/consoleservice;1"]
+              .getService(Ci.nsIConsoleService).logMessage(consoleMsg);
+  },
+
+  /**
+   * Sends an error message to the error console and web developer console.
+   * @param aMsg
+   *        The message to send
+   */
+  error:
+  function cspsd_error(aMsg) {
+    var textMessage = 'CSP ERROR:  ' + aMsg + "\n";
+
+    var consoleMsg = Components.classes["@mozilla.org/scripterror;1"]
+                               .createInstance(Ci.nsIScriptError);
+    if (this._innerWindowID) {
+      consoleMsg.initWithWindowID(textMessage, null, null, 0, 0,
+                                  Ci.nsIScriptError.errorFlag,
+                                  "Content Security Policy",
+                                  this._innerWindowID);
+    }
+    else {
+      consoleMsg.init(textMessage, null, null, 0, 0,
+                      Ci.nsIScriptError.errorFlag, "Content Security Policy");
+    }
+    Components.classes["@mozilla.org/consoleservice;1"]
+              .getService(Ci.nsIConsoleService).logMessage(consoleMsg);
+  },
 };
 
 //////////////////////////////////////////////////////////////////////
 /**
  * Class to represent a list of sources
  */
 function CSPSourceList() {
   this._sources = [];
@@ -628,57 +672,63 @@ function CSPSourceList() {
   this._isImplicit = false;
 }
 
 /**
  * Factory to create a new CSPSourceList, parsed from a string.
  *
  * @param aStr
  *        string rep of a CSP Source List
+ * @param aCSPRep
+ *        the CSPRep to which this souce list belongs. If null, CSP errors and
+ *        warnings will not be sent to the web console.
  * @param self (optional)
  *        URI or CSPSource representing the "self" source
  * @param enforceSelfChecks (optional)
  *        if present, and "true", will check to be sure "self" has the
  *        appropriate values to inherit when they are omitted from the source.
  * @returns
  *        an instance of CSPSourceList
  */
-CSPSourceList.fromString = function(aStr, self, enforceSelfChecks) {
+CSPSourceList.fromString = function(aStr, aCSPRep, self, enforceSelfChecks) {
   // source-list = *WSP [ source-expression *( 1*WSP source-expression ) *WSP ]
   //             / *WSP "'none'" *WSP
 
   /* If self parameter is passed, convert to CSPSource,
      unless it is already a CSPSource. */
-  if(self && !(self instanceof CSPSource)) {
-     self = CSPSource.create(self);
+  if (self && !(self instanceof CSPSource)) {
+     self = CSPSource.create(self, aCSPRep);
   }
 
   var slObj = new CSPSourceList();
+  slObj._CSPRep = aCSPRep;
   aStr = aStr.trim();
   // w3 specifies case insensitive equality
-  if (aStr.toUpperCase() === "'NONE'"){
+  if (aStr.toUpperCase() === "'NONE'") {
     slObj._permitAllSources = false;
     return slObj;
   }
 
   var tokens = aStr.split(/\s+/);
   for (var i in tokens) {
-    if (!R_SOURCEEXP.test(tokens[i])){
-      CSPWarning(CSPLocalizer.getFormatStr("failedToParseUnrecognizedSource",
-                                           [tokens[i]]));
+    if (!R_SOURCEEXP.test(tokens[i])) {
+      cspWarn(aCSPRep,
+              CSPLocalizer.getFormatStr("failedToParseUnrecognizedSource",
+                                        [tokens[i]]));
       continue;
     }
-    var src = CSPSource.create(tokens[i], self, enforceSelfChecks);
+    var src = CSPSource.create(tokens[i], aCSPRep, self, enforceSelfChecks);
     if (!src) {
-      CSPWarning(CSPLocalizer.getFormatStr("failedToParseUnrecognizedSource",
-                                           [tokens[i]]));
+      cspWarn(aCSPRep,
+              CSPLocalizer.getFormatStr("failedToParseUnrecognizedSource",
+                                        [tokens[i]]));
       continue;
     }
     // if a source is a *, then we can permit all sources
-    if (src.permitAll){
+    if (src.permitAll) {
       slObj._permitAllSources = true;
       return slObj;
     } else {
       slObj._sources.push(src);
     }
   }
 
   return slObj;
@@ -753,16 +803,17 @@ CSPSourceList.prototype = {
    * Makes a new deep copy of this object.
    * @returns
    *      a new CSPSourceList
    */
   clone:
   function() {
     var aSL = new CSPSourceList();
     aSL._permitAllSources = this._permitAllSources;
+    aSL._CSPRep = this._CSPRep;
     for (var i in this._sources) {
       aSL._sources[i] = this._sources[i].clone();
     }
     return aSL;
   },
 
   /**
    * Determines if this directive accepts a URI.
@@ -795,17 +846,17 @@ CSPSourceList.prototype = {
   intersectWith:
   function cspsd_intersectWith(that) {
 
     var newCSPSrcList = null;
 
     if (!that) return this.clone();
 
     if (this.isNone() || that.isNone())
-      newCSPSrcList = CSPSourceList.fromString("'none'");
+      newCSPSrcList = CSPSourceList.fromString("'none'", this._CSPRep);
 
     if (this.isAll()) newCSPSrcList = that.clone();
     if (that.isAll()) newCSPSrcList = this.clone();
 
     if (!newCSPSrcList) {
       // the shortcuts didn't apply, must do intersection the hard way.
       // --  find only common sources
 
@@ -832,16 +883,19 @@ CSPSourceList.prototype = {
       }
       newCSPSrcList = new CSPSourceList();
       newCSPSrcList._sources = isrcs;
     }
 
     // if either was explicit, so is this.
     newCSPSrcList._isImplicit = this._isImplicit && that._isImplicit;
 
+    if ((!newCSPSrcList._CSPRep) && that._CSPRep) {
+      newCSPSrcList._CSPRep = that._CSPRep;
+    }
     return newCSPSrcList;
   }
 }
 
 //////////////////////////////////////////////////////////////////////
 /**
  * Class to model a source (scheme, host, port)
  */
@@ -860,30 +914,33 @@ function CSPSource() {
 /**
  * General factory method to create a new source from one of the following
  * types:
  *  - nsURI
  *  - string
  *  - CSPSource (clone)
  * @param aData
  *        string, nsURI, or CSPSource
+ * @param aCSPRep
+ *        The CSPRep this source belongs to. If null, CSP errors and warnings
+ *        will not be sent to the web console.
  * @param self (optional)
  *	  if present, string, URI, or CSPSource representing the "self" resource
  * @param enforceSelfChecks (optional)
  *	  if present, and "true", will check to be sure "self" has the
  *        appropriate values to inherit when they are omitted from the source.
  * @returns
  *        an instance of CSPSource
  */
-CSPSource.create = function(aData, self, enforceSelfChecks) {
+CSPSource.create = function(aData, aCSPRep, self, enforceSelfChecks) {
   if (typeof aData === 'string')
-    return CSPSource.fromString(aData, self, enforceSelfChecks);
+    return CSPSource.fromString(aData, aCSPRep, self, enforceSelfChecks);
 
-  if (aData instanceof Components.interfaces.nsIURI)
-    return CSPSource.fromURI(aData, self, enforceSelfChecks);
+  if (aData instanceof Ci.nsIURI)
+    return CSPSource.fromURI(aData, aCSPRep, self, enforceSelfChecks);
 
   if (aData instanceof CSPSource) {
     var ns = aData.clone();
     ns._self = CSPSource.create(self);
     return ns;
   }
 
   return null;
@@ -891,51 +948,56 @@ CSPSource.create = function(aData, self,
 
 /**
  * Factory to create a new CSPSource, from a nsIURI.
  *
  * Don't use this if you want to wildcard ports!
  *
  * @param aURI
  *        nsIURI rep of a URI
+ * @param aCSPRep
+ *        The policy this source belongs to. If null, CSP errors and warnings
+ *        will not be sent to the web console.
  * @param self (optional)
  *        string or CSPSource representing the "self" source
  * @param enforceSelfChecks (optional)
  *        if present, and "true", will check to be sure "self" has the
  *        appropriate values to inherit when they are omitted from aURI.
  * @returns
  *        an instance of CSPSource
  */
-CSPSource.fromURI = function(aURI, self, enforceSelfChecks) {
-  if (!(aURI instanceof Components.interfaces.nsIURI)){
-    CSPError(CSPLocalizer.getStr("cspSourceNotURI"));
+CSPSource.fromURI = function(aURI, aCSPRep, self, enforceSelfChecks) {
+  if (!(aURI instanceof Ci.nsIURI)) {
+    cspError(aCSPRep, CSPLocalizer.getStr("cspSourceNotURI"));
     return null;
   }
 
   if (!self && enforceSelfChecks) {
-    CSPError(CSPLocalizer.getStr("selfDataNotProvided"));
+    cspError(aCSPRep, CSPLocalizer.getStr("selfDataNotProvided"));
     return null;
   }
 
   if (self && !(self instanceof CSPSource)) {
-    self = CSPSource.create(self, undefined, false);
+    self = CSPSource.create(self, aCSPRep, undefined, false);
   }
 
   var sObj = new CSPSource();
   sObj._self = self;
+  sObj._CSPRep = aCSPRep;
 
   // PARSE
   // If 'self' is undefined, then use default port for scheme if there is one.
 
   // grab scheme (if there is one)
   try {
     sObj._scheme = aURI.scheme;
   } catch(e) {
     sObj._scheme = undefined;
-    CSPError(CSPLocalizer.getFormatStr("uriWithoutScheme", [aURI.asciiSpec]));
+    cspError(aCSPRep, CSPLocalizer.getFormatStr("uriWithoutScheme",
+                                                [aURI.asciiSpec]));
     return null;
   }
 
   // grab host (if there is one)
   try {
     // if there's no host, an exception will get thrown
     // (NS_ERROR_FAILURE)
     sObj._host = CSPHost.fromString(aURI.host);
@@ -968,53 +1030,57 @@ CSPSource.fromURI = function(aURI, self,
   return sObj;
 };
 
 /**
  * Factory to create a new CSPSource, parsed from a string.
  *
  * @param aStr
  *        string rep of a CSP Source
+ * @param aCSPRep
+ *        the CSPRep this CSPSource belongs to
  * @param self (optional)
  *        string, URI, or CSPSource representing the "self" source
  * @param enforceSelfChecks (optional)
  *        if present, and "true", will check to be sure "self" has the
  *        appropriate values to inherit when they are omitted from aURI.
  * @returns
  *        an instance of CSPSource
  */
-CSPSource.fromString = function(aStr, self, enforceSelfChecks) {
+CSPSource.fromString = function(aStr, aCSPRep, self, enforceSelfChecks) {
   if (!aStr)
     return null;
 
   if (!(typeof aStr === 'string')) {
-    CSPError(CSPLocalizer.getStr("argumentIsNotString"));
+    cspError(aCSPRep, CSPLocalizer.getStr("argumentIsNotString"));
     return null;
   }
 
   var sObj = new CSPSource();
   sObj._self = self;
+  sObj._CSPRep = aCSPRep;
+
 
   // if equal, return does match
-  if (aStr === "*"){
+  if (aStr === "*") {
     sObj._permitAll = true;
     return sObj;
   }
 
   if (!self && enforceSelfChecks) {
-    CSPError(CSPLocalizer.getStr("selfDataNotProvided"));
+    cspError(aCSPRep, CSPLocalizer.getStr("selfDataNotProvided"));
     return null;
   }
 
   if (self && !(self instanceof CSPSource)) {
-    self = CSPSource.create(self, undefined, false);
+    self = CSPSource.create(self, aCSPRep, undefined, false);
   }
 
   // check for scheme-source match
-  if (R_SCHEMESRC.test(aStr)){
+  if (R_SCHEMESRC.test(aStr)) {
     var schemeSrcMatch = R_GETSCHEME.exec(aStr);
     sObj._scheme = schemeSrcMatch[0];
     if (!sObj._host) sObj._host = CSPHost.fromString("*");
     if (!sObj._port) sObj._port = "*";
     return sObj;
   }
 
   // check for host-source or ext-host-source match
@@ -1026,52 +1092,56 @@ CSPSource.fromString = function(aStr, se
       sObj._scheme = self.scheme;
       schemeMatch = null;
     } else {
       sObj._scheme = schemeMatch[0];
     }
 
     // get array of matches to the R_HOST regular expression
     var hostMatch = R_HOST.exec(aStr);
-    if (!hostMatch){
-      CSPError(CSPLocalizer.getFormatStr("couldntParseInvalidSource", [aStr]));
+    if (!hostMatch) {
+      cspError(aCSPRep, CSPLocalizer.getFormatStr("couldntParseInvalidSource",
+                                                  [aStr]));
       return null;
     }
     // host regex gets scheme, so remove scheme from aStr. Add 3 for '://'
     if (schemeMatch)
       hostMatch = R_HOST.exec(aStr.substring(schemeMatch[0].length + 3));
     sObj._host = CSPHost.fromString(hostMatch[0]);
     var portMatch = R_PORT.exec(aStr);
     if (!portMatch) {
       // gets the default port for the given scheme
       defPort = Services.io.getProtocolHandler(sObj._scheme).defaultPort;
       if (!defPort) {
-        CSPError(CSPLocalizer.getFormatStr("couldntParseInvalidSource", [aStr]));
+        cspError(aCSPRep,
+                 CSPLocalizer.getFormatStr("couldntParseInvalidSource",
+                                           [aStr]));
         return null;
       }
       sObj._port = defPort;
     }
     else {
       // strip the ':' from the port
       sObj._port = portMatch[0].substr(1);
     }
     return sObj;
   }
 
   // check for 'self' (case insensitive)
-  if (aStr.toUpperCase() === "'SELF'"){
-    if (!self){
-      CSPError(CSPLocalizer.getStr("selfKeywordNoSelfData"));
+  if (aStr.toUpperCase() === "'SELF'") {
+    if (!self) {
+      cspError(aCSPRep, CSPLocalizer.getStr("selfKeywordNoSelfData"));
       return null;
     }
     sObj._self = self.clone();
     sObj._isSelf = true;
     return sObj;
   }
-  CSPError(CSPLocalizer.getFormatStr("couldntParseInvalidSource",[aStr]));
+  cspError(aCSPRep, CSPLocalizer.getFormatStr("couldntParseInvalidSource",
+                                              [aStr]));
   return null;
 };
 
 CSPSource.validSchemeName = function(aStr) {
   // <scheme-name>       ::= <alpha><scheme-suffix>
   // <scheme-suffix>     ::= <scheme-chr>
   //                      | <scheme-suffix><scheme-chr>
   // <scheme-chr>        ::= <letter> | <digit> | "+" | "." | "-"
@@ -1151,32 +1221,33 @@ CSPSource.prototype = {
   clone:
   function() {
     var aClone = new CSPSource();
     aClone._self = this._self ? this._self.clone() : undefined;
     aClone._scheme = this._scheme;
     aClone._port = this._port;
     aClone._host = this._host ? this._host.clone() : undefined;
     aClone._isSelf = this._isSelf;
+    aClone._CSPRep = this._CSPRep;
     return aClone;
   },
 
   /**
    * Determines if this Source accepts a URI.
    * @param aSource
    *        the URI, or CSPSource in question
    * @returns
    *        true if the URI matches a source in this source list.
    */
   permits:
   function(aSource) {
     if (!aSource) return false;
 
     if (!(aSource instanceof CSPSource))
-      return this.permits(CSPSource.create(aSource));
+      return this.permits(CSPSource.create(aSource, this._CSPRep));
 
     // verify scheme
     if (this.scheme != aSource.scheme)
       return false;
 
     // port is defined in 'this' (undefined means it may not be relevant
     // to the scheme) AND this port (implicit or explicit) matches
     // aSource's port
@@ -1220,55 +1291,65 @@ CSPSource.prototype = {
       newSource._port = this.port;
     else if (this.port === "*")
       newSource._port = that.port;
     else if (that.port === "*")
       newSource._port = this.port;
     else if (that.port === this.port)
       newSource._port = this.port;
     else {
-      CSPError(CSPLocalizer.getFormatStr("notIntersectPort", [this.toString(), that.toString()]));
+      let msg = CSPLocalizer.getFormatStr("notIntersectPort",
+                                          [this.toString(), that.toString()]);
+      cspError(this._CSPRep, msg);
       return null;
     }
 
     // scheme
     if (!this.scheme)
       newSource._scheme = that.scheme;
     else if (!that.scheme)
       newSource._scheme = this.scheme;
     if (this.scheme === "*")
       newSource._scheme = that.scheme;
     else if (that.scheme === "*")
       newSource._scheme = this.scheme;
     else if (that.scheme === this.scheme)
       newSource._scheme = this.scheme;
     else {
-      CSPError(CSPLocalizer.getFormatStr("notIntersectScheme", [this.toString(), that.toString()]));
+      var msg = CSPLocalizer.getFormatStr("notIntersectScheme",
+                                          [this.toString(), that.toString()]);
+      cspError(this._CSPRep, msg);
       return null;
     }
 
     // NOTE: Both sources must have a host, if they don't, something funny is
     // going on.  The fromString() factory method should have set the host to
     // * if there's no host specified in the input. Regardless, if a host is
     // not present either the scheme is hostless or any host should be allowed.
     // This means we can use the other source's host as the more restrictive
     // host expression, or if neither are present, we can use "*", but the
     // error should still be reported.
 
     // host
     if (this.host && that.host) {
       newSource._host = this.host.intersectWith(that.host);
     } else if (this.host) {
-      CSPError(CSPLocalizer.getFormatStr("intersectingSourceWithUndefinedHost", [that.toString()]));
+      let msg = CSPLocalizer.getFormatStr("intersectingSourceWithUndefinedHost",
+                                          [that.toString()]);
+      cspError(this._CSPRep, msg);
       newSource._host = this.host.clone();
     } else if (that.host) {
-      CSPError(CSPLocalizer.getFormatStr("intersectingSourceWithUndefinedHost", [this.toString()]));
+      let msg = CSPLocalizer.getFormatStr("intersectingSourceWithUndefinedHost",
+                                          [this.toString()]);
+      cspError(this._CSPRep, msg);
       newSource._host = that.host.clone();
     } else {
-      CSPError(CSPLocalizer.getFormatStr("intersectingSourcesWithUndefinedHosts", [this.toString(), that.toString()]));
+      let msg = CSPLocalizer.getFormatStr("intersectingSourcesWithUndefinedHosts",
+                                          [this.toString(), that.toString()]);
+      cspError(this._CSPRep, msg);
       newSource._host = CSPHost.fromString("*");
     }
 
     return newSource;
   },
 
   /**
    * Compares one CSPSource to another.
@@ -1477,17 +1558,17 @@ CSPHost.prototype = {
 function CSPViolationReportListener(reportURI) {
   this._reportURI = reportURI;
 }
 
 CSPViolationReportListener.prototype = {
   _reportURI:   null,
 
   QueryInterface: function(iid) {
-    if(iid.equals(Ci.nsIStreamListener) ||
+    if (iid.equals(Ci.nsIStreamListener) ||
         iid.equals(Ci.nsIRequestObserver) ||
         iid.equals(Ci.nsISupports))
       return this;
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
 
   onStopRequest:
   function(request, context, status) {
@@ -1503,16 +1584,62 @@ CSPViolationReportListener.prototype = {
 
   onDataAvailable:
   function(request, context, inputStream, offset, count) { },
 
 };
 
 //////////////////////////////////////////////////////////////////////
 
+function innerWindowFromRequest(docRequest) {
+  let win = null;
+  let loadContext = null;
+
+  try {
+    loadContext = docRequest.notificationCallbacks.getInterface(Ci.nsILoadContext);
+  } catch (ex) {
+    try {
+      loadContext = docRequest.loadGroup.notificationCallbacks.getInterface(Ci.nsILoadContext);
+    } catch (ex) {
+      return null;
+    }
+  }
+
+  if (loadContext) {
+    win = loadContext.associatedWindow;
+  }
+  if (win) {
+    try {
+       let winUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
+       return winUtils.currentInnerWindowID;
+    } catch (ex) {
+      return null;
+    }
+  }
+  return null;
+}
+
+function cspError(aCSPRep, aMessage) {
+  if (aCSPRep) {
+    aCSPRep.error(aMessage);
+  } else {
+    (new CSPRep()).error(aMessage);
+  }
+}
+
+function cspWarn(aCSPRep, aMessage) {
+  if (aCSPRep) {
+    aCSPRep.warn(aMessage);
+  } else {
+    (new CSPRep()).warn(aMessage);
+  }
+}
+
+//////////////////////////////////////////////////////////////////////
+
 CSPLocalizer = {
   /**
    * Retrieve a localized string.
    *
    * @param string aName
    *        The string name you want from the CSP string bundle.
    * @return string
    *         The localized string.
--- a/content/base/src/FragmentOrElement.cpp
+++ b/content/base/src/FragmentOrElement.cpp
@@ -94,16 +94,17 @@
 #include "nsIView.h"
 #include "nsIViewManager.h"
 #include "nsIScrollableFrame.h"
 #include "nsXBLInsertionPoint.h"
 #include "mozilla/css/StyleRule.h" /* For nsCSSSelectorList */
 #include "nsRuleProcessorData.h"
 #include "nsAsyncDOMEvent.h"
 #include "nsTextNode.h"
+#include "mozilla/dom/NodeListBinding.h"
 #include "dombindings.h"
 
 #ifdef MOZ_XUL
 #include "nsIXULDocument.h"
 #endif /* MOZ_XUL */
 
 #include "nsCycleCollectionParticipant.h"
 #include "nsCCUncollectableMarker.h"
@@ -384,17 +385,23 @@ NS_INTERFACE_TABLE_HEAD(nsChildContentLi
   NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsChildContentList)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(NodeList)
 NS_INTERFACE_MAP_END
 
 JSObject*
 nsChildContentList::WrapObject(JSContext *cx, JSObject *scope,
                                bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::NodeList::create(cx, scope, this, triedToWrap);
+  JSObject* obj = NodeListBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::NodeList::create(cx, scope, this);
 }
 
 NS_IMETHODIMP
 nsChildContentList::GetLength(uint32_t* aLength)
 {
   *aLength = mNode ? mNode->GetChildCount() : 0;
 
   return NS_OK;
@@ -593,16 +600,40 @@ FragmentOrElement::nsDOMSlots::Unlink(bo
     NS_IF_RELEASE(mControllers);
   mChildrenList = nullptr;
   if (mClassList) {
     mClassList->DropReference();
     mClassList = nullptr;
   }
 }
 
+size_t
+FragmentOrElement::nsDOMSlots::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+{
+  size_t n = aMallocSizeOf(this);
+
+  if (mAttributeMap) {
+    n += mAttributeMap->SizeOfIncludingThis(aMallocSizeOf);
+  }
+
+  // Measurement of the following members may be added later if DMD finds it is
+  // worthwhile:
+  // - Superclass members (nsINode::nsSlots)
+  // - mStyle
+  // - mDataSet
+  // - mSMILOverrideStyle
+  // - mSMILOverrideStyleRule
+  // - mChildrenList
+  // - mClassList
+
+  // The following members are not measured:
+  // - mBindingParent / mControllers: because they're   non-owning
+  return n;
+}
+
 FragmentOrElement::FragmentOrElement(already_AddRefed<nsINodeInfo> aNodeInfo)
   : nsIContent(aNodeInfo)
 {
 }
 
 FragmentOrElement::~FragmentOrElement()
 {
   NS_PRECONDITION(!IsInDoc(),
@@ -1933,11 +1964,19 @@ FragmentOrElement::FireNodeRemovedForChi
        child = child->GetNextSibling()) {
     nsContentUtils::MaybeFireNodeRemoved(child, this, doc);
   }
 }
 
 size_t
 FragmentOrElement::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
 {
-  return nsIContent::SizeOfExcludingThis(aMallocSizeOf) +
-         mAttrsAndChildren.SizeOfExcludingThis(aMallocSizeOf);
+  size_t n = 0;
+  n += nsIContent::SizeOfExcludingThis(aMallocSizeOf);
+  n += mAttrsAndChildren.SizeOfExcludingThis(aMallocSizeOf);
+
+  nsDOMSlots* slots = GetExistingDOMSlots();
+  if (slots) {
+    n += slots->SizeOfIncludingThis(aMallocSizeOf);
+  }
+
+  return n;
 }
--- a/content/base/src/Makefile.in
+++ b/content/base/src/Makefile.in
@@ -30,16 +30,17 @@ EXPORTS		= \
 		nsStubDocumentObserver.h \
 		nsStubImageDecoderObserver.h \
 		nsStubMutationObserver.h \
 		nsTextFragment.h \
 		mozAutoDocUpdate.h \
 		nsFrameMessageManager.h \
 		nsAttrAndChildArray.h \
 		nsAttrValue.h \
+		nsAttrValueInlines.h \
 		nsCrossSiteListenerProxy.h \
 		nsDOMAttributeMap.h \
 		nsGenericElement.h \
 		nsMappedAttributeElement.h \
 		nsStyledElement.h \
     nsSandboxFlags.h \
 		$(NULL)
 
--- a/content/base/src/contentSecurityPolicy.js
+++ b/content/base/src/contentSecurityPolicy.js
@@ -99,44 +99,16 @@ ContentSecurityPolicy.prototype = {
   get allowsInlineScript() {
     return this._reportOnlyMode || this._policy.allowsInlineScripts;
   },
 
   get allowsEval() {
     return this._reportOnlyMode || this._policy.allowsEvalInScripts;
   },
 
-  get innerWindowID() {
-    let win = null;
-    let loadContext = null;
-
-    try {
-      loadContext = this._docRequest
-                        .notificationCallbacks.getInterface(Ci.nsILoadContext);
-    } catch (ex) {
-      try {
-        loadContext = this._docRequest.loadGroup
-                          .notificationCallbacks.getInterface(Ci.nsILoadContext);
-      } catch (ex) {
-      }
-    }
-
-    if (loadContext) {
-      win = loadContext.associatedWindow;
-    }
-    if (win) {
-      try {
-         let winUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils);
-         return winUtils.currentInnerWindowID;
-      } catch (ex) {
-      }
-    }
-    return null;
-  },
-
   /**
    * Log policy violation on the Error Console and send a report if a report-uri
    * is present in the policy
    *
    * @param aViolationType
    *     one of the VIOLATION_TYPE_* constants, e.g. inline-script or eval
    * @param aSourceFile
    *     name of the source file containing the violation (if available)
@@ -297,53 +269,52 @@ ContentSecurityPolicy.prototype = {
         report["csp-report"]["script-sample"] = aScriptSample;
       if (aLineNum)
         report["csp-report"]["line-number"] = aLineNum;
 
       var reportString = JSON.stringify(report);
       CSPdebug("Constructed violation report:\n" + reportString);
 
       var violationMessage = null;
-      if(blockedUri["asciiSpec"]){
+      if (blockedUri["asciiSpec"]) {
          violationMessage = CSPLocalizer.getFormatStr("directiveViolatedWithURI", [violatedDirective, blockedUri.asciiSpec]);
       } else {
          violationMessage = CSPLocalizer.getFormatStr("directiveViolated", [violatedDirective]);
       }
-      CSPWarning(violationMessage,
-                 this.innerWindowID,
-                 (aSourceFile) ? aSourceFile : null,
-                 (aScriptSample) ? decodeURIComponent(aScriptSample) : null,
-                 (aLineNum) ? aLineNum : null);
+      this._policy.warn(violationMessage,
+                        (aSourceFile) ? aSourceFile : null,
+                        (aScriptSample) ? decodeURIComponent(aScriptSample) : null,
+                        (aLineNum) ? aLineNum : null);
 
       // For each URI in the report list, send out a report.
       // We make the assumption that all of the URIs are absolute URIs; this
       // should be taken care of in CSPRep.fromString (where it converts any
       // relative URIs into absolute ones based on "self").
       for (let i in uris) {
         if (uris[i] === "")
           continue;
 
         try {
           var chan = Services.io.newChannel(uris[i], null, null);
-          if(!chan) {
+          if (!chan) {
             CSPdebug("Error creating channel for " + uris[i]);
             continue;
           }
 
           var content = Cc["@mozilla.org/io/string-input-stream;1"]
                           .createInstance(Ci.nsIStringInputStream);
           content.data = reportString + "\n\n";
 
           // make sure this is an anonymous request (no cookies) so in case the
           // policy URI is injected, it can't be abused for CSRF.
           chan.loadFlags |= Ci.nsIChannel.LOAD_ANONYMOUS;
 
           // we need to set an nsIChannelEventSink on the channel object
           // so we can tell it to not follow redirects when posting the reports
-          chan.notificationCallbacks = new CSPReportRedirectSink();
+          chan.notificationCallbacks = new CSPReportRedirectSink(this._policy);
 
           chan.QueryInterface(Ci.nsIUploadChannel)
               .setUploadStream(content, "application/json", content.available());
 
           try {
             // if this is an HTTP channel, set the request method to post
             chan.QueryInterface(Ci.nsIHttpChannel);
             chan.requestMethod = "POST";
@@ -364,18 +335,18 @@ ContentSecurityPolicy.prototype = {
           }
 
           //send data (and set up error notifications)
           chan.asyncOpen(new CSPViolationReportListener(uris[i]), null);
           CSPdebug("Sent violation report to " + uris[i]);
         } catch(e) {
           // it's possible that the URI was invalid, just log a
           // warning and skip over that.
-          CSPWarning(CSPLocalizer.getFormatStr("triedToSendReport", [uris[i]]), this.innerWindowID);
-          CSPWarning(CSPLocalizer.getFormatStr("errorWas", [e.toString()]), this.innerWindowID);
+          this._policy.warn(CSPLocalizer.getFormatStr("triedToSendReport", [uris[i]]));
+          this._policy.warn(CSPLocalizer.getFormatStr("errorWas", [e.toString()]));
         }
       }
     }
   },
 
   /**
    * Exposed Method to analyze docShell for approved frame ancestry.
    * Also sends violation reports if necessary.
@@ -547,17 +518,18 @@ ContentSecurityPolicy.prototype = {
                                  aSourceFile, aScriptSample, aLineNum);
       }, Ci.nsIThread.DISPATCH_NORMAL);
   },
 };
 
 // The POST of the violation report (if it happens) should not follow
 // redirects, per the spec. hence, we implement an nsIChannelEventSink
 // with an object so we can tell XHR to abort if a redirect happens.
-function CSPReportRedirectSink() {
+function CSPReportRedirectSink(policy) {
+  this._policy = policy;
 }
 
 CSPReportRedirectSink.prototype = {
   QueryInterface: function requestor_qi(iid) {
     if (iid.equals(Ci.nsISupports) ||
         iid.equals(Ci.nsIInterfaceRequestor) ||
         iid.equals(Ci.nsIChannelEventSink))
       return this;
@@ -570,17 +542,17 @@ CSPReportRedirectSink.prototype = {
       return this;
 
     throw Components.results.NS_ERROR_NO_INTERFACE;
   },
 
   // nsIChannelEventSink
   asyncOnChannelRedirect: function channel_redirect(oldChannel, newChannel,
                                                     flags, callback) {
-    CSPWarning(CSPLocalizer.getFormatStr("reportPostRedirect", [oldChannel.URI.asciiSpec]));
+    this._policy.warn(CSPLocalizer.getFormatStr("reportPostRedirect", [oldChannel.URI.asciiSpec]));
 
     // cancel the old channel so XHR failure callback happens
     oldChannel.cancel(Cr.NS_ERROR_ABORT);
 
     // notify an observer that we have blocked the report POST due to a redirect,
     // used in testing, do this async since we're in an async call now to begin with
     Services.tm.mainThread.dispatch(
       function() {
--- a/content/base/src/nsAttrValue.cpp
+++ b/content/base/src/nsAttrValue.cpp
@@ -4,30 +4,120 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /*
  * A struct that represents the value (type and actual data) of an
  * attribute.
  */
 
 #include "nsAttrValue.h"
+#include "nsAttrValueInlines.h"
 #include "nsIAtom.h"
 #include "nsUnicharUtils.h"
 #include "mozilla/css/StyleRule.h"
 #include "mozilla/css/Declaration.h"
 #include "nsContentUtils.h"
 #include "nsReadableUtils.h"
 #include "prprf.h"
 #include "mozilla/HashFunctions.h"
+#include "nsHTMLCSSStyleSheet.h"
+#include "nsCSSParser.h"
+#include "nsStyledElement.h"
 
 using namespace mozilla;
 
 #define MISC_STR_PTR(_cont) \
   reinterpret_cast<void*>((_cont)->mStringBits & NS_ATTRVALUE_POINTERVALUE_MASK)
 
+bool
+MiscContainer::GetString(nsDependentString& aString) const
+{
+  void* ptr = MISC_STR_PTR(this);
+
+  if (!ptr) {
+    return false;
+  }
+
+  if (static_cast<nsAttrValue::ValueBaseType>(mStringBits &
+                                              NS_ATTRVALUE_BASETYPE_MASK) ==
+      nsAttrValue::eStringBase) {
+    nsStringBuffer* buffer = static_cast<nsStringBuffer*>(ptr);
+    if (!buffer) {
+      return false;
+    }
+
+    aString.Rebind(reinterpret_cast<PRUnichar*>(buffer->Data()),
+                   buffer->StorageSize() / sizeof(PRUnichar) - 1);
+    return true;
+  }
+
+  nsIAtom* atom = static_cast<nsIAtom*>(ptr);
+  if (!atom) {
+    return false;
+  }
+
+  aString.Rebind(atom->GetUTF16String(), atom->GetLength());
+  return true;
+}
+
+void
+MiscContainer::Cache()
+{
+  // Not implemented for anything else yet.
+  MOZ_ASSERT(mType == nsAttrValue::eCSSStyleRule);
+  MOZ_ASSERT(IsRefCounted());
+  MOZ_ASSERT(mValue.mRefCount > 0);
+  MOZ_ASSERT(!mValue.mCached);
+
+  css::StyleRule* rule = mValue.mCSSStyleRule;
+  nsHTMLCSSStyleSheet* sheet = rule->GetHTMLCSSStyleSheet();
+  if (!sheet) {
+    return;
+  }
+
+  nsDependentString str;
+  bool gotString = GetString(str);
+  if (!gotString) {
+    return;
+  }
+
+  sheet->CacheStyleAttr(str, this);
+  mValue.mCached = 1;
+
+  // This has to be immutable once it goes into the cache.
+  css::Declaration* decl = rule->GetDeclaration();
+  if (decl) {
+    decl->SetImmutable();
+  }
+}
+
+void
+MiscContainer::Evict()
+{
+  // Not implemented for anything else yet.
+  MOZ_ASSERT(mType == nsAttrValue::eCSSStyleRule);
+  MOZ_ASSERT(IsRefCounted());
+  MOZ_ASSERT(mValue.mRefCount == 0);
+
+  if (!mValue.mCached) {
+    return;
+  }
+
+  css::StyleRule* rule = mValue.mCSSStyleRule;
+  nsHTMLCSSStyleSheet* sheet = rule->GetHTMLCSSStyleSheet();
+  MOZ_ASSERT(sheet);
+
+  nsDependentString str;
+  DebugOnly<bool> gotString = GetString(str);
+  MOZ_ASSERT(gotString);
+
+  sheet->EvictStyleAttr(str, this);
+  mValue.mCached = 0;
+}
+
 nsTArray<const nsAttrValue::EnumTable*>* nsAttrValue::sEnumTableArray = nullptr;
 
 nsAttrValue::nsAttrValue()
     : mBits(0)
 {
 }
 
 nsAttrValue::nsAttrValue(const nsAttrValue& aOther)
@@ -114,18 +204,23 @@ nsAttrValue::Reset()
       if (str) {
         str->Release();
       }
 
       break;
     }
     case eOtherBase:
     {
-      EnsureEmptyMiscContainer();
-      delete GetMiscContainer();
+      MiscContainer* cont = GetMiscContainer();
+      if (cont->IsRefCounted() && cont->mValue.mRefCount > 1) {
+        NS_RELEASE(cont);
+        break;
+      }
+
+      delete ClearMiscContainer();
 
       break;
     }
     case eAtomBase:
     {
       nsIAtom* atom = GetAtomValue();
       NS_RELEASE(atom);
 
@@ -174,83 +269,87 @@ nsAttrValue::SetTo(const nsAttrValue& aO
     {
       ResetIfSet();
       mBits = aOther.mBits;
       return;      
     }
   }
 
   MiscContainer* otherCont = aOther.GetMiscContainer();
-  if (!EnsureEmptyMiscContainer()) {
+  if (otherCont->IsRefCounted()) {
+    delete ClearMiscContainer();
+    NS_ADDREF(otherCont);
+    SetPtrValueAndType(otherCont, eOtherBase);
     return;
   }
 
-  MiscContainer* cont = GetMiscContainer();
+  MiscContainer* cont = EnsureEmptyMiscContainer();
   switch (otherCont->mType) {
     case eInteger:
     {
-      cont->mInteger = otherCont->mInteger;
+      cont->mValue.mInteger = otherCont->mValue.mInteger;
       break;
     }
     case eEnum:
     {
-      cont->mEnumValue = otherCont->mEnumValue;
+      cont->mValue.mEnumValue = otherCont->mValue.mEnumValue;
       break;
     }
     case ePercent:
     {
-      cont->mPercent = otherCont->mPercent;
+      cont->mValue.mPercent = otherCont->mValue.mPercent;
       break;
     }
     case eColor:
     {
-      cont->mColor = otherCont->mColor;
+      cont->mValue.mColor = otherCont->mValue.mColor;
       break;
     }
     case eCSSStyleRule:
     {
-      NS_ADDREF(cont->mCSSStyleRule = otherCont->mCSSStyleRule);
+      MOZ_NOT_REACHED("These should be refcounted!");
       break;
     }
     case eURL:
     {
-      NS_ADDREF(cont->mURL = otherCont->mURL);
+      NS_ADDREF(cont->mValue.mURL = otherCont->mValue.mURL);
       break;
     }
     case eImage:
     {
-      NS_ADDREF(cont->mImage = otherCont->mImage);
+      NS_ADDREF(cont->mValue.mImage = otherCont->mValue.mImage);
       break;
     }
     case eAtomArray:
     {
       if (!EnsureEmptyAtomArray() ||
-          !GetAtomArrayValue()->AppendElements(*otherCont->mAtomArray)) {
+          !GetAtomArrayValue()->AppendElements(*otherCont->mValue.mAtomArray)) {
         Reset();
         return;
       }
       break;
     }
     case eDoubleValue:
     {
       cont->mDoubleValue = otherCont->mDoubleValue;
       break;
     }
     case eIntMarginValue:
     {
-      if (otherCont->mIntMargin)
-        cont->mIntMargin = new nsIntMargin(*otherCont->mIntMargin);
+      if (otherCont->mValue.mIntMargin)
+        cont->mValue.mIntMargin =
+          new nsIntMargin(*otherCont->mValue.mIntMargin);
       break;
     }
     default:
     {
       if (IsSVGType(otherCont->mType)) {
         // All SVG types are just pointers to classes and will therefore have
         // the same size so it doesn't really matter which one we assign
-        cont->mSVGAngle = otherCont->mSVGAngle;
+        cont->mValue.mSVGAngle = otherCont->mValue.mSVGAngle;
       } else {
         NS_NOTREACHED("unknown type stored in MiscContainer");
       }
       break;
     }
   }
 
   void* otherPtr = MISC_STR_PTR(otherCont);
@@ -300,54 +399,49 @@ nsAttrValue::SetTo(int32_t aInt, const n
 {
   ResetIfSet();
   SetIntValueAndType(aInt, eInteger, aSerialized);
 }
 
 void
 nsAttrValue::SetTo(double aValue, const nsAString* aSerialized)
 {
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    cont->mDoubleValue = aValue;
-    cont->mType = eDoubleValue;
-    SetMiscAtomOrString(aSerialized);
-  }
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  cont->mDoubleValue = aValue;
+  cont->mType = eDoubleValue;
+  SetMiscAtomOrString(aSerialized);
 }
 
 void
 nsAttrValue::SetTo(css::StyleRule* aValue, const nsAString* aSerialized)
 {
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    NS_ADDREF(cont->mCSSStyleRule = aValue);
-    cont->mType = eCSSStyleRule;
-    SetMiscAtomOrString(aSerialized);
-  }
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  MOZ_ASSERT(cont->mValue.mRefCount == 0);
+  NS_ADDREF(cont->mValue.mCSSStyleRule = aValue);
+  cont->mType = eCSSStyleRule;
+  NS_ADDREF(cont);
+  SetMiscAtomOrString(aSerialized);
+  MOZ_ASSERT(cont->mValue.mRefCount == 1);
 }
 
 void
 nsAttrValue::SetTo(css::URLValue* aValue, const nsAString* aSerialized)
 {
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    NS_ADDREF(cont->mURL = aValue);
-    cont->mType = eURL;
-    SetMiscAtomOrString(aSerialized);
-  }
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  NS_ADDREF(cont->mValue.mURL = aValue);
+  cont->mType = eURL;
+  SetMiscAtomOrString(aSerialized);
 }
 
 void
 nsAttrValue::SetTo(const nsIntMargin& aValue)
 {
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    cont->mIntMargin = new nsIntMargin(aValue);
-    cont->mType = eIntMarginValue;
-  }
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  cont->mValue.mIntMargin = new nsIntMargin(aValue);
+  cont->mType = eIntMarginValue;
 }
 
 void
 nsAttrValue::SetToSerialized(const nsAttrValue& aOther)
 {
   if (aOther.Type() != nsAttrValue::eString &&
       aOther.Type() != nsAttrValue::eAtom) {
     nsAutoString val;
@@ -476,30 +570,21 @@ nsAttrValue::SwapValueWith(nsAttrValue& 
 }
 
 void
 nsAttrValue::ToString(nsAString& aResult) const
 {
   MiscContainer* cont = nullptr;
   if (BaseType() == eOtherBase) {
     cont = GetMiscContainer();
-    void* ptr = MISC_STR_PTR(cont);
-    if (ptr) {
-      if (static_cast<ValueBaseType>(cont->mStringBits & NS_ATTRVALUE_BASETYPE_MASK) ==
-          eStringBase) {
-        nsStringBuffer* str = static_cast<nsStringBuffer*>(ptr);
-        if (str) {
-          str->ToString(str->StorageSize()/sizeof(PRUnichar) - 1, aResult);
-          return;
-        }
-      } else {
-        nsIAtom *atom = static_cast<nsIAtom*>(ptr);
-        atom->ToString(aResult);
-        return;
-      }
+
+    nsDependentString str;
+    if (cont->GetString(str)) {
+      aResult = str;
+      return;
     }
   }
 
   switch(Type()) {
     case eString:
     {
       nsStringBuffer* str = static_cast<nsStringBuffer*>(GetPtr());
       if (str) {
@@ -536,104 +621,110 @@ nsAttrValue::ToString(nsAString& aResult
     case eEnum:
     {
       GetEnumString(aResult, false);
       break;
     }
     case ePercent:
     {
       nsAutoString intStr;
-      intStr.AppendInt(cont ? cont->mPercent : GetIntInternal());
+      intStr.AppendInt(cont ? cont->mValue.mPercent : GetIntInternal());
       aResult = intStr + NS_LITERAL_STRING("%");
 
       break;
     }
     case eCSSStyleRule:
     {
       aResult.Truncate();
       MiscContainer *container = GetMiscContainer();
-      css::Declaration *decl = container->mCSSStyleRule->GetDeclaration();
+      css::Declaration *decl =
+        container->mValue.mCSSStyleRule->GetDeclaration();
       if (decl) {
         decl->ToString(aResult);
       }
       const_cast<nsAttrValue*>(this)->SetMiscAtomOrString(&aResult);
 
       break;
     }
     case eDoubleValue:
     {
       aResult.Truncate();
       aResult.AppendFloat(GetDoubleValue());
       break;
     }
     case eSVGAngle:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGAngle, aResult);
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGAngle,
+                                    aResult);
       break;
     }
     case eSVGIntegerPair:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGIntegerPair,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGIntegerPair,
                                     aResult);
       break;
     }
     case eSVGLength:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGLength, aResult);
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGLength,
+                                    aResult);
       break;
     }
     case eSVGLengthList:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGLengthList,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGLengthList,
                                     aResult);
       break;
     }
     case eSVGNumberList:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGNumberList,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGNumberList,
                                     aResult);
       break;
     }
     case eSVGNumberPair:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGNumberPair,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGNumberPair,
                                     aResult);
       break;
     }
     case eSVGPathData:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGPathData, aResult);
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGPathData,
+                                    aResult);
       break;
     }
     case eSVGPointList:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGPointList, aResult);
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGPointList,
+                                    aResult);
       break;
     }
     case eSVGPreserveAspectRatio:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGPreserveAspectRatio,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGPreserveAspectRatio,
                                     aResult);
       break;
     }
     case eSVGStringList:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGStringList,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGStringList,
                                     aResult);
       break;
     }
     case eSVGTransformList:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGTransformList,
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGTransformList,
                                     aResult);
       break;
     }
     case eSVGViewBox:
     {
-      SVGAttrValueWrapper::ToString(GetMiscContainer()->mSVGViewBox, aResult);
+      SVGAttrValueWrapper::ToString(GetMiscContainer()->mValue.mSVGViewBox,
+                                    aResult);
       break;
     }
     default:
     {
       aResult.Truncate();
       break;
     }
   }
@@ -674,28 +765,28 @@ bool
 nsAttrValue::GetColorValue(nscolor& aColor) const
 {
   if (Type() != eColor) {
     // Unparseable value, treat as unset.
     NS_ASSERTION(Type() == eString, "unexpected type for color-valued attr");
     return false;
   }
 
-  aColor = GetMiscContainer()->mColor;
+  aColor = GetMiscContainer()->mValue.mColor;
   return true;
 }
 
 void
 nsAttrValue::GetEnumString(nsAString& aResult, bool aRealTag) const
 {
   NS_PRECONDITION(Type() == eEnum, "wrong type");
 
   uint32_t allEnumBits =
     (BaseType() == eIntegerBase) ? static_cast<uint32_t>(GetIntInternal())
-                                   : GetMiscContainer()->mEnumValue;
+                                   : GetMiscContainer()->mValue.mEnumValue;
   int16_t val = allEnumBits >> NS_ATTRVALUE_ENUMTABLEINDEX_BITS;
   const EnumTable* table = sEnumTableArray->
     ElementAt(allEnumBits & NS_ATTRVALUE_ENUMTABLEINDEX_MASK);
 
   while (table->tag) {
     if (table->value == val) {
       aResult.AssignASCII(table->tag);
       if (!aRealTag && allEnumBits & NS_ATTRVALUE_ENUMTABLE_VALUE_NEEDS_TO_UPPER) {
@@ -772,68 +863,68 @@ nsAttrValue::HashValue() const
   if (static_cast<ValueBaseType>(cont->mStringBits & NS_ATTRVALUE_BASETYPE_MASK)
       == eAtomBase) {
     return cont->mStringBits - 0;
   }
 
   switch (cont->mType) {
     case eInteger:
     {
-      return cont->mInteger;
+      return cont->mValue.mInteger;
     }
     case eEnum:
     {
-      return cont->mEnumValue;
+      return cont->mValue.mEnumValue;
     }
     case ePercent:
     {
-      return cont->mPercent;
+      return cont->mValue.mPercent;
     }
     case eColor:
     {
-      return cont->mColor;
+      return cont->mValue.mColor;
     }
     case eCSSStyleRule:
     {
-      return NS_PTR_TO_INT32(cont->mCSSStyleRule);
+      return NS_PTR_TO_INT32(cont->mValue.mCSSStyleRule);
     }
     // Intentionally identical, so that loading the image does not change the
     // hash code.
     case eURL:
     case eImage:
     {
       nsString str;
       ToString(str);
       return HashString(str);
     }
     case eAtomArray:
     {
       uint32_t hash = 0;
-      uint32_t count = cont->mAtomArray->Length();
-      for (nsCOMPtr<nsIAtom> *cur = cont->mAtomArray->Elements(),
+      uint32_t count = cont->mValue.mAtomArray->Length();
+      for (nsCOMPtr<nsIAtom> *cur = cont->mValue.mAtomArray->Elements(),
                              *end = cur + count;
            cur != end; ++cur) {
         hash = AddToHash(hash, cur->get());
       }
       return hash;
     }
     case eDoubleValue:
     {
       // XXX this is crappy, but oh well
       return cont->mDoubleValue;
     }
     case eIntMarginValue:
     {
-      return NS_PTR_TO_INT32(cont->mIntMargin);
+      return NS_PTR_TO_INT32(cont->mValue.mIntMargin);
     }
     default:
     {
       if (IsSVGType(cont->mType)) {
         // All SVG types are just pointers to classes so we can treat them alike
-        return NS_PTR_TO_INT32(cont->mSVGAngle);
+        return NS_PTR_TO_INT32(cont->mValue.mSVGAngle);
       }
       NS_NOTREACHED("unknown type stored in MiscContainer");
       return 0;
     }
   }
 }
 
 bool
@@ -856,82 +947,86 @@ nsAttrValue::Equals(const nsAttrValue& a
     case eIntegerBase:
     {
       return mBits == aOther.mBits;
     }
   }
 
   MiscContainer* thisCont = GetMiscContainer();
   MiscContainer* otherCont = aOther.GetMiscContainer();
+  if (thisCont == otherCont) {
+    return true;
+  }
+
   if (thisCont->mType != otherCont->mType) {
     return false;
   }
 
   bool needsStringComparison = false;
 
   switch (thisCont->mType) {
     case eInteger:
     {
-      if (thisCont->mInteger == otherCont->mInteger) {
+      if (thisCont->mValue.mInteger == otherCont->mValue.mInteger) {
         needsStringComparison = true;
       }
       break;
     }
     case eEnum:
     {
-      if (thisCont->mEnumValue == otherCont->mEnumValue) {
+      if (thisCont->mValue.mEnumValue == otherCont->mValue.mEnumValue) {
         needsStringComparison = true;
       }
       break;
     }
     case ePercent:
     {
-      if (thisCont->mPercent == otherCont->mPercent) {
+      if (thisCont->mValue.mPercent == otherCont->mValue.mPercent) {
         needsStringComparison = true;
       }
       break;
     }
     case eColor:
     {
-      if (thisCont->mColor == otherCont->mColor) {
+      if (thisCont->mValue.mColor == otherCont->mValue.mColor) {
         needsStringComparison = true;
       }
       break;
     }
     case eCSSStyleRule:
     {
-      return thisCont->mCSSStyleRule == otherCont->mCSSStyleRule;
+      return thisCont->mValue.mCSSStyleRule == otherCont->mValue.mCSSStyleRule;
     }
     case eURL:
     {
-      return thisCont->mURL == otherCont->mURL;
+      return thisCont->mValue.mURL == otherCont->mValue.mURL;
     }
     case eImage:
     {
-      return thisCont->mImage == otherCont->mImage;
+      return thisCont->mValue.mImage == otherCont->mValue.mImage;
     }
     case eAtomArray:
     {
       // For classlists we could be insensitive to order, however
       // classlists are never mapped attributes so they are never compared.
 
-      if (!(*thisCont->mAtomArray == *otherCont->mAtomArray)) {
+      if (!(*thisCont->mValue.mAtomArray == *otherCont->mValue.mAtomArray)) {
         return false;
       }
 
       needsStringComparison = true;
       break;
     }
     case eDoubleValue:
     {
       return thisCont->mDoubleValue == otherCont->mDoubleValue;
     }
     case eIntMarginValue:
     {
-      return thisCont->mIntMargin == otherCont->mIntMargin;
+      return thisCont->mValue.mIntMargin == otherCont->mValue.mIntMargin;
     }
     default:
     {
       if (IsSVGType(thisCont->mType)) {
         // Currently this method is never called for nsAttrValue objects that
         // point to SVG data types.
         // If that changes then we probably want to add methods to the
         // corresponding SVG types to compare their base values.
@@ -1238,43 +1333,41 @@ nsAttrValue::ParseStringOrAtom(const nsA
 }
 
 void
 nsAttrValue::SetIntValueAndType(int32_t aValue, ValueType aType,
                                 const nsAString* aStringValue)
 {
   if (aStringValue || aValue > NS_ATTRVALUE_INTEGERTYPE_MAXVALUE ||
       aValue < NS_ATTRVALUE_INTEGERTYPE_MINVALUE) {
-    if (EnsureEmptyMiscContainer()) {
-      MiscContainer* cont = GetMiscContainer();
-      switch (aType) {
-        case eInteger:
-        {
-          cont->mInteger = aValue;
-          break;
-        }
-        case ePercent:
-        {
-          cont->mPercent = aValue;
-          break;
-        }
-        case eEnum:
-        {
-          cont->mEnumValue = aValue;
-          break;
-        }
-        default:
-        {
-          NS_NOTREACHED("unknown integer type");
-          break;
-        }
+    MiscContainer* cont = EnsureEmptyMiscContainer();
+    switch (aType) {
+      case eInteger:
+      {
+        cont->mValue.mInteger = aValue;
+        break;
+      }
+      case ePercent:
+      {
+        cont->mValue.mPercent = aValue;
+        break;
       }
-      cont->mType = aType;
-      SetMiscAtomOrString(aStringValue);
+      case eEnum:
+      {
+        cont->mValue.mEnumValue = aValue;
+        break;
+      }
+      default:
+      {
+        NS_NOTREACHED("unknown integer type");
+        break;
+      }
     }
+    cont->mType = aType;
+    SetMiscAtomOrString(aStringValue);
   } else {
     NS_ASSERTION(!mBits, "Reset before calling SetIntValueAndType!");
     mBits = (aValue * NS_ATTRVALUE_INTEGERTYPE_MULTIPLIER) | aType;
   }
 }
 
 int16_t
 nsAttrValue::GetEnumTableIndex(const EnumTable* aTable)
@@ -1433,23 +1526,18 @@ nsAttrValue::ParsePositiveIntValue(const
 void
 nsAttrValue::SetColorValue(nscolor aColor, const nsAString& aString)
 {
   nsStringBuffer* buf = GetStringBuffer(aString);
   if (!buf) {
     return;
   }
 
-  if (!EnsureEmptyMiscContainer()) {
-    buf->Release();
-    return;
-  }
-
-  MiscContainer* cont = GetMiscContainer();
-  cont->mColor = aColor;
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  cont->mValue.mColor = aColor;
   cont->mType = eColor;
 
   // Save the literal string we were passed for round-tripping.
   cont->mStringBits = reinterpret_cast<PtrBits>(buf) | eStringBase;
 }
 
 bool
 nsAttrValue::ParseColor(const nsAString& aString)
@@ -1500,47 +1588,40 @@ bool nsAttrValue::ParseDoubleValue(const
 {
   ResetIfSet();
 
   nsresult ec;
   double val = PromiseFlatString(aString).ToDouble(&ec);
   if (NS_FAILED(ec)) {
     return false;
   }
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    cont->mDoubleValue = val;
-    cont->mType = eDoubleValue;
-    nsAutoString serializedFloat;
-    serializedFloat.AppendFloat(val);
-    SetMiscAtomOrString(serializedFloat.Equals(aString) ? nullptr : &aString);
-    return true;
-  }
 
-  return false;
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  cont->mDoubleValue = val;
+  cont->mType = eDoubleValue;
+  nsAutoString serializedFloat;
+  serializedFloat.AppendFloat(val);
+  SetMiscAtomOrString(serializedFloat.Equals(aString) ? nullptr : &aString);
+  return true;
 }
 
 bool
 nsAttrValue::ParseIntMarginValue(const nsAString& aString)
 {
   ResetIfSet();
 
   nsIntMargin margins;
   if (!nsContentUtils::ParseIntMarginValue(aString, margins))
     return false;
 
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    cont->mIntMargin = new nsIntMargin(margins);
-    cont->mType = eIntMarginValue;
-    SetMiscAtomOrString(&aString);
-    return true;
-  }
-
-  return false;
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  cont->mValue.mIntMargin = new nsIntMargin(margins);
+  cont->mType = eIntMarginValue;
+  SetMiscAtomOrString(&aString);
+  return true;
 }
 
 void
 nsAttrValue::LoadImage(nsIDocument* aDocument)
 {
   NS_ASSERTION(Type() == eURL, "wrong type");
 
 #ifdef DEBUG
@@ -1548,27 +1629,75 @@ nsAttrValue::LoadImage(nsIDocument* aDoc
     nsString val;
     ToString(val);
     NS_ASSERTION(!val.IsEmpty(),
                  "How did we end up with an empty string for eURL");
   }
 #endif
 
   MiscContainer* cont = GetMiscContainer();
-  mozilla::css::URLValue* url = cont->mURL;
+  mozilla::css::URLValue* url = cont->mValue.mURL;
   mozilla::css::ImageValue* image = 
     new css::ImageValue(url->GetURI(), url->mString, url->mReferrer,
                         url->mOriginPrincipal, aDocument);
 
   NS_ADDREF(image);
-  cont->mImage = image;
+  cont->mValue.mImage = image;
   NS_RELEASE(url);
   cont->mType = eImage;
 }
 
+bool
+nsAttrValue::ParseStyleAttribute(const nsAString& aString,
+                                 nsStyledElementNotElementCSSInlineStyle* aElement)
+{
+  nsIDocument* ownerDoc = aElement->OwnerDoc();
+  nsHTMLCSSStyleSheet* sheet = ownerDoc->GetInlineStyleSheet();
+  nsCOMPtr<nsIURI> baseURI = aElement->GetBaseURI();
+  nsIURI* docURI = ownerDoc->GetDocumentURI();
+
+  NS_ASSERTION(aElement->NodePrincipal() == ownerDoc->NodePrincipal(),
+               "This is unexpected");
+
+  // If the (immutable) document URI does not match the element's base URI
+  // (the common case is that they do match) do not cache the rule.  This is
+  // because the results of the CSS parser are dependent on these URIs, and we
+  // do not want to have to account for the URIs in the hash lookup.
+  bool cachingAllowed = sheet && baseURI == docURI;
+  if (cachingAllowed) {
+    MiscContainer* cont = sheet->LookupStyleAttr(aString);
+    if (cont) {
+      // Set our MiscContainer to the cached one.
+      NS_ADDREF(cont);
+      SetPtrValueAndType(cont, eOtherBase);
+      return true;
+    }
+  }
+
+  css::Loader* cssLoader = ownerDoc->CSSLoader();
+  nsCSSParser cssParser(cssLoader);
+
+  nsRefPtr<css::StyleRule> rule;
+  cssParser.ParseStyleAttribute(aString, docURI, baseURI,
+                                aElement->NodePrincipal(),
+                                getter_AddRefs(rule));
+  if (rule) {
+    rule->SetHTMLCSSStyleSheet(sheet);
+    SetTo(rule, &aString);
+    if (cachingAllowed) {
+      MiscContainer* cont = GetMiscContainer();
+      cont->Cache();
+    }
+
+    return true;
+  }
+
+  return false;
+}
+
 void
 nsAttrValue::SetMiscAtomOrString(const nsAString* aValue)
 {
   NS_ASSERTION(GetMiscContainer(), "Must have MiscContainer!");
   NS_ASSERTION(!GetMiscContainer()->mStringBits,
                "Trying to re-set atom or string!");
   if (aValue) {
     uint32_t len = aValue->Length();
@@ -1610,105 +1739,119 @@ nsAttrValue::ResetMiscAtomOrString()
     cont->mStringBits = 0;
   }
 }
 
 void
 nsAttrValue::SetSVGType(ValueType aType, const void* aValue,
                         const nsAString* aSerialized) {
   NS_ABORT_IF_FALSE(IsSVGType(aType), "Not an SVG type");
-  if (EnsureEmptyMiscContainer()) {
-    MiscContainer* cont = GetMiscContainer();
-    // All SVG types are just pointers to classes so just setting any of them
-    // will do. We'll lose type-safety but the signature of the calling
-    // function should ensure we don't get anything unexpected, and once we
-    // stick aValue in a union we lose type information anyway.
-    cont->mSVGAngle = static_cast<const nsSVGAngle*>(aValue);
-    cont->mType = aType;
-    SetMiscAtomOrString(aSerialized);
-  }
+
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  // All SVG types are just pointers to classes so just setting any of them
+  // will do. We'll lose type-safety but the signature of the calling
+  // function should ensure we don't get anything unexpected, and once we
+  // stick aValue in a union we lose type information anyway.
+  cont->mValue.mSVGAngle = static_cast<const nsSVGAngle*>(aValue);
+  cont->mType = aType;
+  SetMiscAtomOrString(aSerialized);
 }
 
-bool
-nsAttrValue::EnsureEmptyMiscContainer()
+MiscContainer*
+nsAttrValue::ClearMiscContainer()
 {
-  MiscContainer* cont;
+  MiscContainer* cont = nullptr;
   if (BaseType() == eOtherBase) {
-    ResetMiscAtomOrString();
     cont = GetMiscContainer();
-    switch (cont->mType) {
-      case eCSSStyleRule:
-      {
-        NS_RELEASE(cont->mCSSStyleRule);
-        break;
-      }
-      case eURL:
-      {
-        NS_RELEASE(cont->mURL);
-        break;
-      }
-      case eImage:
-      {
-        NS_RELEASE(cont->mImage);
-        break;
-      }
-      case eAtomArray:
-      {
-        delete cont->mAtomArray;
-        break;
-      }
-      case eIntMarginValue:
-      {
-        delete cont->mIntMargin;
-        break;
-      }
-      default:
-      {
-        break;
+    if (cont->IsRefCounted() && cont->mValue.mRefCount > 1) {
+      // This MiscContainer is shared, we need a new one.
+      NS_RELEASE(cont);
+
+      cont = new MiscContainer;
+      SetPtrValueAndType(cont, eOtherBase);
+    }
+    else {
+      switch (cont->mType) {
+        case eCSSStyleRule:
+        {
+          MOZ_ASSERT(cont->mValue.mRefCount == 1);
+          cont->Release();
+          cont->Evict();
+          NS_RELEASE(cont->mValue.mCSSStyleRule);
+          break;
+        }
+        case eURL:
+        {
+          NS_RELEASE(cont->mValue.mURL);
+          break;
+        }
+        case eImage:
+        {
+          NS_RELEASE(cont->mValue.mImage);
+          break;
+        }
+        case eAtomArray:
+        {
+          delete cont->mValue.mAtomArray;
+          break;
+        }
+        case eIntMarginValue:
+        {
+          delete cont->mValue.mIntMargin;
+          break;
+        }
+        default:
+        {
+          break;
+        }
       }
     }
+    ResetMiscAtomOrString();
   }
   else {
     ResetIfSet();
+  }
 
+  return cont;
+}
+
+MiscContainer*
+nsAttrValue::EnsureEmptyMiscContainer()
+{
+  MiscContainer* cont = ClearMiscContainer();
+  if (cont) {
+    MOZ_ASSERT(BaseType() == eOtherBase);
+    ResetMiscAtomOrString();
+    cont = GetMiscContainer();
+  }
+  else {
     cont = new MiscContainer;
-    NS_ENSURE_TRUE(cont, false);
-
     SetPtrValueAndType(cont, eOtherBase);
   }
 
-  cont->mType = eColor;
-  cont->mStringBits = 0;
-  cont->mColor = 0;
-
-  return true;
+  return cont;
 }
 
 bool
 nsAttrValue::EnsureEmptyAtomArray()
 {
   if (Type() == eAtomArray) {
     ResetMiscAtomOrString();
     GetAtomArrayValue()->Clear();
     return true;
   }
 
-  if (!EnsureEmptyMiscContainer()) {
-    // should already be reset
-    return false;
-  }
-
   AtomArray* array = new AtomArray;
   if (!array) {
     Reset();
     return false;
   }
 
-  MiscContainer* cont = GetMiscContainer();
-  cont->mAtomArray = array;
+  MiscContainer* cont = EnsureEmptyMiscContainer();
+  cont->mValue.mAtomArray = array;
   cont->mType = eAtomArray;
 
   return true;
 }
 
 nsStringBuffer*
 nsAttrValue::GetStringBuffer(const nsAString& aValue) const
 {
@@ -1829,23 +1972,23 @@ nsAttrValue::SizeOfExcludingThis(nsMallo
       // We only count the size of the object pointed by otherPtr if it's a
       // string. When it's an atom, it's counted separatly.
       if (otherPtr &&
           static_cast<ValueBaseType>(container->mStringBits & NS_ATTRVALUE_BASETYPE_MASK) == eStringBase) {
         nsStringBuffer* str = static_cast<nsStringBuffer*>(otherPtr);
         n += str ? str->SizeOfIncludingThisIfUnshared(aMallocSizeOf) : 0;
       }
 
-      if (Type() == eCSSStyleRule && container->mCSSStyleRule) {
+      if (Type() == eCSSStyleRule && container->mValue.mCSSStyleRule) {
         // TODO: mCSSStyleRule might be owned by another object which would
         //       make us count them twice, bug 677493.
         //n += container->mCSSStyleRule->SizeOfIncludingThis(aMallocSizeOf);
-      } else if (Type() == eAtomArray && container->mAtomArray) {
+      } else if (Type() == eAtomArray && container->mValue.mAtomArray) {
         // Don't measure each nsIAtom, they are measured separatly.
-        n += container->mAtomArray->SizeOfIncludingThis(aMallocSizeOf);
+        n += container->mValue.mAtomArray->SizeOfIncludingThis(aMallocSizeOf);
       }
       break;
     }
     case eAtomBase:    // Atoms are counted separately.
     case eIntegerBase: // The value is in mBits, nothing to do.
       break;
   }
 
--- a/content/base/src/nsAttrValue.h
+++ b/content/base/src/nsAttrValue.h
@@ -21,16 +21,18 @@
 #include "SVGAttrValueWrapper.h"
 
 typedef uintptr_t PtrBits;
 class nsAString;
 class nsIAtom;
 class nsIDocument;
 template<class E, class A> class nsTArray;
 struct nsTArrayDefaultAllocator;
+class nsStyledElementNotElementCSSInlineStyle;
+struct MiscContainer;
 
 namespace mozilla {
 namespace css {
 class StyleRule;
 struct URLValue;
 struct ImageValue;
 }
 }
@@ -61,32 +63,20 @@ public:
   nsCheapString(nsStringBuffer* aBuf)
   {
     if (aBuf)
       aBuf->ToString(aBuf->StorageSize()/2 - 1, *this);
   }
 };
 
 class nsAttrValue {
+  friend struct MiscContainer;
 public:
   typedef nsTArray< nsCOMPtr<nsIAtom> > AtomArray;
 
-  nsAttrValue();
-  nsAttrValue(const nsAttrValue& aOther);
-  explicit nsAttrValue(const nsAString& aValue);
-  explicit nsAttrValue(nsIAtom* aValue);
-  nsAttrValue(mozilla::css::StyleRule* aValue, const nsAString* aSerialized);
-  explicit nsAttrValue(const nsIntMargin& aValue);
-  ~nsAttrValue();
-
-  inline const nsAttrValue& operator=(const nsAttrValue& aOther);
-
-  static nsresult Init();
-  static void Shutdown();
-
   // This has to be the same as in ValueBaseType
   enum ValueType {
     eString =       0x00, //   00
                           //   01  this value indicates an 'misc' struct
     eAtom =         0x02, //   10
     eInteger =      0x03, // 0011
     eColor =        0x07, // 0111
     eEnum =         0x0B, // 1011  This should eventually die
@@ -110,16 +100,29 @@ public:
     ,eSVGPointList  =  0x23
     ,eSVGPreserveAspectRatio = 0x24
     ,eSVGStringList =  0x25
     ,eSVGTransformList = 0x26
     ,eSVGViewBox =     0x27
     ,eSVGTypesEnd =    0x34
   };
 
+  nsAttrValue();
+  nsAttrValue(const nsAttrValue& aOther);
+  explicit nsAttrValue(const nsAString& aValue);
+  explicit nsAttrValue(nsIAtom* aValue);
+  nsAttrValue(mozilla::css::StyleRule* aValue, const nsAString* aSerialized);
+  explicit nsAttrValue(const nsIntMargin& aValue);
+  ~nsAttrValue();
+
+  inline const nsAttrValue& operator=(const nsAttrValue& aOther);
+
+  static nsresult Init();
+  static void Shutdown();
+
   ValueType Type() const;
 
   void Reset();
 
   void SetTo(const nsAttrValue& aOther);
   void SetTo(const nsAString& aValue);
   void SetTo(nsIAtom* aValue);
   void SetTo(int16_t aInt);
@@ -352,61 +355,36 @@ public:
 
   /**
    * Convert a URL nsAttrValue to an Image nsAttrValue.
    *
    * @param aDocument the document this nsAttrValue belongs to.
    */
   void LoadImage(nsIDocument* aDocument);
 
+  /**
+   * Parse a string into a CSS style rule.
+   *
+   * @param aString the style attribute value to be parsed.
+   * @param aElement the element the attribute is set on.
+   */
+  bool ParseStyleAttribute(const nsAString& aString,
+                           nsStyledElementNotElementCSSInlineStyle* aElement);
+
   size_t SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
 
 private:
   // These have to be the same as in ValueType
   enum ValueBaseType {
     eStringBase =    eString,    // 00
     eOtherBase =     0x01,       // 01
     eAtomBase =      eAtom,      // 10
     eIntegerBase =   0x03        // 11
   };
 
-  struct MiscContainer
-  {
-    ValueType mType;
-    // mStringBits points to either nsIAtom* or nsStringBuffer* and is used when
-    // mType isn't mCSSStyleRule.
-    // Note eStringBase and eAtomBase is used also to handle the type of
-    // mStringBits.
-    PtrBits mStringBits;
-    union {
-      int32_t mInteger;
-      nscolor mColor;
-      uint32_t mEnumValue;
-      int32_t mPercent;
-      mozilla::css::StyleRule* mCSSStyleRule;
-      mozilla::css::URLValue* mURL;
-      mozilla::css::ImageValue* mImage;
-      AtomArray* mAtomArray;
-      double mDoubleValue;
-      nsIntMargin* mIntMargin;
-      const nsSVGAngle* mSVGAngle;
-      const nsSVGIntegerPair* mSVGIntegerPair;
-      const nsSVGLength2* mSVGLength;
-      const mozilla::SVGLengthList* mSVGLengthList;
-      const mozilla::SVGNumberList* mSVGNumberList;
-      const nsSVGNumberPair* mSVGNumberPair;
-      const mozilla::SVGPathData* mSVGPathData;
-      const mozilla::SVGPointList* mSVGPointList;
-      const mozilla::SVGAnimatedPreserveAspectRatio* mSVGPreserveAspectRatio;
-      const mozilla::SVGStringList* mSVGStringList;
-      const mozilla::SVGTransformList* mSVGTransformList;
-      const nsSVGViewBox* mSVGViewBox;
-    };
-  };
-
   inline ValueBaseType BaseType() const;
   inline bool IsSVGType(ValueType aType) const;
 
   /**
    * Get the index of an EnumTable in the sEnumTableArray.
    * If the EnumTable is not in the sEnumTableArray, it is added.
    *
    * @param aTable   the EnumTable to get the index of.
@@ -423,17 +401,22 @@ private:
   void SetSVGType(ValueType aType, const void* aValue,
                   const nsAString* aSerialized);
   inline void ResetIfSet();
 
   inline void* GetPtr() const;
   inline MiscContainer* GetMiscContainer() const;
   inline int32_t GetIntInternal() const;
 
-  bool EnsureEmptyMiscContainer();
+  // Clears the current MiscContainer.  This will return null if there is no
+  // existing container.
+  MiscContainer* ClearMiscContainer();
+  // Like ClearMiscContainer, except allocates a new container if one does not
+  // exist already.
+  MiscContainer* EnsureEmptyMiscContainer();
   bool EnsureEmptyAtomArray();
   nsStringBuffer* GetStringBuffer(const nsAString& aValue) const;
   // aStrict is set true if stringifying the return value equals with
   // aValue.
   int32_t StringToInteger(const nsAString& aValue,
                           bool* aStrict,
                           nsresult* aErrorCode,
                           bool aCanBePercent = false,
@@ -443,166 +426,43 @@ private:
   int32_t EnumTableEntryToValue(const EnumTable* aEnumTable,
                                 const EnumTable* aTableEntry);  
 
   static nsTArray<const EnumTable*, nsTArrayDefaultAllocator>* sEnumTableArray;
 
   PtrBits mBits;
 };
 
-/**
- * Implementation of inline methods
- */
-
 inline const nsAttrValue&
 nsAttrValue::operator=(const nsAttrValue& aOther)
 {
   SetTo(aOther);
   return *this;
 }
 
 inline nsIAtom*
 nsAttrValue::GetAtomValue() const
 {
   NS_PRECONDITION(Type() == eAtom, "wrong type");
   return reinterpret_cast<nsIAtom*>(GetPtr());
 }
 
-inline int32_t
-nsAttrValue::GetIntegerValue() const
-{
-  NS_PRECONDITION(Type() == eInteger, "wrong type");
-  return (BaseType() == eIntegerBase)
-         ? GetIntInternal()
-         : GetMiscContainer()->mInteger;
-}
-
-inline int16_t
-nsAttrValue::GetEnumValue() const
-{
-  NS_PRECONDITION(Type() == eEnum, "wrong type");
-  // We don't need to worry about sign extension here since we're
-  // returning an int16_t which will cut away the top bits.
-  return static_cast<int16_t>((
-    (BaseType() == eIntegerBase)
-    ? static_cast<uint32_t>(GetIntInternal())
-    : GetMiscContainer()->mEnumValue)
-      >> NS_ATTRVALUE_ENUMTABLEINDEX_BITS);
-}
-
-inline float
-nsAttrValue::GetPercentValue() const
-{
-  NS_PRECONDITION(Type() == ePercent, "wrong type");
-  return ((BaseType() == eIntegerBase)
-          ? GetIntInternal()
-          : GetMiscContainer()->mPercent)
-            / 100.0f;
-}
-
-inline nsAttrValue::AtomArray*
-nsAttrValue::GetAtomArrayValue() const
-{
-  NS_PRECONDITION(Type() == eAtomArray, "wrong type");
-  return GetMiscContainer()->mAtomArray;
-}
-
-inline mozilla::css::StyleRule*
-nsAttrValue::GetCSSStyleRuleValue() const
-{
-  NS_PRECONDITION(Type() == eCSSStyleRule, "wrong type");
-  return GetMiscContainer()->mCSSStyleRule;
-}
-
-inline mozilla::css::URLValue*
-nsAttrValue::GetURLValue() const
-{
-  NS_PRECONDITION(Type() == eURL, "wrong type");
-  return GetMiscContainer()->mURL;
-}
-
-inline mozilla::css::ImageValue*
-nsAttrValue::GetImageValue() const
-{
-  NS_PRECONDITION(Type() == eImage, "wrong type");
-  return GetMiscContainer()->mImage;
-}
-
-inline double
-nsAttrValue::GetDoubleValue() const
-{
-  NS_PRECONDITION(Type() == eDoubleValue, "wrong type");
-  return GetMiscContainer()->mDoubleValue;
-}
-
-inline bool
-nsAttrValue::GetIntMarginValue(nsIntMargin& aMargin) const
-{
-  NS_PRECONDITION(Type() == eIntMarginValue, "wrong type");
-  nsIntMargin* m = GetMiscContainer()->mIntMargin;
-  if (!m)
-    return false;
-  aMargin = *m;
-  return true;
-}
-
 inline nsAttrValue::ValueBaseType
 nsAttrValue::BaseType() const
 {
   return static_cast<ValueBaseType>(mBits & NS_ATTRVALUE_BASETYPE_MASK);
 }
 
-inline bool
-nsAttrValue::IsSVGType(ValueType aType) const
-{
-  return aType >= eSVGTypesBegin && aType <= eSVGTypesEnd;
-}
-
-inline void
-nsAttrValue::SetPtrValueAndType(void* aValue, ValueBaseType aType)
-{
-  NS_ASSERTION(!(NS_PTR_TO_INT32(aValue) & ~NS_ATTRVALUE_POINTERVALUE_MASK),
-               "pointer not properly aligned, this will crash");
-  mBits = reinterpret_cast<PtrBits>(aValue) | aType;
-}
-
-inline void
-nsAttrValue::ResetIfSet()
-{
-  if (mBits) {
-    Reset();
-  }
-}
-
 inline void*
 nsAttrValue::GetPtr() const
 {
   NS_ASSERTION(BaseType() != eIntegerBase,
                "getting pointer from non-pointer");
   return reinterpret_cast<void*>(mBits & NS_ATTRVALUE_POINTERVALUE_MASK);
 }
 
-inline nsAttrValue::MiscContainer*
-nsAttrValue::GetMiscContainer() const
-{
-  NS_ASSERTION(BaseType() == eOtherBase, "wrong type");
-  return static_cast<MiscContainer*>(GetPtr());
-}
-
-inline int32_t
-nsAttrValue::GetIntInternal() const
-{
-  NS_ASSERTION(BaseType() == eIntegerBase,
-               "getting integer from non-integer");
-  // Make sure we get a signed value.
-  // Lets hope the optimizer optimizes this into a shift. Unfortunatly signed
-  // bitshift right is implementaion dependant.
-  return static_cast<int32_t>(mBits & ~NS_ATTRVALUE_INTEGERTYPE_MASK) /
-         NS_ATTRVALUE_INTEGERTYPE_MULTIPLIER;
-}
-
 inline bool
 nsAttrValue::IsEmptyString() const
 {
   return !mBits;
 }
 
 #endif
new file mode 100644
--- /dev/null
+++ b/content/base/src/nsAttrValueInlines.h
@@ -0,0 +1,216 @@
+/* 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/. */
+
+#ifndef nsAttrValueInlines_h__
+#define nsAttrValueInlines_h__
+
+struct MiscContainer
+{
+  typedef nsAttrValue::ValueType ValueType;
+
+  ValueType mType;
+  // mStringBits points to either nsIAtom* or nsStringBuffer* and is used when
+  // mType isn't mCSSStyleRule.
+  // Note eStringBase and eAtomBase is used also to handle the type of
+  // mStringBits.
+  PtrBits mStringBits;
+  union {
+    struct {
+      union {
+        int32_t mInteger;
+        nscolor mColor;
+        uint32_t mEnumValue;
+        int32_t mPercent;
+        mozilla::css::StyleRule* mCSSStyleRule;
+        mozilla::css::URLValue* mURL;
+        mozilla::css::ImageValue* mImage;
+        nsAttrValue::AtomArray* mAtomArray;
+        nsIntMargin* mIntMargin;
+        const nsSVGAngle* mSVGAngle;
+        const nsSVGIntegerPair* mSVGIntegerPair;
+        const nsSVGLength2* mSVGLength;
+        const mozilla::SVGLengthList* mSVGLengthList;
+        const mozilla::SVGNumberList* mSVGNumberList;
+        const nsSVGNumberPair* mSVGNumberPair;
+        const mozilla::SVGPathData* mSVGPathData;
+        const mozilla::SVGPointList* mSVGPointList;
+        const mozilla::SVGAnimatedPreserveAspectRatio* mSVGPreserveAspectRatio;
+        const mozilla::SVGStringList* mSVGStringList;
+        const mozilla::SVGTransformList* mSVGTransformList;
+        const nsSVGViewBox* mSVGViewBox;
+      };
+      uint32_t mRefCount : 31;
+      uint32_t mCached : 1;
+    } mValue;
+    double mDoubleValue;
+  };
+
+  MiscContainer()
+    : mType(nsAttrValue::eColor),
+      mStringBits(0)
+  {
+    MOZ_COUNT_CTOR(MiscContainer);
+    mValue.mColor = 0;
+    mValue.mRefCount = 0;
+    mValue.mCached = 0;
+  }
+
+  ~MiscContainer()
+  {
+    if (IsRefCounted()) {
+      MOZ_ASSERT(mValue.mRefCount == 0);
+      MOZ_ASSERT(!mValue.mCached);
+    }
+    MOZ_COUNT_DTOR(MiscContainer);
+  }
+
+  bool GetString(nsDependentString& aString) const;
+
+  inline bool IsRefCounted() const
+  {
+    // Nothing stops us from refcounting (and sharing) other types of
+    // MiscContainer (except eDoubleValue types) but there's no compelling
+    // reason to 
+    return mType == nsAttrValue::eCSSStyleRule;
+  }
+
+  inline int32_t AddRef() {
+    MOZ_ASSERT(IsRefCounted());
+    return ++mValue.mRefCount;
+  }
+
+  inline int32_t Release() {
+    MOZ_ASSERT(IsRefCounted());
+    return --mValue.mRefCount;
+  }
+
+  void Cache();
+  void Evict();
+};
+
+
+/**
+ * Implementation of inline methods
+ */
+
+inline int32_t
+nsAttrValue::GetIntegerValue() const
+{
+  NS_PRECONDITION(Type() == eInteger, "wrong type");
+  return (BaseType() == eIntegerBase)
+         ? GetIntInternal()
+         : GetMiscContainer()->mValue.mInteger;
+}
+
+inline int16_t
+nsAttrValue::GetEnumValue() const
+{
+  NS_PRECONDITION(Type() == eEnum, "wrong type");
+  // We don't need to worry about sign extension here since we're
+  // returning an int16_t which will cut away the top bits.
+  return static_cast<int16_t>((
+    (BaseType() == eIntegerBase)
+    ? static_cast<uint32_t>(GetIntInternal())
+    : GetMiscContainer()->mValue.mEnumValue)
+      >> NS_ATTRVALUE_ENUMTABLEINDEX_BITS);
+}
+
+inline float
+nsAttrValue::GetPercentValue() const
+{
+  NS_PRECONDITION(Type() == ePercent, "wrong type");
+  return ((BaseType() == eIntegerBase)
+          ? GetIntInternal()
+          : GetMiscContainer()->mValue.mPercent)
+            / 100.0f;
+}
+
+inline nsAttrValue::AtomArray*
+nsAttrValue::GetAtomArrayValue() const
+{
+  NS_PRECONDITION(Type() == eAtomArray, "wrong type");
+  return GetMiscContainer()->mValue.mAtomArray;
+}
+
+inline mozilla::css::StyleRule*
+nsAttrValue::GetCSSStyleRuleValue() const
+{
+  NS_PRECONDITION(Type() == eCSSStyleRule, "wrong type");
+  return GetMiscContainer()->mValue.mCSSStyleRule;
+}
+
+inline mozilla::css::URLValue*
+nsAttrValue::GetURLValue() const
+{
+  NS_PRECONDITION(Type() == eURL, "wrong type");
+  return GetMiscContainer()->mValue.mURL;
+}
+
+inline mozilla::css::ImageValue*
+nsAttrValue::GetImageValue() const
+{
+  NS_PRECONDITION(Type() == eImage, "wrong type");
+  return GetMiscContainer()->mValue.mImage;
+}
+
+inline double
+nsAttrValue::GetDoubleValue() const
+{
+  NS_PRECONDITION(Type() == eDoubleValue, "wrong type");
+  return GetMiscContainer()->mDoubleValue;
+}
+
+inline bool
+nsAttrValue::GetIntMarginValue(nsIntMargin& aMargin) const
+{
+  NS_PRECONDITION(Type() == eIntMarginValue, "wrong type");
+  nsIntMargin* m = GetMiscContainer()->mValue.mIntMargin;
+  if (!m)
+    return false;
+  aMargin = *m;
+  return true;
+}
+
+inline bool
+nsAttrValue::IsSVGType(ValueType aType) const
+{
+  return aType >= eSVGTypesBegin && aType <= eSVGTypesEnd;
+}
+
+inline void
+nsAttrValue::SetPtrValueAndType(void* aValue, ValueBaseType aType)
+{
+  NS_ASSERTION(!(NS_PTR_TO_INT32(aValue) & ~NS_ATTRVALUE_POINTERVALUE_MASK),
+               "pointer not properly aligned, this will crash");
+  mBits = reinterpret_cast<PtrBits>(aValue) | aType;
+}
+
+inline void
+nsAttrValue::ResetIfSet()
+{
+  if (mBits) {
+    Reset();
+  }
+}
+
+inline MiscContainer*
+nsAttrValue::GetMiscContainer() const
+{
+  NS_ASSERTION(BaseType() == eOtherBase, "wrong type");
+  return static_cast<MiscContainer*>(GetPtr());
+}
+
+inline int32_t
+nsAttrValue::GetIntInternal() const
+{
+  NS_ASSERTION(BaseType() == eIntegerBase,
+               "getting integer from non-integer");
+  // Make sure we get a signed value.
+  // Lets hope the optimizer optimizes this into a shift. Unfortunatly signed
+  // bitshift right is implementaion dependant.
+  return static_cast<int32_t>(mBits & ~NS_ATTRVALUE_INTEGERTYPE_MASK) /
+         NS_ATTRVALUE_INTEGERTYPE_MULTIPLIER;
+}
+
+#endif
--- a/content/base/src/nsContentList.cpp
+++ b/content/base/src/nsContentList.cpp
@@ -14,19 +14,19 @@
 #include "nsIContent.h"
 #include "nsIDOMNode.h"
 #include "nsIDocument.h"
 #include "nsGenericElement.h"
 #include "nsWrapperCacheInlines.h"
 #include "nsContentUtils.h"
 #include "nsCCUncollectableMarker.h"
 #include "nsGkAtoms.h"
-
+#include "mozilla/dom/HTMLCollectionBinding.h"
+#include "mozilla/dom/NodeListBinding.h"
 #include "dombindings.h"
-#include "mozilla/dom/BindingUtils.h"
 
 // Form related includes
 #include "nsIDOMHTMLFormElement.h"
 
 #include "pldhash.h"
 
 #ifdef DEBUG_CONTENT_LIST
 #include "nsIContentIterator.h"
@@ -158,17 +158,23 @@ NS_INTERFACE_MAP_END_INHERITING(nsBaseCo
 
 NS_IMPL_ADDREF_INHERITED(nsSimpleContentList, nsBaseContentList)
 NS_IMPL_RELEASE_INHERITED(nsSimpleContentList, nsBaseContentList)
 
 JSObject*
 nsSimpleContentList::WrapObject(JSContext *cx, JSObject *scope,
                                 bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::NodeList::create(cx, scope, this, triedToWrap);
+  JSObject* obj = NodeListBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::NodeList::create(cx, scope, this);
 }
 
 // nsFormContentList
 
 nsFormContentList::nsFormContentList(nsIContent *aForm,
                                      nsBaseContentList& aContentList)
   : nsSimpleContentList(aForm)
 {
@@ -292,25 +298,37 @@ const nsCacheableFuncStringContentList::
 const nsCacheableFuncStringContentList::ContentListType
   nsCacheableFuncStringHTMLCollection::sType = nsCacheableFuncStringContentList::eHTMLCollection;
 #endif
 
 JSObject*
 nsCacheableFuncStringNodeList::WrapObject(JSContext *cx, JSObject *scope,
                                           bool *triedToWrap)
 {
-  return oldproxybindings::NodeList::create(cx, scope, this, triedToWrap);
+  JSObject* obj = NodeListBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::NodeList::create(cx, scope, this);
 }
 
 
 JSObject*
 nsCacheableFuncStringHTMLCollection::WrapObject(JSContext *cx, JSObject *scope,
                                                 bool *triedToWrap)
 {
-  return oldproxybindings::HTMLCollection::create(cx, scope, this, triedToWrap);
+  JSObject* obj = HTMLCollectionBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::HTMLCollection::create(cx, scope, this);
 }
 
 // Hashtable for storing nsCacheableFuncStringContentList
 static PLDHashTable gFuncStringContentListHashTable;
 
 struct FuncStringContentListHashEntry : public PLDHashEntryHdr
 {
   nsCacheableFuncStringContentList* mContentList;
@@ -529,18 +547,23 @@ nsContentList::~nsContentList()
     // Clean up mData
     (*mDestroyFunc)(mData);
   }
 }
 
 JSObject*
 nsContentList::WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::HTMLCollection::create(cx, scope, this,
-                                                       triedToWrap);
+  JSObject* obj = HTMLCollectionBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::HTMLCollection::create(cx, scope, this);
 }
 
 DOMCI_DATA(ContentList, nsContentList)
 
 // QueryInterface implementation for nsContentList
 NS_INTERFACE_TABLE_HEAD(nsContentList)
   NS_NODELIST_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsContentList)
     NS_CONTENT_LIST_INTERFACES(nsContentList)
--- a/content/base/src/nsContentUtils.cpp
+++ b/content/base/src/nsContentUtils.cpp
@@ -94,16 +94,17 @@ static NS_DEFINE_CID(kXTFServiceCID, NS_
 #include "nsXULPopupManager.h"
 #include "nsIPermissionManager.h"
 #include "nsIScriptObjectPrincipal.h"
 #include "nsNullPrincipal.h"
 #include "nsIRunnable.h"
 #include "nsDOMJSUtils.h"
 #include "nsGenericHTMLElement.h"
 #include "nsAttrValue.h"
+#include "nsAttrValueInlines.h"
 #include "nsReferencedElement.h"
 #include "nsIDragService.h"
 #include "nsIChannelEventSink.h"
 #include "nsIAsyncVerifyRedirectCallback.h"
 #include "nsIOfflineCacheUpdate.h"
 #include "nsCPrefetchService.h"
 #include "nsIChromeRegistry.h"
 #include "nsEventDispatcher.h"
--- a/content/base/src/nsDOMAttributeMap.cpp
+++ b/content/base/src/nsDOMAttributeMap.cpp
@@ -496,8 +496,28 @@ nsDOMAttributeMap::Count() const
 }
 
 uint32_t
 nsDOMAttributeMap::Enumerate(AttrCache::EnumReadFunction aFunc,
                              void *aUserArg) const
 {
   return mAttributeCache.EnumerateRead(aFunc, aUserArg);
 }
+
+size_t
+AttrCacheSizeEnumerator(const nsAttrKey& aKey,
+                        const nsRefPtr<nsDOMAttribute>& aValue,
+                        nsMallocSizeOfFun aMallocSizeOf,
+                        void* aUserArg)
+{
+  return aMallocSizeOf(aValue.get());
+}
+
+size_t
+nsDOMAttributeMap::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+{
+  size_t n = aMallocSizeOf(this);
+  n += mAttributeCache.SizeOfExcludingThis(AttrCacheSizeEnumerator,
+                                           aMallocSizeOf);
+
+  // NB: mContent is non-owning and thus not counted.
+  return n;
+}
--- a/content/base/src/nsDOMAttributeMap.h
+++ b/content/base/src/nsDOMAttributeMap.h
@@ -154,16 +154,18 @@ public:
     }
 #endif
 
     return static_cast<nsDOMAttributeMap*>(aSupports);
   }
 
   NS_DECL_CYCLE_COLLECTION_CLASS(nsDOMAttributeMap)
 
+  size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+
 private:
   Element *mContent; // Weak reference
 
   /**
    * Cache of nsDOMAttributes.
    */
   AttrCache mAttributeCache;
 
--- a/content/base/src/nsDOMFile.cpp
+++ b/content/base/src/nsDOMFile.cpp
@@ -30,16 +30,17 @@
 #include "nsStringStream.h"
 #include "nsJSUtils.h"
 #include "mozilla/CheckedInt.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Attributes.h"
 
 #include "plbase64.h"
 #include "prmem.h"
+#include "mozilla/dom/FileListBinding.h"
 #include "dombindings.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 // XXXkhuey the input stream that we pass out of a DOMFile
 // can outlive the actual DOMFile object.  Thus, we must
 // ensure that the buffer underlying the stream we get
@@ -675,17 +676,23 @@ NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMFileList)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMFileList)
 
 JSObject*
 nsDOMFileList::WrapObject(JSContext *cx, JSObject *scope,
                           bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::FileList::create(cx, scope, this, triedToWrap);
+  JSObject* obj = FileListBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::FileList::create(cx, scope, this);
 }
 
 nsIDOMFile*
 nsDOMFileList::GetItemAt(uint32_t aIndex)
 {
   return Item(aIndex);
 }
 
--- a/content/base/src/nsDOMSettableTokenList.cpp
+++ b/content/base/src/nsDOMSettableTokenList.cpp
@@ -2,16 +2,17 @@
  * 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/. */
 
 /*
  * Implementation of nsIDOMDOMSettableTokenList specified by HTML5.
  */
 
 #include "nsDOMSettableTokenList.h"
+#include "mozilla/dom/DOMSettableTokenListBinding.h"
 #include "dombindings.h"
 
 
 nsDOMSettableTokenList::nsDOMSettableTokenList(nsGenericElement *aElement, nsIAtom* aAttrAtom)
   : nsDOMTokenList(aElement, aAttrAtom)
 {
 }
 
@@ -46,11 +47,19 @@ nsDOMSettableTokenList::SetValue(const n
 
   return mElement->SetAttr(kNameSpaceID_None, mAttrAtom, aValue, true);
 }
 
 JSObject*
 nsDOMSettableTokenList::WrapObject(JSContext *cx, JSObject *scope,
                                    bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::DOMSettableTokenList::create(cx, scope, this,
-                                                             triedToWrap);
+  JSObject* obj = mozilla::dom::DOMSettableTokenListBinding::Wrap(cx, scope,
+                                                                  this,
+                                                                  triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return mozilla::dom::oldproxybindings::DOMSettableTokenList::create(cx, scope,
+                                                                      this);
 }
--- a/content/base/src/nsDOMTokenList.cpp
+++ b/content/base/src/nsDOMTokenList.cpp
@@ -7,16 +7,17 @@
  */
 
 #include "nsDOMTokenList.h"
 
 #include "nsAttrValue.h"
 #include "nsContentUtils.h"
 #include "nsError.h"
 #include "nsGenericElement.h"
+#include "mozilla/dom/DOMTokenListBinding.h"
 #include "dombindings.h"
 #include "mozilla/ErrorResult.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 nsDOMTokenList::nsDOMTokenList(nsGenericElement* aElement, nsIAtom* aAttrAtom)
   : mElement(aElement),
@@ -307,12 +308,17 @@ nsDOMTokenList::ToString(nsAString& aRes
 {
   Stringify(aResult);
   return NS_OK;
 }
 
 JSObject*
 nsDOMTokenList::WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::DOMTokenList::create(cx, scope, this,
-                                                     triedToWrap);
+  JSObject* obj = DOMTokenListBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::DOMTokenList::create(cx, scope, this);
 }
 
--- a/content/base/src/nsGenericElement.cpp
+++ b/content/base/src/nsGenericElement.cpp
@@ -49,16 +49,17 @@
 #include "nsDOMString.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsIDOMMutationEvent.h"
 #include "nsMutationEvent.h"
 #include "nsNodeUtils.h"
 #include "mozilla/dom/DirectionalityUtils.h"
 #include "nsDocument.h"
 #include "nsAttrValueOrString.h"
+#include "nsAttrValueInlines.h"
 #ifdef MOZ_XUL
 #include "nsXULElement.h"
 #endif /* MOZ_XUL */
 #include "nsFrameManager.h"
 #include "nsFrameSelection.h"
 #ifdef DEBUG
 #include "nsRange.h"
 #endif
@@ -96,17 +97,16 @@
 #include "nsIViewManager.h"
 #include "nsIScrollableFrame.h"
 #include "nsXBLInsertionPoint.h"
 #include "mozilla/css/StyleRule.h" /* For nsCSSSelectorList */
 #include "nsCSSRuleProcessor.h"
 #include "nsRuleProcessorData.h"
 #include "nsAsyncDOMEvent.h"
 #include "nsTextNode.h"
-#include "dombindings.h"
 
 #ifdef MOZ_XUL
 #include "nsIXULDocument.h"
 #endif /* MOZ_XUL */
 
 #include "nsCycleCollectionParticipant.h"
 #include "nsCCUncollectableMarker.h"
 
--- a/content/base/src/nsGkAtomList.h
+++ b/content/base/src/nsGkAtomList.h
@@ -722,16 +722,18 @@ GK_ATOM(onmouseup, "onmouseup")
 GK_ATOM(onMozAfterPaint, "onMozAfterPaint")
 GK_ATOM(onmozfullscreenchange, "onmozfullscreenchange")
 GK_ATOM(onmozfullscreenerror, "onmozfullscreenerror")
 GK_ATOM(onmozpointerlockchange, "onmozpointerlockchange")
 GK_ATOM(onmozpointerlockerror, "onmozpointerlockerror")
 GK_ATOM(onmoztimechange, "onmoztimechange")
 GK_ATOM(onMozMousePixelScroll, "onMozMousePixelScroll")
 GK_ATOM(onMozScrolledAreaChanged, "onMozScrolledAreaChanged")
+GK_ATOM(onmoznetworkupload, "onmoznetworkupload")
+GK_ATOM(onmoznetworkdownload, "onmoznetworkdownload")
 GK_ATOM(onnoupdate, "onnoupdate")
 GK_ATOM(onobsolete, "onobsolete")
 GK_ATOM(ononline, "ononline")
 GK_ATOM(onoffline, "onoffline")
 GK_ATOM(onopen, "onopen")
 GK_ATOM(onoverflow, "onoverflow")
 GK_ATOM(onoverflowchanged, "onoverflowchanged")
 GK_ATOM(onpagehide, "onpagehide")
--- a/content/base/src/nsStyledElement.cpp
+++ b/content/base/src/nsStyledElement.cpp
@@ -2,16 +2,17 @@
 /* vim:set tw=80 expandtab softtabstop=2 ts=2 sw=2: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsStyledElement.h"
 #include "nsGkAtoms.h"
 #include "nsAttrValue.h"
+#include "nsAttrValueInlines.h"
 #include "nsGenericElement.h"
 #include "nsMutationEvent.h"
 #include "nsDOMCSSDeclaration.h"
 #include "nsDOMCSSAttrDeclaration.h"
 #include "nsServiceManagerUtils.h"
 #include "nsIDocument.h"
 #include "mozilla/css/StyleRule.h"
 #include "nsCSSParser.h"
@@ -246,28 +247,15 @@ nsStyledElementNotElementCSSInlineStyle:
       nsAutoString styleType;
       doc->GetHeaderData(nsGkAtoms::headerContentStyleType, styleType);
       if (!styleType.IsEmpty()) {
         static const char textCssStr[] = "text/css";
         isCSS = (styleType.EqualsIgnoreCase(textCssStr, sizeof(textCssStr) - 1));
       }
     }
 
-    if (isCSS) {
-      css::Loader* cssLoader = doc->CSSLoader();
-      nsCSSParser cssParser(cssLoader);
-
-      nsCOMPtr<nsIURI> baseURI = GetBaseURI();
-
-      nsRefPtr<css::StyleRule> rule;
-      cssParser.ParseStyleAttribute(aValue, doc->GetDocumentURI(),
-                                    baseURI,
-                                    NodePrincipal(),
-                                    getter_AddRefs(rule));
-      if (rule) {
-        aResult.SetTo(rule, &aValue);
-        return;
-      }
+    if (isCSS && aResult.ParseStyleAttribute(aValue, this)) {
+      return;
     }
   }
 
   aResult.SetTo(aValue);
 }
--- a/content/base/test/unit/test_csputils.js
+++ b/content/base/test/unit/test_csputils.js
@@ -154,78 +154,78 @@ test(
     });
 
 ///////////////////// Test the Source object //////////////////////
 
 test(
     function test_CSPSource_fromString() {
     // can't do these tests because "self" is not defined.
       //"basic source should not be null.");
-      do_check_neq(null, CSPSource.fromString("a.com", "http://abc.com"));
+      do_check_neq(null, CSPSource.fromString("a.com", undefined, "http://abc.com"));
 
       //"ldh characters should all work for host.");
-      do_check_neq(null, CSPSource.fromString("a2-c.com", "https://a.com"));
+      do_check_neq(null, CSPSource.fromString("a2-c.com", undefined, "https://a.com"));
 
       //"wildcard should work in first token for host.");
-      do_check_neq(null, CSPSource.fromString("*.a.com", "http://abc.com"));
+      do_check_neq(null, CSPSource.fromString("*.a.com", undefined, "http://abc.com"));
 
       //print(" --- Ignore the following two errors if they print ---");
       //"wildcard should not work in non-first token for host.");
-      do_check_eq(null, CSPSource.fromString("x.*.a.com", "http://a.com"));
+      do_check_eq(null, CSPSource.fromString("x.*.a.com", undefined, "http://a.com"));
 
       //"funny characters (#) should not work for host.");
-      do_check_eq(null, CSPSource.fromString("a#2-c.com", "http://a.com"));
+      do_check_eq(null, CSPSource.fromString("a#2-c.com", undefined, "http://a.com"));
 
       //print(" --- Stop ignoring errors that print ---\n");
 
       //"failed to parse host with port.");
-      do_check_neq(null, CSPSource.create("a.com:23", "http://a.com"));
+      do_check_neq(null, CSPSource.create("a.com:23", undefined, "http://a.com"));
       //"failed to parse host with scheme.");
-      do_check_neq(null, CSPSource.create("https://a.com", "http://a.com"));
+      do_check_neq(null, CSPSource.create("https://a.com", undefined, "http://a.com"));
       //"failed to parse host with scheme and port.");
-      do_check_neq(null, CSPSource.create("https://a.com:200", "http://a.com"));
+      do_check_neq(null, CSPSource.create("https://a.com:200", undefined, "http://a.com"));
 
       //Check to make sure we don't match multiple instances with regex
       do_check_eq(null, CSPSource.create("http://foo.com:bar.com:23"));
       //Port parsing should work for all schemes
       do_check_neq(null, CSPSource.create("data:"));
       do_check_neq(null, CSPSource.create("javascript:"));
     });
 
 test(
     function test_CSPSource_fromString_withSelf() {
       var src;
-      src = CSPSource.create("a.com", "https://foobar.com:443");
+      src = CSPSource.create("a.com", undefined, "https://foobar.com:443");
       //"src should inherit port *
       do_check_true(src.permits("https://a.com:443"));
       //"src should inherit and require https scheme
       do_check_false(src.permits("http://a.com"));
       //"src should inherit scheme 'https'"
       do_check_true(src.permits("https://a.com"));
 
-      src = CSPSource.create("http://a.com", "https://foobar.com:443");
+      src = CSPSource.create("http://a.com", undefined, "https://foobar.com:443");
       //"src should inherit and require http scheme"
       do_check_false(src.permits("https://a.com"));
       //"src should inherit scheme 'http'"
       do_check_true(src.permits("http://a.com"));
       //"src should inherit port and scheme from parent"
       //"src should inherit default port for 'http'"
       do_check_true(src.permits("http://a.com:80"));
 
-      src = CSPSource.create("'self'", "https://foobar.com:443");
+      src = CSPSource.create("'self'", undefined, "https://foobar.com:443");
       //"src should inherit port *
       do_check_true(src.permits("https://foobar.com:443"));
       //"src should inherit and require https scheme
       do_check_false(src.permits("http://foobar.com"));
       //"src should inherit scheme 'https'"
       do_check_true(src.permits("https://foobar.com"));
       //"src should reject other hosts"
       do_check_false(src.permits("https://a.com"));
 
-      src = CSPSource.create("javascript:", "https://foobar.com:443");
+      src = CSPSource.create("javascript:", undefined, "https://foobar.com:443");
       //"hostless schemes should be parseable."
       var aUri = NetUtil.newURI("javascript:alert('foo');");
       do_check_true(src.permits(aUri));
       //"src should reject other hosts"
       do_check_false(src.permits("https://a.com"));
       //"nothing else should be allowed"
       do_check_false(src.permits("https://foobar.com"));
 
@@ -255,30 +255,31 @@ test(
       do_check_true(CSPSourceList.fromString("https://f-oo.bar:3f").isNone());
       //print(" --- Stop ignoring errors that print ---\n");
     });
 
 test(
     function test_CSPSourceList_fromString_twohost() {
       var str = "foo.bar:21 https://ras.bar";
       var parsed = "http://foo.bar:21 https://ras.bar:443";
-      var sd = CSPSourceList.fromString(str, URI("http://self.com:80"));
+      var sd = CSPSourceList.fromString(str, undefined, URI("http://self.com:80"));
       //"two-host list should parse"
       do_check_neq(null,sd);
       //"two-host list should parse to two hosts"
       do_check_eq(2, sd._sources.length);
       //"two-host list should contain original data"
       do_check_eq(parsed, sd.toString());
     });
 
 test(
     function test_CSPSourceList_permits() {
       var nullSourceList = CSPSourceList.fromString("'none'");
-      var simpleSourceList = CSPSourceList.fromString("a.com", URI("http://self.com"));
+      var simpleSourceList = CSPSourceList.fromString("a.com", undefined, URI("http://self.com"));
       var doubleSourceList = CSPSourceList.fromString("https://foo.com http://bar.com:88",
+                                                      undefined,
                                                       URI("http://self.com:88"));
       var allSourceList = CSPSourceList.fromString("*");
       var allAndMoreSourceList = CSPSourceList.fromString("* https://bar.com 'none'");
 
       //'none' should permit none."
       do_check_false( nullSourceList.permits("http://a.com"));
       //a.com should permit a.com"
       do_check_true( simpleSourceList.permits("http://a.com"));
@@ -675,33 +676,33 @@ test(
        *       "allow 'self' a.com"
        *   Explicit policy:
        *       "allow https://foobar.com:4443 https://a.com:443"
        *
        * This test examines scheme and nonstandard port inheritance.
        */
 
       var src;
-      src = CSPSource.create("a.com", "https://foobar.com:4443");
+      src = CSPSource.create("a.com", undefined, "https://foobar.com:4443");
       //"src should inherit and require https scheme
       do_check_false(src.permits("http://a.com"));
       //"src should inherit scheme 'https'"
       do_check_true(src.permits("https://a.com"));
       //"src should get default port
       do_check_true(src.permits("https://a.com:443"));
 
-      src = CSPSource.create("http://a.com", "https://foobar.com:4443");
+      src = CSPSource.create("http://a.com", undefined, "https://foobar.com:4443");
       //"src should require http scheme"
       do_check_false(src.permits("https://a.com"));
       //"src should keep scheme 'http'"
       do_check_true(src.permits("http://a.com"));
       //"src should inherit default port for 'http'"
       do_check_true(src.permits("http://a.com:80"));
 
-      src = CSPSource.create("'self'", "https://foobar.com:4443");
+      src = CSPSource.create("'self'", undefined, "https://foobar.com:4443");
       //"src should inherit nonstandard port from self
       do_check_true(src.permits("https://foobar.com:4443"));
       do_check_false(src.permits("https://foobar.com"));
       do_check_false(src.permits("https://foobar.com:443"));
 
       //"src should inherit and require https scheme from self
       do_check_false(src.permits("http://foobar.com:4443"));
       do_check_false(src.permits("http://foobar.com"));
@@ -711,19 +712,19 @@ test(
 test(
     function test_bug634773_noneAndStarAreDifferent() {
       /**
        * Bug 634773 is that allow * and allow 'none' end up "equal" via
        * CSPSourceList.prototype.equals(), which is wrong.  This tests that
        * doesn't happen.
        */
 
-      var p_none = CSPSourceList.fromString("'none'", "http://foo.com", false);
-      var p_all = CSPSourceList.fromString("*", "http://foo.com", false);
-      var p_one = CSPSourceList.fromString("bar.com", "http://foo.com", false);
+      var p_none = CSPSourceList.fromString("'none'", undefined, "http://foo.com", false);
+      var p_all = CSPSourceList.fromString("*", undefined, "http://foo.com", false);
+      var p_one = CSPSourceList.fromString("bar.com", undefined, "http://foo.com", false);
 
       do_check_false(p_none.equals(p_all));
       do_check_false(p_none.equals(p_one));
       do_check_false(p_all.equals(p_none));
       do_check_false(p_all.equals(p_one));
 
       do_check_true(p_all.permits("http://bar.com"));
       do_check_true(p_one.permits("http://bar.com"));
--- a/content/events/public/nsEventNameList.h
+++ b/content/events/public/nsEventNameList.h
@@ -462,16 +462,24 @@ WINDOW_ONLY_EVENT(userproximity,
 WINDOW_ONLY_EVENT(devicelight,
                   NS_DEVICE_LIGHT,
                   EventNameType_None,
                   NS_EVENT)
 WINDOW_ONLY_EVENT(moztimechange,
                   NS_MOZ_TIME_CHANGE_EVENT,
                   EventNameType_None,
                   NS_EVENT)
+WINDOW_ONLY_EVENT(moznetworkupload,
+                  NS_NETWORK_UPLOAD_EVENT,
+                  EventNameType_None,
+                  NS_EVENT)
+WINDOW_ONLY_EVENT(moznetworkdownload,
+                  NS_NETWORK_DOWNLOAD_EVENT,
+                  EventNameType_None,
+                  NS_EVENT)
 
 TOUCH_EVENT(touchstart,
             NS_TOUCH_START,
             EventNameType_All,
             NS_TOUCH_EVENT)
 TOUCH_EVENT(touchend,
             NS_TOUCH_END,
             EventNameType_All,
--- a/content/events/src/nsEventListenerManager.cpp
+++ b/content/events/src/nsEventListenerManager.cpp
@@ -168,23 +168,30 @@ nsEventListenerManager::GetInnerWindowFo
 {
   nsCOMPtr<nsINode> node = do_QueryInterface(mTarget);
   if (node) {
     // XXX sXBL/XBL2 issue -- do we really want the owner here?  What
     // if that's the XBL document?
     return node->OwnerDoc()->GetInnerWindow();
   }
 
+  nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
+  return window;
+}
+
+already_AddRefed<nsPIDOMWindow>
+nsEventListenerManager::GetTargetAsInnerWindow() const
+{
   nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(mTarget);
-  if (window) {
-    NS_ASSERTION(window->IsInnerWindow(), "Target should not be an outer window");
-    return window;
+  if (!window) {
+    return nullptr;
   }
 
-  return nullptr;
+  NS_ASSERTION(window->IsInnerWindow(), "Target should not be an outer window");
+  return window.forget();
 }
 
 void
 nsEventListenerManager::AddEventListener(nsIDOMEventListener *aListener,
                                          uint32_t aType,
                                          nsIAtom* aTypeAtom,
                                          int32_t aFlags,
                                          bool aHandler)
@@ -273,17 +280,30 @@ nsEventListenerManager::AddEventListener
     EnableDevice(NS_DEVICE_ORIENTATION);
   } else if (aTypeAtom == nsGkAtoms::ondeviceproximity || aTypeAtom == nsGkAtoms::onuserproximity) {
     EnableDevice(NS_DEVICE_PROXIMITY);
   } else if (aTypeAtom == nsGkAtoms::ondevicelight) {
     EnableDevice(NS_DEVICE_LIGHT);
   } else if (aTypeAtom == nsGkAtoms::ondevicemotion) {
     EnableDevice(NS_DEVICE_MOTION);
   } else if (aTypeAtom == nsGkAtoms::onmoztimechange) {
-    EnableTimeChangeNotifications();
+    nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
+    if (window) {
+      window->EnableTimeChangeNotifications();
+    }
+  } else if (aTypeAtom == nsGkAtoms::onmoznetworkupload) {
+    nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
+    if (window) {
+      window->EnableNetworkEvent(NS_NETWORK_UPLOAD_EVENT);
+    }
+  } else if (aTypeAtom == nsGkAtoms::onmoznetworkdownload) {
+    nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
+    if (window) {
+      window->EnableNetworkEvent(NS_NETWORK_DOWNLOAD_EVENT);
+    }
   } else if (aTypeAtom == nsGkAtoms::ontouchstart ||
              aTypeAtom == nsGkAtoms::ontouchend ||
              aTypeAtom == nsGkAtoms::ontouchmove ||
              aTypeAtom == nsGkAtoms::ontouchenter ||
              aTypeAtom == nsGkAtoms::ontouchleave ||
              aTypeAtom == nsGkAtoms::ontouchcancel) {
     mMayHaveTouchEventListener = true;
     nsPIDOMWindow* window = GetInnerWindowForTarget();
@@ -321,23 +341,21 @@ nsEventListenerManager::IsDeviceType(uin
       break;
   }
   return false;
 }
 
 void
 nsEventListenerManager::EnableDevice(uint32_t aType)
 {
-  nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(mTarget);
+  nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
   if (!window) {
     return;
   }
 
-  NS_ASSERTION(window->IsInnerWindow(), "Target should not be an outer window");
-
   switch (aType) {
     case NS_DEVICE_ORIENTATION:
       window->EnableDeviceSensor(SENSOR_ORIENTATION);
       break;
     case NS_DEVICE_PROXIMITY:
     case NS_USER_PROXIMITY:
       window->EnableDeviceSensor(SENSOR_PROXIMITY);
       break;
@@ -353,23 +371,21 @@ nsEventListenerManager::EnableDevice(uin
       NS_WARNING("Enabling an unknown device sensor.");
       break;
   }
 }
 
 void
 nsEventListenerManager::DisableDevice(uint32_t aType)
 {
-  nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(mTarget);
+  nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
   if (!window) {
     return;
   }
 
-  NS_ASSERTION(window->IsInnerWindow(), "Target should not be an outer window");
-
   switch (aType) {
     case NS_DEVICE_ORIENTATION:
       window->DisableDeviceSensor(SENSOR_ORIENTATION);
       break;
     case NS_DEVICE_MOTION:
       window->DisableDeviceSensor(SENSOR_ACCELERATION);
       window->DisableDeviceSensor(SENSOR_LINEAR_ACCELERATION);
       window->DisableDeviceSensor(SENSOR_GYROSCOPE);
@@ -399,41 +415,51 @@ nsEventListenerManager::RemoveEventListe
 
   nsListenerStruct* ls;
   aFlags &= ~NS_PRIV_EVENT_UNTRUSTED_PERMITTED;
 
   uint32_t count = mListeners.Length();
   uint32_t typeCount = 0;
   bool deviceType = IsDeviceType(aType);
   bool timeChangeEvent = (aType == NS_MOZ_TIME_CHANGE_EVENT);
+  bool networkEvent = (aType == NS_NETWORK_UPLOAD_EVENT ||
+                       aType == NS_NETWORK_DOWNLOAD_EVENT);
 
   for (uint32_t i = 0; i < count; ++i) {
     ls = &mListeners.ElementAt(i);
     if (EVENT_TYPE_EQUALS(ls, aType, aUserType)) {
       ++typeCount;
       if (ls->mListener == aListener &&
           (ls->mFlags & ~NS_PRIV_EVENT_UNTRUSTED_PERMITTED) == aFlags) {
         nsRefPtr<nsEventListenerManager> kungFuDeathGrip = this;
         mListeners.RemoveElementAt(i);
         --count;
         mNoListenerForEvent = NS_EVENT_TYPE_NULL;
         mNoListenerForEventAtom = nullptr;
 
-        if (!deviceType && !timeChangeEvent) {
+        if (!deviceType && !timeChangeEvent && !networkEvent) {
           return;
         }
         --typeCount;
       }
     }
   }
 
   if (deviceType && typeCount == 0) {
     DisableDevice(aType);
   } else if (timeChangeEvent && typeCount == 0) {
-    DisableTimeChangeNotifications();
+    nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
+    if (window) {
+      window->DisableTimeChangeNotifications();
+    }
+  } else if (networkEvent && typeCount == 0) {
+    nsCOMPtr<nsPIDOMWindow> window = GetTargetAsInnerWindow();
+    if (window) {
+      window->DisableNetworkEvent(aType);
+    }
   }
 }
 
 static inline bool
 ListenerCanHandle(nsListenerStruct* aLs, nsEvent* aEvent)
 {
   // This is slightly different from EVENT_TYPE_EQUALS in that it returns
   // true even when aEvent->message == NS_USER_DEFINED_EVENT and
@@ -590,21 +616,18 @@ nsEventListenerManager::SetEventHandler(
 
   if (node) {
     // Try to get context from doc
     // XXX sXBL/XBL2 issue -- do we really want the owner here?  What
     // if that's the XBL document?
     doc = node->OwnerDoc();
     global = doc->GetScriptGlobalObject();
   } else {
-    nsCOMPtr<nsPIDOMWindow> win(do_QueryInterface(mTarget));
+    nsCOMPtr<nsPIDOMWindow> win = GetTargetAsInnerWindow();
     if (win) {
-      NS_ASSERTION(win->IsInnerWindow(),
-                   "Event listener added to outer window!");
-
       nsCOMPtr<nsIDOMDocument> domdoc;
       win->GetDocument(getter_AddRefs(domdoc));
       doc = do_QueryInterface(domdoc);
       global = do_QueryInterface(win);
     } else {
       global = do_QueryInterface(mTarget);
     }
   }
@@ -1165,32 +1188,8 @@ nsEventListenerManager::UnmarkGrayJSList
     if (jsl) {
       xpc_UnmarkGrayObject(jsl->GetHandler());
       xpc_UnmarkGrayObject(jsl->GetEventScope());
     } else if (ls.mListenerType == eWrappedJSListener) {
       xpc_TryUnmarkWrappedGrayObject(ls.mListener);
     }
   }
 }
-
-void
-nsEventListenerManager::EnableTimeChangeNotifications()
-{
-  nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(mTarget);
-  if (!window) {
-    return;
-  }
-
-  NS_ASSERTION(window->IsInnerWindow(), "Target should not be an outer window");
-  window->EnableTimeChangeNotifications();
-}
-
-void
-nsEventListenerManager::DisableTimeChangeNotifications()
-{
-  nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(mTarget);
-  if (!window) {
-    return;
-  }
-
-  NS_ASSERTION(window->IsInnerWindow(), "Target should not be an outer window");
-  window->DisableTimeChangeNotifications();
-}
--- a/content/events/src/nsEventListenerManager.h
+++ b/content/events/src/nsEventListenerManager.h
@@ -264,19 +264,16 @@ protected:
                                    JSObject *aHandler,
                                    bool aPermitUntrustedEvents,
                                    nsListenerStruct **aListenerStruct);
 
   bool IsDeviceType(uint32_t aType);
   void EnableDevice(uint32_t aType);
   void DisableDevice(uint32_t aType);
 
-  void EnableTimeChangeNotifications();
-  void DisableTimeChangeNotifications();
-
 public:
   /**
    * Set the "inline" event listener for aEventName to |v|.  This
    * might actually remove the event listener, depending on the value
    * of |v|.  Note that on entry to this function cx and aScope might
    * not be in the same compartment, though cx and v are guaranteed to
    * be in the same compartment.  If aExpectScriptContext is false,
    * not finding an nsIScriptContext does not cause failure.
@@ -299,16 +296,17 @@ protected:
   void RemoveEventListener(nsIDOMEventListener *aListener,
                            uint32_t aType,
                            nsIAtom* aUserType,
                            int32_t aFlags);
   void RemoveAllListeners();
   const EventTypeData* GetTypeDataForIID(const nsIID& aIID);
   const EventTypeData* GetTypeDataForEventName(nsIAtom* aName);
   nsPIDOMWindow* GetInnerWindowForTarget();
+  already_AddRefed<nsPIDOMWindow> GetTargetAsInnerWindow() const;
 
   uint32_t mMayHavePaintEventListener : 1;
   uint32_t mMayHaveMutationListeners : 1;
   uint32_t mMayHaveCapturingListeners : 1;
   uint32_t mMayHaveSystemGroupListeners : 1;
   uint32_t mMayHaveAudioAvailableEventListener : 1;
   uint32_t mMayHaveTouchEventListener : 1;
   uint32_t mMayHaveMouseEnterLeaveEventListener : 1;
--- a/content/events/src/nsEventStateManager.cpp
+++ b/content/events/src/nsEventStateManager.cpp
@@ -106,28 +106,30 @@
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 //#define DEBUG_DOCSHELL_FOCUS
 
 #define NS_USER_INTERACTION_INTERVAL 5000 // ms
 
+static const nsIntPoint kInvalidRefPoint = nsIntPoint(-1,-1);
+
 static bool sLeftClickOnly = true;
 static bool sKeyCausesActivation = true;
 static uint32_t sESMInstanceCount = 0;
 static int32_t sChromeAccessModifier = 0, sContentAccessModifier = 0;
 int32_t nsEventStateManager::sUserInputEventDepth = 0;
 bool nsEventStateManager::sNormalLMouseEventInProcess = false;
 nsEventStateManager* nsEventStateManager::sActiveESM = nullptr;
 nsIDocument* nsEventStateManager::sMouseOverDocument = nullptr;
 nsWeakFrame nsEventStateManager::sLastDragOverFrame = nullptr;
-nsIntPoint nsEventStateManager::sLastRefPoint = nsIntPoint(0,0);
+nsIntPoint nsEventStateManager::sLastRefPoint = kInvalidRefPoint;
 nsIntPoint nsEventStateManager::sLastScreenPoint = nsIntPoint(0,0);
-nsIntPoint nsEventStateManager::sSynthCenteringPoint = nsIntPoint(-1,-1);
+nsIntPoint nsEventStateManager::sSynthCenteringPoint = kInvalidRefPoint;
 nsIntPoint nsEventStateManager::sLastClientPoint = nsIntPoint(0,0);
 bool nsEventStateManager::sIsPointerLocked = false;
 // Reference to the pointer locked element.
 nsWeakPtr nsEventStateManager::sPointerLockedElement;
 // Reference to the document which requested pointer lock.
 nsWeakPtr nsEventStateManager::sPointerLockedDoc;
 nsCOMPtr<nsIContent> nsEventStateManager::sDragOverContent = nullptr;
 
@@ -4157,18 +4159,24 @@ nsEventStateManager::GenerateMouseEnterE
           aEvent->widget->SynthesizeNativeMouseMove(
             center + aEvent->widget->WidgetToScreenOffset());
         } else if (aEvent->refPoint == sSynthCenteringPoint) {
           // This is the "synthetic native" event we dispatched to re-center the
           // pointer. Cancel it so we don't expose the centering move to content.
           aEvent->flags |= NS_EVENT_FLAG_STOP_DISPATCH;
           // Clear sSynthCenteringPoint so we don't cancel other events
           // targeted at the center.
-          sSynthCenteringPoint = nsIntPoint(-1,-1);
+          sSynthCenteringPoint = kInvalidRefPoint;
         }
+      } else if (sLastRefPoint == kInvalidRefPoint) {
+        // We don't have a valid previous mousemove refPoint. This is either
+        // the first move we've encountered, or the mouse has just re-entered
+        // the application window. We should report (0,0) movement for this
+        // case, so make the current and previous refPoints the same.
+        aEvent->lastRefPoint = aEvent->refPoint;
       } else {
         aEvent->lastRefPoint = sLastRefPoint;
       }
 
       // Update the last known refPoint with the current refPoint.
       sLastRefPoint = aEvent->refPoint;
 
       // Get the target content target (mousemove target == mouseover target)
@@ -4192,16 +4200,20 @@ nsEventStateManager::GenerateMouseEnterE
       if (mLastMouseOverFrame &&
           nsContentUtils::GetTopLevelWidget(aEvent->widget) !=
           nsContentUtils::GetTopLevelWidget(mLastMouseOverFrame->GetNearestWidget())) {
         // the MouseOut event widget doesn't have same top widget with
         // mLastMouseOverFrame, it's a spurious event for mLastMouseOverFrame
         break;
       }
 
+      // Reset sLastRefPoint, so that we'll know not to report any
+      // movement the next time we re-enter the window.
+      sLastRefPoint = kInvalidRefPoint;
+
       NotifyMouseOut(aEvent, nullptr);
     }
     break;
   }
 
   // reset mCurretTargetContent to what it was
   mCurrentTargetContent = targetBeforeEvent;
 }
--- a/content/events/src/nsPaintRequest.cpp
+++ b/content/events/src/nsPaintRequest.cpp
@@ -4,16 +4,18 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsPaintRequest.h"
 
 #include "nsDOMClassInfoID.h"
 #include "nsClientRect.h"
 #include "nsIFrame.h"
 #include "nsContentUtils.h"
+#include "mozilla/dom/PaintRequestListBinding.h"
+#include "dombindings.h"
 
 DOMCI_DATA(PaintRequest, nsPaintRequest)
 
 NS_INTERFACE_TABLE_HEAD(nsPaintRequest)
   NS_INTERFACE_TABLE1(nsPaintRequest, nsIDOMPaintRequest)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PaintRequest)
 NS_INTERFACE_MAP_END
@@ -48,16 +50,31 @@ NS_INTERFACE_TABLE_HEAD(nsPaintRequestLi
   NS_INTERFACE_TABLE1(nsPaintRequestList, nsIDOMPaintRequestList)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(nsPaintRequestList)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PaintRequestList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsPaintRequestList)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsPaintRequestList)
 
+JSObject*
+nsPaintRequestList::WrapObject(JSContext *cx, JSObject *scope,
+                               bool *triedToWrap)
+{
+  JSObject* obj = mozilla::dom::PaintRequestListBinding::Wrap(cx, scope, this,
+                                                              triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return mozilla::dom::oldproxybindings::PaintRequestList::create(cx, scope,
+                                                                  this);
+}
+
 NS_IMETHODIMP    
 nsPaintRequestList::GetLength(uint32_t* aLength)
 {
   *aLength = Length();
   return NS_OK;
 }
 
 NS_IMETHODIMP    
--- a/content/events/src/nsPaintRequest.h
+++ b/content/events/src/nsPaintRequest.h
@@ -5,18 +5,18 @@
 
 #ifndef NSPAINTREQUEST_H_
 #define NSPAINTREQUEST_H_
 
 #include "nsIDOMPaintRequest.h"
 #include "nsIDOMPaintRequestList.h"
 #include "nsPresContext.h"
 #include "nsIDOMEvent.h"
-#include "dombindings.h"
 #include "mozilla/Attributes.h"
+#include "nsWrapperCache.h"
 
 class nsPaintRequest MOZ_FINAL : public nsIDOMPaintRequest
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIDOMPAINTREQUEST
 
   nsPaintRequest() { mRequest.mFlags = 0; }
@@ -39,22 +39,17 @@ public:
     SetIsDOMBinding();
   }
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(nsPaintRequestList)
   NS_DECL_NSIDOMPAINTREQUESTLIST
   
   virtual JSObject* WrapObject(JSContext *cx, JSObject *scope,
-                               bool *triedToWrap)
-  {
-    return mozilla::dom::oldproxybindings::PaintRequestList::create(cx, scope, this,
-                                                           triedToWrap);
-  }
-
+                               bool *triedToWrap);
   nsISupports* GetParentObject()
   {
     return mParent;
   }
 
   void Append(nsIDOMPaintRequest* aElement) { mArray.AppendObject(aElement); }
 
   static nsPaintRequestList* FromSupports(nsISupports* aSupports)
--- a/content/html/content/src/HTMLPropertiesCollection.cpp
+++ b/content/html/content/src/HTMLPropertiesCollection.cpp
@@ -7,18 +7,18 @@
 #include "HTMLPropertiesCollection.h"
 #include "dombindings.h"
 #include "nsIDocument.h"
 #include "nsContentUtils.h"
 #include "nsGenericHTMLElement.h"
 #include "nsVariant.h"
 #include "nsDOMSettableTokenList.h"
 #include "nsAttrValue.h"
-#include "mozilla/ErrorResult.h"
 #include "nsWrapperCacheInlines.h"
+#include "mozilla/dom/HTMLPropertiesCollectionBinding.h"
 
 DOMCI_DATA(HTMLPropertiesCollection, mozilla::dom::HTMLPropertiesCollection)
 DOMCI_DATA(PropertyNodeList, mozilla::dom::PropertyNodeList)
 
 namespace mozilla {
 namespace dom {
 
 static PLDHashOperator
@@ -105,18 +105,24 @@ HTMLPropertiesCollection::SetDocument(ns
   mNamedItemEntries.EnumerateRead(SetPropertyListDocument, aDocument);
   mIsDirty = true;
 }
 
 JSObject*
 HTMLPropertiesCollection::WrapObject(JSContext* cx, JSObject* scope,
                                      bool* triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::HTMLPropertiesCollection::create(cx, scope, this,
-                                                                 triedToWrap);
+  JSObject* obj = HTMLPropertiesCollectionBinding::Wrap(cx, scope, this,
+                                                        triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::HTMLPropertiesCollection::create(cx, scope, this);
 }
 
 NS_IMETHODIMP
 HTMLPropertiesCollection::GetLength(uint32_t* aLength)
 {
   EnsureFresh();
   *aLength = mProperties.Length();
   return NS_OK;
@@ -441,18 +447,23 @@ PropertyNodeList::GetParentObject()
 {
   return mParent;
 }
 
 JSObject*
 PropertyNodeList::WrapObject(JSContext *cx, JSObject *scope,
                              bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::PropertyNodeList::create(cx, scope, this,
-                                                         triedToWrap);
+  JSObject* obj = PropertyNodeListBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::PropertyNodeList::create(cx, scope, this);
 }
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(PropertyNodeList)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(PropertyNodeList)
   // SetDocument(nullptr) ensures that we remove ourselves as a mutation observer
   tmp->SetDocument(nullptr);
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mParent)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mCollection)
--- a/content/html/content/src/nsClientRect.cpp
+++ b/content/html/content/src/nsClientRect.cpp
@@ -3,16 +3,17 @@
  * 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/. */
 
 #include "nsClientRect.h"
 #include "nsContentUtils.h"
 #include "nsDOMClassInfoID.h"
 
 #include "nsPresContext.h"
+#include "mozilla/dom/ClientRectListBinding.h"
 #include "dombindings.h"
 
 DOMCI_DATA(ClientRect, nsClientRect)
 
 NS_INTERFACE_TABLE_HEAD(nsClientRect)
   NS_INTERFACE_TABLE1(nsClientRect, nsIDOMClientRect)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ClientRect)
@@ -101,18 +102,24 @@ nsIDOMClientRect*
 nsClientRectList::GetItemAt(uint32_t aIndex)
 {
   return Item(aIndex);
 }
 
 JSObject*
 nsClientRectList::WrapObject(JSContext *cx, JSObject *scope, bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::ClientRectList::create(cx, scope, this,
-                                                       triedToWrap);
+  JSObject* obj = mozilla::dom::ClientRectListBinding::Wrap(cx, scope, this,
+                                                            triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return mozilla::dom::oldproxybindings::ClientRectList::create(cx, scope, this);
 }
 
 static double
 RoundFloat(double aValue)
 {
   return floor(aValue + 0.5);
 }
 
--- a/content/html/content/src/nsFormSubmission.cpp
+++ b/content/html/content/src/nsFormSubmission.cpp
@@ -12,16 +12,17 @@
 #include "nsIForm.h"
 #include "nsILinkHandler.h"
 #include "nsIDocument.h"
 #include "nsGkAtoms.h"
 #include "nsIFormControl.h"
 #include "nsIDOMHTMLFormElement.h"
 #include "nsError.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsISaveAsCharset.h"
 #include "nsIFile.h"
 #include "nsIDOMFile.h"
 #include "nsDirectoryServiceDefs.h"
 #include "nsStringStream.h"
 #include "nsIURI.h"
 #include "nsIURL.h"
 #include "nsNetUtil.h"
--- a/content/html/content/src/nsGenericHTMLElement.cpp
+++ b/content/html/content/src/nsGenericHTMLElement.cpp
@@ -3,16 +3,17 @@
 /* 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nscore.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsCOMPtr.h"
 #include "nsIAtom.h"
 #include "nsIContentViewer.h"
 #include "mozilla/css/StyleRule.h"
 #include "nsIDocument.h"
 #include "nsIDocumentEncoder.h"
 #include "nsIDOMHTMLBodyElement.h"
 #include "nsIDOMHTMLDocument.h"
--- a/content/html/content/src/nsHTMLBRElement.cpp
+++ b/content/html/content/src/nsHTMLBRElement.cpp
@@ -3,16 +3,17 @@
  * 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nsIDOMHTMLBRElement.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 
 using namespace mozilla;
 
 class nsHTMLBRElement : public nsGenericHTMLElement,
--- a/content/html/content/src/nsHTMLBodyElement.cpp
+++ b/content/html/content/src/nsHTMLBodyElement.cpp
@@ -4,29 +4,30 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/Util.h"
 
 #include "nscore.h"
 #include "nsCOMPtr.h"
 #include "nsIDOMHTMLBodyElement.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsPresContext.h"
 #include "nsIPresShell.h"
 #include "nsIDocument.h"
 #include "nsHTMLStyleSheet.h"
 #include "nsIMarkupDocumentViewer.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 #include "nsIDocShell.h"
 #include "nsIEditorDocShell.h"
 #include "nsRuleWalker.h"
-#include "jsapi.h"
+#include "jspubtd.h"
 
 //----------------------------------------------------------------------
 
 using namespace mozilla;
 
 class nsHTMLBodyElement;
 
 class BodyRule: public nsIStyleRule {
--- a/content/html/content/src/nsHTMLButtonElement.cpp
+++ b/content/html/content/src/nsHTMLButtonElement.cpp
@@ -1,16 +1,18 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
 #include "nsIDOMHTMLButtonElement.h"
 #include "nsIDOMHTMLFormElement.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsIPresShell.h"
 #include "nsStyleConsts.h"
 #include "nsPresContext.h"
 #include "nsIFormControl.h"
 #include "nsIForm.h"
 #include "nsFormSubmission.h"
 #include "nsFormSubmissionConstants.h"
--- a/content/html/content/src/nsHTMLCanvasElement.cpp
+++ b/content/html/content/src/nsHTMLCanvasElement.cpp
@@ -1,14 +1,15 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsHTMLCanvasElement.h"
+#include "nsAttrValueInlines.h"
 
 #include "mozilla/Base64.h"
 #include "mozilla/CheckedInt.h"
 #include "nsNetUtil.h"
 #include "prmem.h"
 #include "nsDOMFile.h"
 
 #include "nsICanvasRenderingContextInternal.h"
--- a/content/html/content/src/nsHTMLFontElement.cpp
+++ b/content/html/content/src/nsHTMLFontElement.cpp
@@ -4,16 +4,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/Util.h"
 
 #include "nsCOMPtr.h"
 #include "nsIDOMHTMLFontElement.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsPresContext.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 #include "nsAlgorithm.h"
 #include "nsContentUtils.h"
 
--- a/content/html/content/src/nsHTMLFormElement.cpp
+++ b/content/html/content/src/nsHTMLFormElement.cpp
@@ -46,19 +46,19 @@
 #include "nsEventDispatcher.h"
 
 #include "mozAutoDocUpdate.h"
 #include "nsIHTMLCollection.h"
 
 #include "nsIConstraintValidation.h"
 
 #include "nsIDOMHTMLButtonElement.h"
+#include "mozilla/dom/HTMLCollectionBinding.h"
 #include "dombindings.h"
 #include "nsSandboxFlags.h"
-#include "mozilla/dom/BindingUtils.h"
 
 using namespace mozilla::dom;
 
 static const int NS_FORM_CONTROL_LIST_HASHTABLE_SIZE = 16;
 
 static const uint8_t NS_FORM_AUTOCOMPLETE_ON  = 1;
 static const uint8_t NS_FORM_AUTOCOMPLETE_OFF = 0;
 
@@ -120,18 +120,23 @@ public:
    * @return NS_OK or NS_ERROR_OUT_OF_MEMORY.
    */
   nsresult GetSortedControls(nsTArray<nsGenericHTMLFormElement*>& aControls) const;
 
   // nsWrapperCache
   virtual JSObject* WrapObject(JSContext *cx, JSObject *scope,
                                bool *triedToWrap)
   {
-    return mozilla::dom::oldproxybindings::HTMLCollection::create(cx, scope, this,
-                                                         triedToWrap);
+    JSObject* obj = HTMLCollectionBinding::Wrap(cx, scope, this, triedToWrap);
+    if (obj || *triedToWrap) {
+      return obj;
+    }
+
+    *triedToWrap = true;
+    return oldproxybindings::HTMLCollection::create(cx, scope, this);
   }
 
   nsHTMLFormElement* mForm;  // WEAK - the form owns me
 
   nsTArray<nsGenericHTMLFormElement*> mElements;  // Holds WEAK references - bug 36639
 
   // This array holds on to all form controls that are not contained
   // in mElements (form.elements in JS, see ShouldBeInFormControl()).
--- a/content/html/content/src/nsHTMLHRElement.cpp
+++ b/content/html/content/src/nsHTMLHRElement.cpp
@@ -8,16 +8,17 @@
 #include "nsGenericHTMLElement.h"
 #include "nsIDOMHTMLHRElement.h"
 
 #include "nsIDOMEventTarget.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsPresContext.h"
 #include "nsMappedAttributes.h"
+#include "nsAttrValueInlines.h"
 #include "nsRuleData.h"
 #include "nsCSSProps.h"
 
 using namespace mozilla;
 
 class nsHTMLHRElement : public nsGenericHTMLElement,
                         public nsIDOMHTMLHRElement
 {
--- a/content/html/content/src/nsHTMLIFrameElement.cpp
+++ b/content/html/content/src/nsHTMLIFrameElement.cpp
@@ -3,16 +3,17 @@
  * 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nsHTMLIFrameElement.h"
 #include "nsIDOMSVGDocument.h"
 #include "nsMappedAttributes.h"
+#include "nsAttrValueInlines.h"
 #include "nsError.h"
 #include "nsRuleData.h"
 #include "nsStyleConsts.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 NS_IMPL_NS_NEW_HTML_ELEMENT_CHECK_PARSER(IFrame)
--- a/content/html/content/src/nsHTMLInputElement.cpp
+++ b/content/html/content/src/nsHTMLInputElement.cpp
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "mozilla/Util.h"
 
 #include "nsHTMLInputElement.h"
+#include "nsAttrValueInlines.h"
 
 #include "nsIDOMHTMLInputElement.h"
 #include "nsITextControlElement.h"
 #include "nsIDOMNSEditableElement.h"
 #include "nsIRadioVisitor.h"
 #include "nsIPhonetic.h"
 
 #include "nsIControllers.h"
--- a/content/html/content/src/nsHTMLLIElement.cpp
+++ b/content/html/content/src/nsHTMLLIElement.cpp
@@ -3,16 +3,17 @@
  * 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nsIDOMHTMLLIElement.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 
 using namespace mozilla;
 
 class nsHTMLLIElement : public nsGenericHTMLElement,
--- a/content/html/content/src/nsHTMLMediaElement.cpp
+++ b/content/html/content/src/nsHTMLMediaElement.cpp
@@ -7,16 +7,17 @@
 #include "mozilla/Util.h"
 
 #include "base/basictypes.h"
 #include "nsIDOMHTMLMediaElement.h"
 #include "nsIDOMHTMLSourceElement.h"
 #include "nsHTMLMediaElement.h"
 #include "nsTimeRanges.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsPresContext.h"
 #include "nsIPresShell.h"
 #include "nsGkAtoms.h"
 #include "nsSize.h"
 #include "nsIFrame.h"
 #include "nsIDocument.h"
 #include "nsIDOMDocument.h"
 #include "nsError.h"
--- a/content/html/content/src/nsHTMLMenuElement.cpp
+++ b/content/html/content/src/nsHTMLMenuElement.cpp
@@ -1,15 +1,15 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsHTMLMenuElement.h"
-
+#include "nsAttrValueInlines.h"
 #include "nsIDOMHTMLMenuItemElement.h"
 #include "nsXULContextMenuBuilder.h"
 #include "nsGUIEvent.h"
 #include "nsEventDispatcher.h"
 #include "nsHTMLMenuItemElement.h"
 #include "nsContentUtils.h"
 #include "nsError.h"
 
--- a/content/html/content/src/nsHTMLMenuItemElement.cpp
+++ b/content/html/content/src/nsHTMLMenuItemElement.cpp
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsGUIEvent.h"
 #include "nsEventDispatcher.h"
 #include "nsHTMLMenuItemElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsContentUtils.h"
 
 using namespace mozilla::dom;
 
 // First bits are needed for the menuitem type.
 #define NS_CHECKED_IS_TOGGLED (1 << 2)
 #define NS_ORIGINAL_CHECKED_VALUE (1 << 3)
 #define NS_MENUITEM_TYPE(bits) ((bits) & ~( \
--- a/content/html/content/src/nsHTMLMeterElement.cpp
+++ b/content/html/content/src/nsHTMLMeterElement.cpp
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsIDOMHTMLMeterElement.h"
 #include "nsGenericHTMLElement.h"
 #include "nsAttrValue.h"
+#include "nsAttrValueInlines.h"
 #include "nsEventStateManager.h"
 #include "nsAlgorithm.h"
 
 
 class nsHTMLMeterElement : public nsGenericHTMLElement,
                            public nsIDOMHTMLMeterElement
 {
 public:
--- a/content/html/content/src/nsHTMLOListElement.cpp
+++ b/content/html/content/src/nsHTMLOListElement.cpp
@@ -5,16 +5,17 @@
 
 #include "mozilla/Util.h"
 
 #include "nsIDOMHTMLOListElement.h"
 #include "nsIDOMHTMLDListElement.h"
 #include "nsIDOMHTMLUListElement.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 
 using namespace mozilla;
 
 class nsHTMLSharedListElement : public nsGenericHTMLElement,
--- a/content/html/content/src/nsHTMLObjectElement.cpp
+++ b/content/html/content/src/nsHTMLObjectElement.cpp
@@ -3,16 +3,17 @@
 /* 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nsAutoPtr.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsObjectLoadingContent.h"
 #include "nsGkAtoms.h"
 #include "nsError.h"
 #include "nsIDocument.h"
 #include "nsIDOMDocument.h"
 #include "nsIDOMSVGDocument.h"
 #include "nsIDOMGetSVGDocument.h"
 #include "nsIDOMHTMLObjectElement.h"
--- a/content/html/content/src/nsHTMLPreElement.cpp
+++ b/content/html/content/src/nsHTMLPreElement.cpp
@@ -3,16 +3,17 @@
  * 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nsIDOMHTMLPreElement.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsMappedAttributes.h"
 #include "nsRuleData.h"
 
 using namespace mozilla;
 
 class nsHTMLPreElement : public nsGenericHTMLElement,
--- a/content/html/content/src/nsHTMLProgressElement.cpp
+++ b/content/html/content/src/nsHTMLProgressElement.cpp
@@ -1,16 +1,17 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "nsIDOMHTMLProgressElement.h"
 #include "nsGenericHTMLElement.h"
 #include "nsAttrValue.h"
+#include "nsAttrValueInlines.h"
 #include "nsEventStateManager.h"
 
 
 class nsHTMLProgressElement : public nsGenericHTMLElement,
                               public nsIDOMHTMLProgressElement
 {
 public:
   nsHTMLProgressElement(already_AddRefed<nsINodeInfo> aNodeInfo);
--- a/content/html/content/src/nsHTMLSelectElement.cpp
+++ b/content/html/content/src/nsHTMLSelectElement.cpp
@@ -30,18 +30,18 @@
 #include "nsIFrame.h"
 
 #include "nsError.h"
 #include "nsServiceManagerUtils.h"
 #include "nsRuleData.h"
 #include "nsEventDispatcher.h"
 #include "mozilla/dom/Element.h"
 #include "mozAutoDocUpdate.h"
+#include "mozilla/dom/HTMLOptionsCollectionBinding.h"
 #include "dombindings.h"
-#include "mozilla/dom/BindingUtils.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 NS_IMPL_ISUPPORTS1(nsSelectState, nsSelectState)
 NS_DEFINE_STATIC_IID_ACCESSOR(nsSelectState, NS_SELECT_STATE_IID)
 
 //----------------------------------------------------------------------
@@ -2004,18 +2004,23 @@ NS_INTERFACE_MAP_END
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsHTMLOptionCollection)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsHTMLOptionCollection)
 
 
 JSObject*
 nsHTMLOptionCollection::WrapObject(JSContext *cx, JSObject *scope,
                                    bool *triedToWrap)
 {
-  return mozilla::dom::oldproxybindings::HTMLOptionsCollection::create(cx, scope, this,
-                                                              triedToWrap);
+  JSObject* obj = HTMLOptionsCollectionBinding::Wrap(cx, scope, this, triedToWrap);
+  if (obj || *triedToWrap) {
+    return obj;
+  }
+
+  *triedToWrap = true;
+  return oldproxybindings::HTMLOptionsCollection::create(cx, scope, this);
 }
 
 NS_IMETHODIMP
 nsHTMLOptionCollection::GetLength(uint32_t* aLength)
 {
   *aLength = mElements.Length();
 
   return NS_OK;
--- a/content/html/content/src/nsHTMLSharedElement.cpp
+++ b/content/html/content/src/nsHTMLSharedElement.cpp
@@ -7,16 +7,17 @@
 
 #include "nsIDOMHTMLParamElement.h"
 #include "nsIDOMHTMLBaseElement.h"
 #include "nsIDOMHTMLDirectoryElement.h"
 #include "nsIDOMHTMLQuoteElement.h"
 #include "nsIDOMHTMLHeadElement.h"
 #include "nsIDOMHTMLHtmlElement.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 
 #include "nsGkAtoms.h"
 #include "nsStyleConsts.h"
 #include "nsRuleData.h"
 #include "nsMappedAttributes.h"
 #include "nsContentUtils.h"
 
 using namespace mozilla;
--- a/content/html/content/src/nsHTMLTableCaptionElement.cpp
+++ b/content/html/content/src/nsHTMLTableCaptionElement.cpp
@@ -3,16 +3,17 @@
  * 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/. */
 
 #include "mozilla/Util.h"
 
 #include "nsIDOMHTMLTableCaptionElem.h"
 #include "nsIDOMEventTarget.h"
 #include "nsGenericHTMLElement.h"
+#include "nsAttrValueInlines.h"
 #include "nsGkAtoms.h"
 #include "nsStyleC