Merge inbound to mozilla-central a=merge
authorarthur.iakab <aiakab@mozilla.com>
Sat, 25 Aug 2018 06:35:21 +0300
changeset 488506 aa9cb0d8ffbf
parent 488489 2d747f83e537 (current diff)
parent 488505 e2e9f54416db (diff)
child 488507 4c64041c3a30
child 488511 0d646dd687ba
child 488516 588afcdd2f33
push id9723
push userarchaeopteryx@coole-files.de
push dateSat, 25 Aug 2018 16:16:06 +0000
treeherdermozilla-beta@4c64041c3a30 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone63.0a1
first release with
nightly linux32
aa9cb0d8ffbf / 63.0a1 / 20180825100331 / files
nightly linux64
aa9cb0d8ffbf / 63.0a1 / 20180825100331 / files
nightly mac
aa9cb0d8ffbf / 63.0a1 / 20180825100331 / files
nightly win32
aa9cb0d8ffbf / 63.0a1 / 20180825100331 / files
nightly win64
aa9cb0d8ffbf / 63.0a1 / 20180825100331 / 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 inbound to mozilla-central a=merge
browser/base/content/tabbrowser.xml
--- a/accessible/html/HTMLFormControlAccessible.cpp
+++ b/accessible/html/HTMLFormControlAccessible.cpp
@@ -302,17 +302,21 @@ already_AddRefed<nsIPersistentProperties
 HTMLTextFieldAccessible::NativeAttributes()
 {
   nsCOMPtr<nsIPersistentProperties> attributes =
     HyperTextAccessibleWrap::NativeAttributes();
 
   // Expose type for text input elements as it gives some useful context,
   // especially for mobile.
   nsAutoString type;
-  if (mContent->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::type, type)) {
+  // In the case of input[type=number], mContent is anonymous and is an
+  // input[type=text]. Getting the root not-anonymous content will give
+  // us the right type. In case of other input types, this returns the same node.
+  nsIContent* content = mContent->FindFirstNonChromeOnlyAccessContent();
+  if (content->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::type, type)) {
     nsAccUtils::SetAccAttr(attributes, nsGkAtoms::textInputType, type);
     if (!ARIARoleMap() && type.EqualsLiteral("search")) {
       nsAccUtils::SetAccAttr(attributes, nsGkAtoms::xmlroles,
                              NS_LITERAL_STRING("searchbox"));
     }
   }
 
   return attributes.forget();
--- a/accessible/tests/mochitest/attributes/test_obj.html
+++ b/accessible/tests/mochitest/attributes/test_obj.html
@@ -109,16 +109,17 @@ https://bugzilla.mozilla.org/show_bug.cg
       // text input type
       testAbsentAttrs("button", { "text-input-type": "button"});
       testAbsentAttrs("checkbox", { "text-input-type": "checkbox"});
       testAbsentAttrs("radio", { "text-input-type": "radio"});
       testAttrs("email", {"text-input-type": "email"}, true);
       testAttrs("search", {"text-input-type": "search"}, true);
       testAttrs("tel", {"text-input-type": "tel"}, true);
       testAttrs("url", {"text-input-type": "url"}, true);
+      testAttrs(getAccessible("number").firstChild, {"text-input-type": "number"}, true);
 
       // ARIA
       testAttrs("searchbox", {"text-input-type": "search"}, true);
 
       // html
       testAttrs("radio", {"checkable": "true"}, true);
       testAttrs("checkbox", {"checkable": "true"}, true);
       testAttrs("draggable", {"draggable": "true"}, true);
@@ -215,16 +216,17 @@ https://bugzilla.mozilla.org/show_bug.cg
   </div>
 
   <!-- text input type -->
   <input id="button" type="button"/>
   <input id="email" type="email"/>
   <input id="search" type="search"/>
   <input id="tel" type="tel"/>
   <input id="url" type="url"/>
+  <input id="number" type="number"/>
   <div id="searchbox" role="searchbox"></div>
 
   <!-- html -->
   <input id="radio" type="radio"/>
   <input id="checkbox" type="checkbox"/>
   <div id="draggable" draggable="true">Draggable div</div>
   <table>
     <tr>
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -548,17 +548,18 @@
                 scrollButtonWidth: arrowScrollbox._scrollButtonDown.getBoundingClientRect().width
               };
             }
 
             let width = 0;
             for (let i = numPinned - 1; i >= 0; i--) {
               let tab = this.children[i];
               width += layoutData.pinnedTabWidth;
-              tab.style.marginInlineStart = -(width + layoutData.scrollButtonWidth) + "px";
+              tab.style.setProperty("margin-inline-start",
+                -(width + layoutData.scrollButtonWidth) + "px", "important");
               tab._pinnedUnscrollable = true;
             }
             this.style.paddingInlineStart = width + "px";
           } else {
             this.removeAttribute("positionpinnedtabs");
 
             for (let i = 0; i < numPinned; i++) {
               let tab = this.children[i];
--- a/browser/components/customizableui/CustomizableWidgets.jsm
+++ b/browser/components/customizableui/CustomizableWidgets.jsm
@@ -136,17 +136,17 @@ const CustomizableWidgets = [
       let utils = RecentlyClosedTabsAndWindowsMenuUtils;
       let method = `get${viewType}Fragment`;
       let fragment = utils[method](window, "toolbarbutton", true);
       let elementCount = fragment.childElementCount;
       this._panelMenuView._setEmptyPopupStatus(panelview, !elementCount);
       if (!elementCount)
         return;
 
-      let body = document.createElement("vbox");
+      let body = document.createXULElement("vbox");
       body.className = "panel-subview-body";
       body.appendChild(fragment);
       let footer;
       while (--elementCount >= 0) {
         let element = body.children[elementCount];
         CustomizableUI.addShortcut(element);
         element.classList.add("subviewbutton");
         if (element.classList.contains("restoreallitem")) {
--- a/browser/locales/l10n-changesets.json
+++ b/browser/locales/l10n-changesets.json
@@ -1,1552 +1,1552 @@
 {
     "ach": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "af": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "an": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ar": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "as": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ast": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "az": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "be": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "bg": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "bn-BD": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "bn-IN": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "br": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "bs": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ca": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "cak": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "crh": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "cs": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "cy": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "da": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "de": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "dsb": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "el": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "en-CA": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "en-GB": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "en-ZA": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "eo": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "es-AR": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "es-CL": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "es-ES": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "es-MX": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "et": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "eu": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "fa": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ff": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "fi": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "fr": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "fy-NL": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ga-IE": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "gd": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "gl": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "gn": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "gu-IN": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "he": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "hi-IN": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "hr": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "hsb": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "hu": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "hy-AM": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ia": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "id": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "is": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "it": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ja": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ja-JP-mac": {
         "platforms": [
-            "macosx64", 
+            "macosx64",
             "macosx64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ka": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "kab": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "kk": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "km": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "kn": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ko": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "lij": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "lo": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "lt": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ltg": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "lv": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "mai": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "mk": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ml": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "mr": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ms": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "my": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "nb-NO": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ne-NP": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "nl": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "nn-NO": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "oc": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "or": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "pa-IN": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "pl": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "pt-BR": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "pt-PT": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "rm": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ro": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ru": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "si": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "sk": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "sl": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "son": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "sq": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "sr": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "sv-SE": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ta": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "te": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "th": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "tl": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "tr": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "uk": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "ur": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "uz": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "vi": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "wo": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "xh": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "zh-CN": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
-    }, 
+    },
     "zh-TW": {
         "platforms": [
-            "linux", 
-            "linux-devedition", 
-            "linux64", 
-            "linux64-devedition", 
-            "macosx64", 
-            "macosx64-devedition", 
-            "win32", 
-            "win32-devedition", 
-            "win64", 
+            "linux",
+            "linux-devedition",
+            "linux64",
+            "linux64-devedition",
+            "macosx64",
+            "macosx64-devedition",
+            "win32",
+            "win32-devedition",
+            "win64",
             "win64-devedition"
-        ], 
+        ],
         "revision": "default"
     }
 }
--- a/browser/themes/linux/syncedtabs/sidebar.css
+++ b/browser/themes/linux/syncedtabs/sidebar.css
@@ -1,32 +1,21 @@
 /* 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/syncedtabs/sidebar.inc.css
 
 /* These styles are intended to mimic XUL trees and the XUL search box. */
 
-html {
-  background-color: -moz-Field;
-  color: -moz-FieldText;
-  box-sizing: border-box;
-}
-
-.item {
-  padding-inline-end: 0;
-}
-
 .item-title {
   margin: 1px 0 0;
   margin-inline-end: 6px;
 }
 
-
 .search-box {
   -moz-appearance: textfield;
   cursor: text;
   margin: 4px;
 }
 
 .textbox-search-clear {
   background-image: url(moz-icon://stock/gtk-clear?size=menu);
--- a/browser/themes/osx/syncedtabs/sidebar.css
+++ b/browser/themes/osx/syncedtabs/sidebar.css
@@ -6,50 +6,37 @@
 
 /* These styles are intended to mimic XUL trees and the XUL search box. */
 
 .content-container {
   -moz-appearance: -moz-mac-source-list;
   -moz-font-smoothing-background-color: -moz-mac-source-list;
 }
 
-.item {
-  color: -moz-DialogText;
-}
-
 .item-title-container {
   box-sizing: border-box;
   align-items: center;
   height: 24px;
   font-size: 12px;
 }
 
 .item.selected > .item-title-container {
-  color: HighlightText;
-  font-weight: bold;
-}
-
-.item.selected > .item-title-container {
   -moz-appearance: -moz-mac-source-list-selection;
   -moz-font-smoothing-background-color: -moz-mac-source-list-selection;
 }
 
 .item.selected:focus > .item-title-container {
   -moz-appearance: -moz-mac-active-source-list-selection;
   -moz-font-smoothing-background-color: -moz-mac-active-source-list-selection;
 }
 
-@media (-moz-mac-yosemite-theme) {
+@media (-moz-mac-yosemite-theme: 0) {
   .item.selected > .item-title-container {
-    color: -moz-dialogtext;
-    font-weight: 500;
-  }
-
-  .item.selected:focus > .item-title-container {
     color: #fff;
+    font-weight: bold;
   }
 }
 
 .sidebar-search-container {
   padding: 4px;
 }
 
 .search-box {
--- a/browser/themes/shared/syncedtabs/sidebar.inc.css
+++ b/browser/themes/shared/syncedtabs/sidebar.inc.css
@@ -1,23 +1,25 @@
 % 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/.
 
 /* These styles are intended to mimic XUL trees and the XUL search box. */
 
 html {
   height: 100%;
+  box-sizing: border-box;
 }
 
 body {
   height: 100%;
   margin: 0;
   font: message-box;
-  color: #333333;
+  background-color: -moz-Field;
+  color: -moz-FieldText;
   -moz-user-select: none;
 }
 
 /* The content-container holds the non-scrollable header and the scrollable
    content area.
 */
 .content-container {
   display: flex;
--- a/browser/themes/shared/tabs.inc.css
+++ b/browser/themes/shared/tabs.inc.css
@@ -65,18 +65,18 @@
   }
 }
 
 .tabbrowser-tab {
   -moz-appearance: none;
   background-color: transparent;
   border-radius: 0;
   border-width: 0;
-  margin: 0;
-  padding: 0;
+  margin: 0 !important /* override tabbox.css */;
+  padding: 0 !important /* override tabbox.css */;
   -moz-box-align: stretch;
 }
 
 /* The selected tab should appear above the border between the tabs toolbar and
    the navigation toolbar. */
 .tabbrowser-tab[visuallyselected=true] {
   position: relative;
   z-index: 2;
--- a/browser/themes/windows/syncedtabs/sidebar.css
+++ b/browser/themes/windows/syncedtabs/sidebar.css
@@ -1,25 +1,18 @@
 /* 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/syncedtabs/sidebar.inc.css
 
 /* These styles are intended to mimic XUL trees and the XUL search box. */
 
-.item {
-  padding-inline-end: 0;
-}
-
 .item-title {
   margin: 1px 0 0;
-}
-
-.item-title {
   margin-inline-end: 6px;
 }
 
 .search-box {
   -moz-appearance: textfield;
   cursor: text;
   margin: 4px;
   padding: 2px 2px 3px;
--- a/js/src/wasm/WasmGenerator.cpp
+++ b/js/src/wasm/WasmGenerator.cpp
@@ -16,16 +16,17 @@
  * limitations under the License.
  */
 
 #include "wasm/WasmGenerator.h"
 
 #include "mozilla/CheckedInt.h"
 #include "mozilla/EnumeratedRange.h"
 #include "mozilla/SHA1.h"
+#include "mozilla/Unused.h"
 
 #include <algorithm>
 #include <thread>
 
 #include "util/Text.h"
 #include "wasm/WasmBaselineCompile.h"
 #include "wasm/WasmCompile.h"
 #include "wasm/WasmIonCompile.h"
@@ -34,16 +35,17 @@
 #include "jit/MacroAssembler-inl.h"
 
 using namespace js;
 using namespace js::jit;
 using namespace js::wasm;
 
 using mozilla::CheckedInt;
 using mozilla::MakeEnumeratedRange;
+using mozilla::Unused;
 
 bool
 CompiledCode::swap(MacroAssembler& masm)
 {
     MOZ_ASSERT(bytes.empty());
     if (!masm.swapBuffer(bytes))
         return false;
 
@@ -195,34 +197,32 @@ ModuleGenerator::init(Metadata* maybeAsm
     // The funcToCodeRange_ maps function indices to code-range indices and all
     // elements will be initialized by the time module generation is finished.
 
     if (!funcToCodeRange_.appendN(BAD_CODE_RANGE, env_->funcTypes.length()))
         return false;
 
     // Pre-reserve space for large Vectors to avoid the significant cost of the
     // final reallocs. In particular, the MacroAssembler can be enormous, so be
-    // extra conservative. Note, podResizeToFit calls at the end will trim off
-    // unneeded capacity.
+    // extra conservative. Since large over-reservations may fail when the
+    // actual allocations will succeed, ignore OOM failures. Note,
+    // podResizeToFit calls at the end will trim off unneeded capacity.
 
     size_t codeSectionSize = env_->codeSection ? env_->codeSection->size : 0;
+
     size_t estimatedCodeSize = 1.2 * EstimateCompiledCodeSize(tier(), codeSectionSize);
-    if (!masm_.reserve(Min(estimatedCodeSize, MaxCodeBytesPerProcess)))
-        return false;
+    Unused << masm_.reserve(Min(estimatedCodeSize, MaxCodeBytesPerProcess));
 
-    if (!metadataTier_->codeRanges.reserve(2 * env_->numFuncDefs()))
-        return false;
+    Unused << metadataTier_->codeRanges.reserve(2 * env_->numFuncDefs());
 
     const size_t ByteCodesPerCallSite = 50;
-    if (!metadataTier_->callSites.reserve(codeSectionSize / ByteCodesPerCallSite))
-        return false;
+    Unused << metadataTier_->callSites.reserve(codeSectionSize / ByteCodesPerCallSite);
 
     const size_t ByteCodesPerOOBTrap = 10;
-    if (!metadataTier_->trapSites[Trap::OutOfBounds].reserve(codeSectionSize / ByteCodesPerOOBTrap))
-        return false;
+    Unused << metadataTier_->trapSites[Trap::OutOfBounds].reserve(codeSectionSize / ByteCodesPerOOBTrap);
 
     // Allocate space in TlsData for declarations that need it.
 
     MOZ_ASSERT(metadata_->globalDataLength == 0);
 
     for (size_t i = 0; i < env_->funcImportGlobalDataOffsets.length(); i++) {
         uint32_t globalDataOffset;
         if (!allocateGlobalBytes(sizeof(FuncImportTls), sizeof(void*), &globalDataOffset))
--- a/layout/reftests/xul/mac-tab-toolbar-ref.xul
+++ b/layout/reftests/xul/mac-tab-toolbar-ref.xul
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <tabbox id="tab">
     <tabs>
       <tab label="zeroTab" id="0" selected="true" />
       <tab label="firstTab" id="1" />
       <tab label="secondtab" id="2" />
       <tab label="thirdTab" id="3" />
       <tab label="fourthTab" id="4" />
--- a/layout/reftests/xul/mac-tab-toolbar.xul
+++ b/layout/reftests/xul/mac-tab-toolbar.xul
@@ -1,9 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" class="reftest-wait">
   <tabbox id="tab">
     <tabs>
       <tab label="zeroTab" id="0" />
       <tab label="firstTab" id="1" />
       <tab label="secondtab" id="2" />
       <tab label="thirdTab" id="3" />
       <tab label="fourthTab" id="4" />
--- a/mobile/android/components/FilePicker.js
+++ b/mobile/android/components/FilePicker.js
@@ -248,16 +248,19 @@ FilePicker.prototype = {
     });
   },
 
   getEnumerator: function(files) {
     return {
       QueryInterface: ChromeUtils.generateQI([Ci.nsISimpleEnumerator]),
       mFiles: files,
       mIndex: 0,
+      [Symbol.iterator]() {
+        return this.mFiles.values();
+      },
       hasMoreElements: function() {
         return (this.mIndex < this.mFiles.length);
       },
       getNext: function() {
         if (this.mIndex >= this.mFiles.length) {
           throw Cr.NS_ERROR_FAILURE;
         }
         return this.mFiles[this.mIndex++];
--- a/mobile/android/components/geckoview/GeckoViewPrompt.js
+++ b/mobile/android/components/geckoview/GeckoViewPrompt.js
@@ -868,16 +868,24 @@ FilePickerDelegate.prototype = {
   _getEnumerator(aDOMFile) {
     if (!this._files) {
       throw Cr.NS_ERROR_NOT_AVAILABLE;
     }
     return {
       QueryInterface: ChromeUtils.generateQI([Ci.nsISimpleEnumerator]),
       _owner: this,
       _index: 0,
+      * [Symbol.iterator]() {
+        for (let file of this._owner._files) {
+          if (aDOMFile) {
+            yield this._owner._getDOMFile(file);
+          }
+          yield new FileUtils.File(file);
+        }
+      },
       hasMoreElements: function() {
         return this._index < this._owner._files.length;
       },
       getNext: function() {
         let files = this._owner._files;
         if (this._index >= files.length) {
           throw Cr.NS_ERROR_FAILURE;
         }
--- a/taskcluster/ci/source-test/python.yml
+++ b/taskcluster/ci/source-test/python.yml
@@ -69,18 +69,20 @@ mochitest-harness:
             start_xvfb '1600x1200x24' 0 &&
             export GECKO_BINARY_PATH=$MOZ_FETCHES_DIR/firefox/firefox &&
             export TEST_HARNESS_ROOT=$MOZ_FETCHES_DIR/tests &&
             cd /builds/worker/checkouts/gecko &&
             ./mach python-test --python 2 --subsuite mochitest
     fetches:
         build:
             - target.tar.bz2
-            - target.common.tests.tar.gz>tests
-            - target.mochitest.tests.tar.gz>tests
+            - artifact: target.common.tests.tar.gz
+              dest: tests
+            - artifact: target.mochitest.tests.tar.gz
+              dest: tests
     when:
         files-changed:
             - 'testing/mochitest/**'
             - 'testing/mozbase/moztest/moztest/selftest/**'
             - 'testing/mozharness/mozharness/base/log.py'
             - 'testing/mozharness/mozharness/mozilla/structuredlog.py'
             - 'testing/mozharness/mozharness/mozilla/testing/errors.py'
             - 'testing/profiles/**'
@@ -182,18 +184,20 @@ reftest-harness:
             start_xvfb '1600x1200x24' 0 &&
             export GECKO_BINARY_PATH=$MOZ_FETCHES_DIR/firefox/firefox &&
             export TEST_HARNESS_ROOT=$MOZ_FETCHES_DIR/tests &&
             cd /builds/worker/checkouts/gecko &&
             ./mach python-test --python 2 --subsuite reftest
     fetches:
         build:
             - target.tar.bz2
-            - target.common.tests.tar.gz>tests
-            - target.reftest.tests.tar.gz>tests
+            - artifact: target.common.tests.tar.gz
+              dest: tests
+            - artifact: target.reftest.tests.tar.gz
+              dest: tests
     when:
         files-changed:
             - 'layout/tools/reftest/**'
             - 'testing/mozbase/moztest/moztest/selftest/**'
             - 'testing/mozharness/mozharness/base/log.py'
             - 'testing/mozharness/mozharness/mozilla/structuredlog.py'
             - 'testing/mozharness/mozharness/mozilla/testing/errors.py'
 
--- a/taskcluster/scripts/misc/fetch-content
+++ b/taskcluster/scripts/misc/fetch-content
@@ -3,34 +3,37 @@
 # 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/.
 
 import argparse
 import bz2
 import concurrent.futures
 import gzip
 import hashlib
+import json
 import lzma
 import multiprocessing
 import os
 import pathlib
 import subprocess
 import sys
 import tempfile
 import time
 import urllib.request
 
 try:
     import zstandard
 except ImportError:
     zstandard = None
 
 
-ARTIFACT_URL = ('https://queue.taskcluster.net/v1/task/{task}/artifacts/'
-                '{artifact}')
+PUBLIC_ARTIFACT_URL = ('https://queue.taskcluster.net/v1/task/{task}/artifacts/'
+                       '{artifact}')
+PRIVATE_ARTIFACT_URL = ('https://taskcluster/queue/v1/task/{task}/artifacts/'
+                        '{artifact}')
 
 CONCURRENCY = multiprocessing.cpu_count()
 
 
 def log(msg):
     print(msg, file=sys.stderr)
     sys.stderr.flush()
 
@@ -54,16 +57,19 @@ def stream_download(url, sha256=None, si
     """
     log('Downloading %s' % url)
 
     h = hashlib.sha256()
     length = 0
 
     t0 = time.time()
     with urllib.request.urlopen(url) as fh:
+        if not url.endswith('.gz') and fh.info().get('Content-Encoding') == 'gzip':
+            fh = gzip.GzipFile(fileobj=fh)
+
         while True:
             chunk = fh.read(65536)
             if not chunk:
                 break
 
             h.update(chunk)
             length += len(chunk)
 
@@ -212,29 +218,32 @@ def extract_archive(path, dest_dir, typ)
             p.stdin.write(chunk)
 
     if p.returncode:
         raise Exception('%r exited %d' % (args, p.returncode))
 
     log('%s extracted in %.3fs' % (path, time.time() - t0))
 
 
-def fetch_and_extract(url, dest_dir, sha256=None, size=None):
+def fetch_and_extract(url, dest_dir, extract=True, sha256=None, size=None):
     """Fetch a URL and extract it to a destination path.
 
     If the downloaded URL is an archive, it is extracted automatically
     and the archive is deleted. Otherwise the file remains in place in
     the destination directory.
     """
 
     basename = url.split('/')[-1]
     dest_path = dest_dir / basename
 
     download_to_path(url, dest_path, sha256=sha256, size=size)
 
+    if not extract:
+        return
+
     typ = archive_type(dest_path)
     if typ:
         extract_archive(dest_path, dest_dir, typ)
         log('Removing %s' % dest_path)
         dest_path.unlink()
 
 
 def fetch_urls(downloads):
@@ -275,30 +284,30 @@ def command_static_url(args):
             dest.unlink()
         except FileNotFoundError:
             pass
 
         raise
 
 
 def command_task_artifacts(args):
+    fetches = json.loads(os.environ['MOZ_FETCHES'])
     downloads = []
-    for word in args.artifacts:
-        # Format is name[>dest]@task
-        artifact, task_id = word.split('@', 1)
+    for fetch in fetches:
         extdir = pathlib.Path(args.dest)
-
-        if '>' in artifact:
-            artifact, subdir = artifact.rsplit('>', 1)
-            extdir = extdir.joinpath(subdir)
-
+        if 'dest' in fetch:
+            extdir = extdir.joinpath(fetch['dest'])
         extdir.mkdir(parents=True, exist_ok=True)
-        url = ARTIFACT_URL.format(task=task_id,
-                                  artifact=artifact)
-        downloads.append((url, extdir))
+        if fetch['artifact'].startswith('public/'):
+            url = PUBLIC_ARTIFACT_URL.format(task=fetch['task'],
+                                             artifact=fetch['artifact'])
+        else:
+            url = PRIVATE_ARTIFACT_URL.format(task=fetch['task'],
+                                              artifact=fetch['artifact'])
+        downloads.append((url, extdir, fetch['extract']))
 
     fetch_urls(downloads)
 
 
 def main():
     parser = argparse.ArgumentParser()
     subparsers = parser.add_subparsers(title='sub commands')
 
@@ -317,18 +326,16 @@ def main():
     url.add_argument('dest', help='Destination path')
 
     artifacts = subparsers.add_parser('task-artifacts',
                                       help='Fetch task artifacts')
     artifacts.set_defaults(func=command_task_artifacts)
     artifacts.add_argument('-d', '--dest', default=os.environ.get('MOZ_FETCHES_DIR'),
                            help='Destination directory which will contain all '
                                 'artifacts (defaults to $MOZ_FETCHES_DIR)')
-    artifacts.add_argument('artifacts', nargs='+',
-                           help='Artifacts to fetch. Of form path@task_id')
 
     args = parser.parse_args()
 
     if not args.dest:
         parser.error('no destination directory specified, either pass in --dest '
                      'or set $MOZ_FETCHES_DIR')
 
     return args.func(args)
--- a/taskcluster/scripts/run-task
+++ b/taskcluster/scripts/run-task
@@ -475,29 +475,29 @@ def vcs_checkout(source_repo, dest, stor
                                      source_repo=source_repo,
                                      repo_name=source_repo.split('/')[-1]))
 
     print_line(b'vcs', msg.encode('utf-8'))
 
     return revision
 
 
-def fetch_artifacts(fetches):
+def fetch_artifacts():
     print_line(b'fetches', b'fetching artifacts\n')
 
     fetch_content = shutil.which('fetch-content')
     if not fetch_content and os.environ.get('GECKO_PATH'):
         fetch_content = os.path.join(os.environ['GECKO_PATH'], 'taskcluster',
                                      'scripts', 'misc', 'fetch-content')
 
     if not fetch_content or not os.path.isfile(fetch_content):
         print(FETCH_CONTENT_NOT_FOUND)
         sys.exit(1)
 
-    cmd = [fetch_content, 'task-artifacts'] + fetches.split()
+    cmd = [fetch_content, 'task-artifacts']
     subprocess.run(cmd, check=True, env=os.environ)
     print_line(b'fetches', b'finished fetching artifacts\n')
 
 
 def main(args):
     print_line(b'setup', b'run-task started in %s\n' % os.getcwd().encode('utf-8'))
     running_as_root = IS_POSIX and os.getuid() == 0
 
@@ -733,19 +733,18 @@ def main(args):
             branch=os.environ.get('COMM_HEAD_REF'))
 
     elif not os.environ.get('COMM_HEAD_REV') and \
             os.environ.get('COMM_HEAD_REF'):
         print('task should be defined in terms of non-symbolic revision')
         return 1
 
     try:
-        fetches = os.environ.get('MOZ_FETCHES')
-        if fetches:
-            fetch_artifacts(fetches)
+        if 'MOZ_FETCHES' in os.environ:
+            fetch_artifacts()
 
         return run_and_prefix_output(b'task', task_args)
     finally:
         fetches_dir = os.environ.get('MOZ_FETCHES_DIR')
         if fetches_dir and os.path.isdir(fetches_dir):
             print_line(b'fetches', b'removing %s\n' % fetches_dir.encode('utf-8'))
             shutil.rmtree(fetches_dir)
             print_line(b'fetches', b'finished\n')
--- a/taskcluster/taskgraph/transforms/job/__init__.py
+++ b/taskcluster/taskgraph/transforms/job/__init__.py
@@ -8,16 +8,17 @@ Jobs descriptions are similar to task de
 the job at a higher level, using a "run" field that can be interpreted by
 run-using handlers in `taskcluster/taskgraph/transforms/job`.
 """
 
 from __future__ import absolute_import, print_function, unicode_literals
 
 import copy
 import logging
+import json
 import os
 
 from taskgraph.transforms.base import TransformSequence
 from taskgraph.util.schema import (
     validate_schema,
     Schema,
 )
 from taskgraph.util.taskcluster import get_artifact_prefix
@@ -75,17 +76,21 @@ job_description_schema = Schema({
         # This task only needs to be run if a file matching one of the given
         # patterns has changed in the push.  The patterns use the mozpack
         # match function (python/mozbuild/mozpack/path.py).
         Optional('files-changed'): [basestring],
     }),
 
     # A list of artifacts to install from 'fetch' tasks.
     Optional('fetches'): {
-        basestring: [basestring],
+        basestring: [basestring, {
+            Required('artifact'): basestring,
+            Optional('dest'): basestring,
+            Optional('extract'): bool,
+        }],
     },
 
     # A description of how to run this job.
     'run': {
         # The key to a job implementation in a peer module to this one
         'using': basestring,
 
         # Base work directory used to set up the task.
@@ -177,32 +182,56 @@ def use_fetches(config, jobs):
 
                     path = all_fetches[fetch]
                     if not path.startswith('public/'):
                         raise Exception('Non-public artifacts not supported for {kind}-{name}: '
                                         '{fetch}'.format(kind=config.kind, name=name, fetch=fetch))
 
                     dep = 'fetch-{}'.format(fetch)
                     dependencies[dep] = dep
-                    job_fetches.append('{path}@<{dep}>'.format(path=path, dep=dep))
+                    job_fetches.append({
+                        'artifact': path,
+                        'task': '<{dep}>'.format(dep=dep),
+                        'extract': True,
+                    })
 
             else:
                 if kind not in dependencies:
                     raise Exception("{name} can't fetch {kind} artifacts because "
                                     "it has no {kind} dependencies!".format(name=name, kind=kind))
 
-                for path in artifacts:
-                    job_fetches.append('{prefix}/{path}@<{dep}>'.format(
-                        prefix=prefix, path=path, dep=kind))
+                for artifact in artifacts:
+                    if isinstance(artifact, basestring):
+                        path = artifact
+                        dest = None
+                        extract = True
+                    else:
+                        path = artifact['artifact']
+                        dest = artifact.get('dest')
+                        extract = artifact.get('extract', True)
+
+                    fetch = {
+                        'artifact': '{prefix}/{path}'.format(prefix=prefix, path=path),
+                        'task': '<{dep}>'.format(dep=kind),
+                        'extract': extract,
+                    }
+                    if dest is not None:
+                        fetch['dest'] = dest
+                    job_fetches.append(fetch)
 
         env = job.setdefault('worker', {}).setdefault('env', {})
-        env['MOZ_FETCHES'] = {'task-reference': ' '.join(job_fetches)}
+        env['MOZ_FETCHES'] = {'task-reference': json.dumps(job_fetches, sort_keys=True)}
 
-        workdir = job['run'].get('workdir', '/builds/worker')
-        env.setdefault('MOZ_FETCHES_DIR', '{}/fetches'.format(workdir))
+        impl, os = worker_type_implementation(job['worker-type'])
+        if os == 'windows':
+            env.setdefault('MOZ_FETCHES_DIR', 'fetches')
+        else:
+            workdir = job['run'].get('workdir', '/builds/worker')
+            env.setdefault('MOZ_FETCHES_DIR', '{}/fetches'.format(workdir))
+
         yield job
 
 
 @transforms.add
 def make_task_description(config, jobs):
     """Given a build description, create a task description"""
     # import plugin modules first, before iterating over jobs
     import_all()
--- a/taskcluster/taskgraph/transforms/job/mozharness.py
+++ b/taskcluster/taskgraph/transforms/job/mozharness.py
@@ -307,16 +307,26 @@ def mozharness_on_generic_worker(config,
     if run['comm-checkout']:
         hg_commands.extend(
             generic_worker_hg_commands(
                 base_repo=env['COMM_BASE_REPOSITORY'],
                 head_repo=env['COMM_HEAD_REPOSITORY'],
                 head_rev=env['COMM_HEAD_REV'],
                 path=r'.\build\src\comm'))
 
+    fetch_commands = []
+    if 'MOZ_FETCHES' in env:
+        # When Bug 1436037 is fixed, run-task can be used for this task,
+        # and this call can go away
+        fetch_commands.append(' '.join([
+            r'c:\mozilla-build\python3\python3.exe',
+            r'build\src\taskcluster\scripts\misc\fetch-content',
+            'task-artifacts',
+        ]))
+
     worker['command'] = []
     if taskdesc.get('needs-sccache'):
         worker['command'].extend([
             # Make the comment part of the first command, as it will help users to
             # understand what is going on, and why these steps are implemented.
             dedent('''\
             :: sccache currently uses the full compiler commandline as input to the
             :: cache hash key, so create a symlink to the task dir and build from
@@ -324,11 +334,12 @@ def mozharness_on_generic_worker(config,
             if exist z:\\build rmdir z:\\build'''),
             r'mklink /d z:\build %cd%',
             # Grant delete permission on the link to everyone.
             r'icacls z:\build /grant *S-1-1-0:D /L',
             r'cd /d z:\build',
         ])
 
     worker['command'].extend(hg_commands)
+    worker['command'].extend(fetch_commands)
     worker['command'].extend([
         ' '.join(mh_command)
     ])
--- a/taskcluster/taskgraph/transforms/repackage.py
+++ b/taskcluster/taskgraph/transforms/repackage.py
@@ -12,17 +12,17 @@ import copy
 from taskgraph.transforms.base import TransformSequence
 from taskgraph.util.attributes import copy_attributes_from_dependent_job
 from taskgraph.util.schema import (
     validate_schema,
     optionally_keyed_by,
     resolve_keyed_by,
     Schema,
 )
-from taskgraph.util.taskcluster import get_taskcluster_artifact_prefix, get_artifact_prefix
+from taskgraph.util.taskcluster import get_artifact_prefix
 from taskgraph.transforms.task import task_description_schema
 from voluptuous import Any, Required, Optional
 
 transforms = TransformSequence()
 
 # Voluptuous uses marker objects as dictionary *keys*, but they are not
 # comparable, so we cast all of the keys back to regular strings
 task_description_schema = {str(k): v for k, v in task_description_schema.schema.iteritems()}
@@ -160,18 +160,16 @@ def make_job_description(config, jobs):
         if job.get('locale'):
             # XXXCallek: todo: rewrite dependency finding
             # Use string splice to strip out 'nightly-l10n-' .. '-<chunk>/opt'
             # We need this additional dependency to support finding the mar binary
             # Which is needed in order to generate a new complete.mar
             dependencies['build'] = "build-{}/opt".format(
                 dependencies[build_task][13:dependencies[build_task].rfind('-')])
             build_task = 'build'
-        signing_task_ref = "<{}>".format(signing_task)
-        build_task_ref = "<{}>".format(build_task)
 
         attributes = copy_attributes_from_dependent_job(dep_job)
         attributes['repackage_type'] = 'repackage'
 
         locale = None
         if job.get('locale'):
             locale = job['locale']
             attributes['locale'] = locale
@@ -179,34 +177,37 @@ def make_job_description(config, jobs):
         level = config.params['level']
 
         build_platform = attributes['build_platform']
         run = job.get('mozharness', {})
         run.update({
             'using': 'mozharness',
             'script': 'mozharness/scripts/repackage.py',
             'job-script': 'taskcluster/scripts/builder/repackage.sh',
-            'actions': ['download_input', 'setup', 'repackage'],
+            'actions': ['setup', 'repackage'],
             'extra-workspace-cache-key': 'repackage',
         })
 
         worker = {
-            'env': _generate_task_env(dep_job, build_platform, build_task_ref,
-                                      signing_task_ref, locale=locale,
-                                      project=config.params["project"]),
             'artifacts': _generate_task_output_files(dep_job, build_platform,
                                                      locale=locale,
                                                      project=config.params["project"]),
             'chain-of-trust': True,
             'max-run-time': 7200 if build_platform.startswith('win') else 3600,
+            # Don't add generic artifact directory.
+            'skip-artifacts': True,
         }
 
         if locale:
             # Make sure we specify the locale-specific upload dir
-            worker['env'].update(LOCALE=locale)
+            worker.setdefault('env', {}).update(LOCALE=locale)
+
+        use_stub = attributes.get('stub-installer')
+        if not use_stub:
+            worker.setdefault('env', {})['NO_STUB_INSTALLER'] = '1'
 
         if build_platform.startswith('win'):
             worker_type = 'aws-provisioner-v1/gecko-%s-b-win2012' % level
             run['use-magic-mh-args'] = False
         else:
             if build_platform.startswith(('linux', 'macosx')):
                 worker_type = 'aws-provisioner-v1/gecko-%s-b-linux' % level
             else:
@@ -233,100 +234,107 @@ def make_job_description(config, jobs):
             'dependencies': dependencies,
             'attributes': attributes,
             'run-on-projects': dep_job.attributes.get('run_on_projects'),
             'treeherder': treeherder,
             'routes': job.get('routes', []),
             'extra': job.get('extra', {}),
             'worker': worker,
             'run': run,
+            'fetches': _generate_download_config(dep_job, build_platform, build_task,
+                                                 signing_task, locale=locale,
+                                                 project=config.params["project"]),
         }
 
         if build_platform.startswith('macosx'):
             task['toolchains'] = [
                 'linux64-libdmg',
                 'linux64-hfsplus',
                 'linux64-node',
             ]
         yield task
 
 
-def _generate_task_env(task, build_platform, build_task_ref, signing_task_ref, locale=None,
-                       project=None):
-    mar_prefix = get_taskcluster_artifact_prefix(
-        task, build_task_ref, postfix='host/bin/', locale=None
-    )
-    signed_prefix = get_taskcluster_artifact_prefix(task, signing_task_ref, locale=locale)
+def _generate_download_config(task, build_platform, build_task, signing_task, locale=None,
+                              project=None):
+    locale_path = '{}/'.format(locale) if locale else ''
 
     if build_platform.startswith('linux') or build_platform.startswith('macosx'):
         tarball_extension = 'bz2' if build_platform.startswith('linux') else 'gz'
         return {
-            'SIGNED_INPUT': {'task-reference': '{}target.tar.{}'.format(
-                signed_prefix, tarball_extension
-            )},
-            'UNSIGNED_MAR': {'task-reference': '{}mar'.format(mar_prefix)},
+            signing_task: [
+                {
+                    'artifact': '{}target.tar.{}'.format(locale_path, tarball_extension),
+                    'extract': False,
+                },
+            ],
+            build_task: [
+                'host/bin/mar',
+            ],
         }
     elif build_platform.startswith('win'):
-        task_env = {
-            'SIGNED_ZIP': {'task-reference': '{}target.zip'.format(signed_prefix)},
-            'SIGNED_SETUP': {'task-reference': '{}setup.exe'.format(signed_prefix)},
-            'UNSIGNED_MAR': {'task-reference': '{}mar.exe'.format(mar_prefix)},
+        fetch_config = {
+            signing_task: [
+                {
+                    'artifact': '{}target.zip'.format(locale_path),
+                    'extract': False,
+                },
+                '{}setup.exe'.format(locale_path),
+            ],
+            build_task: [
+                'host/bin/mar.exe',
+            ],
         }
 
         use_stub = task.attributes.get('stub-installer')
         if use_stub:
-            task_env['SIGNED_SETUP_STUB'] = {
-                'task-reference': '{}setup-stub.exe'.format(signed_prefix),
-            }
-        elif '32' in build_platform:
-            # Stub installer is only attempted on win32
-            task_env['NO_STUB_INSTALLER'] = '1'
+            fetch_config[signing_task].append('{}setup-stub.exe'.format(locale_path))
 
-        return task_env
+        return fetch_config
 
     raise NotImplementedError('Unsupported build_platform: "{}"'.format(build_platform))
 
 
 def _generate_task_output_files(task, build_platform, locale=None, project=None):
     locale_output_path = '{}/'.format(locale) if locale else ''
     artifact_prefix = get_artifact_prefix(task)
 
     if build_platform.startswith('linux') or build_platform.startswith('macosx'):
         output_files = [{
             'type': 'file',
-            'path': '/builds/worker/workspace/build/artifacts/{}target.complete.mar'
+            'path': '/builds/worker/workspace/build/outputs/{}target.complete.mar'
                     .format(locale_output_path),
             'name': '{}/{}target.complete.mar'.format(artifact_prefix, locale_output_path),
         }]
 
         if build_platform.startswith('macosx'):
             output_files.append({
                 'type': 'file',
-                'path': '/builds/worker/workspace/build/artifacts/{}target.dmg'
+                'path': '/builds/worker/workspace/build/outputs/{}target.dmg'
                         .format(locale_output_path),
                 'name': '{}/{}target.dmg'.format(artifact_prefix, locale_output_path),
             })
 
     elif build_platform.startswith('win'):
         output_files = [{
             'type': 'file',
-            'path': '{}/{}target.installer.exe'.format(artifact_prefix, locale_output_path),
+            'path': 'build/outputs/{}target.installer.exe'.format(locale_output_path),
             'name': '{}/{}target.installer.exe'.format(artifact_prefix, locale_output_path),
         }, {
             'type': 'file',
-            'path': '{}/{}target.complete.mar'.format(artifact_prefix, locale_output_path),
+            'path': 'build/outputs/{}target.complete.mar'.format(locale_output_path),
             'name': '{}/{}target.complete.mar'.format(artifact_prefix, locale_output_path),
         }]
 
         use_stub = task.attributes.get('stub-installer')
         if use_stub:
             output_files.append({
                 'type': 'file',
-                'path': '{}/{}target.stub-installer.exe'.format(
-                    artifact_prefix, locale_output_path
+                'path': 'build/outputs/{}target.stub-installer.exe'.format(
+                    locale_output_path
                 ),
                 'name': '{}/{}target.stub-installer.exe'.format(
                     artifact_prefix, locale_output_path
                 ),
             })
 
     if output_files:
         return output_files
--- a/taskcluster/taskgraph/transforms/repackage_partner.py
+++ b/taskcluster/taskgraph/transforms/repackage_partner.py
@@ -12,17 +12,17 @@ import copy
 from taskgraph.transforms.base import TransformSequence
 from taskgraph.util.attributes import copy_attributes_from_dependent_job
 from taskgraph.util.schema import (
     validate_schema,
     optionally_keyed_by,
     resolve_keyed_by,
     Schema,
 )
-from taskgraph.util.taskcluster import get_taskcluster_artifact_prefix, get_artifact_prefix
+from taskgraph.util.taskcluster import get_artifact_prefix
 from taskgraph.util.partners import check_if_partners_enabled
 from taskgraph.transforms.task import task_description_schema
 from voluptuous import Any, Required, Optional
 
 transforms = TransformSequence()
 
 # Voluptuous uses marker objects as dictionary *keys*, but they are not
 # comparable, so we cast all of the keys back to regular strings
@@ -137,39 +137,39 @@ def make_job_description(config, jobs):
         dependencies.update(dep_job.dependencies)
 
         signing_task = None
         for dependency in dependencies.keys():
             if build_platform.startswith('macosx') and dependency.endswith('signing'):
                 signing_task = dependency
             elif build_platform.startswith('win') and dependency.endswith('repack'):
                 signing_task = dependency
-        signing_task_ref = "<{}>".format(signing_task)
 
         attributes['repackage_type'] = 'repackage'
 
         level = config.params['level']
         repack_id = job['extra']['repack_id']
 
         run = job.get('mozharness', {})
         run.update({
             'using': 'mozharness',
             'script': 'mozharness/scripts/repackage.py',
             'job-script': 'taskcluster/scripts/builder/repackage.sh',
             'actions': ['download_input', 'setup', 'repackage'],
             'extra-workspace-cache-key': 'repackage',
         })
 
         worker = {
-            'env': _generate_task_env(build_platform, signing_task, signing_task_ref,
-                                      partner=repack_id),
             'artifacts': _generate_task_output_files(dep_job, build_platform, partner=repack_id),
             'chain-of-trust': True,
             'max-run-time': 7200 if build_platform.startswith('win') else 3600,
             'taskcluster-proxy': True if get_artifact_prefix(dep_job) else False,
+            'env': {},
+            # Don't add generic artifact directory.
+            'skip-artifacts': True,
         }
 
         worker['env'].update(REPACK_ID=repack_id)
 
         if build_platform.startswith('win'):
             worker_type = 'aws-provisioner-v1/gecko-%s-b-win2012' % level
             run['use-magic-mh-args'] = False
         else:
@@ -199,71 +199,76 @@ def make_job_description(config, jobs):
             'dependencies': dependencies,
             'attributes': attributes,
             'scopes': ['queue:get-artifact:releng/partner/*'],
             'run-on-projects': dep_job.attributes.get('run_on_projects'),
             'routes': job.get('routes', []),
             'extra': job.get('extra', {}),
             'worker': worker,
             'run': run,
+            'fetches': _generate_download_config(dep_job, build_platform,
+                                                 signing_task, partner=repack_id,
+                                                 project=config.params["project"]),
         }
 
         if build_platform.startswith('macosx'):
             task['toolchains'] = [
                 'linux64-libdmg',
                 'linux64-hfsplus',
                 'linux64-node',
             ]
         yield task
 
 
-def _generate_task_env(build_platform, signing_task, signing_task_ref, partner):
-    # Force private artifacts here, until we can populate our dependency map
-    # with actual task definitions rather than labels.
-    # (get_taskcluster_artifact_prefix requires the task definition to find
-    # the artifact_prefix attribute).
-    signed_prefix = get_taskcluster_artifact_prefix(
-        signing_task, signing_task_ref, locale=partner, force_private=True
-    )
-    signed_prefix = signed_prefix.replace('public/build', 'releng/partner')
+def _generate_download_config(task, build_platform, signing_task, partner=None,
+                              project=None):
+    locale_path = '{}/'.format(partner) if partner else ''
 
     if build_platform.startswith('macosx'):
         return {
-            'SIGNED_INPUT': {'task-reference': '{}target.tar.gz'.format(signed_prefix)},
+            signing_task: [
+                {
+                    'artifact': '{}target.tar.gz'.format(locale_path),
+                    'extract': False,
+                },
+            ],
         }
     elif build_platform.startswith('win'):
-        task_env = {
-            'SIGNED_ZIP': {'task-reference': '{}target.zip'.format(signed_prefix)},
-            'SIGNED_SETUP': {'task-reference': '{}setup.exe'.format(signed_prefix)},
+        return {
+            signing_task: [
+                {
+                    'artifact': '{}target.zip'.format(locale_path),
+                    'extract': False,
+                },
+                '{}setup.exe'.format(locale_path),
+            ],
         }
 
-        return task_env
-
     raise NotImplementedError('Unsupported build_platform: "{}"'.format(build_platform))
 
 
 def _generate_task_output_files(task, build_platform, partner):
     """We carefully generate an explicit list here, but there's an artifacts directory
     too, courtesy of generic_worker_add_artifacts() (windows) or docker_worker_add_artifacts().
     Any errors here are likely masked by that.
     """
     partner_output_path = '{}/'.format(partner)
     artifact_prefix = get_artifact_prefix(task)
 
     if build_platform.startswith('macosx'):
         output_files = [{
             'type': 'file',
-            'path': '/builds/worker/workspace/build/artifacts/{}target.dmg'
+            'path': '/builds/worker/workspace/build/outputs/{}target.dmg'
                     .format(partner_output_path),
             'name': '{}/{}target.dmg'.format(artifact_prefix, partner_output_path),
         }]
 
     elif build_platform.startswith('win'):
         output_files = [{
             'type': 'file',
-            'path': '{}/{}target.installer.exe'.format(artifact_prefix, partner_output_path),
+            'path': 'build/outputs/{}target.installer.exe'.format(partner_output_path),
             'name': '{}/{}target.installer.exe'.format(artifact_prefix, partner_output_path),
         }]
 
     if output_files:
         return output_files
 
     raise NotImplementedError('Unsupported build_platform: "{}"'.format(build_platform))
--- a/testing/mozharness/configs/repackage/linux32_signed.py
+++ b/testing/mozharness/configs/repackage/linux32_signed.py
@@ -1,28 +1,20 @@
 import os
 
 platform = "linux32"
 
 config = {
-    "input_home": "{abs_work_dir}/inputs",
-    "output_home": "{abs_work_dir}/artifacts{locale}",
-
     "locale": os.environ.get("LOCALE"),
 
-    "download_config": {
-        "target.tar.gz": os.environ.get("SIGNED_INPUT"),
-        "mar": os.environ.get("UNSIGNED_MAR"),
-    },
-
     "repackage_config": [[
         "mar",
-        "-i", "{abs_work_dir}/inputs/target.tar.gz",
-        "--mar", "{abs_work_dir}/inputs/mar",
-        "-o", "{output_home}/target.complete.mar"
+        "-i", "{abs_input_dir}/target.tar.bz2",
+        "--mar", "{abs_input_dir}/mar",
+        "-o", "{abs_output_dir}/target.complete.mar"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
 }
--- a/testing/mozharness/configs/repackage/linux64_signed.py
+++ b/testing/mozharness/configs/repackage/linux64_signed.py
@@ -1,28 +1,20 @@
 import os
 
 platform = "linux64"
 
 config = {
-    "input_home": "{abs_work_dir}/inputs",
-    "output_home": "{abs_work_dir}/artifacts{locale}",
-
     "locale": os.environ.get("LOCALE"),
 
-    "download_config": {
-        "target.tar.gz": os.environ.get("SIGNED_INPUT"),
-        "mar": os.environ.get("UNSIGNED_MAR"),
-    },
-
     "repackage_config": [[
         "mar",
-        "-i", "{abs_work_dir}/inputs/target.tar.gz",
-        "--mar", "{abs_work_dir}/inputs/mar",
-        "-o", "{output_home}/target.complete.mar"
+        "-i", "{abs_input_dir}/target.tar.bz2",
+        "--mar", "{abs_input_dir}/mar",
+        "-o", "{abs_output_dir}/target.complete.mar"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
 }
--- a/testing/mozharness/configs/repackage/osx_partner.py
+++ b/testing/mozharness/configs/repackage/osx_partner.py
@@ -1,23 +1,17 @@
 import os
 
 config = {
-    "input_home": "{abs_work_dir}/inputs",
-    "output_home": "{abs_work_dir}/artifacts{repack_id}",
     "src_mozconfig": "browser/config/mozconfigs/macosx64/repack",
 
     "repack_id": os.environ.get("REPACK_ID"),
 
-    "download_config": {
-        "target.tar.gz": os.environ.get("SIGNED_INPUT"),
-    },
-
     "repackage_config": [[
         "dmg",
-        "-i", "{abs_work_dir}/inputs/target.tar.gz",
-        "-o", "{output_home}/target.dmg"
+        "-i", "{abs_input_dir}/target.tar.gz",
+        "-o", "{abs_output_dir}/target.dmg"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 }
--- a/testing/mozharness/configs/repackage/osx_signed.py
+++ b/testing/mozharness/configs/repackage/osx_signed.py
@@ -1,29 +1,22 @@
 import os
 
 config = {
-    "input_home": "{abs_work_dir}/inputs",
-    "output_home": "{abs_work_dir}/artifacts{locale}",
     "src_mozconfig": "browser/config/mozconfigs/macosx64/repack",
 
     "locale": os.environ.get("LOCALE"),
 
-    "download_config": {
-        "target.tar.gz": os.environ.get("SIGNED_INPUT"),
-        "mar": os.environ.get("UNSIGNED_MAR"),
-    },
-
     "repackage_config": [[
         "dmg",
-        "-i", "{abs_work_dir}/inputs/target.tar.gz",
-        "-o", "{output_home}/target.dmg"
+        "-i", "{abs_input_dir}/target.tar.gz",
+        "-o", "{abs_output_dir}/target.dmg"
     ], [
         "mar",
-        "-i", "{abs_work_dir}/inputs/target.tar.gz",
-        "--mar", "{abs_work_dir}/inputs/mar",
-        "-o", "{output_home}/target.complete.mar"
+        "-i", "{abs_input_dir}/target.tar.gz",
+        "--mar", "{abs_input_dir}/mar",
+        "-o", "{abs_output_dir}/target.complete.mar"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 }
--- a/testing/mozharness/configs/repackage/win32_partner.py
+++ b/testing/mozharness/configs/repackage/win32_partner.py
@@ -1,35 +1,25 @@
 import os
 
 platform = "win32"
 
-download_config = {
-        "target.zip": os.environ.get("SIGNED_ZIP"),
-        "setup.exe": os.environ.get("SIGNED_SETUP"),
-    }
-
 repackage_config = [[
         "installer",
         "--package-name", "firefox",
-        "--package", "{abs_work_dir}\\inputs\\target.zip",
+        "--package", "{abs_input_dir}\\target.zip",
         "--tag", "{abs_mozilla_dir}\\browser\\installer\\windows\\app.tag",
-        "--setupexe", "{abs_work_dir}\\inputs\\setup.exe",
-        "-o", "{output_home}\\target.installer.exe",
+        "--setupexe", "{abs_input_dir}\\setup.exe",
+        "-o", "{abs_output_dir}\\target.installer.exe",
         "--sfx-stub", "other-licenses/7zstub/firefox/7zSD.sfx",
     ]]
 
 config = {
-    "input_home": "{abs_work_dir}\\inputs",
-    "output_home": "{base_work_dir}\\releng\\partner\\{repack_id}",
-
     "repack_id": os.environ.get("REPACK_ID"),
 
-    "download_config": download_config,
-
     "repackage_config": repackage_config,
 
     # ToolTool
     "tooltool_manifest_src": 'browser\\config\\tooltool-manifests\\{}\\releng.manifest'.format(platform),
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
--- a/testing/mozharness/configs/repackage/win32_signed.py
+++ b/testing/mozharness/configs/repackage/win32_signed.py
@@ -1,58 +1,40 @@
 import os
 
 platform = "win32"
 
-download_config = {
-        "target.zip": os.environ.get("SIGNED_ZIP"),
-        "setup.exe": os.environ.get("SIGNED_SETUP"),
-        "mar.exe": os.environ.get("UNSIGNED_MAR"),
-}
-
-if not os.environ.get("NO_STUB_INSTALLER"):
-    # Some channels, like esr don't build a stub installer
-    download_config.update({
-        # stub installer is only built on win32
-        "setup-stub.exe": os.environ.get("SIGNED_SETUP_STUB"),
-    })
-
 repackage_config = [[
         "installer",
         "--package-name", "firefox",
-        "--package", "{abs_work_dir}\\inputs\\target.zip",
+        "--package", "{abs_input_dir}\\target.zip",
         "--tag", "{abs_mozilla_dir}\\browser\\installer\\windows\\app.tag",
-        "--setupexe", "{abs_work_dir}\\inputs\\setup.exe",
-        "-o", "{output_home}\\target.installer.exe",
+        "--setupexe", "{abs_input_dir}\\setup.exe",
+        "-o", "{abs_output_dir}\\target.installer.exe",
         "--sfx-stub", "other-licenses/7zstub/firefox/7zSD.sfx",
     ], [
         "mar",
-        "-i", "{abs_work_dir}\\inputs\\target.zip",
-        "--mar", "{abs_work_dir}\\inputs\\mar.exe",
-        "-o", "{output_home}\\target.complete.mar",
+        "-i", "{abs_input_dir}\\target.zip",
+        "--mar", "{abs_input_dir}\\mar.exe",
+        "-o", "{abs_output_dir}\\target.complete.mar",
     ]]
 
 if not os.environ.get("NO_STUB_INSTALLER"):
     # Some channels, like esr don't build a stub installer
     repackage_config.append([
         "installer",
         "--tag", "{abs_mozilla_dir}\\browser\\installer\\windows\\stub.tag",
-        "--setupexe", "{abs_work_dir}\\inputs\\setup-stub.exe",
-        "-o", "{output_home}\\target.stub-installer.exe",
+        "--setupexe", "{abs_input_dir}\\setup-stub.exe",
+        "-o", "{abs_output_dir}\\target.stub-installer.exe",
         "--sfx-stub", "other-licenses/7zstub/firefox/7zSD.sfx",
     ])
 
 config = {
-    "input_home": "{abs_work_dir}\\inputs",
-    "output_home": "{base_work_dir}\\public\\build{locale}",
-
     "locale": os.environ.get("LOCALE"),
 
-    "download_config": download_config,
-
     "repackage_config": repackage_config,
 
     # ToolTool
     "tooltool_manifest_src": 'browser\\config\\tooltool-manifests\\{}\\releng.manifest'.format(platform),
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
--- a/testing/mozharness/configs/repackage/win64_partner.py
+++ b/testing/mozharness/configs/repackage/win64_partner.py
@@ -1,35 +1,25 @@
 import os
 
 platform = "win64"
 
-download_config = {
-        "target.zip": os.environ.get("SIGNED_ZIP"),
-        "setup.exe": os.environ.get("SIGNED_SETUP"),
-    }
-
 repackage_config = [[
         "installer",
         "--package-name", "firefox",
-        "--package", "{abs_work_dir}\\inputs\\target.zip",
+        "--package", "{abs_input_dir}\\target.zip",
         "--tag", "{abs_mozilla_dir}\\browser\\installer\\windows\\app.tag",
-        "--setupexe", "{abs_work_dir}\\inputs\\setup.exe",
-        "-o", "{output_home}\\target.installer.exe",
+        "--setupexe", "{abs_input_dir}\\setup.exe",
+        "-o", "{abs_output_dir}\\target.installer.exe",
         "--sfx-stub", "other-licenses/7zstub/firefox/7zSD.sfx",
     ]]
 
 config = {
-    "input_home": "{abs_work_dir}\\inputs",
-    "output_home": "{base_work_dir}\\releng\\partner\\{repack_id}",
-
     "repack_id": os.environ.get("REPACK_ID"),
 
-    "download_config": download_config,
-
     "repackage_config": repackage_config,
 
     # ToolTool
     "tooltool_manifest_src": 'browser\\config\\tooltool-manifests\\{}\\releng.manifest'.format(platform),
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
--- a/testing/mozharness/configs/repackage/win64_signed.py
+++ b/testing/mozharness/configs/repackage/win64_signed.py
@@ -1,41 +1,30 @@
 import os
 
 platform = "win64"
 
-download_config = {
-        "target.zip": os.environ.get("SIGNED_ZIP"),
-        "setup.exe": os.environ.get("SIGNED_SETUP"),
-        "mar.exe": os.environ.get("UNSIGNED_MAR"),
-    }
-
 repackage_config = [[
         "installer",
         "--package-name", "firefox",
-        "--package", "{abs_work_dir}\\inputs\\target.zip",
+        "--package", "{abs_input_dir}\\target.zip",
         "--tag", "{abs_mozilla_dir}\\browser\\installer\\windows\\app.tag",
-        "--setupexe", "{abs_work_dir}\\inputs\\setup.exe",
-        "-o", "{output_home}\\target.installer.exe",
+        "--setupexe", "{abs_input_dir}\\setup.exe",
+        "-o", "{abs_output_dir}\\target.installer.exe",
         "--sfx-stub", "other-licenses/7zstub/firefox/7zSD.sfx",
     ], [
         "mar",
-        "-i", "{abs_work_dir}\\inputs\\target.zip",
-        "--mar", "{abs_work_dir}\\inputs\\mar.exe",
-        "-o", "{output_home}\\target.complete.mar",
+        "-i", "{abs_input_dir}\\target.zip",
+        "--mar", "{abs_input_dir}\\mar.exe",
+        "-o", "{abs_output_dir}\\target.complete.mar",
     ]]
 
 config = {
-    "input_home": "{abs_work_dir}\\inputs",
-    "output_home": "{base_work_dir}\\public\\build{locale}",
-
     "locale": os.environ.get("LOCALE"),
 
-    "download_config": download_config,
-
     "repackage_config": repackage_config,
 
     # ToolTool
     "tooltool_manifest_src": 'browser\\config\\tooltool-manifests\\{}\\releng.manifest'.format(platform),
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
--- a/testing/mozharness/mozharness/mozilla/fetches.py
+++ b/testing/mozharness/mozharness/mozilla/fetches.py
@@ -1,14 +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/.
 
 import os
 from distutils.spawn import find_executable
+import json
 
 import mozfile
 
 ARTIFACT_URL = 'https://queue.taskcluster.net/v1/task/{task}/artifacts/{artifact}'
 
 
 class FetchesMixin(object):
     """Utility class to download artifacts via `MOZ_FETCHES` and the
@@ -25,35 +26,36 @@ class FetchesMixin(object):
                 'taskcluster', 'script', 'misc', 'fetch-content')
         return self._fetch_script
 
     def fetch_content(self):
         if not os.environ.get('MOZ_FETCHES'):
             self.warning('no fetches to download')
             return
 
-        fetches = os.environ['MOZ_FETCHES'].split()
-
         if not self.fetch_script or not os.path.isfile(self.fetch_script):
             self.warning("fetch-content script not found, downloading manually")
-            self._download_fetches(fetches)
+            self._download_fetches()
             return
 
-        cmd = [self.fetch_script, 'task-artifacts'] + fetches
+        cmd = [self.fetch_script, 'task-artifacts']
         self.run_command(cmd, env=os.environ, throw_exception=True)
 
-    def _download_fetches(self, fetches):
+    def _download_fetches(self):
         # TODO: make sure fetch-content script is available everywhere
         #       so this isn't needed
-        for word in fetches:
-            artifact, task = word.split('@', 1)
-            extdir = os.environ['MOZ_FETCHES_DIR']
+        fetches_dir = os.environ['MOZ_FETCHES_DIR']
 
-            if '>' in artifact:
-                artifact, subdir = artifact.rsplit('>', 1)
-                extdir = os.path.join(extdir, subdir)
+        fetches = json.loads(os.environ.get('MOZ_FETCHES', '{}'))
+        for fetch in fetches:
+            extdir = fetches_dir
+            if 'dest' in 'fetch':
+                extdir = os.path.join(extdir, fetch['dest'])
+            artifact = fetch['artifact']
+            if not artifact.startswith('public/'):
+                raise Exception('Private artifacts in `MOZ_FETCHES` not supported.')
+            url = ARTIFACT_URL.format(artifact=artifact, task=fetch['task'])
 
-            url = ARTIFACT_URL.format(artifact=artifact, task=task)
-            self.download_file(url)
+            path = self.download_file(url, parent_dir=extdir)
 
-            filename = os.path.basename(artifact)
-            mozfile.extract(filename, extdir)
-            os.remove(filename)
+            if fetch['extract']:
+                mozfile.extract(path, extdir)
+                os.remove(path)
--- a/testing/mozharness/scripts/repackage.py
+++ b/testing/mozharness/scripts/repackage.py
@@ -18,71 +18,63 @@ class Repackage(BaseScript):
             ],
         }
         BaseScript.__init__(
             self,
             require_config_file=require_config_file,
             **script_kwargs
         )
 
-    def download_input(self):
-        config = self.config
+    def setup(self):
         dirs = self.query_abs_dirs()
 
-        input_home = config['input_home'].format(**dirs)
+        self._run_tooltool()
 
-        for path, url in config["download_config"].items():
-            status = self.download_file(url=url,
-                                        file_name=path,
-                                        parent_dir=input_home)
-            if not status:
-                self.fatal("Unable to fetch signed input from %s" % url)
+        mar_path = os.path.join(dirs['abs_input_dir'], 'mar')
+        if self._is_windows():
+            mar_path += '.exe'
+        if mar_path:
+            self.chmod(mar_path, 0755)
 
-            if 'mar' in path:
-                # Ensure mar is executable
-                self.chmod(os.path.join(input_home, path), 0755)
-
-    def setup(self):
-        self._run_tooltool()
         if self.config.get("run_configure", True):
             self._get_mozconfig()
             self._run_configure()
 
     def query_abs_dirs(self):
         if self.abs_dirs:
             return self.abs_dirs
         abs_dirs = super(Repackage, self).query_abs_dirs()
         config = self.config
 
         dirs = {}
         dirs['abs_tools_dir'] = os.path.join(abs_dirs['abs_work_dir'], 'tools')
         dirs['abs_mozilla_dir'] = os.path.join(abs_dirs['abs_work_dir'], 'src')
-        locale_dir = ''
+        dirs['abs_input_dir'] = os.path.join(
+            abs_dirs['base_work_dir'],
+            os.environ.get('MOZ_FETCHES_DIR', 'fetches'),
+        )
+        output_dir_suffix = []
         if config.get('locale'):
-            locale_dir = "{}{}".format(os.path.sep, config['locale'])
-        repack_id_dir = ''
+            output_dir_suffix.append(config['locale'])
         if config.get('repack_id'):
-            repack_id_dir = "{}{}".format(os.path.sep, config['repack_id'])
-        dirs['output_home'] = config['output_home'].format(
-            locale=locale_dir,
-            repack_id=repack_id_dir,
-            **abs_dirs
-        )
+            output_dir_suffix.append(config['repack_id'])
+        dirs['abs_output_dir'] = os.path.join(
+            abs_dirs['abs_work_dir'], 'outputs', *output_dir_suffix)
         for key in dirs.keys():
             if key not in abs_dirs:
                 abs_dirs[key] = dirs[key]
         self.abs_dirs = abs_dirs
         return self.abs_dirs
 
     def repackage(self):
         config = self.config
         dirs = self.query_abs_dirs()
 
         # Make sure the upload dir is around.
-        self.mkdir_p(dirs['output_home'])
+        self.mkdir_p(dirs['abs_output_dir'])
 
         for repack_config in config["repackage_config"]:
             command = [sys.executable, 'mach', '--log-no-times', 'repackage'] + \
                 [arg.format(**dirs)
                     for arg in list(repack_config)]
             self.run_command(
                 command=command,
                 cwd=dirs['abs_mozilla_dir'],
--- a/toolkit/content/widgets.css
+++ b/toolkit/content/widgets.css
@@ -13,10 +13,11 @@
 @import url("chrome://global/skin/groupbox.css");
 @import url("chrome://global/skin/menu.css");
 @import url("chrome://global/skin/menulist.css");
 @import url("chrome://global/skin/notification.css");
 @import url("chrome://global/skin/popup.css");
 @import url("chrome://global/skin/progressmeter.css");
 @import url("chrome://global/skin/richlistbox.css");
 @import url("chrome://global/skin/splitter.css");
+@import url("chrome://global/skin/tabbox.css");
 @import url("chrome://global/skin/toolbar.css");
 @import url("chrome://global/skin/wizard.css");
--- a/toolkit/content/widgets/tabbox.xml
+++ b/toolkit/content/widgets/tabbox.xml
@@ -3,22 +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/. -->
 
 
 <bindings id="tabBindings"
           xmlns="http://www.mozilla.org/xbl"
           xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
           xmlns:xbl="http://www.mozilla.org/xbl">
-
   <binding id="tabbox">
-    <resources>
-      <stylesheet src="chrome://global/skin/tabbox.css"/>
-    </resources>
-
     <implementation>
       <property name="handleCtrlTab">
         <setter>
         <![CDATA[
           this.setAttribute("handleCtrlTab", val);
           return val;
         ]]>
         </setter>
@@ -212,20 +207,16 @@
                     .getService(Ci.nsIEventListenerService);
         els.removeSystemEventListener(this._eventNode, "keydown", this, false);
       </destructor>
     </implementation>
   </binding>
 
   <binding id="tabs"
            extends="chrome://global/content/bindings/general.xml#basecontrol">
-    <resources>
-      <stylesheet src="chrome://global/skin/tabbox.css"/>
-    </resources>
-
     <content>
       <xul:spacer class="tabs-left"/>
       <children/>
       <xul:spacer class="tabs-right" flex="1"/>
     </content>
 
     <implementation implements="nsIDOMXULSelectControlElement, nsIDOMXULRelatedElement">
       <constructor>
@@ -528,20 +519,16 @@
         event.stopPropagation();
       ]]>
       </handler>
     </handlers>
 #endif
   </binding>
 
   <binding id="tabpanels">
-    <resources>
-      <stylesheet src="chrome://global/skin/tabbox.css"/>
-    </resources>
-
     <implementation implements="nsIDOMXULRelatedElement">
       <!-- nsIDOMXULRelatedElement -->
       <method name="getRelatedElement">
         <parameter name="aTabPanelElm"/>
         <body>
         <![CDATA[
           if (!aTabPanelElm)
             return null;
@@ -644,20 +631,16 @@
           ]]>
         </setter>
       </property>
     </implementation>
   </binding>
 
   <binding id="tab" display="xul:button"
            extends="chrome://global/content/bindings/general.xml#basetext">
-    <resources>
-      <stylesheet src="chrome://global/skin/tabbox.css"/>
-    </resources>
-
     <content>
       <xul:hbox class="tab-middle box-inherit" xbl:inherits="align,dir,pack,orient,selected,visuallyselected" flex="1">
         <xul:image class="tab-icon"
                    xbl:inherits="validate,src=image"
                    role="presentation"/>
         <xul:label class="tab-text"
                    xbl:inherits="value=label,accesskey,crop,disabled"
                    flex="1"
--- a/toolkit/mozapps/update/nsUpdateService.js
+++ b/toolkit/mozapps/update/nsUpdateService.js
@@ -824,16 +824,20 @@ function ArrayEnumerator(aItems) {
   }
   this._contents = aItems;
 }
 
 ArrayEnumerator.prototype = {
   _index: 0,
   _contents: [],
 
+  [Symbol.iterator]() {
+    return this._contents.values();
+  },
+
   hasMoreElements: function ArrayEnumerator_hasMoreElements() {
     return this._index < this._contents.length;
   },
 
   getNext: function ArrayEnumerator_getNext() {
     return this._contents[this._index++];
   }
 };
--- a/widget/cocoa/nsChildView.h
+++ b/widget/cocoa/nsChildView.h
@@ -558,19 +558,17 @@ protected:
   // override to create different kinds of child views. Autoreleases, so
   // caller must retain.
   virtual NSView*   CreateCocoaView(NSRect inFrame);
   void              TearDownView();
 
   virtual already_AddRefed<nsIWidget>
   AllocateChildPopupWidget() override
   {
-    static NS_DEFINE_IID(kCPopUpCID, NS_POPUP_CID);
-    nsCOMPtr<nsIWidget> widget = do_CreateInstance(kCPopUpCID);
-    return widget.forget();
+    return nsIWidget::CreateTopLevelWindow();
   }
 
   void ConfigureAPZCTreeManager() override;
   void ConfigureAPZControllerThread() override;
 
   void DoRemoteComposition(const LayoutDeviceIntRect& aRenderRect);
 
   // Overlay drawing functions for OpenGL drawing
--- a/widget/cocoa/nsCocoaWindow.h
+++ b/widget/cocoa/nsCocoaWindow.h
@@ -357,19 +357,17 @@ protected:
 
   inline bool ShouldToggleNativeFullscreen(bool aFullScreen,
                                            bool aUseSystemTransition);
   nsresult DoMakeFullScreen(bool aFullScreen, bool aUseSystemTransition);
 
   virtual already_AddRefed<nsIWidget>
   AllocateChildPopupWidget() override
   {
-    static NS_DEFINE_IID(kCPopUpCID, NS_POPUP_CID);
-    nsCOMPtr<nsIWidget> widget = do_CreateInstance(kCPopUpCID);
-    return widget.forget();
+    return nsIWidget::CreateTopLevelWindow();
   }
 
   nsIWidget*           mParent;         // if we're a popup, this is our parent [WEAK]
   nsIWidget*           mAncestorLink;   // link to traverse ancestors [WEAK]
   BaseWindow*          mWindow;         // our cocoa window [STRONG]
   WindowDelegate*      mDelegate;       // our delegate for processing window msgs [STRONG]
   RefPtr<nsMenuBarX> mMenuBar;
   NSWindow*            mSheetWindowParent; // if this is a sheet, this is the NSWindow it's attached to
--- a/widget/cocoa/nsWidgetFactory.mm
+++ b/widget/cocoa/nsWidgetFactory.mm
@@ -7,17 +7,16 @@
 #include "nsISupports.h"
 #include "nsIComponentManager.h"
 #include "mozilla/ModuleUtils.h"
 #include "mozilla/WidgetUtils.h"
 
 #include "nsWidgetsCID.h"
 
 #include "nsChildView.h"
-#include "nsCocoaWindow.h"
 #include "nsAppShell.h"
 #include "nsAppShellSingleton.h"
 #include "nsFilePicker.h"
 #include "nsColorPicker.h"
 
 #include "nsClipboard.h"
 #include "nsClipboardHelper.h"
 #include "HeadlessClipboard.h"
@@ -60,17 +59,16 @@ nsClipboardConstructor(nsISupports *aOut
     inst = new HeadlessClipboard();
   } else {
     inst = new nsClipboard();
   }
 
   return inst->QueryInterface(aIID, aResult);
 }
 
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsCocoaWindow)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsFilePicker)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsColorPicker)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsSound)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsTransferable)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsHTMLFormatConverter)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsClipboardHelper)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDragService)
 NS_GENERIC_FACTORY_CONSTRUCTOR(nsDeviceContextSpecX)
@@ -108,17 +106,16 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsSystemS
 #include "GfxInfo.h"
 namespace mozilla {
 namespace widget {
 // This constructor should really be shared with all platforms.
 NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(GfxInfo, Init)
 } // namespace widget
 } // namespace mozilla
 
-NS_DEFINE_NAMED_CID(NS_POPUP_CID);
 NS_DEFINE_NAMED_CID(NS_FILEPICKER_CID);
 NS_DEFINE_NAMED_CID(NS_COLORPICKER_CID);
 NS_DEFINE_NAMED_CID(NS_APPSHELL_CID);
 NS_DEFINE_NAMED_CID(NS_SOUND_CID);
 NS_DEFINE_NAMED_CID(NS_TRANSFERABLE_CID);
 NS_DEFINE_NAMED_CID(NS_HTMLFORMATCONVERTER_CID);
 NS_DEFINE_NAMED_CID(NS_CLIPBOARD_CID);
 NS_DEFINE_NAMED_CID(NS_CLIPBOARDHELPER_CID);
@@ -136,17 +133,16 @@ NS_DEFINE_NAMED_CID(NS_NATIVEMENUSERVICE
 NS_DEFINE_NAMED_CID(NS_MACDOCKSUPPORT_CID);
 NS_DEFINE_NAMED_CID(NS_MACSHARINGSERVICE_CID);
 NS_DEFINE_NAMED_CID(NS_MACWEBAPPUTILS_CID);
 NS_DEFINE_NAMED_CID(NS_STANDALONENATIVEMENU_CID);
 NS_DEFINE_NAMED_CID(NS_MACSYSTEMSTATUSBAR_CID);
 NS_DEFINE_NAMED_CID(NS_GFXINFO_CID);
 
 static const mozilla::Module::CIDEntry kWidgetCIDs[] = {
-  { &kNS_POPUP_CID, false, NULL, nsCocoaWindowConstructor },
   { &kNS_FILEPICKER_CID, false, NULL, nsFilePickerConstructor,
     mozilla::Module::MAIN_PROCESS_ONLY },
   { &kNS_COLORPICKER_CID, false, NULL, nsColorPickerConstructor,
     mozilla::Module::MAIN_PROCESS_ONLY },
   { &kNS_APPSHELL_CID, false, NULL, nsAppShellConstructor, mozilla::Module::ALLOW_IN_GPU_PROCESS },
   { &kNS_SOUND_CID, false, NULL, nsSoundConstructor,
     mozilla::Module::MAIN_PROCESS_ONLY },
   { &kNS_TRANSFERABLE_CID, false, NULL, nsTransferableConstructor },
@@ -173,17 +169,16 @@ static const mozilla::Module::CIDEntry k
   { &kNS_MACWEBAPPUTILS_CID, false, NULL, nsMacWebAppUtilsConstructor },
   { &kNS_STANDALONENATIVEMENU_CID, false, NULL, nsStandaloneNativeMenuConstructor },
   { &kNS_MACSYSTEMSTATUSBAR_CID, false, NULL, nsSystemStatusBarCocoaConstructor },
   { &kNS_GFXINFO_CID, false, NULL, mozilla::widget::GfxInfoConstructor },
   { NULL }
 };
 
 static const mozilla::Module::ContractIDEntry kWidgetContracts[] = {
-  { "@mozilla.org/widgets/popup/mac;1", &kNS_POPUP_CID },
   { "@mozilla.org/filepicker;1", &kNS_FILEPICKER_CID,
     mozilla::Module::MAIN_PROCESS_ONLY },
   { "@mozilla.org/colorpicker;1", &kNS_COLORPICKER_CID,
     mozilla::Module::MAIN_PROCESS_ONLY },
   { "@mozilla.org/widget/appshell/mac;1", &kNS_APPSHELL_CID, mozilla::Module::ALLOW_IN_GPU_PROCESS },
   { "@mozilla.org/sound;1", &kNS_SOUND_CID,
     mozilla::Module::MAIN_PROCESS_ONLY },
   { "@mozilla.org/widget/transferable;1", &kNS_TRANSFERABLE_CID },
--- a/widget/nsWidgetsCID.h
+++ b/widget/nsWidgetsCID.h
@@ -1,18 +1,13 @@
 /* -*- 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/. */
 
-/* BA7DE611-6088-11d3-A83E-00105A183419 */
-#define NS_POPUP_CID \
-{ 0xba7de611, 0x6088, 0x11d3,  \
-    { 0xa8, 0x3e, 0x0, 0x10, 0x5a, 0x18, 0x34, 0x19 } }
-
 /* bd57cee8-1dd1-11b2-9fe7-95cf4709aea3 */
 #define NS_FILEPICKER_CID \
 { 0xbd57cee8, 0x1dd1, 0x11b2, \
     {0x9f, 0xe7, 0x95, 0xcf, 0x47, 0x09, 0xae, 0xa3} }
 
 /* e221df9b-3d66-4045-9a66-5720949f8d10 */
 #define NS_APPLICATIONCHOOSER_CID \
 { 0xe221df9b, 0x3d66, 0x4045, \