Merge fxteam to m-c
authorWes Kocher <wkocher@mozilla.com>
Wed, 05 Mar 2014 18:20:17 -0800
changeset 189322 8122ffa9e1aaa473fcfef2a8daf093f79986aa1b
parent 189312 c7d401d189e0ea43a76e27bc909750331225cda9 (current diff)
parent 189321 8b7f3531e937cb939a43c65eec2cda9c87cda9bb (diff)
child 189357 969361ceb21d8bd6f418b75f2805f06550553d78
child 189381 b45fd9a703b915290a7a3bcd39b97f5dc42ad59e
child 189400 e2dc8207f16a7860860fefc36a0a1e71a5bc8f7a
push id3503
push userraliiev@mozilla.com
push dateMon, 28 Apr 2014 18:51:11 +0000
treeherdermozilla-beta@c95ac01e332e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone30.0a1
first release with
nightly linux32
8122ffa9e1aa / 30.0a1 / 20140306030201 / files
nightly linux64
8122ffa9e1aa / 30.0a1 / 20140306030201 / files
nightly mac
8122ffa9e1aa / 30.0a1 / 20140306030201 / files
nightly win32
8122ffa9e1aa / 30.0a1 / 20140306030201 / files
nightly win64
8122ffa9e1aa / 30.0a1 / 20140306030201 / 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 fxteam to m-c
dom/tests/mochitest/notification/chrome.ini
--- a/accessible/tests/mochitest/hittest/a11y.ini
+++ b/accessible/tests/mochitest/hittest/a11y.ini
@@ -1,11 +1,13 @@
 [DEFAULT]
 support-files = zoom_tree.xul
 
 [test_browser.html]
-[text_canvas_hitregion.html]
-skip-if = os == "android" || appname == "b2g"
+[test_canvas_hitregion.html]
+# Disabled everywhere because of failures. It appears this test has
+# never executed since its inception.
+skip-if = true || (os == "android" || appname == "b2g")
 [test_general.html]
 [test_menu.xul]
 [test_zoom.html]
 [test_zoom_text.html]
 [test_zoom_tree.xul]
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -1342,17 +1342,17 @@ let BookmarkingUI = {
       }
       this.notifier.style.transform = transform;
     }
 
     let isInBookmarksToolbar = this.button.classList.contains("bookmark-item");
     if (isInBookmarksToolbar)
       this.notifier.setAttribute("in-bookmarks-toolbar", true);
 
-    let isInOverflowPanel = this.button.classList.contains("overflowedItem");
+    let isInOverflowPanel = this.button.getAttribute("overflowedItem") == "true";
     if (!isInOverflowPanel) {
       this.notifier.setAttribute("notification", "finish");
       this.button.setAttribute("notification", "finish");
     }
 
     this._notificationTimeout = setTimeout( () => {
       this.notifier.removeAttribute("notification");
       this.notifier.removeAttribute("in-bookmarks-toolbar");
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -252,32 +252,32 @@ toolbarpaletteitem > toolbaritem[sdkstyl
 toolbarpaletteitem[removable="false"] {
   opacity: 0.5;
   cursor: default;
 }
 
 #bookmarks-toolbar-placeholder,
 toolbarpaletteitem > #personal-bookmarks > #PlacesToolbar,
 #personal-bookmarks[cui-areatype="menu-panel"] > #PlacesToolbar,
-#personal-bookmarks[cui-areatype="toolbar"].overflowedItem > #PlacesToolbar {
+#personal-bookmarks[cui-areatype="toolbar"][overflowedItem=true] > #PlacesToolbar {
   display: none;
 }
 
 #PlacesToolbarDropIndicatorHolder {
   position: absolute;
   top: 25%;
 }
 
 toolbarpaletteitem > #personal-bookmarks > #bookmarks-toolbar-placeholder,
 #personal-bookmarks[cui-areatype="menu-panel"] > #bookmarks-toolbar-placeholder,
-#personal-bookmarks[cui-areatype="toolbar"].overflowedItem > #bookmarks-toolbar-placeholder {
+#personal-bookmarks[cui-areatype="toolbar"][overflowedItem=true] > #bookmarks-toolbar-placeholder {
   display: -moz-box;
 }
 
-#zoom-controls[cui-areatype="toolbar"]:not(.overflowedItem) > #zoom-reset-button > .toolbarbutton-text {
+#zoom-controls[cui-areatype="toolbar"]:not([overflowedItem=true]) > #zoom-reset-button > .toolbarbutton-text {
   display: -moz-box;
 }
 
 #urlbar-reload-button:not([displaystop]) + #urlbar-stop-button,
 #urlbar-reload-button[displaystop] {
   visibility: collapse;
 }
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -2901,17 +2901,17 @@ const BrowserSearch = {
       openSearchPageIfFieldIsNotActive(searchBar);
     };
     if (placement && placement.area == CustomizableUI.AREA_PANEL) {
       // The panel is not constructed until the first time it is shown.
       PanelUI.show().then(focusSearchBar);
       return;
     }
     if (placement && placement.area == CustomizableUI.AREA_NAVBAR && searchBar &&
-        searchBar.parentNode.classList.contains("overflowedItem")) {
+        searchBar.parentNode.getAttribute("overflowedItem") == "true") {
       let navBar = document.getElementById(CustomizableUI.AREA_NAVBAR);
       navBar.overflowable.show().then(() => {
         focusSearchBar();
       });
       return;
     }
     if (searchBar) {
       if (window.fullScreen)
--- a/browser/components/customizableui/content/panelUI.xml
+++ b/browser/components/customizableui/content/panelUI.xml
@@ -244,21 +244,21 @@
             if (direction == "ltr") {
               edge = anchorRect.left - mainViewRect.left;
               target = "-" + (edge + center);
             } else {
               edge = mainViewRect.right - anchorRect.right;
               target = edge + center;
             }
             this._mainViewContainer.style.transform = "translateX(" + target + "px)";
-            aAnchor.classList.add("panel-multiview-anchor");
+            aAnchor.setAttribute("panel-multiview-anchor", true);
           } else {
             this._mainViewContainer.style.transform = "";
             if (this.anchorElement)
-              this.anchorElement.classList.remove("panel-multiview-anchor");
+              this.anchorElement.removeAttribute("panel-multiview-anchor");
           }
           this.anchorElement = aAnchor;
         ]]></body>
       </method>
 
       <method name="handleEvent">
         <parameter name="aEvent"/>
         <body><![CDATA[
--- a/browser/components/customizableui/src/CustomizableUI.jsm
+++ b/browser/components/customizableui/src/CustomizableUI.jsm
@@ -3322,17 +3322,17 @@ function WidgetSingleWrapper(aWidget, aN
       anchorId = aNode.getAttribute("cui-anchorid");
     }
 
     return anchorId ? aNode.ownerDocument.getElementById(anchorId)
                     : aNode;
   });
 
   this.__defineGetter__("overflowed", function() {
-    return aNode.classList.contains("overflowedItem");
+    return aNode.getAttribute("overflowedItem") == "true";
   });
 
   Object.freeze(this);
 }
 
 /**
  * XULWidgetGroupWrapper is the common interface for interacting with an entire
  * widget group - AKA, all instances of a widget across a series of windows.
@@ -3412,17 +3412,17 @@ function XULWidgetSingleWrapper(aWidgetI
       anchorId = aNode.getAttribute("cui-anchorid");
     }
 
     return anchorId ? aNode.ownerDocument.getElementById(anchorId)
                     : aNode;
   });
 
   this.__defineGetter__("overflowed", function() {
-    return aNode.classList.contains("overflowedItem");
+    return aNode.getAttribute("overflowedItem") == "true";
   });
 
   Object.freeze(this);
 }
 
 const LAZY_RESIZE_INTERVAL_MS = 200;
 
 function OverflowableToolbar(aToolbarNode) {
@@ -3569,17 +3569,17 @@ OverflowableToolbar.prototype = {
 
     let child = this._target.lastChild;
 
     while (child && this._target.scrollLeftMax > 0) {
       let prevChild = child.previousSibling;
 
       if (child.getAttribute("overflows") != "false") {
         this._collapsed.set(child.id, this._target.clientWidth);
-        child.classList.add("overflowedItem");
+        child.setAttribute("overflowedItem", true);
         child.setAttribute("cui-anchorid", this._chevron.id);
         CustomizableUIInternal.notifyListeners("onWidgetOverflow", child, this._target);
 
         this._list.insertBefore(child, this._list.firstChild);
         if (!this._toolbar.hasAttribute("overflowing")) {
           CustomizableUI.addListener(this);
         }
         this._toolbar.setAttribute("overflowing", "true");
@@ -3627,17 +3627,17 @@ OverflowableToolbar.prototype = {
           inserted = true;
           break;
         }
       }
       if (!inserted) {
         this._target.appendChild(child);
       }
       child.removeAttribute("cui-anchorid");
-      child.classList.remove("overflowedItem");
+      child.removeAttribute("overflowedItem");
       CustomizableUIInternal.notifyListeners("onWidgetUnderflow", child, this._target);
     }
 
     let win = this._target.ownerDocument.defaultView;
     win.UpdateUrlbarSearchSplitterState();
 
     if (!this._collapsed.size) {
       this._toolbar.removeAttribute("overflowing");
@@ -3702,17 +3702,17 @@ OverflowableToolbar.prototype = {
       // ... but it is now, then we added to the overflow panel. Exciting stuff:
       if (nowOverflowed) {
         // NB: we're guaranteed that it has a previousSibling, because if it didn't,
         // we would have added it to the toolbar instead. See getOverflowedNextNode.
         let prevId = aNode.previousSibling.id;
         let minSize = this._collapsed.get(prevId);
         this._collapsed.set(aNode.id, minSize);
         aNode.setAttribute("cui-anchorid", this._chevron.id);
-        aNode.classList.add("overflowedItem");
+        aNode.setAttribute("overflowedItem", true);
         CustomizableUIInternal.notifyListeners("onWidgetOverflow", aNode, this._target);
       }
       // If it is not overflowed and not in the toolbar, and was not overflowed
       // either, it moved out of the toolbar. That means there's now space in there!
       // Let's try to move stuff back:
       else if (!nowInBar) {
         this._moveItemsBackToTheirOrigin(true);
       }
@@ -3720,17 +3720,17 @@ OverflowableToolbar.prototype = {
       // fire afterwards; that's ok!
     }
     // If it used to be overflowed...
     else {
       // ... and isn't anymore, let's remove our bookkeeping:
       if (!nowOverflowed) {
         this._collapsed.delete(aNode.id);
         aNode.removeAttribute("cui-anchorid");
-        aNode.classList.remove("overflowedItem");
+        aNode.removeAttribute("overflowedItem");
         CustomizableUIInternal.notifyListeners("onWidgetUnderflow", aNode, this._target);
 
         if (!this._collapsed.size) {
           this._toolbar.removeAttribute("overflowing");
           CustomizableUI.removeListener(this);
         }
       }
       // but if it still is, it must have changed places. Bookkeep:
@@ -3763,16 +3763,16 @@ OverflowableToolbar.prototype = {
     // the new node to the overflow target.
     if (!nextNode.previousSibling) {
       return [this._target, null];
     }
     return [this._list, nextNode];
   },
 
   getContainerFor: function(aNode) {
-    if (aNode.classList.contains("overflowedItem")) {
+    if (aNode.getAttribute("overflowedItem") == "true") {
       return this._list;
     }
     return this._target;
   },
 };
 
 CustomizableUIInternal.initialize();
--- a/browser/components/customizableui/test/browser_884402_customize_from_overflow.js
+++ b/browser/components/customizableui/test/browser_884402_customize_from_overflow.js
@@ -25,17 +25,17 @@ add_task(function() {
   let shownPanelPromise = promisePanelElementShown(window, overflowPanel);
   chevron.click();
   yield shownPanelPromise;
 
   let contextMenu = document.getElementById("toolbar-context-menu");
   let shownContextPromise = contextMenuShown(contextMenu);
   let homeButton = document.getElementById("home-button");
   ok(homeButton, "home-button was found");
-  ok(homeButton.classList.contains("overflowedItem"), "Home button is overflowing");
+  is(homeButton.getAttribute("overflowedItem"), "true", "Home button is overflowing");
   EventUtils.synthesizeMouse(homeButton, 2, 2, {type: "contextmenu", button: 2});
   yield shownContextPromise;
 
   is(overflowPanel.state, "open", "The widget overflow panel should still be open.");
 
   let expectedEntries = [
     [".customize-context-moveToPanel", true],
     [".customize-context-removeFromToolbar", true],
@@ -69,10 +69,10 @@ add_task(function() {
   // In some cases, it can take a tick for the navbar to overflow again. Wait for it:
   yield waitForCondition(() => navbar.hasAttribute("overflowing"));
   ok(navbar.hasAttribute("overflowing"), "Should have an overflowing toolbar.");
 
   let homeButtonPlacement = CustomizableUI.getPlacementOfWidget("home-button");
   ok(homeButtonPlacement, "Home button should still have a placement");
   is(homeButtonPlacement && homeButtonPlacement.area, "nav-bar", "Home button should be back in the navbar now");
 
-  ok(homeButton.classList.contains("overflowedItem"), "Home button should still be overflowed");
+  is(homeButton.getAttribute("overflowedItem"), "true", "Home button should still be overflowed");
 });
--- a/browser/components/customizableui/test/browser_914138_widget_API_overflowable_toolbar.js
+++ b/browser/components/customizableui/test/browser_914138_widget_API_overflowable_toolbar.js
@@ -25,36 +25,36 @@ add_task(function() {
   ok(CustomizableUI.inDefaultState, "Should start in default state.");
 
   window.resizeTo(400, window.outerHeight);
   yield waitForCondition(() => navbar.hasAttribute("overflowing"));
   ok(navbar.hasAttribute("overflowing"), "Should have an overflowing toolbar.");
   ok(!navbar.querySelector("#" + kHomeBtn), "Home button should no longer be in the navbar");
   let homeBtnNode = overflowList.querySelector("#" + kHomeBtn);
   ok(homeBtnNode, "Home button should be overflowing");
-  ok(homeBtnNode && homeBtnNode.classList.contains("overflowedItem"), "Home button should have overflowedItem class");
+  ok(homeBtnNode && homeBtnNode.getAttribute("overflowedItem") == "true", "Home button should have overflowedItem attribute");
 
   let placementOfHomeButton = CustomizableUI.getWidgetIdsInArea(navbar.id).indexOf(kHomeBtn);
   CustomizableUI.addWidgetToArea(kTestBtn1, navbar.id, placementOfHomeButton);
   ok(!navbar.querySelector("#" + kTestBtn1), "New button should not be in the navbar");
   let newButtonNode = overflowList.querySelector("#" + kTestBtn1);
   ok(newButtonNode, "New button should be overflowing");
-  ok(newButtonNode && newButtonNode.classList.contains("overflowedItem"), "New button should have overflowedItem class");
+  ok(newButtonNode && newButtonNode.getAttribute("overflowedItem") == "true", "New button should have overflowedItem attribute");
   let nextEl = newButtonNode && newButtonNode.nextSibling;
   is(nextEl && nextEl.id, kHomeBtn, "Test button should be next to home button.");
 
   window.resizeTo(originalWindowWidth, window.outerHeight);
   yield waitForCondition(() => !navbar.hasAttribute("overflowing"));
   ok(!navbar.hasAttribute("overflowing"), "Should not have an overflowing toolbar.");
   ok(navbar.querySelector("#" + kHomeBtn), "Home button should be in the navbar");
-  ok(homeBtnNode && !homeBtnNode.classList.contains("overflowedItem"), "Home button should no longer have overflowedItem class");
+  ok(homeBtnNode && (homeBtnNode.getAttribute("overflowedItem") != "true"), "Home button should no longer have overflowedItem attribute");
   ok(!overflowList.querySelector("#" + kHomeBtn), "Home button should no longer be overflowing");
   ok(navbar.querySelector("#" + kTestBtn1), "Test button should be in the navbar");
   ok(!overflowList.querySelector("#" + kTestBtn1), "Test button should no longer be overflowing");
-  ok(newButtonNode && !newButtonNode.classList.contains("overflowedItem"), "New button should no longer have overflowedItem class");
+  ok(newButtonNode && (newButtonNode.getAttribute("overflowedItem") != "true"), "New button should no longer have overflowedItem attribute");
   let el = document.getElementById(kTestBtn1);
   if (el) {
     CustomizableUI.removeWidgetFromArea(kTestBtn1);
     el.remove();
   }
   window.resizeTo(originalWindowWidth, window.outerHeight);
 });
 
@@ -96,32 +96,32 @@ add_task(function() {
   ok(CustomizableUI.inDefaultState, "Should start in default state.");
 
   window.resizeTo(400, window.outerHeight);
   yield waitForCondition(() => navbar.hasAttribute("overflowing"));
   ok(navbar.hasAttribute("overflowing"), "Should have an overflowing toolbar.");
   ok(!navbar.querySelector("#" + kHomeBtn), "Home button should no longer be in the navbar");
   let homeBtnNode = overflowList.querySelector("#" + kHomeBtn);
   ok(homeBtnNode, "Home button should be overflowing");
-  ok(homeBtnNode && homeBtnNode.classList.contains("overflowedItem"), "Home button should have overflowedItem class");
+  ok(homeBtnNode && homeBtnNode.getAttribute("overflowedItem") == "true", "Home button should have overflowedItem class");
 
   let testBtnSpec = {id: kTestBtn3, label: "Overflowable widget test", defaultArea: "nav-bar"};
   CustomizableUI.createWidget(testBtnSpec);
   let testNode = overflowList.querySelector("#" + kTestBtn3);
   ok(testNode, "Test button should be overflowing");
-  ok(testNode && testNode.classList.contains("overflowedItem"), "Test button should have overflowedItem class");
+  ok(testNode && testNode.getAttribute("overflowedItem") == "true", "Test button should have overflowedItem class");
 
   CustomizableUI.destroyWidget(kTestBtn3);
   testNode = document.getElementById(kTestBtn3);
   ok(!testNode, "Test button should be gone");
 
   CustomizableUI.createWidget(testBtnSpec);
   testNode = overflowList.querySelector("#" + kTestBtn3);
   ok(testNode, "Test button should be overflowing");
-  ok(testNode && testNode.classList.contains("overflowedItem"), "Test button should have overflowedItem class");
+  ok(testNode && testNode.getAttribute("overflowedItem") == "true", "Test button should have overflowedItem class");
 
   CustomizableUI.removeWidgetFromArea(kTestBtn3);
   testNode = document.getElementById(kTestBtn3);
   ok(!testNode, "Test button should be gone");
   CustomizableUI.destroyWidget(kTestBtn3);
   window.resizeTo(originalWindowWidth, window.outerHeight);
 });
 
--- a/browser/components/sessionstore/test/browser.ini
+++ b/browser/components/sessionstore/test/browser.ini
@@ -81,17 +81,16 @@ support-files =
 [browser_upgrade_backup.js]
 [browser_windowRestore_perwindowpb.js]
 [browser_248970_b_perwindowpb.js]
 # Disabled because of leaks.
 # Re-enabling and rewriting this test is tracked in bug 936919.
 skip-if = true
 [browser_339445.js]
 [browser_345898.js]
-[browser_346337.js]
 [browser_350525.js]
 [browser_354894_perwindowpb.js]
 [browser_367052.js]
 [browser_393716.js]
 [browser_394759_basic.js]
 # Disabled for intermittent failures, bug 944372.
 skip-if = true
 [browser_394759_behavior.js]
--- a/browser/devtools/commandline/test/browser.ini
+++ b/browser/devtools/commandline/test/browser.ini
@@ -44,18 +44,20 @@ support-files =
 [browser_cmd_pref3.js]
 [browser_cmd_restart.js]
 [browser_cmd_screenshot.js]
 support-files =
   browser_cmd_screenshot.html
 [browser_cmd_settings.js]
 [browser_gcli_async.js]
 [browser_gcli_canon.js]
-[browser_gcli_cli.js]
-[browser_gcli_completion.js]
+[browser_gcli_cli1.js]
+[browser_gcli_cli2.js]
+[browser_gcli_completion1.js]
+[browser_gcli_completion2.js]
 [browser_gcli_date.js]
 skip-if = true # Disabled until TZ bug is fixed
 [browser_gcli_exec.js]
 [browser_gcli_fail.js]
 [browser_gcli_file.js]
 [browser_gcli_focus.js]
 [browser_gcli_history.js]
 [browser_gcli_incomplete.js]
--- a/browser/devtools/sourceeditor/test/browser.ini
+++ b/browser/devtools/sourceeditor/test/browser.ini
@@ -20,9 +20,8 @@ support-files =
 [browser_editor_history.js]
 [browser_editor_markers.js]
 [browser_editor_movelines.js]
 [browser_editor_addons.js]
 [browser_codemirror.js]
 [browser_css_autocompletion.js]
 [browser_css_statemachine.js]
 [browser_vimemacs.js]
-[browser_sourceeditor_initialization.js]
--- a/browser/themes/osx/browser.css
+++ b/browser/themes/osx/browser.css
@@ -1018,26 +1018,26 @@ toolbar .toolbarbutton-1:not([type="menu
     -moz-image-region: rect(0px, 256px, 64px, 192px);
   }
 
   #bookmarks-menu-button[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #bookmarks-menu-button {
     -moz-image-region: rect(0px, 320px, 64px, 256px);
   }
 
-  #bookmarks-menu-button[cui-areatype="menu-panel"].panel-multiview-anchor {
+  #bookmarks-menu-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
     -moz-image-region: rect(64px, 320px, 128px, 256px);
   }
 
   #history-panelmenu[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #history-panelmenu {
     -moz-image-region: rect(0px, 448px, 64px, 384px);
   }
 
-  #history-panelmenu[cui-areatype="menu-panel"].panel-multiview-anchor {
+  #history-panelmenu[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
     -moz-image-region: rect(64px, 448px, 128px, 384px);
   }
 
   #downloads-button[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #downloads-button {
     -moz-image-region: rect(0px, 512px, 64px, 448px);
   }
 
@@ -1071,17 +1071,17 @@ toolbar .toolbarbutton-1:not([type="menu
     -moz-image-region: rect(0px, 896px, 64px, 832px);
   }
 
   #characterencoding-button[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #characterencoding-button {
     -moz-image-region: rect(0, 960px, 64px, 896px);
   }
 
-  #characterencoding-button[cui-areatype="menu-panel"].panel-multiview-anchor {
+  #characterencoding-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
     -moz-image-region: rect(64px, 960px, 128px, 896px);
   }
 
   #new-window-button[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #new-window-button {
     -moz-image-region: rect(0px, 1024px, 64px, 960px);
   }
 
@@ -1115,17 +1115,17 @@ toolbar .toolbarbutton-1:not([type="menu
     -moz-image-region: rect(0px, 1408px, 64px, 1344px);
   }
 
   #developer-button[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #developer-button {
     -moz-image-region: rect(0px, 1472px, 64px, 1408px);
   }
 
-  #developer-button[cui-areatype="menu-panel"].panel-multiview-anchor {
+  #developer-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
     -moz-image-region: rect(64px, 1472px, 128px, 1408px);
   }
 
   #preferences-button[cui-areatype="menu-panel"],
   toolbarpaletteitem[place="palette"] > #preferences-button {
     -moz-image-region: rect(0px, 1536px, 64px, 1472px);
   }
 
@@ -1528,22 +1528,22 @@ toolbarbutton[sdk-button="true"][cui-are
 }
 
 #zoom-out-button:-moz-locale-dir(rtl),
 #zoom-in-button:-moz-locale-dir(ltr) {
   border-top-left-radius: 0;
   border-bottom-left-radius: 0;
 }
 
-#zoom-controls[cui-areatype="toolbar"]:not(.overflowedItem) > #zoom-reset-button {
+#zoom-controls[cui-areatype="toolbar"]:not([overflowedItem=true]) > #zoom-reset-button {
   min-width: 0;
   margin: 0;
 }
 
-#zoom-controls[cui-areatype="toolbar"]:not(.overflowedItem) > #zoom-reset-button > .toolbarbutton-text {
+#zoom-controls[cui-areatype="toolbar"]:not([overflowedItem=true]) > #zoom-reset-button > .toolbarbutton-text {
   padding-top: 8px;
   margin: 2px;
 }
 
 /* sync button */
 
 #sync-button[status="active"] {
   list-style-image: url("chrome://browser/skin/sync-throbber.png");
--- a/browser/themes/osx/customizableui/panelUIOverlay.css
+++ b/browser/themes/osx/customizableui/panelUIOverlay.css
@@ -1,16 +1,16 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 %include ../../shared/customizableui/panelUIOverlay.inc.css
 
 @media (min-resolution: 2dppx) {
-  toolbarbutton.panel-multiview-anchor {
+  toolbarbutton[panel-multiview-anchor=true] {
     background-image: url(chrome://browser/skin/customizableui/subView-arrow-back-inverted@2x.png),
                       linear-gradient(rgba(255,255,255,0.3), rgba(255,255,255,0));
     background-size: 16px, auto;
   }
 
   #PanelUI-fxa-status {
     list-style-image: url(chrome://browser/skin/sync-horizontalbar@2x.png);
   }
--- a/browser/themes/shared/browser.inc
+++ b/browser/themes/shared/browser.inc
@@ -1,5 +1,5 @@
 %filter substitution
 
 %define primaryToolbarButtons #back-button, #forward-button, #home-button, #print-button, #downloads-button, #bookmarks-menu-button, #new-tab-button, #new-window-button, #cut-button, #copy-button, #paste-button, #fullscreen-button, #zoom-out-button, #zoom-reset-button, #zoom-in-button, #sync-button, #feed-button, #tabview-button, #webrtc-status-button, #social-share-button, #open-file-button, #find-button, #developer-button, #preferences-button, #privatebrowsing-button, #save-page-button, #switch-to-metro-button, #add-ons-button, #history-panelmenu, #nav-bar-overflow-button, #PanelUI-menu-button, #characterencoding-button, #email-link-button
-%define inAnyPanel :-moz-any(:not([cui-areatype="toolbar"]),.overflowedItem)
+%define inAnyPanel :-moz-any(:not([cui-areatype="toolbar"]), [overflowedItem=true])
 %define nestedButtons #zoom-out-button, #zoom-in-button, #cut-button, #copy-button, #paste-button
--- a/browser/themes/shared/customizableui/panelUIOverlay.inc.css
+++ b/browser/themes/shared/customizableui/panelUIOverlay.inc.css
@@ -688,32 +688,32 @@ menuitem.subviewbutton@menuStateActive@,
 
 #PanelUI-recentlyClosedWindows > toolbarbutton > .toolbarbutton-icon,
 #PanelUI-recentlyClosedTabs > toolbarbutton > .toolbarbutton-icon,
 #PanelUI-historyItems > toolbarbutton > .toolbarbutton-icon {
   width: 16px;
   height: 16px;
 }
 
-#PanelUI-footer > #PanelUI-footer-inner.panel-multiview-anchor,
-toolbarbutton.panel-multiview-anchor {
+#PanelUI-footer > #PanelUI-footer-inner[panel-multiview-anchor=true],
+toolbarbutton[panel-multiview-anchor=true] {
   background-color: Highlight;
   background-image: linear-gradient(rgba(255,255,255,0.3), rgba(255,255,255,0));
 }
 
-toolbarbutton.panel-multiview-anchor {
+toolbarbutton[panel-multiview-anchor=true] {
   background-image: url(chrome://browser/skin/customizableui/subView-arrow-back-inverted.png),
                     linear-gradient(rgba(255,255,255,0.3), rgba(255,255,255,0));
   background-position: right 5px center;
   background-repeat: no-repeat;
 }
 
-#PanelUI-footer > #PanelUI-footer-inner.panel-multiview-anchor,
-toolbarbutton.panel-multiview-anchor,
-toolbarbutton.panel-multiview-anchor > .toolbarbutton-menubutton-button {
+#PanelUI-footer > #PanelUI-footer-inner[panel-multiview-anchor=true],
+toolbarbutton[panel-multiview-anchor=true],
+toolbarbutton[panel-multiview-anchor=true] > .toolbarbutton-menubutton-button {
   color: HighlightText;
 }
 
 toolbarpaletteitem[place="palette"] > .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker,
 #bookmarks-menu-button[cui-areatype="menu-panel"] > .toolbarbutton-menubutton-dropmarker {
   display: none;
 }
 
@@ -839,17 +839,18 @@ toolbarpaletteitem[place="palette"] > #s
 }
 
 #widget-overflow-list {
   width: @menuPanelWidth@;
   padding-left: 10px;
   padding-right: 10px;
 }
 
-#widget-overflow-list > .overflowedItem {
+toolbaritem[overflowedItem=true],
+toolbarbutton[overflowedItem=true] {
   width: 100%;
   max-width: @menuPanelWidth@;
   min-height: 36px;
   background-repeat: no-repeat;
   background-position: 0 center;
 }
 
 #widget-overflow-list > toolbarbutton,
--- a/browser/themes/shared/menupanel.inc.css
+++ b/browser/themes/shared/menupanel.inc.css
@@ -10,26 +10,26 @@ toolbarpaletteitem[place="palette"] > #h
   -moz-image-region: rect(0px, 128px, 32px, 96px);
 }
 
 #bookmarks-menu-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #bookmarks-menu-button {
   -moz-image-region: rect(0px, 160px, 32px, 128px);
 }
 
-#bookmarks-menu-button[cui-areatype="menu-panel"].panel-multiview-anchor {
+#bookmarks-menu-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
   -moz-image-region: rect(32px, 160px, 64px, 128px);
 }
 
 #history-panelmenu[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #history-panelmenu {
   -moz-image-region: rect(0px, 224px, 32px, 192px);
 }
 
-#history-panelmenu[cui-areatype="menu-panel"].panel-multiview-anchor {
+#history-panelmenu[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
   -moz-image-region: rect(32px, 224px, 64px, 192px);
 }
 
 #downloads-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #downloads-button {
   -moz-image-region: rect(0px, 256px, 32px, 224px);
 }
 
@@ -63,17 +63,17 @@ toolbarpaletteitem[place="palette"] > #s
   -moz-image-region: rect(0px, 448px, 32px, 416px);
 }
 
 #characterencoding-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #characterencoding-button {
   -moz-image-region: rect(0px, 480px, 32px, 448px);
 }
 
-#characterencoding-button[cui-areatype="menu-panel"].panel-multiview-anchor {
+#characterencoding-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
   -moz-image-region: rect(32px, 480px, 64px, 448px);
 }
 
 #new-window-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #new-window-button {
   -moz-image-region: rect(0px, 512px, 32px, 480px);
 }
 
@@ -107,17 +107,17 @@ toolbarpaletteitem[place="palette"] > #f
   -moz-image-region: rect(0px, 704px, 32px, 672px);
 }
 
 #developer-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #developer-button {
   -moz-image-region: rect(0px, 736px, 32px, 704px);
 }
 
-#developer-button[cui-areatype="menu-panel"].panel-multiview-anchor {
+#developer-button[cui-areatype="menu-panel"][panel-multiview-anchor=true] {
   -moz-image-region: rect(32px, 736px, 64px, 704px);
 }
 
 #preferences-button[cui-areatype="menu-panel"],
 toolbarpaletteitem[place="palette"] > #preferences-button {
   -moz-image-region: rect(0px, 768px, 32px, 736px);
 }
 
--- a/browser/themes/windows/browser.css
+++ b/browser/themes/windows/browser.css
@@ -473,18 +473,18 @@ menuitem.bookmark-item {
   opacity: .4;
 }
 
 .toolbarbutton-1 > .toolbarbutton-menu-dropmarker,
 .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker {
   list-style-image: url("chrome://browser/skin/toolbarbutton-dropdown-arrow.png");
 }
 
-.toolbarbutton-1 > .toolbarbutton-menu-dropmarker:-moz-lwtheme-brighttext,
-.toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker:-moz-lwtheme-brighttext {
+toolbar .toolbarbutton-1 > .toolbarbutton-menu-dropmarker:-moz-lwtheme-brighttext,
+toolbar .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker:-moz-lwtheme-brighttext {
   list-style-image: url("chrome://browser/skin/toolbarbutton-dropdown-arrow-inverted.png");
 }
 
 .toolbarbutton-1 > .toolbarbutton-icon,
 .toolbarbutton-1 > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
   -moz-margin-end: 0;
 }
 
@@ -1457,17 +1457,17 @@ toolbarbutton[type="socialmark"] > .tool
 #bookmarks-menu-button.bookmark-item[starred] {
   -moz-image-region: rect(0px 48px 16px 32px);
 }
 
 #bookmarks-menu-button.bookmark-item > .toolbarbutton-menubutton-button > .toolbarbutton-icon {
   -moz-margin-start: 5px;
 }
 
-#bookmarks-menu-button[cui-areatype="toolbar"]:not(.bookmark-item):not(.overflowedItem) > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
+#bookmarks-menu-button[cui-areatype="toolbar"]:not(.bookmark-item):not([overflowedItem=true]) > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon {
   padding-top: 2px;
   padding-bottom: 2px;
 }
 
 #BMB_bookmarksPopup[side="top"],
 #BMB_bookmarksPopup[side="bottom"] {
   margin-left: -20px;
   margin-right: -20px;
--- a/dom/encoding/test/unit/mochitest.ini
+++ b/dom/encoding/test/unit/mochitest.ini
@@ -2,9 +2,8 @@
 
 [test_big5.js]
 [test_euc-jp.js]
 [test_euc-kr.js]
 [test_gbk.js]
 [test_hz-gb-2312.js]
 [test_iso-2022-jp.js]
 [test_shift_jis.js]
-[test_singlebytes.js]
--- a/dom/imptests/html/mochitest.ini
+++ b/dom/imptests/html/mochitest.ini
@@ -167,67 +167,67 @@ support-files =
 [html/browsers/browsing-the-web/read-media/test_pageload-video.html]
 [html/browsers/the-window-object/named-access-on-the-window-object/test_window-null-names.html]
 [html/browsers/the-window-object/test_window-indexed-properties-strict.html]
 [html/browsers/the-window-object/test_window-indexed-properties.html]
 [html/browsers/the-window-object/test_window-named-properties.html]
 skip-if = true # bug 859075
 [html/browsers/the-window-object/test_window-properties.html]
 [html/browsers/the-window-object/test_window-prototype-chain.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-case.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-case.xhtml]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-id.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-id.xhtml]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-namespace.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-namespace.xhtml]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-newelements.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-newelements.xhtml]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-null-undef.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-null-undef.xhtml]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-param.html]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-param.xhtml]
-[html/dom/documents/dom-tree-accessors/document.getElementsByName/test_document.getElementsByName-same.html]
-[html/dom/documents/dom-tree-accessors/test_Document.getElementsByClassName-null-undef.html]
-[html/dom/documents/dom-tree-accessors/test_Element.getElementsByClassName-null-undef.html]
-[html/dom/documents/dom-tree-accessors/test_document.body-getter.html]
-[html/dom/documents/dom-tree-accessors/test_document.body-setter-01.html]
-[html/dom/documents/dom-tree-accessors/test_document.embeds-document.plugins-01.html]
-[html/dom/documents/dom-tree-accessors/test_document.getElementsByClassName-same.html]
-[html/dom/documents/dom-tree-accessors/test_document.head-01.html]
-[html/dom/documents/dom-tree-accessors/test_document.head-02.html]
-[html/dom/documents/dom-tree-accessors/test_document.images.html]
-[html/dom/documents/dom-tree-accessors/test_document.title-01.html]
-[html/dom/documents/dom-tree-accessors/test_document.title-02.xhtml]
-[html/dom/documents/dom-tree-accessors/test_document.title-03.html]
-[html/dom/documents/dom-tree-accessors/test_document.title-04.xhtml]
-[html/dom/documents/dom-tree-accessors/test_document.title-05.html]
-[html/dom/documents/dom-tree-accessors/test_document.title-06.html]
-[html/dom/documents/dom-tree-accessors/test_document.title-07.html]
-[html/dom/documents/dom-tree-accessors/test_nameditem-01.html]
-[html/dom/documents/dom-tree-accessors/test_nameditem-02.html]
-[html/dom/documents/dom-tree-accessors/test_nameditem-03.html]
-[html/dom/documents/dom-tree-accessors/test_nameditem-04.html]
-[html/dom/documents/dom-tree-accessors/test_nameditem-05.html]
-[html/dom/documents/dom-tree-accessors/test_nameditem-06.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-case.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-case.xhtml]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-id.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-id.xhtml]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-namespace.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-namespace.xhtml]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-newelements.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-newelements.xhtml]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-null-undef.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-null-undef.xhtml]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-param.html]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-param.xhtml]
+[html/dom/documents/dta/doc.gEBN/test_document.getElementsByName-same.html]
+[html/dom/documents/dta/test_Document.getElementsByClassName-null-undef.html]
+[html/dom/documents/dta/test_Element.getElementsByClassName-null-undef.html]
+[html/dom/documents/dta/test_document.body-getter.html]
+[html/dom/documents/dta/test_document.body-setter-01.html]
+[html/dom/documents/dta/test_document.embeds-document.plugins-01.html]
+[html/dom/documents/dta/test_document.getElementsByClassName-same.html]
+[html/dom/documents/dta/test_document.head-01.html]
+[html/dom/documents/dta/test_document.head-02.html]
+[html/dom/documents/dta/test_document.images.html]
+[html/dom/documents/dta/test_document.title-01.html]
+[html/dom/documents/dta/test_document.title-02.xhtml]
+[html/dom/documents/dta/test_document.title-03.html]
+[html/dom/documents/dta/test_document.title-04.xhtml]
+[html/dom/documents/dta/test_document.title-05.html]
+[html/dom/documents/dta/test_document.title-06.html]
+[html/dom/documents/dta/test_document.title-07.html]
+[html/dom/documents/dta/test_nameditem-01.html]
+[html/dom/documents/dta/test_nameditem-02.html]
+[html/dom/documents/dta/test_nameditem-03.html]
+[html/dom/documents/dta/test_nameditem-04.html]
+[html/dom/documents/dta/test_nameditem-05.html]
+[html/dom/documents/dta/test_nameditem-06.html]
 [html/dom/elements/global-attributes/test_classlist-nonstring.html]
 [html/dom/elements/global-attributes/test_dataset-delete.html]
 [html/dom/elements/global-attributes/test_dataset-enumeration.html]
 [html/dom/elements/global-attributes/test_dataset-get.html]
 [html/dom/elements/global-attributes/test_dataset-prototype.html]
 [html/dom/elements/global-attributes/test_dataset-set.html]
 [html/dom/elements/global-attributes/test_dataset.html]
 [html/dom/elements/global-attributes/test_document-dir.html]
 [html/dom/elements/global-attributes/test_id-attribute.html]
 [html/dom/elements/global-attributes/test_id-name.html]
-[html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/test_document-color-01.html]
-[html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/test_document-color-02.html]
-[html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/test_document-color-03.html]
-[html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/test_document-color-04.html]
-[html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/test_heading-obsolete-attributes-01.html]
-[html/obsolete/requirements-for-implementations/other-elements-attributes-and-apis/test_script-IDL-event-htmlfor.html]
+[html/obsolete/implreq/oeaaa/test_document-color-01.html]
+[html/obsolete/implreq/oeaaa/test_document-color-02.html]
+[html/obsolete/implreq/oeaaa/test_document-color-03.html]
+[html/obsolete/implreq/oeaaa/test_document-color-04.html]
+[html/obsolete/implreq/oeaaa/test_heading-obsolete-attributes-01.html]
+[html/obsolete/implreq/oeaaa/test_script-IDL-event-htmlfor.html]
 [html/semantics/document-metadata/the-title-element/test_title.text-01.html]
 [html/semantics/document-metadata/the-title-element/test_title.text-02.xhtml]
 [html/semantics/document-metadata/the-title-element/test_title.text-03.html]
 [html/semantics/document-metadata/the-title-element/test_title.text-04.xhtml]
 [html/semantics/forms/the-form-element/test_form-elements-interfaces-01.html]
 [html/semantics/forms/the-form-element/test_form-elements-matches.html]
 [html/semantics/forms/the-form-element/test_form-elements-nameditem-01.html]
 [html/semantics/forms/the-form-element/test_form-elements-nameditem-02.html]
deleted file mode 100644
--- a/dom/tests/mochitest/notification/chrome.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[DEFAULT]
-
-[test_system_principal.xul]
--- a/dom/tests/mochitest/notification/moz.build
+++ b/dom/tests/mochitest/notification/moz.build
@@ -1,10 +1,7 @@
 # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
 # vim: set filetype=python:
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 MOCHITEST_MANIFESTS += ['mochitest.ini']
-
-MOCHITEST_CHROME_MANIFESTS += ['chrome.ini']
-
--- a/dom/tests/mochitest/webcomponents/mochitest.ini
+++ b/dom/tests/mochitest/webcomponents/mochitest.ini
@@ -1,20 +1,20 @@
 [DEFAULT]
 support-files =
   inert_style.css
 
 [test_bug900724.html]
 [test_content_element.html]
 [test_nested_content_element.html]
-[test_dyanmic_content_element_matching.html]
+[test_dynamic_content_element_matching.html]
 [test_document_register.html]
 [test_document_register_base_queue.html]
 [test_document_register_lifecycle.html]
 [test_document_register_parser.html]
 [test_document_register_stack.html]
 [test_template.html]
-[test_shadow_root.html]
-[test_shadow_root_inert_element.html]
-[test_shadow_root_style.html]
-[test_shadow_root_style_multiple_shadow.html]
-[test_shadow_root_style_order.html]
+[test_shadowroot.html]
+[test_shadowroot_inert_element.html]
+[test_shadowroot_style.html]
+[test_shadowroot_style_multiple_shadow.html]
+[test_shadowroot_style_order.html]
 [test_style_fallback_content.html]
--- a/mobile/android/base/home/HomePager.java
+++ b/mobile/android/base/home/HomePager.java
@@ -211,20 +211,18 @@ public class HomePager extends ViewPager
     public boolean isLoaded() {
         return mLoaded;
     }
 
     @Override
     public void setCurrentItem(int item, boolean smoothScroll) {
         super.setCurrentItem(item, smoothScroll);
 
-        // Android doesn't call onPageSelected when there is only one page. Make sure we activate
-        // the banner in this case.
-        if (mHomeBanner != null && getAdapter().getCount() == 1) {
-            mHomeBanner.setActive(true);
+        if (mDecor != null) {
+            mDecor.onPageSelected(item);
         }
     }
 
     @Override
     public boolean onInterceptTouchEvent(MotionEvent event) {
         if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
             // Drop the soft keyboard by stealing focus from the URL bar.
             requestFocus();
@@ -258,20 +256,16 @@ public class HomePager extends ViewPager
         if (!mLoaded) {
             return;
         }
 
         if (mDecor != null) {
             mDecor.removeAllPagerViews();
         }
 
-        if (mHomeBanner != null) {
-            mHomeBanner.setActive(false);
-        }
-
         final HomeAdapter adapter = (HomeAdapter) getAdapter();
 
         // Destroy any existing panels currently loaded
         // in the pager.
         setAdapter(null);
 
         // Only keep enabled panels.
         final List<PanelConfig> enabledPanels = new ArrayList<PanelConfig>();
--- a/python/mozbuild/mozbuild/frontend/emitter.py
+++ b/python/mozbuild/mozbuild/frontend/emitter.py
@@ -471,17 +471,26 @@ class TreeMetadataEmitter(LoggingMixin):
             obj = TestManifest(sandbox, path, m, flavor=flavor,
                 install_prefix=install_prefix,
                 relpath=mozpath.join(manifest_reldir, mozpath.basename(path)),
                 dupe_manifest='dupe-manifest' in defaults)
 
             filtered = m.tests
 
             if filter_inactive:
-                filtered = m.active_tests(disabled=False, **self.mozinfo)
+                # We return tests that don't exist because we want manifests
+                # defining tests that don't exist to result in error.
+                filtered = m.active_tests(exists=False, disabled=False,
+                    **self.mozinfo)
+
+                missing = [t['name'] for t in filtered if not os.path.exists(t['path'])]
+                if missing:
+                    raise SandboxValidationError('Test manifest (%s) lists '
+                        'test that does not exist: %s' % (
+                        path, ', '.join(missing)))
 
             out_dir = mozpath.join(install_prefix, manifest_reldir)
 
             # "head" and "tail" lists.
             # All manifests support support-files.
             #
             # Keep a set of already seen support file patterns, because
             # repeatedly processing the patterns from the default section
new file mode 100644
new file mode 100644
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/frontend/data/test-manifest-missing-test-file/mochitest.ini
@@ -0,0 +1,1 @@
+[test_missing.html]
new file mode 100644
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/frontend/data/test-manifest-missing-test-file/moz.build
@@ -0,0 +1,4 @@
+# Any copyright is dedicated to the Public Domain.
+# http://creativecommons.org/publicdomain/zero/1.0/
+
+MOCHITEST_MANIFESTS += ['mochitest.ini']
new file mode 100644
--- a/python/mozbuild/mozbuild/test/frontend/test_emitter.py
+++ b/python/mozbuild/mozbuild/test/frontend/test_emitter.py
@@ -471,16 +471,24 @@ class TestEmitterBasic(unittest.TestCase
 
         o = objs[0]
 
         expected = mozpath.join(o.srcdir, 'support-file.txt')
         self.assertIn(expected, o.installs)
         self.assertEqual(o.installs[expected],
             ('testing/mochitest/tests/child/support-file.txt', False))
 
+    def test_test_manifest_missing_test_error(self):
+        """Missing test files should result in error."""
+        reader = self.reader('test-manifest-missing-test-file')
+
+        with self.assertRaisesRegexp(SandboxValidationError,
+            'lists test that does not exist: test_missing.html'):
+            self.read_topsrcdir(reader)
+
     def test_ipdl_sources(self):
         reader = self.reader('ipdl_sources')
         objs = self.read_topsrcdir(reader)
 
         ipdls = []
         for o in objs:
             if isinstance(o, IPDLFile):
                 ipdls.append('%s/%s' % (o.relativedir, o.basename))
--- a/toolkit/themes/windows/global/inContentUI.css
+++ b/toolkit/themes/windows/global/inContentUI.css
@@ -20,28 +20,26 @@
                     url("chrome://global/skin/inContentUI/background-texture.png");
 }
 
 html|html {
   font: message-box;
 }
 
 %ifdef WINDOWS_AERO
-@media (-moz-windows-default-theme) {
+@media (-moz-windows-default-theme) and (-moz-os-version: windows-vista),
+       (-moz-windows-default-theme) and (-moz-os-version: windows-win7) {
   *|*:root {
     color: #000;
     background-color: #CCD9EA;
-    background-image: /* Texture */
-                      url("chrome://global/skin/inContentUI/background-texture.png");
   }
 }
 
-@media (-moz-windows-compositor) {
+@media (-moz-windows-glass) {
   *|*:root {
-    color: #000;
     /* Blame shorlander for this monstrosity. */
     background-image: /* Side gradients */
                       linear-gradient(to right,
                                       rgba(255,255,255,0.2), rgba(255,255,255,0) 40%,
                                       rgba(255,255,255,0) 60%, rgba(255,255,255,0.2)),
                       /* Aero-style light beams */
                       -moz-linear-gradient(left 32deg,
                                            /* First light beam */
@@ -69,17 +67,17 @@ html|html {
   background-color: rgba(255, 255, 255, 0.35);
   background-image: linear-gradient(rgba(255, 255, 255, 0),
                                     rgba(255, 255, 255, 0.75));
   border: 1px solid #C3CEDF;
   border-radius: 5px;
 }
 
 %ifdef WINDOWS_AERO
-@media (-moz-windows-compositor) {
+@media (-moz-windows-glass) {
   /* Buttons */
   *|button,
   menulist,
   colorpicker[type="button"] {
     -moz-appearance: none;
     color: black;
     padding: 0 5px;
     background: linear-gradient(rgba(251, 252, 253, 0.95), rgba(246, 247, 248, 0) 49%,