Merge f-t to m-c, a=merge
authorPhil Ringnalda <philringnalda@gmail.com>
Sun, 19 Apr 2015 20:30:39 -0700
changeset 239907 50b95032152c1043d8dd7b8ffeb1051564466503
parent 239899 392300a13ba21a2ea556016cbb590ede41c8066a (current diff)
parent 239906 2a3f8eefee8ebe35b12a2834502f77fc6c9e357a (diff)
child 239908 1c51881a819ef68cece9bea9f315f5177584129c
child 240000 67433471e7159fc7a939febaa624f1056ea68a4b
child 240036 368a23672133600e0b3fbab8183599ed68aff73a
child 240049 21567e9a6e40a149c0b679f33f8cab73ed8cb67a
push id58672
push userphilringnalda@gmail.com
push dateMon, 20 Apr 2015 03:33:17 +0000
treeherdermozilla-inbound@1c51881a819e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone40.0a1
first release with
nightly linux32
50b95032152c / 40.0a1 / 20150420030204 / files
nightly linux64
50b95032152c / 40.0a1 / 20150420030204 / files
nightly mac
50b95032152c / 40.0a1 / 20150420030204 / files
nightly win32
50b95032152c / 40.0a1 / 20150420030204 / files
nightly win64
50b95032152c / 40.0a1 / 20150420030204 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge f-t to m-c, a=merge
browser/themes/linux/Privacy-32.png
browser/themes/linux/Privacy-48.png
browser/themes/linux/Privacy-64.png
browser/themes/osx/Privacy-32.png
browser/themes/osx/Privacy-48.png
browser/themes/osx/Privacy-64.png
browser/themes/windows/Privacy-32-XP.png
browser/themes/windows/Privacy-32.png
browser/themes/windows/Privacy-48-aero.png
browser/themes/windows/Privacy-48.png
browser/themes/windows/Privacy-64-aero.png
browser/themes/windows/Privacy-64.png
--- a/browser/base/content/browser-eme.js
+++ b/browser/base/content/browser-eme.js
@@ -1,14 +1,22 @@
 # -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 let gEMEHandler = {
+  get uiEnabled() {
+    let emeUIEnabled = Services.prefs.getBoolPref("browser.eme.ui.enabled");
+    // Force-disable on WinXP:
+    if (navigator.platform.toLowerCase().startsWith("win")) {
+      emeUIEnabled = emeUIEnabled && parseFloat(Services.sysinfo.get("version")) >= 6;
+    }
+    return emeUIEnabled;
+  },
   ensureEMEEnabled: function(browser, keySystem) {
     Services.prefs.setBoolPref("media.eme.enabled", true);
     if (keySystem) {
       if (keySystem.startsWith("com.adobe") &&
           Services.prefs.getPrefType("media.gmp-eme-adobe.enabled") &&
           !Services.prefs.getBoolPref("media.gmp-eme-adobe.enabled")) {
         Services.prefs.setBoolPref("media.gmp-eme-adobe.enabled", true);
       } else if (keySystem == "org.w3.clearkey" &&
@@ -40,17 +48,17 @@ let gEMEHandler = {
     try {
       parsedData = JSON.parse(data);
     } catch (ex) {
       Cu.reportError("Malformed EME video message with data: " + data);
       return;
     }
     let {status: status, keySystem: keySystem} = parsedData;
     // Don't need to show if disabled
-    if (!Services.prefs.getBoolPref("browser.eme.ui.enabled")) {
+    if (!this.uiEnabled) {
       return;
     }
 
     let notificationId;
     let buttonCallback;
     let params = [];
     switch (status) {
       case "available":
--- a/browser/base/content/browser-loop.js
+++ b/browser/base/content/browser-loop.js
@@ -1,21 +1,15 @@
 // This Source Code Form is subject to the terms of the Mozilla Public
 // License, v. 2.0. If a copy of the MPL was not distributed with this
 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 // the "exported" symbols
 let LoopUI;
 
-XPCOMUtils.defineLazyModuleGetter(this, "injectLoopAPI", "resource:///modules/loop/MozLoopAPI.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "LoopRooms", "resource:///modules/loop/LoopRooms.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "MozLoopService", "resource:///modules/loop/MozLoopService.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "PanelFrame", "resource:///modules/PanelFrame.jsm");
-
-
 (function() {
   const kNSXUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
   const kBrowserSharingNotificationId = "loop-sharing-notification";
   const kPrefBrowserSharingInfoBar = "browserSharing.showInfoBar";
 
   LoopUI = {
     /**
      * @var {XULWidgetSingleWrapper} toolbarButton Getter for the Loop toolbarbutton
@@ -129,41 +123,42 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 
           // If the panel has been opened and initialized before, we can skip waiting
           // for the content to load - because it's already there.
           if (("contentWindow" in iframe) && iframe.contentWindow.document.readyState == "complete") {
             showTab();
             return;
           }
 
-          iframe.addEventListener("DOMContentLoaded", function documentDOMLoaded() {
+          let documentDOMLoaded = () => {
             iframe.removeEventListener("DOMContentLoaded", documentDOMLoaded, true);
-            injectLoopAPI(iframe.contentWindow);
-            iframe.contentWindow.addEventListener("loopPanelInitialized", function loopPanelInitialized() {
+  	    this.injectLoopAPI(iframe.contentWindow);
+  	    iframe.contentWindow.addEventListener("loopPanelInitialized", function loopPanelInitialized() {
               iframe.contentWindow.removeEventListener("loopPanelInitialized",
                                                        loopPanelInitialized);
               showTab();
-            });
-          }, true);
+	    });
+	  };
+	  iframe.addEventListener("DOMContentLoaded", documentDOMLoaded, true); 
         };
 
         // Used to clear the temporary "login" state from the button.
         Services.obs.notifyObservers(null, "loop-status-changed", null);
 
         this.shouldResumeTour().then((resume) => {
           if (resume) {
             // Assume the conversation with the visitor wasn't open since we would
             // have resumed the tour as soon as the visitor joined if it was (and
             // the pref would have been set to false already.
-            MozLoopService.resumeTour("waiting");
+            this.MozLoopService.resumeTour("waiting");
             resolve();
             return;
           }
 
-          PanelFrame.showPopup(window, event ? event.target : this.toolbarButton.node,
+          this.PanelFrame.showPopup(window, event ? event.target : this.toolbarButton.node,
                                "loop", null, "about:looppanel", null, callback);
         });
       });
     },
 
     /**
      * Method to know whether actions to open the panel should instead resume the tour.
      *
@@ -174,17 +169,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
      */
     shouldResumeTour: Task.async(function* () {
       // Resume the FTU tour if this is the first time a room was joined by
       // someone else since the tour.
       if (!Services.prefs.getBoolPref("loop.gettingStarted.resumeOnFirstJoin")) {
         return false;
       }
 
-      if (!LoopRooms.participantsCount) {
+      if (!this.LoopRooms.participantsCount) {
         // Nobody is in the rooms
         return false;
       }
 
       let roomsWithNonOwners = yield this.roomsWithNonOwners();
       if (!roomsWithNonOwners.length) {
         // We were the only one in a room but we want to know about someone else joining.
         return false;
@@ -193,17 +188,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
       return true;
     }),
 
     /**
      * @return {Promise} resolved with an array of Rooms with participants (excluding owners)
      */
     roomsWithNonOwners: function() {
       return new Promise(resolve => {
-        LoopRooms.getAll((error, rooms) => {
+        this.LoopRooms.getAll((error, rooms) => {
           let roomsWithNonOwners = [];
           for (let room of rooms) {
             if (!("participants" in room)) {
               continue;
             }
             let numNonOwners = room.participants.filter(participant => !participant.owner).length;
             if (!numNonOwners) {
               continue;
@@ -218,17 +213,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
     /**
      * Triggers the initialization of the loop service.  Called by
      * delayedStartup.
      */
     init: function() {
       // Add observer notifications before the service is initialized
       Services.obs.addObserver(this, "loop-status-changed", false);
 
-      MozLoopService.initialize();
+      this.MozLoopService.initialize();
       this.updateToolbarState();
     },
 
     uninit: function() {
       Services.obs.removeObserver(this, "loop-status-changed");
     },
 
     // Implements nsIObserver
@@ -249,25 +244,25 @@ XPCOMUtils.defineLazyModuleGetter(this, 
      *                   successfully. This is used so the state can be
      *                   temporarily shown until the next state change.
      */
     updateToolbarState: function(aReason = null) {
       if (!this.toolbarButton.node) {
         return;
       }
       let state = "";
-      if (MozLoopService.errors.size) {
+      if (this.MozLoopService.errors.size) {
         state = "error";
-      } else if (MozLoopService.screenShareActive) {
+      } else if (this.MozLoopService.screenShareActive) {
         state = "action";
-      } else if (aReason == "login" && MozLoopService.userProfile) {
+      } else if (aReason == "login" && this.MozLoopService.userProfile) {
         state = "active";
-      } else if (MozLoopService.doNotDisturb) {
+      } else if (this.MozLoopService.doNotDisturb) {
         state = "disabled";
-      } else if (MozLoopService.roomsParticipantsCount > 0) {
+      } else if (this.MozLoopService.roomsParticipantsCount > 0) {
         state = "active";
       }
       this.toolbarButton.node.setAttribute("state", state);
     },
 
     /**
      * Show a desktop notification when 'do not disturb' isn't enabled.
      *
@@ -280,17 +275,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
      *                         - {String}   [sound]     Sound to play
      *                         - {String}   [selectTab] Tab to select when the panel
      *                                                  opens
      *                         - {Function} [onclick]   Callback to invoke when
      *                                                  the notification is clicked.
      *                                                  Opens the panel by default.
      */
     showNotification: function(options) {
-      if (MozLoopService.doNotDisturb) {
+      if (this.MozLoopService.doNotDisturb) {
         return;
       }
 
       if (!options.title) {
         throw new Error("Missing title, can not display notification");
       }
 
       let notificationOptions = {
@@ -331,17 +326,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
     },
 
     /**
      * Play a sound in this window IF there's no sound playing yet.
      *
      * @param {String} name Name of the sound, like 'ringtone' or 'room-joined'
      */
     playSound: function(name) {
-      if (this.ActiveSound || MozLoopService.doNotDisturb) {
+      if (this.ActiveSound || this.MozLoopService.doNotDisturb) {
         return;
       }
 
       this.activeSound = new window.Audio();
       this.activeSound.src = `chrome://browser/content/loop/shared/sounds/${name}.ogg`;
       this.activeSound.load();
       this.activeSound.play();
 
@@ -396,33 +391,33 @@ XPCOMUtils.defineLazyModuleGetter(this, 
     /**
      * Helper function to fetch a localized string via the MozLoopService API.
      * It's currently inconveniently wrapped inside a string of stringified JSON.
      *
      * @param  {String} key The element id to get strings for.
      * @return {String}
      */
     _getString: function(key) {
-      let str = MozLoopService.getStrings(key);
+      let str = this.MozLoopService.getStrings(key);
       if (str) {
         str = JSON.parse(str).textContent;
       }
       return str;
     },
 
     /**
      * Shows an infobar notification at the top of the browser window that warns
      * the user that their browser tabs are being broadcasted through the current
      * conversation.
      */
     _maybeShowBrowserSharingInfoBar: function() {
       this._hideBrowserSharingInfoBar();
 
       // Don't show the infobar if it's been permanently disabled from the menu.
-      if (!MozLoopService.getLoopPref(kPrefBrowserSharingInfoBar)) {
+      if (!this.MozLoopService.getLoopPref(kPrefBrowserSharingInfoBar)) {
         return;
       }
 
       // Create the menu that is shown when the menu-button' dropmarker is clicked
       // inside the notification bar.
       let menuPopup = document.createElementNS(kNSXUL, "menupopup");
       let menuItem = menuPopup.appendChild(document.createElementNS(kNSXUL, "menuitem"));
       menuItem.setAttribute("label", this._getString("infobar_menuitem_dontshowagain_label"));
@@ -468,17 +463,17 @@ XPCOMUtils.defineLazyModuleGetter(this, 
       let notification = box.getNotificationWithValue(kBrowserSharingNotificationId);
       let removed = false;
       if (notification) {
         box.removeNotification(notification);
         removed = true;
       }
 
       if (permanently) {
-        MozLoopService.setLoopPref(kPrefBrowserSharingInfoBar, false);
+        this.MozLoopService.setLoopPref(kPrefBrowserSharingInfoBar, false);
       }
 
       return removed;
     },
 
     /**
      * Handles events from gBrowser.
      */
@@ -506,8 +501,13 @@ XPCOMUtils.defineLazyModuleGetter(this, 
       if (wasVisible) {
         // If the infobar was visible before, we should show it again after the
         // switch.
         this._maybeShowBrowserSharingInfoBar();
       }
     },
   };
 })();
+
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "injectLoopAPI", "resource:///modules/loop/MozLoopAPI.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "LoopRooms", "resource:///modules/loop/LoopRooms.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "MozLoopService", "resource:///modules/loop/MozLoopService.jsm");
+XPCOMUtils.defineLazyModuleGetter(LoopUI, "PanelFrame", "resource:///modules/PanelFrame.jsm");
--- a/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
+++ b/browser/components/loop/test/mochitest/browser_mozLoop_sharingListeners.js
@@ -1,17 +1,17 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /*
  * This file contains tests for the window.LoopUI active tab trackers.
  */
 "use strict";
 
-const {injectLoopAPI} = Cu.import("resource:///modules/loop/MozLoopAPI.jsm");
+const {injectLoopAPI} = Cu.import("resource:///modules/loop/MozLoopAPI.jsm", {});
 gMozLoopAPI = injectLoopAPI({});
 
 let handlers = [
   {
     resolve: null,
     windowId: null,
     listener: function(err, windowId) {
       handlers[0].windowId = windowId;
--- a/browser/components/loop/test/mochitest/head.js
+++ b/browser/components/loop/test/mochitest/head.js
@@ -1,15 +1,16 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 const HAWK_TOKEN_LENGTH = 64;
 const {
   LOOP_SESSION_TYPE,
   MozLoopServiceInternal,
+  MozLoopService,
 } = Cu.import("resource:///modules/loop/MozLoopService.jsm", {});
 const {LoopCalls} = Cu.import("resource:///modules/loop/LoopCalls.jsm", {});
 const {LoopRooms} = Cu.import("resource:///modules/loop/LoopRooms.jsm", {});
 
 // Cache this value only once, at the beginning of a
 // test run, so that it doesn't pick up the offline=true
 // if offline mode is requested multiple times in a test run.
 const WAS_OFFLINE = Services.io.offline;
--- a/browser/components/preferences/content.js
+++ b/browser/components/preferences/content.js
@@ -19,18 +19,22 @@ var gContentPane = {
     if (Services.prefs.getBoolPref(prefName)) {
       let row = document.getElementById("translationBox");
       row.removeAttribute("hidden");
     }
 
     let drmInfoURL =
       Services.urlFormatter.formatURLPref("app.support.baseURL") + "drm-content";
     document.getElementById("playDRMContentLink").setAttribute("href", drmInfoURL);
-    document.getElementById("playDRMContentRow").hidden =
-      !Services.prefs.getBoolPref("browser.eme.ui.enabled");
+    let emeUIEnabled = Services.prefs.getBoolPref("browser.eme.ui.enabled");
+    // Force-disable/hide on WinXP:
+    if (navigator.platform.toLowerCase().startsWith("win")) {
+      emeUIEnabled = emeUIEnabled && parseFloat(Services.sysinfo.get("version")) >= 6;
+    }
+    document.getElementById("playDRMContentRow").hidden = !emeUIEnabled;
   },
 
   // UTILITY FUNCTIONS
 
   /**
    * Utility function to enable/disable the button specified by aButtonID based
    * on the value of the Boolean preference specified by aPreferenceID.
    */
--- a/browser/components/preferences/in-content/content.js
+++ b/browser/components/preferences/in-content/content.js
@@ -39,17 +39,22 @@ var gContentPane = {
     setEventListener("translationAttributionImage", "click",
       gContentPane.openTranslationProviderAttribution);
     setEventListener("translateButton", "command",
       gContentPane.showTranslationExceptions);
 
     let drmInfoURL =
       Services.urlFormatter.formatURLPref("app.support.baseURL") + "drm-content";
     document.getElementById("playDRMContentLink").setAttribute("href", drmInfoURL);
-    if (!Services.prefs.getBoolPref("browser.eme.ui.enabled")) {
+    let emeUIEnabled = Services.prefs.getBoolPref("browser.eme.ui.enabled");
+    // Force-disable/hide on WinXP:
+    if (navigator.platform.toLowerCase().startsWith("win")) {
+      emeUIEnabled = emeUIEnabled && parseFloat(Services.sysinfo.get("version")) >= 6;
+    }
+    if (!emeUIEnabled) {
       // Don't want to rely on .hidden for the toplevel groupbox because
       // of the pane hiding/showing code potentially interfering:
       document.getElementById("drmGroup").setAttribute("style", "display: none !important");
     }
   },
 
   // UTILITY FUNCTIONS
 
--- a/browser/components/preferences/in-content/tests/browser_bug731866.js
+++ b/browser/components/preferences/in-content/tests/browser_bug731866.js
@@ -9,30 +9,30 @@ function test() {
   open_preferences(runTest);
 }
 
 let gElements;
 
 function checkElements(expectedPane) {
   for (let element of gElements) {
     // preferences elements fail is_element_visible checks because they are never visible.
-    if (element.nodeName == "preferences") {
+    // special-case the drmGroup item because its visibility depends on pref + OS version
+    if (element.nodeName == "preferences" || element.id === "drmGroup") {
       continue;
     }
     let attributeValue = element.getAttribute("data-category");
     if (attributeValue == "pane" + expectedPane) {
       is_element_visible(element, expectedPane + " elements should be visible");
     } else {
       is_element_hidden(element, "Elements not in " + expectedPane + " should be hidden");
     }
   }
 }
 
 function runTest(win) {
-  Services.prefs.setBoolPref("browser.eme.ui.enabled", true);
   is(gBrowser.currentURI.spec, "about:preferences", "about:preferences loaded");
 
   let tab = win.document;
   gElements = tab.getElementById("mainPrefPane").children;
 
   let panes = [
     "General", "Search", "Content", "Applications",
     "Privacy", "Security", "Sync", "Advanced",
@@ -40,11 +40,10 @@ function runTest(win) {
 
   for (let pane of panes) {
     win.gotoPref("pane" + pane);
     checkElements(pane);
   }
 
   gBrowser.removeCurrentTab();
   win.close();
-  Services.prefs.clearUserPref("browser.eme.ui.enabled");
   finish();
 }
deleted file mode 100644
index f56dd2d33eaa18ff28dba3a6040f953d60a71d87..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8dd024395491e4a9b258aa1a17fbc7092c3fc7bf..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 106afb46c14292808679fa73b52543c3cb6e5b8b..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/linux/devedition.css
+++ b/browser/themes/linux/devedition.css
@@ -25,22 +25,26 @@
 #PlacesToolbar toolbarbutton.bookmark-item:-moz-any(:hover, [open="true"]) {
   color: initial;
 }
 
 /* Square back and forward buttons */
 #back-button > .toolbarbutton-icon,
 #forward-button > .toolbarbutton-icon {
   margin: 0;
-  border: none;
-  padding: 2px 6px;
+  border: 1px solid var(--chrome-nav-bar-controls-border-color);
+  padding: 2px 5px;
   background: var(--chrome-nav-buttons-background);
   box-shadow: none !important;
 }
 
+#forward-button > .toolbarbutton-icon {
+  -moz-border-start: none;
+}
+
 /* Override a box shadow for disabled back button */
 #main-window:not([customizing]) #back-button[disabled] > .toolbarbutton-icon {
   box-shadow: none !important;
 }
 
 #back-button:hover:not([disabled="true"]) > .toolbarbutton-icon,
 #forward-button:hover:not([disabled="true"]) > .toolbarbutton-icon {
   background: var(--chrome-nav-buttons-hover-background) !important;
deleted file mode 100644
index 4bc7da78bd1be33fbe277b68fdcf800d9faf3656..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 3c10dc2154b5b7f3106e4a966b53f901f09951f9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 930019ae779a8447d20ca0f98bdde1c5b86dc158..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/osx/devedition.css
+++ b/browser/themes/osx/devedition.css
@@ -36,22 +36,31 @@
   margin-top: 6px;
 }
 
 /* Square back and forward buttons.  Need !important on these because there
    are a lot of more specific selectors sprinkled around elsewhere for changing
    background / shadows for different states */
 #back-button,
 #forward-button {
-  height: 22px !important;
+  height: 24px !important;
   box-shadow: none !important;
-  border: none !important;
+  border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
   background: var(--chrome-nav-buttons-background) !important;
 }
 
+#forward-button {
+  -moz-border-start: none !important;
+}
+
+#forward-button > .toolbarbutton-icon {
+  margin-left: 0;
+  margin-right: 0;
+}
+
 #back-button:hover:not([disabled="true"]),
 #forward-button:hover:not([disabled="true"]) {
   background: var(--chrome-nav-buttons-hover-background) !important;
 }
 
 #back-button {
   border-radius: 3px 0 0 3px !important;
   padding: 0 !important;
--- a/browser/themes/shared/devedition.inc.css
+++ b/browser/themes/shared/devedition.inc.css
@@ -18,16 +18,17 @@
   /* Chrome */
   --chrome-background-color: #1C2126;
   --chrome-color: #F5F7FA;
   --chrome-secondary-background-color: #39424D;
   --chrome-navigator-toolbox-separator-color: rgba(0,0,0,.2);
   --chrome-nav-bar-separator-color: rgba(0,0,0,.2);
   --chrome-nav-buttons-background: #252C33;
   --chrome-nav-buttons-hover-background: #1B2127;
+  --chrome-nav-bar-controls-border-color: #1D2328;
   --chrome-selection-color: #fff;
   --chrome-selection-background-color: #074D75;
 
   /* Tabs */
   --tabs-toolbar-color: #F5F7FA;
   --tab-background-color: #1C2126;
   --tab-hover-background-color: #07090a;
   --tab-separator-color: #474C50;
@@ -75,43 +76,44 @@
   --searchbar-dropmarker-2x-url: url("chrome://browser/skin/devtools/dropmarker.svg");
 }
 
 :root[devtoolstheme="light"] {
   --url-and-searchbar-background-color: #fff;
 
   --chrome-background-color: #E3E4E6;
   --chrome-color: #18191a;
-  --chrome-secondary-background-color: #f0f1f2;
+  --chrome-secondary-background-color: #f5f6f7;
   --chrome-navigator-toolbox-separator-color: #cccccc;
   --chrome-nav-bar-separator-color: #B6B6B8;
-  --chrome-nav-buttons-background: #f0f1f2;
+  --chrome-nav-buttons-background: #fcfcfc;
   --chrome-nav-buttons-hover-background: #DADBDB;
+  --chrome-nav-bar-controls-border-color: #ccc;
   --chrome-selection-color: #f5f7fa;
   --chrome-selection-background-color: #4c9ed9;
 
   --tab-background-color: #E3E4E6;
   --tab-hover-background-color: #D7D8DA;
   --tab-separator-color: #C6C6C7;
   --tab-selection-color: #f5f7fa;
   --tab-selection-background-color: #4c9ed9;
   --tab-selection-box-shadow: 0 2px 0 #9FDFFF inset,
                               0 -2px 0 rgba(0,0,0,.05) inset,
                               0 -1px 0 rgba(0,0,0,.2) inset;
   --pinned-tab-glow: radial-gradient(22px at center calc(100% - 2px), rgba(76,158,217,0.9) 13%, transparent 16%);
 
 
   /* Toolbar buttons */
-  --toolbarbutton-hover-background: #D7D7D8;
+  --toolbarbutton-hover-background: #eaeaea;
   --toolbarbutton-hover-boxshadow: none;
   --toolbarbutton-hover-bordercolor: rgba(0,0,0,0.1);
-  --toolbarbutton-active-background: rgba(76,158,217,.5) linear-gradient(rgba(76,158,217,.5), rgba(76,158,217,.5)) border-box
+  --toolbarbutton-active-background: #d7d7d8 border-box;
   --toolbarbutton-active-boxshadow: none;
-  --toolbarbutton-active-bordercolor: rgba(0,0,0,0.3);
-  --toolbarbutton-checkedhover-backgroundcolor: rgba(0,0,0,0.2);
+  --toolbarbutton-active-bordercolor: rgba(0,0,0,0.15);
+  --toolbarbutton-checkedhover-backgroundcolor: #d7d7d8;
   --toolbarbutton-combined-boxshadow: none;
   --toolbarbutton-combined-backgroundimage: linear-gradient(rgba(0,0,0,0.1) 0, rgba(0,0,0,0.1) 18px);
 
   /* Url and search bars */
   --search-button-image: url("chrome://browser/skin/devedition/search.svg#search-icon");
 
   /* Menu button separator */
   --panel-ui-button-background-image: linear-gradient(to bottom, transparent, rgba(0,0,0,0.1) 30%, rgba(0,0,0,0.1) 70%, transparent);
@@ -182,16 +184,21 @@
   background-color: var(--chrome-secondary-background-color) !important;
   color: var(--chrome-color);
 }
 
 .browserContainer > findbar {
   background-image: none;
 }
 
+.browserContainer > .findbar-textbox {
+  background-color: var(--url-and-searchbar-background-color) !important;
+  color: var(--url-and-searchbar-color);
+}
+
 /* Default findbar text color doesn't look good - Bug 1125677 */
 .browserContainer > findbar .findbar-find-status,
 .browserContainer > findbar .found-matches {
   color: inherit;
 }
 
 #navigator-toolbox .toolbarbutton-1,
 .browserContainer > findbar .findbar-button,
@@ -207,27 +214,30 @@ toolbar[brighttext] #downloads-indicator
 }
 
 #TabsToolbar {
   text-shadow: none !important;
   color: var(--chrome-color) !important; /* Make sure that the brighttext attribute is added */
 }
 
 /* URL bar and search bar*/
-/* XXX :root[devtoolstheme="dark"] is a workaround for bug 1096413 on the findbar. */
 #urlbar,
-#navigator-toolbox .searchbar-textbox,
-:root[devtoolstheme="dark"] .browserContainer > findbar .findbar-textbox {
+#navigator-toolbox .searchbar-textbox {
   background-color: var(--url-and-searchbar-background-color) !important;
   background-image: none !important;
   color: var(--url-and-searchbar-color) !important;
-  border: none !important;
+  border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
   box-shadow: none !important;
 }
 
+#urlbar {
+  -moz-border-start: none !important;
+  opacity: 1 !important;
+}
+
 window:not([chromehidden~="toolbar"]) #urlbar-wrapper {
   overflow: -moz-hidden-unscrollable;
   clip-path: none;
   -moz-margin-start: 0;
 }
 
 /* Make the white notication box stick out less. */
 #notification-popup-box {
deleted file mode 100644
index aba4e0de0570e5c1fd819eb66151344b6ab12b53..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 56e3b1d277db73960128f9cb99043034749923f6..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index d3172f89ed4c39204f4bcd3c40630826231a321f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 8a5c7c548a7d8dfc73caf274119d3f4fbcc3630a..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index 1ad379a2bdbe5ee797aea3c7ef269c94e99ab1b2..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
index a745c73bb8a049fab9b8d6c6b0979fbc84e86f7d..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -572,17 +572,17 @@ menuitem.bookmark-item {
   opacity: 0.7;
 }
 
 /* ::::: primary toolbar buttons ::::: */
 
 %include ../shared/toolbarbuttons.inc.css
 %include ../shared/menupanel.inc.css
 
-@media (-moz-windows-theme: luna-silver) {
+@media (-moz-windows-theme: luna-silver) and (max-resolution: 1dppx) {
   :-moz-any(@primaryToolbarButtons@),
   #bookmarks-menu-button.toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
     list-style-image: url("chrome://browser/skin/Toolbar-lunaSilver.png");
   }
 
   #loop-button > .toolbarbutton-badge-container {
     list-style-image: url(chrome://browser/skin/loop/toolbar-lunaSilver.png)
   }
--- a/browser/themes/windows/devedition.css
+++ b/browser/themes/windows/devedition.css
@@ -15,22 +15,26 @@
 }
 
 #back-button > .toolbarbutton-icon,
 #forward-button > .toolbarbutton-icon {
   background: var(--chrome-nav-buttons-background) !important;
   border-radius: 0 !important;
   width: auto !important;
   height: auto !important;
-  padding: 2px 6px !important;
+  padding: 2px 5px !important;
   margin: 0 !important;
-  border: none !important;
+  border: 1px solid var(--chrome-nav-bar-controls-border-color) !important;
   box-shadow: none !important;
 }
 
+#forward-button > .toolbarbutton-icon {
+  -moz-border-start: none !important;
+}
+
 /* Override a box shadow for disabled back button */
 #main-window:not([customizing]) #back-button[disabled] > .toolbarbutton-icon {
   box-shadow: none !important;
 }
 
 /* Override !important properties for hovered back button */
 #main-window #back-button:hover:not([disabled="true"]) > .toolbarbutton-icon,
 #main-window #forward-button:hover:not([disabled="true"]) > .toolbarbutton-icon {
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -79,19 +79,16 @@ browser.jar:
         skin/classic/browser/notification-64.png
         skin/classic/browser/pageInfo.css
         skin/classic/browser/pageInfo.png
         skin/classic/browser/pageInfo-XP.png
         skin/classic/browser/pointerLock-16.png
         skin/classic/browser/pointerLock-64.png
         skin/classic/browser/Privacy-16.png
         skin/classic/browser/Privacy-16-XP.png
-        skin/classic/browser/Privacy-32.png
-        skin/classic/browser/Privacy-32-XP.png
-        skin/classic/browser/Privacy-48.png
         skin/classic/browser/privatebrowsing-mask-tabstrip.png
         skin/classic/browser/privatebrowsing-mask-tabstrip-XPVista7.png
         skin/classic/browser/privatebrowsing-mask-titlebar.png
         skin/classic/browser/privatebrowsing-mask-titlebar-XPVista7.png
         skin/classic/browser/privatebrowsing-mask-titlebar-XPVista7-tall.png
         skin/classic/browser/reload-stop-go.png
         skin/classic/browser/searchbar.css
         skin/classic/browser/searchbar-dropdown-arrow.png
@@ -536,17 +533,16 @@ browser.jar:
 
 % override chrome://browser/skin/Info.png                             chrome://browser/skin/Info-XP.png                                 os=WINNT osversion<6
 % override chrome://browser/skin/identity.png                         chrome://browser/skin/identity-XP.png                             os=WINNT osversion<6
 % override chrome://browser/skin/livemark-folder.png                  chrome://browser/skin/livemark-folder-XP.png                      os=WINNT osversion<6
 % override chrome://browser/skin/menu-back.png                        chrome://browser/skin/menu-back-XP.png                            os=WINNT osversion<6
 % override chrome://browser/skin/menu-forward.png                     chrome://browser/skin/menu-forward-XP.png                         os=WINNT osversion<6
 % override chrome://browser/skin/pageInfo.png                         chrome://browser/skin/pageInfo-XP.png                             os=WINNT osversion<6
 % override chrome://browser/skin/Privacy-16.png                       chrome://browser/skin/Privacy-16-XP.png                           os=WINNT osversion<6
-% override chrome://browser/skin/Privacy-32.png                       chrome://browser/skin/Privacy-32-XP.png                           os=WINNT osversion<6
 % override chrome://browser/skin/searchbar-dropdown-arrow.png         chrome://browser/skin/searchbar-dropdown-arrow-XP.png             os=WINNT osversion<6
 % override chrome://browser/skin/Secure24.png                         chrome://browser/skin/Secure24-XP.png                             os=WINNT osversion<6
 % override chrome://browser/skin/downloads/buttons.png                chrome://browser/skin/downloads/buttons-XP.png                    os=WINNT osversion<6
 % override chrome://browser/skin/feeds/feedIcon.png                   chrome://browser/skin/feeds/feedIcon-XP.png                       os=WINNT osversion<6
 % override chrome://browser/skin/feeds/feedIcon16.png                 chrome://browser/skin/feeds/feedIcon16-XP.png                     os=WINNT osversion<6
 % override chrome://browser/skin/places/bookmark.png                  chrome://browser/skin/places/bookmark-XP.png                      os=WINNT osversion<6
 % override chrome://browser/skin/places/query.png                     chrome://browser/skin/places/query-XP.png                         os=WINNT osversion<6
 % override chrome://browser/skin/places/bookmarksMenu.png             chrome://browser/skin/places/bookmarksMenu-XP.png                 os=WINNT osversion<6
--- a/mobile/android/base/tabqueue/TabQueueService.java
+++ b/mobile/android/base/tabqueue/TabQueueService.java
@@ -138,17 +138,17 @@ public class TabQueueService extends Ser
                 startActivity(forwardIntent);
 
                 removeView();
             }
         });
 
         tabQueueHandler.postDelayed(stopServiceRunnable, TOAST_TIMEOUT);
 
-        return START_FLAG_REDELIVERY;
+        return START_REDELIVER_INTENT;
     }
 
     private void removeView() {
         windowManager.removeView(toastLayout);
     }
 
     private void addURLToTabQueue(final Intent intent, final String filename) {
         if (intent == null) {