Merge inbound to mozilla-central a=merge
authorCoroiu Cristina <ccoroiu@mozilla.com>
Thu, 07 Jun 2018 12:47:31 +0300
changeset 478419 e83a0d04ce6a2ebe09b7bb6f801a44b8dbe2c56b
parent 478383 30db33f394d4aa4e3650fee43d7947fae9658638 (current diff)
parent 478418 9e4016fe5aaed01deb9481aa88562034477d29fa (diff)
child 478420 6d83f12c21d3ecfe69a7fc13daf8e69847e493a4
child 478443 9e55688e043f1374b259e9844c97d46491506eab
child 478517 f6d91bbd77c6f0ddc01e32b3074d0252d542662d
push id1757
push userffxbld-merge
push dateFri, 24 Aug 2018 17:02:43 +0000
treeherdermozilla-release@736023aebdb1 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone62.0a1
first release with
nightly linux32
e83a0d04ce6a / 62.0a1 / 20180607100059 / files
nightly linux64
e83a0d04ce6a / 62.0a1 / 20180607100059 / files
nightly mac
e83a0d04ce6a / 62.0a1 / 20180607100059 / files
nightly win32
e83a0d04ce6a / 62.0a1 / 20180607100059 / files
nightly win64
e83a0d04ce6a / 62.0a1 / 20180607100059 / 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
testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-armv6.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-x86.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-armv6.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-x86.json
testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android.json
testing/mozharness/configs/multi_locale/standalone_mozilla-central.py
testing/mozharness/configs/single_locale/dev-mozilla-beta.py
testing/mozharness/configs/single_locale/dev-mozilla-release.py
testing/mozharness/configs/single_locale/mozilla-esr52.py
testing/mozharness/configs/single_locale/mozilla-esr60.py
testing/web-platform/meta/mixed-content/video-tag/http-csp/same-host-https/top-level/keep-scheme-redirect/allowed/allowed.https.html.ini
testing/web-platform/meta/mixed-content/video-tag/http-csp/same-host-https/top-level/no-redirect/allowed/allowed.https.html.ini
testing/web-platform/meta/mixed-content/video-tag/meta-csp/same-host-https/top-level/no-redirect/allowed/allowed.https.html.ini
testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-https/top-level/keep-scheme-redirect/allowed/allowed.https.html.ini
testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-https/top-level/no-redirect/allowed/allowed.https.html.ini
new file mode 100644
--- /dev/null
+++ b/js/src/jit-test/tests/cacheir/bug1459754.js
@@ -0,0 +1,9 @@
+function f(x) {
+    this["__proto__"] = x;
+    let tmp = this.toString;
+    assertEq(x === null, tmp === void 0);
+}
+
+for (let e of [[], null, []]) {
+    new f(e);
+}
--- a/js/src/jit/CacheIR.cpp
+++ b/js/src/jit/CacheIR.cpp
@@ -767,22 +767,27 @@ UncacheableProtoOnChain(JSObject* obj)
 static void
 ShapeGuardProtoChain(CacheIRWriter& writer, JSObject* obj, ObjOperandId objId)
 {
     while (true) {
         // Guard on the proto if the shape does not imply the proto.
         bool guardProto = obj->hasUncacheableProto();
 
         obj = obj->staticPrototype();
-        if (!obj)
+        if (!obj && !guardProto)
             return;
 
         objId = writer.loadProto(objId);
+
         if (guardProto)
             writer.guardSpecificObject(objId, obj);
+
+        if (!obj)
+            return;
+
         writer.guardShape(objId, obj->as<NativeObject>().shape());
     }
 }
 
 // For cross compartment guards we shape-guard the prototype chain to avoid
 // referencing the holder object.
 //
 // This peels off the first layer because it's guarded against obj == holder.
@@ -1109,17 +1114,17 @@ GetPropIRGenerator::tryAttachCrossCompar
     RootedObject wrappedTargetGlobal(cx_, &unwrapped->global());
     if (!cx_->compartment()->wrap(cx_, &wrappedTargetGlobal))
         return false;
 
     bool isWindowProxy = false;
     RootedShape shape(cx_);
     RootedNativeObject holder(cx_);
 
-    // Enter compartment of target since some checks have side-effects
+    // Enter realm of target since some checks have side-effects
     // such as de-lazifying type info.
     {
         AutoRealm ar(cx_, unwrapped);
 
         // The first CCW for iframes is almost always wrapping another WindowProxy
         // so we optimize for that case as well.
         isWindowProxy = IsWindowProxy(unwrapped);
         if (isWindowProxy) {
--- a/js/src/jit/CacheIR.h
+++ b/js/src/jit/CacheIR.h
@@ -681,17 +681,17 @@ class MOZ_RAII CacheIRWriter : public JS
     }
     void guardMagicValue(ValOperandId val, JSWhyMagic magic) {
         writeOpWithOperandId(CacheOp::GuardMagicValue, val);
         buffer_.writeByte(uint32_t(magic));
     }
     void guardCompartment(ObjOperandId obj, JSObject* global, JSCompartment* compartment) {
         assertSameCompartment(global);
         writeOpWithOperandId(CacheOp::GuardCompartment, obj);
-        // Add a reference to the compartment's global to keep it alive.
+        // Add a reference to a global in the compartment to keep it alive.
         addStubField(uintptr_t(global), StubField::Type::JSObject);
         // Use RawWord, because compartments never move and it can't be GCed.
         addStubField(uintptr_t(compartment), StubField::Type::RawWord);
     }
     void guardNoDetachedTypedObjects() {
         writeOp(CacheOp::GuardNoDetachedTypedObjects);
     }
     void guardFrameHasNoArgumentsObject() {
--- a/js/src/jit/MacroAssembler.cpp
+++ b/js/src/jit/MacroAssembler.cpp
@@ -3272,27 +3272,29 @@ MacroAssembler::branchTestObjGroup(Condi
 
 void
 MacroAssembler::branchTestObjCompartment(Condition cond, Register obj, const Address& compartment,
                                          Register scratch, Label* label)
 {
     MOZ_ASSERT(obj != scratch);
     loadPtr(Address(obj, JSObject::offsetOfGroup()), scratch);
     loadPtr(Address(scratch, ObjectGroup::offsetOfRealm()), scratch);
+    loadPtr(Address(scratch, Realm::offsetOfCompartment()), scratch);
     branchPtr(cond, compartment, scratch, label);
 }
 
 void
 MacroAssembler::branchTestObjCompartment(Condition cond, Register obj,
                                          const JSCompartment* compartment, Register scratch,
                                          Label* label)
 {
     MOZ_ASSERT(obj != scratch);
     loadPtr(Address(obj, JSObject::offsetOfGroup()), scratch);
     loadPtr(Address(scratch, ObjectGroup::offsetOfRealm()), scratch);
+    loadPtr(Address(scratch, Realm::offsetOfCompartment()), scratch);
     branchPtr(cond, scratch, ImmPtr(compartment), label);
 }
 
 void
 MacroAssembler::branchIfObjGroupHasNoAddendum(Register obj, Register scratch, Label* label)
 {
     MOZ_ASSERT(obj != scratch);
     loadPtr(Address(obj, JSObject::offsetOfGroup()), scratch);
--- a/js/src/vm/JSCompartment.h
+++ b/js/src/vm/JSCompartment.h
@@ -1284,16 +1284,19 @@ class JS::Realm : public JS::shadow::Rea
     // allocation. We consult the probabilities requested by the Debugger
     // instances observing us, if any.
     void chooseAllocationSamplingProbability() {
         savedStacks_.chooseSamplingProbability(this);
     }
 
     void sweepSavedStacks();
 
+    static constexpr size_t offsetOfCompartment() {
+        return offsetof(JS::Realm, compartment_);
+    }
     static constexpr size_t offsetOfRegExps() {
         return offsetof(JS::Realm, regExps);
     }
 };
 
 namespace js {
 
 // We only set the maybeAlive flag for objects and scripts. It's assumed that,
--- a/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
+++ b/mobile/android/geckoview/src/androidTest/java/org/mozilla/geckoview/test/NavigationDelegateTest.kt
@@ -1,16 +1,17 @@
 /* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
  * Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 package org.mozilla.geckoview.test
 
 import org.mozilla.geckoview.GeckoResponse
 import org.mozilla.geckoview.GeckoSession
+import org.mozilla.geckoview.GeckoSessionSettings
 import org.mozilla.geckoview.GeckoSession.TrackingProtectionDelegate;
 import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.AssertCalled
 import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.NullDelegate
 import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.ReuseSession
 import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.Setting
 import org.mozilla.geckoview.test.rule.GeckoSessionTestRule.WithDevToolsAPI
 import org.mozilla.geckoview.test.util.Callbacks
 
@@ -40,16 +41,50 @@ class NavigationDelegateTest : BaseSessi
                            categories,
                            equalTo(category))
                 assertThat("URI should not be null", uri, notNullValue())
                 assertThat("URI should match", uri, endsWith("trackertest.org/tracker.js"))
             }
         })
     }
 
+    @WithDevToolsAPI
+    @Test fun desktopMode() {
+        sessionRule.session.loadUri("https://example.com")
+        sessionRule.waitForPageStop()
+
+        val userAgentJs = "window.navigator.userAgent"
+        val mobileSubStr = "Mobile"
+        val desktopSubStr = "X11"
+
+        assertThat("User agent should be set to mobile",
+                   sessionRule.session.evaluateJS(userAgentJs) as String,
+                   containsString(mobileSubStr))
+
+        sessionRule.session.settings.setBoolean(
+            GeckoSessionSettings.USE_DESKTOP_MODE, true)
+
+        sessionRule.session.reload()
+        sessionRule.session.waitForPageStop()
+
+        assertThat("User agent should be set to desktop",
+                   sessionRule.session.evaluateJS(userAgentJs) as String,
+                   containsString(desktopSubStr))
+
+        sessionRule.session.settings.setBoolean(
+            GeckoSessionSettings.USE_DESKTOP_MODE, false)
+
+        sessionRule.session.reload()
+        sessionRule.session.waitForPageStop()
+
+        assertThat("User agent should be set to mobile",
+                   sessionRule.session.evaluateJS(userAgentJs) as String,
+                   containsString(mobileSubStr))
+    }
+
     @Test fun load() {
         sessionRule.session.loadTestPath(HELLO_HTML_PATH)
         sessionRule.waitForPageStop()
 
         sessionRule.forCallbacksDuringWait(object : Callbacks.NavigationDelegate {
             @AssertCalled(count = 1, order = [1])
             override fun onLoadRequest(session: GeckoSession, uri: String,
                                        where: Int,
--- a/mobile/android/modules/geckoview/GeckoViewSettings.jsm
+++ b/mobile/android/modules/geckoview/GeckoViewSettings.jsm
@@ -84,21 +84,23 @@ class GeckoViewSettings extends GeckoVie
     return this._useDesktopMode;
   }
 
   set useDesktopMode(aUse) {
     if (this.useDesktopMode === aUse) {
       return;
     }
     if (aUse) {
-      Services.obs.addObserver(this.onUserAgentRequest.bind(this),
+      this._userAgentObserver = this.onUserAgentRequest.bind(this);
+      Services.obs.addObserver(this._userAgentObserver,
                                "http-on-useragent-request");
-    } else {
-      Services.obs.removeObserver(this.onUserAgentRequest.bind(this),
+    } else if (this._userAgentObserver) {
+      Services.obs.removeObserver(this._userAgentObserver,
                                   "http-on-useragent-request");
+      this._userAgentObserver = undefined;
     }
     this._useDesktopMode = aUse;
   }
 
   get displayMode() {
     return this.window.QueryInterface(Ci.nsIInterfaceRequestor)
                       .getInterface(Ci.nsIDocShell)
                       .displayMode;
--- a/modules/libpref/init/StaticPrefList.h
+++ b/modules/libpref/init/StaticPrefList.h
@@ -273,17 +273,17 @@ VARCACHE_PREF(
    layout_css_grid_template_subgrid_value_enabled,
   bool, false
 )
 
 // Is support for variation fonts enabled?
 VARCACHE_PREF(
   "layout.css.font-variations.enabled",
    layout_css_font_variations_enabled,
-  bool, true
+  RelaxedAtomicBool, true
 )
 
 // Are we emulating -moz-{inline}-box layout using CSS flexbox?
 VARCACHE_PREF(
   "layout.css.emulate-moz-box-with-flex",
    layout_css_emulate_moz_box_with_flex,
   bool, false
 )
--- a/servo/components/style/font_face.rs
+++ b/servo/components/style/font_face.rs
@@ -318,17 +318,17 @@ macro_rules! is_descriptor_enabled {
         unsafe {
             use gecko_bindings::structs::mozilla;
             mozilla::StaticPrefs_sVarCache_layout_css_font_display_enabled
         }
     };
     ("font-variation-settings") => {
         unsafe {
             use gecko_bindings::structs::mozilla;
-            mozilla::StaticPrefs_sVarCache_layout_css_font_variations_enabled
+            mozilla::StaticPrefs_sVarCache_layout_css_font_variations_enabled != 0
         }
     };
     ($name:tt) => {
         true
     };
 }
 
 macro_rules! font_face_descriptors_common {
--- a/taskcluster/ci/test/misc.yml
+++ b/taskcluster/ci/test/misc.yml
@@ -96,16 +96,17 @@ test-verify:
             default: default
     max-run-time: 10800
     allow-software-gl-layers: false
     run-on-projects:
         by-test-platform:
             # do not run on ccov or jsdcov
             .*-ccov/.*: []
             .*-jsdcov/.*: []
+            .*-asan/.*: []
             # do not run on beta or release: usually just confirms earlier results
             default: ['trunk', 'try']
     tier: 2
     mozharness:
         script:
             by-test-platform:
                 android.*: android_emulator_unittest.py
                 default: desktop_unittest.py
@@ -136,16 +137,17 @@ test-verify-gpu:
             default: default
     max-run-time: 10800
     allow-software-gl-layers: false
     run-on-projects:
         by-test-platform:
             # do not run on ccov or jsdcov
             .*-ccov/.*: []
             .*-jsdcov/.*: []
+            .*-asan/.*: []
             # do not run on beta or release: usually just confirms earlier results
             default: ['trunk', 'try']
     tier: 2
     mozharness:
         script:
             by-test-platform:
                 android.*: android_emulator_unittest.py
                 default: desktop_unittest.py
--- a/taskcluster/ci/test/web-platform.yml
+++ b/taskcluster/ci/test/web-platform.yml
@@ -139,16 +139,17 @@ test-verify-wpt:
     suite: test-verify
     treeherder-symbol: TVw
     max-run-time: 10800
     run-on-projects:
         by-test-platform:
             # do not run on ccov or jsdcov
             .*-ccov/.*: []
             .*-jsdcov/.*: []
+            .*-asan/.*: []
             # do not run on beta or release: usually just confirms earlier results
             default: ['trunk', 'try']
     tier: 2
     mozharness:
         extra-options:
             - --verify
 
 test-coverage-wpt:
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-armv6.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-beta.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-beta",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-armv6/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android-x86.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-beta.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-beta",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-x86/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-beta_android.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-beta.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-beta",
-    "mozilla_dir": "build"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-armv6.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-release.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-release",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-armv6/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android-x86.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-release.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-release",
-    "mozilla_dir": "build",
-    "mozconfig": "build/mobile/android/config/mozconfigs/android-x86/release"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/staging_release_mozilla-release_android.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": "obj-firefox",
-    "locales_file": "build/configs/mozilla/l10n-changesets_mobile-release.json",
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "hg_l10n_base": "https://hg.mozilla.org/",
-    "required_config_vars": ["tag_override"],
-    "l10n_dir": "mozilla-release",
-    "mozilla_dir": "build"
-}
deleted file mode 100644
--- a/testing/mozharness/configs/multi_locale/standalone_mozilla-central.py
+++ /dev/null
@@ -1,41 +0,0 @@
-
-import os
-# The name of the directory we'll pull our source into.
-BUILD_DIR = "mozilla-central"
-# This is where the l10n repos are (everything after https://hg.mozilla.org/)
-# for mozilla-central, that's "l10n-central".
-# For mozilla-aurora, that's "releases/l10n/mozilla-aurora"
-L10N_REPO_PATH = "l10n-central"
-# Currently this is assumed to be a subdirectory of your build dir
-OBJDIR = "objdir-droid"
-# Absolute path to your mozconfig.
-# By default it looks at "./mozconfig"
-MOZCONFIG = os.path.join(os.getcwd(), "mozconfig")
-
-config = {
-    "work_dir": ".",
-    "log_name": "multilocale",
-    "objdir": OBJDIR,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % BUILD_DIR,
-    "locales_platform": "android-multilocale",
-    "locales_dir": "mobile/android/locales",
-    "ignore_locales": ["en-US", "multi"],
-    "vcs_share_base": "/builds/hg-shared",
-    "l10n_repos": [],
-    "hg_l10n_base": "https://hg.mozilla.org/%s" % L10N_REPO_PATH,
-    "hg_l10n_tag": "default",
-    "l10n_dir": "l10n",
-    "mozilla_dir": BUILD_DIR,
-    "mozconfig": MOZCONFIG,
-    "default_actions": [
-        "pull-locale-source",
-        "build",
-        "package-en-US",
-        "backup-objdir",
-        "restore-objdir",
-        "add-locales",
-        "android-assemble-app",
-        "package-multi",
-        "summary",
-    ],
-}
--- a/testing/mozharness/configs/single_locale/alder.py
+++ b/testing/mozharness/configs/single_locale/alder.py
@@ -1,32 +1,13 @@
-# This configuration uses mozilla-central binaries (en-US, localized complete
-# mars) and urls but it generates 'alder' artifacts. With this setup, binaries
-# generated on alder are NOT overwriting mozilla-central files.
-# Using this configuration, on a successful build, artifacts will be uploaded
-# here:
-#
-# * http://dev-stage01.srv.releng.scl3.mozilla.com/pub/mozilla.org/firefox/nightly/latest-alder-l10n/
-#   (in staging environment)
-# * https://ftp.mozilla.org/pub/firefox/nightly/latest-alder-l10n/
-#   (in production environment)
-#
-# If you really want to have localized alder builds, use the use the following
-# values:
-# * "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/alder-%(platform)s/latest/",
-# * "mar_tools_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/alder-%(platform)s/latest/",
-# * "repo": "https://hg.mozilla.org/projects/alder",
-#
-
 import os
 
 config = {
     "nightly_build": True,
     "branch": "alder",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/ash.py
+++ b/testing/mozharness/configs/single_locale/ash.py
@@ -1,32 +1,13 @@
-# This configuration uses mozilla-central binaries (en-US, localized complete
-# mars) and urls but it generates 'ash' artifacts. With this setup, binaries
-# generated on ash are NOT overwriting mozilla-central files.
-# Using this configuration, on a successful build, artifacts will be uploaded
-# here:
-#
-# * http://dev-stage01.srv.releng.scl3.mozilla.com/pub/mozilla.org/firefox/nightly/latest-ash-l10n/
-#   (in staging environment)
-# * https://ftp.mozilla.org/pub/firefox/nightly/latest-ash-l10n/
-#   (in production environment)
-#
-# If you really want to have localized ash builds, use the use the following
-# values:
-# * "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/ash-%(platform)s/latest/",
-# * "mar_tools_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/tinderbox-builds/ash-%(platform)s/latest/",
-# * "repo": "https://hg.mozilla.org/projects/ash",
-#
-
 import os
 
 config = {
     "nightly_build": True,
     "branch": "ash",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-central/",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/ash_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/ash_android-api-16.py
@@ -1,38 +1,36 @@
+import os
+
 BRANCH = "ash"
 MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": EN_US_BINARY_URL,
+        "EN_US_BINARY_URL": os.environ['EN_US_BINARY_URL'],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/autoland.py
+++ b/testing/mozharness/configs/single_locale/autoland.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-central",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/autoland_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/autoland_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "autoland"
 MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/dev-mozilla-beta.py
+++ /dev/null
@@ -1,11 +0,0 @@
-config = {
-    "branch": "jamun",
-    "nightly_build": True,
-    "update_channel": "beta",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
-
-    # purge options
-    'is_automation': True,
-}
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/dev-mozilla-release.py
+++ /dev/null
@@ -1,11 +0,0 @@
-config = {
-    "branch": "jamun",
-    "nightly_build": True,
-    "update_channel": "release",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
-
-    # purge options
-    'is_automation': True,
-}
--- a/testing/mozharness/configs/single_locale/jamun.py
+++ b/testing/mozharness/configs/single_locale/jamun.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "jamun",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly-jamun",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/jamun_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/jamun_android-api-16.py
@@ -1,37 +1,33 @@
 import os
 
 BRANCH = "jamun"
 MOZILLA_DIR = BRANCH
-EN_US_BINARY_URL = None     # No build has been uploaded to archive.m.o
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "mozilla-beta",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "nightly-jamun",
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/linux.py
+++ b/testing/mozharness/configs/single_locale/linux.py
@@ -1,21 +1,19 @@
 config = {
-    "platform": "linux",
     "app_name": "browser",
     "mozconfig_platform": "linux32",
     "mozconfig_variant": "l10n-mozconfig",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 }
--- a/testing/mozharness/configs/single_locale/linux64.py
+++ b/testing/mozharness/configs/single_locale/linux64.py
@@ -1,21 +1,18 @@
 config = {
-    "platform": "linux64",
     "app_name": "browser",
     "mozconfig_platform": "linux64",
     "mozconfig_variant": "l10n-mozconfig",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 }
--- a/testing/mozharness/configs/single_locale/linux64_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux64_devedition.py
@@ -1,23 +1,20 @@
 config = {
-    "platform": "linux64",
     "app_name": "browser",
     "mozconfig_platform": "linux64",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/linux_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux_devedition.py
@@ -1,23 +1,20 @@
 config = {
-    "platform": "linux",
     "app_name": "browser",
     "mozconfig_platform": "linux32",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/macosx64.py
+++ b/testing/mozharness/configs/single_locale/macosx64.py
@@ -1,26 +1,23 @@
 config = {
     # mozconfig file to use, it depends on branch and platform names
-    "platform": "macosx64",
     "app_name": "browser",
     "mozconfig_platform": "macosx64",
     "mozconfig_variant": "l10n-mozconfig",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
 
     # l10n
     "ignore_locales": ["en-US", "ja"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "Contents/Resources/application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 }
--- a/testing/mozharness/configs/single_locale/macosx64_devedition.py
+++ b/testing/mozharness/configs/single_locale/macosx64_devedition.py
@@ -1,29 +1,26 @@
 config = {
     # mozconfig file to use, it depends on branch and platform names
-    "platform": "macosx64",
     "app_name": "browser",
     "mozconfig_platform": "macosx64",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
 
     # l10n
     "ignore_locales": ["en-US", "ja"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "Contents/Resources/application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/maple_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/maple_android-api-16.py
@@ -1,38 +1,33 @@
 import os
 
 BRANCH = "maple"
 MOZILLA_DIR = BRANCH
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/" \
-                   "mobile/nightly/latest-maple-android-api-16/en-US"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "nightly-maple",
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-aurora.py
+++ b/testing/mozharness/configs/single_locale/mozilla-aurora.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-aurora",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-aurora/",
     "update_channel": "aurora",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/mozilla-aurora",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-aurora_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "mozilla-aurora"
 MOZ_UPDATE_CHANNEL = "aurora"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/%s" % BRANCH,
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": MOZILLA_DIR,
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-beta.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-beta",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-beta/",
     "update_channel": "beta",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta_android-api-16.py
@@ -6,32 +6,28 @@ OBJDIR = "obj-firefox"
 EN_US_BINARY_URL = None
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
-    "locales_platform": "android-api-16",
     "ignore_locales": ["en-US"],
-    "platform": "android",
     "build_target": "Android_arm-eabi-gcc3",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
     "l10n_dir": "l10n-central",
 
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_OBJDIR": OBJDIR,
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
 }
--- a/testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
+++ b/testing/mozharness/configs/single_locale/mozilla-beta_devedition.py
@@ -1,12 +1,11 @@
 config = {
     "nightly_build": True,
     "branch": "mozilla-beta",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-beta/",
     "update_channel": "aurora",  # devedition uses aurora based branding
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # purge options
     'is_automation': True,
 }
--- a/testing/mozharness/configs/single_locale/mozilla-central.py
+++ b/testing/mozharness/configs/single_locale/mozilla-central.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-central",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-central_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "mozilla-central"
 MOZ_UPDATE_CHANNEL = "nightly"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/mozilla-esr52.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# This config references releases/l10n/mozilla-release instead of l10n-central
-# because 52 predates cross-channel localization, which rides the train
-# with 57.
-# If you copy this config for the ESR following 57, change hg_l10n_base
-# to l10n-central.
-config = {
-    "nightly_build": True,
-    "branch": "mozilla-esr52",
-    "en_us_binary_url": "https://archive.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-esr52/",
-    "update_channel": "esr",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/releases/l10n/mozilla-release",
-
-    # purge options
-    'is_automation': True,
-}
deleted file mode 100644
--- a/testing/mozharness/configs/single_locale/mozilla-esr60.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import os
-
-config = {
-    "nightly_build": True,
-    "branch": "mozilla-esr60",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-esr60/",
-    "update_channel": "esr",
-
-    # l10n
-    "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
-
-    # mar
-    "mar_tools_url": os.environ["MAR_TOOLS_URL"],
-
-    # purge options
-    'is_automation': True,
-}
--- a/testing/mozharness/configs/single_locale/mozilla-inbound.py
+++ b/testing/mozharness/configs/single_locale/mozilla-inbound.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-inbound",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-inbound_android-api-16.py
@@ -1,40 +1,36 @@
 import os
 
 BRANCH = "mozilla-inbound"
 MOZ_UPDATE_CHANNEL = "default"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/mobile/nightly/latest-%s-android-api-16/en-US" % BRANCH
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "nightly_build": True,
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": OBJDIR,
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android",
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/mozilla-release.py
+++ b/testing/mozharness/configs/single_locale/mozilla-release.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": True,
     "branch": "mozilla-release",
-    "en_us_binary_url": "http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-mozilla-release/",
     "update_channel": "release",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/mozilla-release_android-api-16.py
@@ -1,37 +1,32 @@
 import os
 BRANCH = "mozilla-release"
 MOZ_UPDATE_CHANNEL = "release"
 MOZILLA_DIR = BRANCH
 OBJDIR = "obj-firefox"
-EN_US_BINARY_URL = None
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     "branch": BRANCH,
     "log_name": "single_locale",
     "objdir": OBJDIR,
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
-    "locales_platform": "android-api-16",
     "ignore_locales": ["en-US"],
-    "platform": "android",
     "build_target": "Android_arm-eabi-gcc3",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': HG_SHARE_BASE_DIR,
     "l10n_dir": "l10n-central",
 
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_OBJDIR": OBJDIR,
         "MOZ_UPDATE_CHANNEL": MOZ_UPDATE_CHANNEL,
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
 }
--- a/testing/mozharness/configs/single_locale/tc_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/tc_android-api-16.py
@@ -1,10 +1,9 @@
 config = {
-    "locales_file": "src/mobile/locales/l10n-changesets.json",
     "mozconfig": "src/mobile/android/config/mozconfigs/android-api-16/l10n-nightly",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/src",
     },
     "tooltool_servers": ['http://relengapi/tooltool/'],
 
     "upload_env": {
--- a/testing/mozharness/configs/single_locale/tc_linux32.py
+++ b/testing/mozharness/configs/single_locale/tc_linux32.py
@@ -1,18 +1,15 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
--- a/testing/mozharness/configs/single_locale/tc_linux64.py
+++ b/testing/mozharness/configs/single_locale/tc_linux64.py
@@ -1,18 +1,15 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
--- a/testing/mozharness/configs/single_locale/tc_macosx64.py
+++ b/testing/mozharness/configs/single_locale/tc_macosx64.py
@@ -1,18 +1,15 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
--- a/testing/mozharness/configs/single_locale/tc_win32.py
+++ b/testing/mozharness/configs/single_locale/tc_win32.py
@@ -1,23 +1,19 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         # EN_US_INSTALLER_BINARY_URL falls back on EN_US_BINARY_URL
         "EN_US_INSTALLER_BINARY_URL": os.environ.get(
-            "EN_US_INSTALLER_BINARY_URL", os.environ.get(
-                "EN_US_BINARY_URL", EN_US_BINARY_URL)),
+            "EN_US_INSTALLER_BINARY_URL", os.environ["EN_US_BINARY_URL"]),
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE', 'c:/builds/tooltool_cache'),
         'EN_US_PACKAGE_NAME': 'target.zip',
         'EN_US_PKG_INST_BASENAME': 'target.installer',
     },
     "upload_env": {
--- a/testing/mozharness/configs/single_locale/tc_win64.py
+++ b/testing/mozharness/configs/single_locale/tc_win64.py
@@ -1,23 +1,19 @@
 import os
 
-EN_US_BINARY_URL = "%(en_us_binary_url)s"
-
 config = {
-    "locales_file": "src/browser/locales/all-locales",
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
     "bootstrap_env": {
         "NO_MERCURIAL_SETUP_CHECK": "1",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         # EN_US_INSTALLER_BINARY_URL falls back on EN_US_BINARY_URL
         "EN_US_INSTALLER_BINARY_URL": os.environ.get(
-            "EN_US_INSTALLER_BINARY_URL", os.environ.get(
-                "EN_US_BINARY_URL", EN_US_BINARY_URL)),
+            "EN_US_INSTALLER_BINARY_URL", os.environ["EN_US_BINARY_URL"]),
         "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
         "DIST": "%(abs_objdir)s",
         "L10NBASEDIR": "../../l10n",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE', 'c:/builds/tooltool_cache'),
         'EN_US_PACKAGE_NAME': 'target.zip',
         'EN_US_PKG_INST_BASENAME': 'target.installer',
     },
     "upload_env": {
--- a/testing/mozharness/configs/single_locale/try.py
+++ b/testing/mozharness/configs/single_locale/try.py
@@ -1,14 +1,13 @@
 import os
 
 config = {
     "nightly_build": False,
     "branch": "try",
-    "en_us_binary_url": "http://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central",
     "update_channel": "nightly-try",
 
     # l10n
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
 
     # mar - passed in environ from taskcluster
     "mar_tools_url": os.environ["MAR_TOOLS_URL"],
 
--- a/testing/mozharness/configs/single_locale/try_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/try_android-api-16.py
@@ -1,38 +1,33 @@
 import os
 
 BRANCH = "try"
 MOZILLA_DIR = BRANCH
-EN_US_BINARY_URL = "http://archive.mozilla.org/pub/" \
-                   "mobile/nightly/latest-mozilla-central-android-api-16/en-US"
 
 config = {
     "branch": "try",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "is_automation": True,
-    "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "nightly_build": True,
     "hg_l10n_base": "https://hg.mozilla.org/l10n-central",
     "hg_l10n_tag": "default",
     'vcs_share_base': "/builds/hg-shared",
 
     "l10n_dir": "l10n-central",
     "repack_env": {
         # so ugly, bug 951238
         "LD_LIBRARY_PATH": "/lib:/tools/gcc-4.7.2-0moz1/lib:/tools/gcc-4.7.2-0moz1/lib64",
         "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": os.environ.get("EN_US_BINARY_URL", EN_US_BINARY_URL),
+        "EN_US_BINARY_URL": os.environ["EN_US_BINARY_URL"],
         "MOZ_UPDATE_CHANNEL": "try", # XXX Invalid
     },
-    "upload_branch": "%s-android-api-16" % BRANCH,
-    "platform": "android", # XXX Validate
 
     # Balrog
     "build_target": "Android_arm-eabi-gcc3",
 }
--- a/testing/mozharness/configs/single_locale/win32.py
+++ b/testing/mozharness/configs/single_locale/win32.py
@@ -1,30 +1,27 @@
 config = {
-    "platform": "win32",
     "app_name": "browser",
     "mozconfig_platform": "win32",
     "mozconfig_variant": "l10n-mozconfig",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win32/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {}
 }
--- a/testing/mozharness/configs/single_locale/win32_devedition.py
+++ b/testing/mozharness/configs/single_locale/win32_devedition.py
@@ -1,29 +1,26 @@
 config = {
-    "platform": "win32",
     "app_name": "browser",
     "mozconfig_platform": "win32",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win32/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {},
 
--- a/testing/mozharness/configs/single_locale/win64.py
+++ b/testing/mozharness/configs/single_locale/win64.py
@@ -1,29 +1,26 @@
 config = {
-    "platform": "win64",
     "app_name": "browser",
     "mozconfig_platform": "win64",
     "mozconfig_variant": "l10n-mozconfig",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {}
 }
--- a/testing/mozharness/configs/single_locale/win64_devedition.py
+++ b/testing/mozharness/configs/single_locale/win64_devedition.py
@@ -1,29 +1,26 @@
 config = {
-    "platform": "win64",
     "app_name": "browser",
     "mozconfig_platform": "win64",
     "mozconfig_variant": "l10n-mozconfig-devedition",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
-    "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
 
     # use mozmake?
     "enable_mozmake": True,
     'exes': {},
 
--- a/testing/mozharness/mozharness/mozilla/l10n/locales.py
+++ b/testing/mozharness/mozharness/mozilla/l10n/locales.py
@@ -3,22 +3,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/.
 # ***** END LICENSE BLOCK *****
 """Localization.
 """
 
 import os
-from urlparse import urljoin
 import pprint
 import sys
-from copy import deepcopy
-
-sys.path.insert(1, os.path.dirname(sys.path[0]))
 
 from mozharness.base.config import parse_config_file
 
 
 # LocalesMixin {{{1
 class LocalesMixin(object):
     def __init__(self, **kwargs):
         """ Mixins generally don't have an __init__.
--- a/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py
+++ b/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py
@@ -4,24 +4,22 @@
 # 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/.
 # ***** END LICENSE BLOCK *****
 """multi_locale_build.py
 
 This should be a mostly generic multilocale build script.
 """
 
-from copy import deepcopy
 import os
 import sys
 
 sys.path.insert(1, os.path.dirname(os.path.dirname(sys.path[0])))
 
-from mozharness.base.errors import MakefileErrorList, SSHErrorList
-from mozharness.base.log import FATAL
+from mozharness.base.errors import MakefileErrorList
 from mozharness.base.vcs.vcsbase import MercurialScript
 from mozharness.mozilla.l10n.locales import LocalesMixin
 
 
 # MultiLocaleBuild {{{1
 class MultiLocaleBuild(LocalesMixin, MercurialScript):
     """ This class targets Fennec multilocale builds.
         We were considering this for potential Firefox desktop multilocale.
@@ -71,94 +69,54 @@ class MultiLocaleBuild(LocalesMixin, Mer
          "default": "l10n",
          "help": "Specify the l10n dir name"
          }
     ]]
 
     def __init__(self, require_config_file=True):
         LocalesMixin.__init__(self)
         MercurialScript.__init__(self, config_options=self.config_options,
-                                 all_actions=['clobber',
-                                              'pull-build-source',
-                                              'pull-locale-source',
-                                              'build',
-                                              'package-en-US',
-                                              'upload-en-US',
-                                              'backup-objdir',
-                                              'restore-objdir',
+                                 all_actions=['pull-locale-source',
                                               'add-locales',
                                               'android-assemble-app',
                                               'package-multi',
-                                              'upload-multi',
                                               'summary'],
                                  require_config_file=require_config_file)
 
     def query_l10n_env(self):
         return self.query_env()
 
-    def clobber(self):
-        c = self.config
-        if c['work_dir'] != '.':
-            path = os.path.join(c['base_work_dir'], c['work_dir'])
-            if os.path.exists(path):
-                self.rmtree(path, error_level=FATAL)
-        else:
-            self.info("work_dir is '.'; skipping for now.")
-
-    def pull_build_source(self):
-        c = self.config
-        repos = c['repos']
-        self.vcs_checkout_repos(repos, tag_override=c.get('tag_override'))
-
     # pull_locale_source() defined in LocalesMixin.
 
-    def build(self):
-        c = self.config
-        dirs = self.query_abs_dirs()
-        self.copyfile(os.path.join(dirs['abs_work_dir'], c['mozconfig']),
-                      os.path.join(dirs['abs_mozilla_dir'], 'mozconfig'),
-                      error_level=FATAL)
-
-        mach = os.path.join(dirs['abs_mozilla_dir'], 'mach')
-        env = self.query_env()
-        if self._process_command(command=[sys.executable, mach, 'build'],
-                                 cwd=dirs['abs_mozilla_dir'],
-                                 env=env, error_list=MakefileErrorList):
-            self.fatal("Erroring out after the build failed.")
-
     def android_assemble_app(self):
         dirs = self.query_abs_dirs()
 
         command = 'make -C mobile/android/base android_apks'
         env = self.query_env()
         if self._process_command(command=command,
                                  cwd=dirs['abs_objdir'],
                                  env=env, error_list=MakefileErrorList):
             self.fatal("Erroring out after assembling Android APKs failed.")
 
     def add_locales(self):
-        c = self.config
         dirs = self.query_abs_dirs()
         locales = self.query_locales()
 
         for locale in locales:
             command = 'make chrome-%s L10NBASEDIR=%s' % (locale, dirs['abs_l10n_dir'])
             status = self._process_command(command=command,
                                            cwd=dirs['abs_locales_dir'],
                                            error_list=MakefileErrorList)
             if status:
                 self.return_code += 1
                 self.add_summary("Failed to add locale %s!" % locale,
                                  level="error")
             else:
                 self.add_summary("Added locale %s successfully." % locale)
 
-    def package_en_US(self):
-        self.package(package_type='en-US')
-
     def preflight_package_multi(self):
         dirs = self.query_abs_dirs()
         self.run_command("rm -rfv dist/fennec*", cwd=dirs['abs_objdir'])
         # bug 933290
         self.run_command(["touch", "mobile/android/installer/Makefile"], cwd=dirs['abs_objdir'])
 
     def package_multi(self):
         self.package(package_type='multi')
@@ -187,50 +145,16 @@ class MultiLocaleBuild(LocalesMixin, Mer
             env['MOZ_CHROME_MULTILOCALE'] = "en-US " + \
                                             ' '.join(self.query_locales())
             self.info("MOZ_CHROME_MULTILOCALE is %s" % env['MOZ_CHROME_MULTILOCALE'])
         self._process_command(command=command, cwd=dirs['abs_objdir'],
                               env=env, error_list=MakefileErrorList,
                               halt_on_failure=True)
         self.additional_packaging(package_type=package_type, env=env)
 
-    def upload_en_US(self):
-        # TODO
-        self.info("Not written yet.")
-
-    def backup_objdir(self):
-        dirs = self.query_abs_dirs()
-        if not os.path.isdir(dirs['abs_objdir']):
-            self.warning("%s doesn't exist! Skipping..." % dirs['abs_objdir'])
-            return
-        rsync = self.query_exe('rsync')
-        backup_dir = '%s-bak' % dirs['abs_objdir']
-        self.rmtree(backup_dir)
-        self.mkdir_p(backup_dir)
-        self.run_command([rsync, '-a', '--delete', '--partial',
-                          '%s/' % dirs['abs_objdir'],
-                          '%s/' % backup_dir],
-                         error_list=SSHErrorList)
-
-    def restore_objdir(self):
-        dirs = self.query_abs_dirs()
-        rsync = self.query_exe('rsync')
-        backup_dir = '%s-bak' % dirs['abs_objdir']
-        if not os.path.isdir(dirs['abs_objdir']) or not os.path.isdir(backup_dir):
-            self.warning("Both %s and %s need to exist to restore the objdir! Skipping..." % (dirs['abs_objdir'], backup_dir))
-            return
-        self.run_command([rsync, '-a', '--delete', '--partial',
-                          '%s/' % backup_dir,
-                          '%s/' % dirs['abs_objdir']],
-                         error_list=SSHErrorList)
-
-    def upload_multi(self):
-        # TODO
-        self.info("Not written yet.")
-
     def _process_command(self, **kwargs):
         """Stub wrapper function that allows us to call scratchbox in
            MaemoMultiLocaleBuild.
 
         """
         return self.run_command(**kwargs)
 
 # __main__ {{{1
--- a/testing/mozharness/mozharness/mozilla/mar.py
+++ b/testing/mozharness/mozharness/mozilla/mar.py
@@ -18,19 +18,17 @@ class MarMixin(object):
 
     def download_mar_tools(self):
         """downloads mar tools executables (mar,mbsdiff)
            and stores them local_dir()"""
         self.info("getting mar tools")
         dst_dir = self._mar_tool_dir()
         self.mkdir_p(dst_dir)
         config = self.config
-        replace_dict = {'platform': config['platform'],
-                        'branch': config['branch']}
-        url = config['mar_tools_url'] % replace_dict
+        url = config['mar_tools_url']
         binaries = (config['mar'], config['mbsdiff'])
         for binary in binaries:
             from_url = "/".join((url, binary))
             full_path = os.path.join(dst_dir, binary)
             if not os.path.exists(full_path):
                 self.download_file(from_url, file_name=full_path)
                 self.info("downloaded %s" % full_path)
             else:
--- a/testing/mozharness/scripts/desktop_l10n.py
+++ b/testing/mozharness/scripts/desktop_l10n.py
@@ -10,17 +10,17 @@ This script manages Desktop repacks for 
 """
 import os
 import glob
 import re
 import sys
 import shlex
 
 # load modules from parent dir
-sys.path.insert(1, os.path.dirname(sys.path[0]))
+sys.path.insert(1, os.path.dirname(sys.path[0]))  # noqa
 
 from mozharness.base.errors import MakefileErrorList
 from mozharness.base.script import BaseScript
 from mozharness.base.vcs.vcsbase import VCSMixin
 from mozharness.mozilla.automation import AutomationMixin
 from mozharness.mozilla.building.buildbase import (
     MakeUploadOutputParser,
     get_mozconfig_path,
@@ -40,48 +40,37 @@ SUCCESS = 0
 FAILURE = 1
 
 SUCCESS_STR = "Success"
 FAILURE_STR = "Failed"
 
 
 # mandatory configuration options, without them, this script will not work
 # it's a list of values that are already known before starting a build
-configuration_tokens = ('branch',
-                        'platform',
-                        'update_channel',
-                        )
+configuration_tokens = ('branch', 'update_channel')
+
 # some other values such as "%(version)s", ...
 # are defined at run time and they cannot be enforced in the _pre_config_lock
 # phase
-runtime_config_tokens = ('version', 'locale', 'from_buildid',
-                         'abs_objdir', 'revision',
-                         'to_buildid', 'en_us_binary_url',
-                         'en_us_installer_binary_url', 'mar_tools_url',
-                         'who')
+runtime_config_tokens = ('version', 'locale', 'abs_objdir', 'revision',
+                         'en_us_installer_binary_url')
 
 
 # DesktopSingleLocale {{{1
 class DesktopSingleLocale(LocalesMixin, AutomationMixin,
                           VCSMixin, BaseScript, MarMixin):
     """Manages desktop repacks"""
     config_options = [[
         ['--locale', ],
         {"action": "extend",
          "dest": "locales",
          "type": "string",
          "help": "Specify the locale(s) to sign and update. Optionally pass"
                  " revision separated by colon, en-GB:default."}
     ], [
-        ['--locales-file', ],
-        {"action": "store",
-         "dest": "locales_file",
-         "type": "string",
-         "help": "Specify a file to determine which locales to sign and update"}
-    ], [
         ['--tag-override', ],
         {"action": "store",
          "dest": "tag_override",
          "type": "string",
          "help": "Override the tags set for all repos"}
     ], [
         ['--revision', ],
         {"action": "store",
@@ -109,27 +98,22 @@ class DesktopSingleLocale(LocalesMixin, 
     def __init__(self, require_config_file=True):
         # fxbuild style:
         buildscript_kwargs = {
             'all_actions': [
                 "clone-locales",
                 "list-locales",
                 "setup",
                 "repack",
-                "funsize-props",
                 "summary",
             ],
             'config': {
                 "ignore_locales": ["en-US"],
                 "locales_dir": "browser/locales",
-                "buildid_section": "App",
-                "buildid_option": "BuildID",
-                "application_ini": "application.ini",
                 "log_name": "single_locale",
-                "hashType": "sha512",
             },
         }
 
         LocalesMixin.__init__(self)
         BaseScript.__init__(
             self,
             config_options=self.config_options,
             require_config_file=require_config_file,
@@ -258,19 +242,16 @@ class DesktopSingleLocale(LocalesMixin, 
     # Helper methods {{{2
     def query_bootstrap_env(self):
         """returns the env for repacks"""
         if self.bootstrap_env:
             return self.bootstrap_env
         config = self.config
         replace_dict = self.query_abs_dirs()
 
-        replace_dict['en_us_binary_url'] = config.get('en_us_binary_url')
-        # Override en_us_binary_url if packageUrl is passed as a property from
-        # the en-US build
         bootstrap_env = self.query_env(partial_env=config.get("bootstrap_env"),
                                        replace_dict=replace_dict)
         for binary in self._mar_binaries():
             # "mar -> MAR" and 'mar.exe -> MAR' (windows)
             name = binary.replace('.exe', '')
             name = name.upper()
             binary_path = os.path.join(self._mar_tool_dir(), binary)
             # windows fix...
@@ -635,22 +616,16 @@ class DesktopSingleLocale(LocalesMixin, 
         self.abs_dirs = abs_dirs
         return self.abs_dirs
 
     def _mar_binaries(self):
         """returns a tuple with mar and mbsdiff paths"""
         config = self.config
         return (config['mar'], config['mbsdiff'])
 
-    def _mar_dir(self, dirname):
-        """returns the full path of dirname;
-            dirname is an entry in configuration"""
-        dirs = self.query_abs_dirs()
-        return os.path.join(dirs['abs_objdir'], self.config[dirname])
-
     # TODO: replace with ToolToolMixin
     def _get_tooltool_auth_file(self):
         # set the default authentication file based on platform; this
         # corresponds to where puppet puts the token
         if 'tooltool_authentication_file' in self.config:
             fn = self.config['tooltool_authentication_file']
         elif self._is_windows():
             fn = r'c:\builds\relengapi.tok'
--- a/testing/mozharness/scripts/mobile_l10n.py
+++ b/testing/mozharness/scripts/mobile_l10n.py
@@ -17,17 +17,17 @@ import sys
 
 try:
     import simplejson as json
     assert json
 except ImportError:
     import json
 
 # load modules from parent dir
-sys.path.insert(1, os.path.dirname(sys.path[0]))
+sys.path.insert(1, os.path.dirname(sys.path[0]))  # noqa
 
 from mozharness.base.errors import MakefileErrorList
 from mozharness.base.log import OutputParser
 from mozharness.mozilla.automation import AutomationMixin
 from mozharness.mozilla.tooltool import TooltoolMixin
 from mozharness.base.vcs.vcsbase import MercurialScript
 from mozharness.mozilla.l10n.locales import LocalesMixin
 from mozharness.mozilla.secrets import SecretsMixin
@@ -39,23 +39,16 @@ class MobileSingleLocale(LocalesMixin, T
     config_options = [[
         ['--locale', ],
         {"action": "extend",
          "dest": "locales",
          "type": "string",
          "help": "Specify the locale(s) to sign and update"
          }
     ], [
-        ['--locales-file', ],
-        {"action": "store",
-         "dest": "locales_file",
-         "type": "string",
-         "help": "Specify a file to determine which locales to sign and update"
-         }
-    ], [
         ['--tag-override', ],
         {"action": "store",
          "dest": "tag_override",
          "type": "string",
          "help": "Override the tags set for all repos"
          }
     ], [
         ['--revision', ],
--- a/testing/web-platform/meta/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.https.html.ini
+++ b/testing/web-platform/meta/encrypted-media/clearkey-mp4-playback-temporary-encrypted-clear.https.html.ini
@@ -1,7 +1,3 @@
 [clearkey-mp4-playback-temporary-encrypted-clear.https.html]
   disabled:
     if os == "linux": https://bugzilla.mozilla.org/show_bug.cgi?id=1301418
-  [org.w3.clearkey, temporary, mp4, playback, single key, encrypted then clear content]
-    expected:
-      if (os == "win") and (version == "5.1.2600"): FAIL
-
--- a/testing/web-platform/meta/encrypted-media/clearkey-mp4-playback-temporary-events.https.html.ini
+++ b/testing/web-platform/meta/encrypted-media/clearkey-mp4-playback-temporary-events.https.html.ini
@@ -1,16 +1,6 @@
 [clearkey-mp4-playback-temporary-events.https.html]
   disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1312914
-  [org.w3.clearkey, sucessful playback and events, temporary, mp4, set src before setMediaKeys]
-    expected:
-      if (os == "win") and (version == "5.1.2600"): TIMEOUT
 
   [org.w3.clearkey, temporary, mp4, playback, check events]
     expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): TIMEOUT
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): TIMEOUT
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): TIMEOUT
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): TIMEOUT
       if debug and not e10s and (os == "mac") and (version == "OS X 10.10.5") and (processor == "x86_64") and (bits == 64): FAIL
-      if not debug and e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
-      if debug and not e10s and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
-
--- a/testing/web-platform/meta/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.https.html.ini
+++ b/testing/web-platform/meta/encrypted-media/clearkey-mp4-requestmediakeysystemaccess.https.html.ini
@@ -1,95 +1,3 @@
 [clearkey-mp4-requestmediakeysystemaccess.https.html]
-  [Basic supported configuration]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Partially supported configuration]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Supported audio codec]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [ContentType formatting must be preserved]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Leading space in contentType]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Space before ; in contentType]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Trailing space in contentType]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Space at start of codecs parameter]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Space at end of codecs parameter]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Video/]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Codecs=]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [Upper case MIME type]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
-  [CODECS=]
-    expected:
-      if not debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if debug and e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-      if not debug and not e10s and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-
   [org.w3.clearkey, requestMediaKeySystemAccess: Empty configuration should result in NotSupportedError]
     expected: FAIL
-
deleted file mode 100644
--- a/testing/web-platform/meta/mixed-content/video-tag/http-csp/same-host-https/top-level/keep-scheme-redirect/allowed/allowed.https.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[allowed.https.html]
-  [opt_in_method: http-csp\n                                 origin: same-host-https\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: keep-scheme-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
deleted file mode 100644
--- a/testing/web-platform/meta/mixed-content/video-tag/http-csp/same-host-https/top-level/no-redirect/allowed/allowed.https.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[allowed.https.html]
-  [opt_in_method: http-csp\n                                 origin: same-host-https\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: no-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
deleted file mode 100644
--- a/testing/web-platform/meta/mixed-content/video-tag/meta-csp/same-host-https/top-level/no-redirect/allowed/allowed.https.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[allowed.https.html]
-  [opt_in_method: meta-csp\n                                 origin: same-host-https\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: no-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/cross-origin-http/top-level/no-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
+++ b/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/cross-origin-http/top-level/no-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
@@ -1,7 +1,2 @@
 [no-opt-in-allows.https.html]
   prefs: [security.mixed_content.upgrade_display_content:false]
-  [opt_in_method: no-opt-in\n                                 origin: cross-origin-http\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: no-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/cross-origin-http/top-level/swap-scheme-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
+++ b/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/cross-origin-http/top-level/swap-scheme-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
@@ -1,7 +1,2 @@
 [no-opt-in-allows.https.html]
   prefs: [security.mixed_content.upgrade_display_content:false]
-  [opt_in_method: no-opt-in\n                                 origin: cross-origin-http\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: swap-scheme-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-http/top-level/keep-scheme-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
+++ b/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-http/top-level/keep-scheme-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
@@ -1,7 +1,2 @@
 [no-opt-in-allows.https.html]
   prefs: [security.mixed_content.upgrade_display_content:false]
-  [opt_in_method: no-opt-in\n                                 origin: same-host-http\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: keep-scheme-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-http/top-level/no-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
+++ b/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-http/top-level/no-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
@@ -1,7 +1,2 @@
 [no-opt-in-allows.https.html]
   prefs: [security.mixed_content.upgrade_display_content:false]
-  [opt_in_method: no-opt-in\n                                 origin: same-host-http\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: no-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-http/top-level/swap-scheme-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
+++ b/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-http/top-level/swap-scheme-redirect/optionally-blockable/no-opt-in-allows.https.html.ini
@@ -1,7 +1,2 @@
 [no-opt-in-allows.https.html]
   prefs: [security.mixed_content.upgrade_display_content:false]
-  [opt_in_method: no-opt-in\n                                 origin: same-host-http\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: swap-scheme-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
deleted file mode 100644
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-https/top-level/keep-scheme-redirect/allowed/allowed.https.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[allowed.https.html]
-  [opt_in_method: no-opt-in\n                                 origin: same-host-https\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: keep-scheme-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
deleted file mode 100644
--- a/testing/web-platform/meta/mixed-content/video-tag/no-opt-in/same-host-https/top-level/no-redirect/allowed/allowed.https.html.ini
+++ /dev/null
@@ -1,6 +0,0 @@
-[allowed.https.html]
-  [opt_in_method: no-opt-in\n                                 origin: same-host-https\n                                 source_scheme: https\n                                 context_nesting: top-level\n                                 redirection: no-redirect\n                                 subresource: video-tag\n                                 expectation: allowed]
-    expected:
-      if (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
-    bug: The video this test is using doesn't seem to want to play on WinXP.
-
--- a/widget/windows/nsAppShell.cpp
+++ b/widget/windows/nsAppShell.cpp
@@ -21,16 +21,17 @@
 #include "mozilla/StaticPtr.h"
 #include "nsTHashtable.h"
 #include "nsHashKeys.h"
 #include "GeckoProfiler.h"
 #include "nsComponentManagerUtils.h"
 #include "ScreenHelperWin.h"
 #include "HeadlessScreenHelper.h"
 #include "mozilla/widget/ScreenManager.h"
+#include "mozilla/Atomics.h"
 
 #if defined(ACCESSIBILITY)
 #include "mozilla/a11y/Compatibility.h"
 #include "mozilla/a11y/Platform.h"
 #endif // defined(ACCESSIBILITY)
 
 // These are two messages that the code in winspool.drv on Windows 7 explicitly
 // waits for while it is pumping other Windows messages, during display of the
@@ -180,36 +181,49 @@ namespace crashreporter {
 void LSPAnnotate();
 } // namespace crashreporter
 } // namespace mozilla
 
 using mozilla::crashreporter::LSPAnnotate;
 
 //-------------------------------------------------------------------------
 
+// Note that since we're on x86-ish processors here, ReleaseAcquire is the
+// semantics that normal loads and stores would use anyway.
+static Atomic<size_t, ReleaseAcquire> sOutstandingNativeEventCallbacks;
+
 /*static*/ LRESULT CALLBACK
 nsAppShell::EventWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
   if (uMsg == sAppShellGeckoMsgId) {
+    // The app shell might have been destroyed between this message being
+    // posted and being executed, so be extra careful.
+    if (!sOutstandingNativeEventCallbacks) {
+      return TRUE;
+    }
+
     nsAppShell *as = reinterpret_cast<nsAppShell *>(lParam);
     as->NativeEventCallback();
-    NS_RELEASE(as);
+    --sOutstandingNativeEventCallbacks;
     return TRUE;
   }
   return DefWindowProc(hwnd, uMsg, wParam, lParam);
 }
 
 nsAppShell::~nsAppShell()
 {
   if (mEventWnd) {
     // DestroyWindow doesn't do anything when called from a non UI thread.
     // Since mEventWnd was created on the UI thread, it must be destroyed on
     // the UI thread.
     SendMessage(mEventWnd, WM_CLOSE, 0, 0);
   }
+
+  // Cancel any outstanding native event callbacks.
+  sOutstandingNativeEventCallbacks = 0;
 }
 
 #if defined(ACCESSIBILITY)
 
 static ULONG gUiaMsg;
 static HHOOK gUiaHook;
 static uint32_t gUiaAttempts;
 static const uint32_t kMaxUiaAttempts = 5;
@@ -458,17 +472,17 @@ nsAppShell::DoProcessMoreGeckoEvents()
 
 void
 nsAppShell::ScheduleNativeEventCallback()
 {
   MOZ_ASSERT(mEventWnd,
              "We should have created mEventWnd in Init, if this is called.");
 
   // Post a message to the hidden message window
-  NS_ADDREF_THIS(); // will be released when the event is processed
+  ++sOutstandingNativeEventCallbacks;
   {
     MutexAutoLock lock(mLastNativeEventScheduledMutex);
     // Time stamp this event so we can detect cases where the event gets
     // dropping in sub classes / modal loops we do not control.
     mLastNativeEventScheduled = TimeStamp::NowLoRes();
   }
   ::PostMessage(mEventWnd, sAppShellGeckoMsgId, 0, reinterpret_cast<LPARAM>(this));
 }