Bug 1618941 - Remove self-updater code. r=snorp, a=RyanVM FENNEC_68_6_0_BUILD2 FENNEC_68_6_0_RELEASE FENNEC_68_6b5_BUILD1 FENNEC_68_6b5_RELEASE FIREFOX_68_6_0esr_BUILD2 FIREFOX_68_6_0esr_RELEASE
authorPetru Lingurar <petru.lingurar@softvision.ro>
Tue, 03 Mar 2020 18:34:01 +0000 (2020-03-03)
changeset 524650 d5bc259574e77a27496e5bbbc56f635ff669e24f
parent 524649 f5d0f9a7927611c9307edba1ff4ea23af3cd9b5e
child 524651 b63f1b8c441e98eb5d50e22d6a219d9207eb98a0
child 524658 09dcc64cbc433b6d78de33e44821c36bb07baa5a
push id934
push userryanvm@gmail.com
push dateThu, 05 Mar 2020 17:52:43 +0000 (2020-03-05)
treeherdermozilla-esr68@d5bc259574e7 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerssnorp, RyanVM
bugs1618941
milestone68.6.0
Bug 1618941 - Remove self-updater code. r=snorp, a=RyanVM The self-update functionality was initially needed for the first Fennec versions in a time when we needed the app published on multiple app stores from which not all offered an update mechanism. This code survived to this day but was guarded by many checks: - the app should be installed from outside of Google Play - the app should only be the Nightly version - user must have had the self-update option checked in settings - functionality was specifically enabled by us at compile time Giving it's previous importance and long history there are a lot of references in code to the self-update mechanism, many of them still in js or native code. To reduce the risk of regressions this code will remain there for the time being but I've removed all the client code which actually managed downloading an updated apk: - settings preferences related to the self-update functionality - the "Check for updates" and related buttons from about:about - Android notification support for the updater - all of the classes solely related to the self-update mechanisms and all declarations of such code from the app's AndroidManifest.xml. Differential Revision: https://phabricator.services.mozilla.com/D65189
mobile/android/app/mobile.js
mobile/android/app/src/main/res/values/arrays.xml
mobile/android/app/src/main/res/xml/preferences_advanced.xml
mobile/android/base/AndroidManifest.xml.in
mobile/android/base/AppConstants.java.in
mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
mobile/android/base/java/org/mozilla/gecko/GeckoUpdateReceiver.java
mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java
mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java
mobile/android/base/java/org/mozilla/gecko/updater/PackageVerifier.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdateServiceHelper.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdateServiceReceiver.java
mobile/android/base/java/org/mozilla/gecko/updater/Updater.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdaterService.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdatesApplyService.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdatesCheckService.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdatesDownloadService.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdatesPrefs.java
mobile/android/base/java/org/mozilla/gecko/updater/UpdatesRegisterService.java
mobile/android/base/locales/en-US/android_strings.dtd
mobile/android/base/strings.xml.in
mobile/android/chrome/content/about.xhtml
mobile/android/locales/en-US/chrome/about.dtd
mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/BaseRobocopTest.java
mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/StringHelper.java
--- a/mobile/android/app/mobile.js
+++ b/mobile/android/app/mobile.js
@@ -471,25 +471,16 @@ pref("ui.threeddarkshadow", "#000");
 pref("ui.threedface", "#ece7e2");
 pref("ui.threedhighlight", "#fff");
 pref("ui.threedlightshadow", "#ece7e2");
 pref("ui.threedshadow", "#aea194");
 pref("ui.window", "#efebe7");
 pref("ui.windowtext", "#101010");
 pref("ui.windowframe", "#efebe7");
 
-/* prefs used by the update timer system (including blocklist pings) */
-pref("app.update.timerFirstInterval", 30000); // milliseconds
-pref("app.update.timerMinimumDelay", 30); // seconds
-
-// used by update service to decide whether or not to
-// automatically download an update
-pref("app.update.autodownload", "wifi");
-pref("app.update.url.android", "https://aus5.mozilla.org/update/4/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/%MOZ_VERSION%/update.xml");
-
 #ifdef MOZ_UPDATER
 /* prefs used specifically for updating the app */
 pref("app.update.channel", "@MOZ_UPDATE_CHANNEL@");
 
 #endif
 
 // replace newlines with spaces on paste into single-line text boxes
 pref("editor.singleLine.pasteNewlines", 2);
--- a/mobile/android/app/src/main/res/values/arrays.xml
+++ b/mobile/android/app/src/main/res/values/arrays.xml
@@ -118,26 +118,16 @@
     <string-array name="pref_restore_entries">
         <item>@string/pref_restore_always</item>
         <item>@string/pref_restore_quit</item>
     </string-array>
     <string-array name="pref_restore_values">
         <item>always</item>
         <item>quit</item>
     </string-array>
-    <string-array name="pref_update_autodownload_entries">
-        <item>@string/pref_update_autodownload_enabled</item>
-        <item>@string/pref_update_autodownload_wifi</item>
-        <item>@string/pref_update_autodownload_disabled</item>
-    </string-array>
-    <string-array name="pref_update_autodownload_values">
-        <item>enabled</item>
-        <item>wifi</item>
-        <item>disabled</item>
-    </string-array>
     <!-- browser.image_blocking -->
     <string-array name="pref_browser_image_blocking_entries">
         <item>@string/pref_tap_to_load_images_enabled</item>
         <item>@string/pref_tap_to_load_images_data</item>
         <item>@string/pref_tap_to_load_images_disabled2</item>
     </string-array>
     <string-array name="pref_browser_image_blocking_values">
         <item>1</item> <!-- Always -->
--- a/mobile/android/app/src/main/res/xml/preferences_advanced.xml
+++ b/mobile/android/app/src/main/res/xml/preferences_advanced.xml
@@ -14,22 +14,16 @@
             gecko:entryValues="@array/pref_import_android_values"
             gecko:initialValues="@array/pref_import_android_defaults"
             android:title="@string/pref_import_android"
             android:summary="@string/pref_import_android_summary"
             android:positiveButtonText="@string/bookmarkhistory_button_import"
             android:negativeButtonText="@string/button_cancel"
             android:persistent="false" />
 
-    <ListPreference android:key="app.update.autodownload"
-                    android:title="@string/pref_update_autodownload"
-                    android:entries="@array/pref_update_autodownload_entries"
-                    android:entryValues="@array/pref_update_autodownload_values"
-                    android:persistent="false" />
-
     <ListPreference android:key="android.not_a_preference.restoreSession3"
                     android:title="@string/pref_restore"
                     android:defaultValue="always"
                     android:entries="@array/pref_restore_entries"
                     android:entryValues="@array/pref_restore_values"
                     android:persistent="true" />
 
     <ListPreference android:key="browser.menu.showCharacterEncoding"
--- a/mobile/android/base/AndroidManifest.xml.in
+++ b/mobile/android/base/AndroidManifest.xml.in
@@ -85,17 +85,16 @@
             </intent-filter>
 
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.BROWSABLE" />
                 <data android:scheme="http" />
                 <data android:scheme="https" />
-                <data android:scheme="about" />
 #ifndef MOZILLA_OFFICIAL
                 <data android:scheme="firefox-dev" />
 #else
 #ifdef FENNEC_NIGHTLY
                 <data android:scheme="firefox-nightly" />
 #else
 #ifdef FENNEC_BETA
                 <data android:scheme="firefox-beta" />
@@ -254,22 +253,16 @@
          </activity>
 
         <!-- Masquerade as the Resolver so that we can be opened from the Marketplace. -->
         <activity-alias
             android:name="com.android.internal.app.ResolverActivity"
             android:targetActivity="@MOZ_ANDROID_BROWSER_INTENT_CLASS@"
             android:exported="true" />
 
-        <receiver android:name="org.mozilla.gecko.GeckoUpdateReceiver">
-            <intent-filter>
-                <action android:name="@ANDROID_PACKAGE_NAME@.CHECK_UPDATE_RESULT" />
-            </intent-filter>
-        </receiver>
-
         <receiver android:name="org.mozilla.gecko.GeckoMessageReceiver"
                   android:exported="false">
         </receiver>
 
         <!-- Catch install referrer so we can do post-install work. -->
         <receiver android:name="org.mozilla.gecko.distribution.ReferrerReceiver"
                   android:exported="true">
             <intent-filter>
@@ -422,50 +415,16 @@
                   android:exported="false"
                   android:grantUriPermissions="true">
                   <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                              android:resource="@xml/provider_paths" />
         </provider>
 
         <service
             android:exported="false"
-            android:name="org.mozilla.gecko.updater.UpdatesApplyService"
-            android:permission="android.permission.BIND_JOB_SERVICE" >
-        </service>
-
-        <service
-            android:exported="false"
-            android:name="org.mozilla.gecko.updater.UpdatesCheckService"
-            android:permission="android.permission.BIND_JOB_SERVICE" >
-        </service>
-
-        <service
-            android:exported="false"
-            android:name="org.mozilla.gecko.updater.UpdatesDownloadService"
-            android:permission="android.permission.BIND_JOB_SERVICE" >
-         </service>
-
-        <service
-            android:exported="false"
-            android:name="org.mozilla.gecko.updater.UpdatesRegisterService"
-            android:permission="android.permission.BIND_JOB_SERVICE" >
-        </service>
-
-        <receiver
-            android:name="org.mozilla.gecko.updater.UpdateServiceReceiver"
-            android:exported="false">
-            <intent-filter>
-                <action android:name="@ANDROID_PACKAGE_NAME@.CHECK_FOR_UPDATE"></action>
-                <action android:name="@ANDROID_PACKAGE_NAME@.APPLY_UPDATE"></action>
-                <action android:name="@ANDROID_PACKAGE_NAME@.DOWNLOAD_UPDATE"></action>
-            </intent-filter>
-        </receiver>
-
-        <service
-            android:exported="false"
             android:name="org.mozilla.gecko.notifications.NotificationService">
         </service>
 
         <service
             android:exported="false"
             android:name="org.mozilla.gecko.dlc.DlcStudyService"
             android:permission="android.permission.BIND_JOB_SERVICE" >
         </service>
--- a/mobile/android/base/AppConstants.java.in
+++ b/mobile/android/base/AppConstants.java.in
@@ -214,23 +214,16 @@ public class AppConstants {
 
     public static final boolean MOZ_DATA_REPORTING =
 //#ifdef MOZ_DATA_REPORTING
       true;
 //#else
     false;
 //#endif
 
-    public static final boolean MOZ_UPDATER =
-//#ifdef MOZ_UPDATER
-    true;
-//#else
-    false;
-//#endif
-
     // Android Beam is only supported on API14+, so we don't even bother building
     // it if this APK doesn't include API14 support.
     public static final boolean MOZ_ANDROID_BEAM =
 //#ifdef MOZ_ANDROID_BEAM
     true;
 //#else
     false;
 //#endif
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -145,17 +145,16 @@ import org.mozilla.gecko.telemetry.Telem
 import org.mozilla.gecko.telemetry.measurements.SearchCountMeasurements;
 import org.mozilla.gecko.telemetry.TelemetryActivationPingDelegate;
 import org.mozilla.gecko.toolbar.AutocompleteHandler;
 import org.mozilla.gecko.toolbar.BrowserToolbar;
 import org.mozilla.gecko.toolbar.BrowserToolbar.CommitEventSource;
 import org.mozilla.gecko.toolbar.BrowserToolbar.TabEditingState;
 import org.mozilla.gecko.toolbar.PwaConfirm;
 import org.mozilla.gecko.updater.PostUpdateHandler;
-import org.mozilla.gecko.updater.UpdateServiceHelper;
 import org.mozilla.gecko.util.ActivityUtils;
 import org.mozilla.gecko.util.ContextUtils;
 import org.mozilla.gecko.util.DrawableUtil;
 import org.mozilla.gecko.util.EventCallback;
 import org.mozilla.gecko.util.FileUtils;
 import org.mozilla.gecko.util.GamepadUtils;
 import org.mozilla.gecko.util.GeckoBundle;
 import org.mozilla.gecko.util.HardwareUtils;
@@ -787,17 +786,16 @@ public class BrowserApp extends GeckoApp
             "GeckoView:AccessibilityEnabled",
             "SearchEngines:Data",
             "Menu:Open",
             "LightweightTheme:Update",
             "Tab:Added",
             "CharEncoding:Data",
             "CharEncoding:State",
             "Settings:Show",
-            "Updater:Launch",
             "Sanitize:Finished",
             "Sanitize:OpenTabs",
             "NotificationSettings:FeatureTipsStatusUpdated",
             null);
 
         EventDispatcher.getInstance().registerBackgroundThreadListener(this,
             "Experiments:GetActive",
             "Experiments:SetOverride",
@@ -874,32 +872,16 @@ public class BrowserApp extends GeckoApp
             public void onEnabledChanged(boolean enabled) {
                 setDynamicToolbarEnabled(enabled);
             }
         });
 
         // Set the maximum bits-per-pixel the favicon system cares about.
         IconDirectoryEntry.setMaxBPP(GeckoAppShell.getScreenDepth());
 
-        // The update service is enabled for RELEASE_OR_BETA, which includes the release and beta channels.
-        // However, no updates are served.  Therefore, we don't trust the update service directly, and
-        // try to avoid prompting unnecessarily. See Bug 1232798.
-        if (!AppConstants.RELEASE_OR_BETA && UpdateServiceHelper.isUpdaterEnabled(this)) {
-            Permissions.from(this)
-                       .withPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
-                       .doNotPrompt()
-                       .andFallback(new Runnable() {
-                           @Override
-                           public void run() {
-                               showUpdaterPermissionSnackbar();
-                           }
-                       })
-                      .run();
-        }
-
         for (final BrowserAppDelegate delegate : delegates) {
             delegate.onCreate(this, savedInstanceState);
         }
 
         // We want to get an understanding of how our user base is spread (bug 1221646).
         final String installerPackageName = getPackageManager().getInstallerPackageName(getPackageName());
         Telemetry.sendUIEvent(TelemetryContract.Event.LAUNCH, TelemetryContract.Method.SYSTEM, "installer_" + installerPackageName);
     }
@@ -994,34 +976,16 @@ public class BrowserApp extends GeckoApp
             }
         }.execute();
     }
 
     private static void initTelemetryUploader(final boolean isInAutomation) {
         TelemetryUploadService.setDisabled(isInAutomation);
     }
 
-    private void showUpdaterPermissionSnackbar() {
-        SnackbarBuilder.SnackbarCallback allowCallback = new SnackbarBuilder.SnackbarCallback() {
-            @Override
-            public void onClick(View v) {
-                Permissions.from(BrowserApp.this)
-                        .withPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
-                        .run();
-            }
-        };
-
-        SnackbarBuilder.builder(this)
-                .message(R.string.updater_permission_text)
-                .duration(Snackbar.LENGTH_INDEFINITE)
-                .action(R.string.updater_permission_allow)
-                .callback(allowCallback)
-                .buildAndShow();
-    }
-
     private Class<?> getMediaPlayerManager() {
         if (AppConstants.MOZ_MEDIA_PLAYER) {
             try {
                 return Class.forName("org.mozilla.gecko.MediaPlayerManager");
             } catch (Exception ex) {
                 // Ignore failures
                 Log.e(LOGTAG, "No native casting support", ex);
             }
@@ -1601,17 +1565,16 @@ public class BrowserApp extends GeckoApp
             "GeckoView:AccessibilityEnabled",
             "SearchEngines:Data",
             "Menu:Open",
             "LightweightTheme:Update",
             "Tab:Added",
             "CharEncoding:Data",
             "CharEncoding:State",
             "Settings:Show",
-            "Updater:Launch",
             "Sanitize:Finished",
             "Sanitize:OpenTabs",
             "NotificationSettings:FeatureTipsStatusUpdated",
             null);
 
         EventDispatcher.getInstance().unregisterBackgroundThreadListener(this,
             "Experiments:GetActive",
             "Experiments:SetOverride",
@@ -2083,41 +2046,16 @@ public class BrowserApp extends GeckoApp
                 break;
 
             case "Website:AppInstallFailed":
                 final String title = message.getString("title");
                 final String bookmarkUrl = message.getString("url");
                 GeckoApplication.createBrowserShortcut(title, bookmarkUrl);
                 break;
 
-            case "Updater:Launch":
-                /**
-                 * Launch UI that lets the user update Firefox.
-                 *
-                 * This depends on the current channel: Release and Beta both direct to
-                 * the Google Play Store. If updating is enabled, Aurora, Nightly, and
-                 * custom builds open about:firefox, which provides an update interface.
-                 *
-                 * If updating is not enabled, this simply logs an error.
-                 */
-                if (AppConstants.RELEASE_OR_BETA) {
-                    Intent intent = new Intent(Intent.ACTION_VIEW);
-                    intent.setData(Uri.parse("market://details?id=" + getPackageName()));
-                    startActivity(intent);
-                    break;
-                }
-
-                if (AppConstants.MOZ_UPDATER) {
-                    Tabs.getInstance().loadUrlInTab(AboutPages.FIREFOX);
-                    break;
-                }
-
-                Log.w(LOGTAG, "No candidate updater found; ignoring launch request.");
-                break;
-
             case "Download:AndroidDownloadManager":
                 // Downloading via Android's download manager
                 final String uri = message.getString("uri");
                 final String filename = message.getString("filename");
                 final String mimeType = message.getString("mimeType");
 
                 final DownloadManager.Request request = new DownloadManager.Request(Uri.parse(uri));
                 request.setMimeType(mimeType);
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/GeckoApp.java
@@ -25,17 +25,16 @@ import org.mozilla.gecko.mozglue.SafeInt
 import org.mozilla.gecko.mozglue.GeckoLoader;
 import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.preferences.ClearOnShutdownPref;
 import org.mozilla.gecko.preferences.GeckoPreferences;
 import org.mozilla.gecko.prompts.PromptService;
 import org.mozilla.gecko.restrictions.Restrictions;
 import org.mozilla.gecko.tabqueue.TabQueueHelper;
 import org.mozilla.gecko.text.TextSelection;
-import org.mozilla.gecko.updater.UpdateServiceHelper;
 import org.mozilla.gecko.util.ActivityUtils;
 import org.mozilla.gecko.util.BundleEventListener;
 import org.mozilla.gecko.util.EventCallback;
 import org.mozilla.gecko.util.FileUtils;
 import org.mozilla.gecko.util.GeckoBundle;
 import org.mozilla.gecko.util.HardwareUtils;
 import org.mozilla.gecko.util.PrefUtils;
 import org.mozilla.gecko.util.StrictModeContext;
@@ -782,25 +781,16 @@ public abstract class GeckoApp extends G
             focusChrome();
 
         } else if ("ToggleChrome:Hide".equals(event)) {
             toggleChrome(false);
 
         } else if ("ToggleChrome:Show".equals(event)) {
             toggleChrome(true);
 
-        } else if ("Update:Check".equals(event)) {
-            UpdateServiceHelper.checkForUpdate(this);
-
-        } else if ("Update:Download".equals(event)) {
-            UpdateServiceHelper.downloadUpdate(this);
-
-        } else if ("Update:Install".equals(event)) {
-            UpdateServiceHelper.applyUpdate(this);
-
         } else if ("Mma:reader_available".equals(event)) {
             MmaDelegate.track(READER_AVAILABLE);
 
         } else if ("Mma:web_save_media".equals(event) || "Mma:web_save_image".equals(event)) {
             MmaDelegate.track(DOWNLOAD_MEDIA_SAVED_IMAGE);
 
         }
 
@@ -1037,19 +1027,16 @@ public abstract class GeckoApp extends G
 
         // To prevent races, register startup events before launching the Gecko thread.
         EventDispatcher.getInstance().registerGeckoThreadListener(this,
                 "Gecko:Ready",
                 null);
 
         EventDispatcher.getInstance().registerUiThreadListener(this,
                 "Gecko:CorruptAPK",
-                "Update:Check",
-                "Update:Download",
-                "Update:Install",
                 null);
 
         if (sAlreadyLoaded) {
             // This happens when the GeckoApp activity is destroyed by Android
             // without killing the entire application (see Bug 769269).
             // In case we have multiple GeckoApp-based activities, this can
             // also happen if we're not the first activity to run within a session.
             mIsRestoringActivity = true;
@@ -1609,24 +1596,16 @@ public abstract class GeckoApp extends G
             public void run() {
                 final HealthRecorder rec = mHealthRecorder;
                 if (rec != null) {
                     rec.recordJavaStartupTime(javaDuration);
                 }
             }
         }, 50);
 
-        final int updateServiceDelay = 30 * 1000;
-        ThreadUtils.getBackgroundHandler().postDelayed(new Runnable() {
-            @Override
-            public void run() {
-                UpdateServiceHelper.registerForUpdates(GeckoAppShell.getApplicationContext());
-            }
-        }, updateServiceDelay);
-
         if (mIsRestoringActivity) {
             Tab selectedTab = Tabs.getInstance().getSelectedTab();
             if (selectedTab != null) {
                 Tabs.getInstance().notifyListeners(selectedTab, Tabs.TabEvents.SELECTED);
             }
         }
     }
 
@@ -2153,19 +2132,16 @@ public abstract class GeckoApp extends G
         }
 
         EventDispatcher.getInstance().unregisterGeckoThreadListener(this,
             "Gecko:Ready",
             null);
 
         EventDispatcher.getInstance().unregisterUiThreadListener(this,
             "Gecko:CorruptAPK",
-            "Update:Check",
-            "Update:Download",
-            "Update:Install",
             null);
 
         getAppEventDispatcher().unregisterGeckoThreadListener(this,
             "Locale:Set",
             "PrivateBrowsing:Data",
             null);
 
         getAppEventDispatcher().unregisterUiThreadListener(this,
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/GeckoUpdateReceiver.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko;
-
-import org.mozilla.gecko.updater.UpdateServiceHelper;
-import org.mozilla.gecko.util.GeckoBundle;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-public class GeckoUpdateReceiver extends BroadcastReceiver
-{
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        if (UpdateServiceHelper.ACTION_CHECK_UPDATE_RESULT.equals(intent.getAction())) {
-            final GeckoBundle data = new GeckoBundle(1);
-            data.putString("result", intent.getStringExtra("result"));
-            EventDispatcher.getInstance().dispatch("Update:CheckResult", data);
-        }
-    }
-}
--- a/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java
+++ b/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java
@@ -22,17 +22,16 @@ import android.support.v4.util.SimpleArr
 import android.util.Log;
 
 import org.mozilla.gecko.AppConstants;
 import org.mozilla.gecko.EventDispatcher;
 import org.mozilla.gecko.GeckoActivityMonitor;
 import org.mozilla.gecko.GeckoAppShell;
 import org.mozilla.gecko.R;
 import org.mozilla.gecko.mozglue.SafeIntent;
-import org.mozilla.gecko.updater.UpdateServiceHelper;
 import org.mozilla.gecko.util.BitmapUtils;
 import org.mozilla.gecko.util.BundleEventListener;
 import org.mozilla.gecko.util.EventCallback;
 import org.mozilla.gecko.util.GeckoBundle;
 import org.mozilla.gecko.util.StrictModeContext;
 import org.mozilla.gecko.util.ThreadUtils;
 
 import java.io.File;
@@ -100,20 +99,16 @@ public final class NotificationHelper im
          * File downloads.
          */
         DOWNLOAD,
         /**
          *  Media notification channel
          */
         MEDIA,
         /**
-         * Built-in updater - use only when <code>AppConstants.MOZ_UPDATER</code> is true.
-         */
-        UPDATER,
-        /**
          * Synced tabs notification channel
          */
         SYNCED_TABS,
         /**
          * Leanplum notification channel - use only when <code>AppConstants.MOZ_ANDROID_MMA</code> is true.
          */
         LP_DEFAULT,
         /**
@@ -126,17 +121,17 @@ public final class NotificationHelper im
         CRASH_HANDLER,
     }
 
     // Holds the mapping between the Channel enum used by the rest of our codebase and the
     // channel ID used for communication with the system NotificationManager.
     // How to determine the initialCapacity: Count all channels (including the Updater, which is
     // only added further down in initNotificationChannels), multiply by 4/3 for a maximum load
     // factor of 75 % and round up to the next multiple of two.
-    private final Map<Channel, String> mDefinedNotificationChannels = new HashMap<Channel, String>(16) {{
+    private final Map<Channel, String> mDefinedNotificationChannels = new HashMap<Channel, String>(15) {{
         final String DEFAULT_CHANNEL_TAG = "default2-notification-channel";
         put(Channel.DEFAULT, DEFAULT_CHANNEL_TAG);
 
         final String MLS_CHANNEL_TAG = "mls-notification-channel";
         put(Channel.MLS, MLS_CHANNEL_TAG);
 
         final String DOWNLOAD_NOTIFICATION_TAG = "download-notification-channel";
         put(Channel.DOWNLOAD, DOWNLOAD_NOTIFICATION_TAG);
@@ -202,21 +197,18 @@ public final class NotificationHelper im
         if (sInstance == null) {
             sInstance = new NotificationHelper(context.getApplicationContext());
         }
         return sInstance;
     }
 
     private void initNotificationChannels() {
         final String UPDATER_CHANNEL_TAG = "updater-notification-channel";
-        if (UpdateServiceHelper.isUpdaterEnabled(mContext)) {
-            mDefinedNotificationChannels.put(Channel.UPDATER, UPDATER_CHANNEL_TAG);
-        } else {
-            mDeprecatedNotificationChannels.add(UPDATER_CHANNEL_TAG);
-        }
+        mDeprecatedNotificationChannels.add(UPDATER_CHANNEL_TAG);
+
 
         final NotificationManager notificationManager =
                 (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
 
         for (String channelId : mDeprecatedNotificationChannels) {
             removeChannel(notificationManager, channelId);
         }
 
@@ -249,23 +241,16 @@ public final class NotificationHelper im
 
                 case MEDIA: {
                     channel = new NotificationChannel(mDefinedNotificationChannels.get(definedChannel),
                             mContext.getString(R.string.media_notification_channel2),
                             NotificationManager.IMPORTANCE_LOW);
                 }
                 break;
 
-                case UPDATER: {
-                    channel = new NotificationChannel(mDefinedNotificationChannels.get(definedChannel),
-                            mContext.getString(R.string.updater_notification_channel),
-                            NotificationManager.IMPORTANCE_LOW);
-                }
-                break;
-
                 case SYNCED_TABS: {
                     channel = new NotificationChannel(mDefinedNotificationChannels.get(definedChannel),
                             mContext.getString(R.string.synced_tabs_notification_channel),
                             NotificationManager.IMPORTANCE_HIGH);
                 }
                 break;
 
                 case LP_DEFAULT: {
--- a/mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java
+++ b/mobile/android/base/java/org/mozilla/gecko/preferences/GeckoPreferences.java
@@ -78,18 +78,16 @@ import org.mozilla.gecko.TelemetryContra
 import org.mozilla.gecko.db.BrowserContract.SuggestedSites;
 import org.mozilla.gecko.mma.MmaDelegate;
 import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.restrictions.Restrictable;
 import org.mozilla.gecko.restrictions.Restrictions;
 import org.mozilla.gecko.switchboard.SwitchBoard;
 import org.mozilla.gecko.tabqueue.TabQueueHelper;
 import org.mozilla.gecko.tabqueue.TabQueuePrompt;
-import org.mozilla.gecko.updater.UpdateServiceHelper;
-import org.mozilla.gecko.updater.UpdateServiceHelper.AutoDownloadPolicy;
 import org.mozilla.gecko.util.BundleEventListener;
 import org.mozilla.gecko.util.ContextUtils;
 import org.mozilla.gecko.util.EventCallback;
 import org.mozilla.gecko.util.GeckoBundle;
 import org.mozilla.gecko.util.HardwareUtils;
 import org.mozilla.gecko.util.InputOptionsUtils;
 import org.mozilla.gecko.util.PackageUtil;
 import org.mozilla.gecko.util.ThreadUtils;
@@ -129,18 +127,16 @@ public class GeckoPreferences
 
     // These match keys in resources/xml*/preferences*.xml
     private static final String PREFS_SEARCH_RESTORE_DEFAULTS = NON_PREF_PREFIX + "search.restore_defaults";
     private static final String PREFS_DATA_REPORTING_PREFERENCES = NON_PREF_PREFIX + "datareporting.preferences";
     private static final String PREFS_TELEMETRY_ENABLED = "toolkit.telemetry.enabled";
     private static final String PREFS_CRASHREPORTER_ENABLED = "datareporting.crashreporter.submitEnabled";
     private static final String PREFS_MENU_CHAR_ENCODING = "browser.menu.showCharacterEncoding";
     private static final String PREFS_MP_ENABLED = "privacy.masterpassword.enabled";
-    private static final String PREFS_UPDATER_AUTODOWNLOAD = "app.update.autodownload";
-    private static final String PREFS_UPDATER_URL = "app.update.url.android";
     private static final String PREFS_GEO_REPORTING = NON_PREF_PREFIX + "app.geo.reportdata";
     private static final String PREFS_GEO_LEARN_MORE = NON_PREF_PREFIX + "geo.learn_more";
     public static final String PREFS_DEVTOOLS_REMOTE_USB_ENABLED = "devtools.remote.usb.enabled";
     public static final String PREFS_DEVTOOLS_REMOTE_WIFI_ENABLED = "devtools.remote.wifi.enabled";
     private static final String PREFS_DEVTOOLS_REMOTE_LINK = NON_PREF_PREFIX + "remote_debugging.link";
     public static final String PREFS_VOICE_INPUT_ENABLED = NON_PREF_PREFIX + "voice_input_enabled";
     public static final String PREFS_QRCODE_ENABLED = NON_PREF_PREFIX + "qrcode_enabled";
     private static final String PREFS_TRACKING_PROTECTION_LEARN_MORE = NON_PREF_PREFIX + "trackingprotection.learn_more";
@@ -693,22 +689,16 @@ public class GeckoPreferences
                 pref.setOnPreferenceChangeListener(this);
 
                 if (PREFS_DEFAULT_BROWSER.equals(key)) {
                     if (PackageUtil.isDefaultBrowser(this)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
-                } else  if (PREFS_UPDATER_AUTODOWNLOAD.equals(key)) {
-                    if (!AppConstants.MOZ_UPDATER || ContextUtils.isInstalledFromGooglePlay(this)) {
-                        preferences.removePreference(pref);
-                        i--;
-                        continue;
-                    }
                 } else if (PREFS_TELEMETRY_ENABLED.equals(key)) {
                     if (!AppConstants.MOZ_TELEMETRY_REPORTING || !Restrictions.isAllowed(this, Restrictable.DATA_CHOICES)) {
                         preferences.removePreference(pref);
                         i--;
                         continue;
                     }
                 } else if (PREFS_HEALTHREPORT_UPLOAD_ENABLED.equals(key)) {
                     if (!AppConstants.MOZ_SERVICES_HEALTHREPORT || !Restrictions.isAllowed(this, Restrictable.DATA_CHOICES)) {
@@ -1183,20 +1173,16 @@ public class GeckoPreferences
         if (PREFS_BROWSER_LOCALE.equals(prefName)) {
             // Even though this is a list preference, we don't want to handle it
             // below, so we return here.
             return onLocaleSelected(Locales.getLanguageTag(lastLocale), (String) newValue);
         }
 
         if (PREFS_MENU_CHAR_ENCODING.equals(prefName)) {
             setCharEncodingState(((String) newValue).equals("true"));
-        } else if (PREFS_UPDATER_AUTODOWNLOAD.equals(prefName)) {
-            UpdateServiceHelper.setAutoDownloadPolicy(this, AutoDownloadPolicy.get((String) newValue));
-        } else if (PREFS_UPDATER_URL.equals(prefName)) {
-            UpdateServiceHelper.setUpdateUrl(this, (String) newValue);
         } else if (PREFS_HEALTHREPORT_UPLOAD_ENABLED.equals(prefName)) {
             final Boolean newBooleanValue = (Boolean) newValue;
             AdjustConstants.getAdjustHelper().setEnabled(newBooleanValue);
             // If Health Report has been disabled Mma should also be stopped.
             // If it was just enabled, we should also try to start Mma immediately
             // provided that all the other requirements to start Mma are met.
             informMmaStatusChanged(newBooleanValue);
         } else if (PREFS_GEO_REPORTING.equals(prefName)) {
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/PackageVerifier.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.util.Log;
-
-import org.mozilla.apache.commons.codec.binary.Hex;
-import org.mozilla.gecko.BuildConfig;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.security.MessageDigest;
-
-public class PackageVerifier {
-    private static final String LOGTAG = "GeckoPackageVerifier";
-    private static final boolean DEBUG = false;
-
-    static boolean verifyDownloadedPackage(final UpdatesPrefs prefs, final File updateFile, final int bufSize) {
-        MessageDigest digest = createMessageDigest(prefs.getLastHashFunction());
-        if (digest == null)
-            return false;
-
-        InputStream input = null;
-
-        try {
-            input = new BufferedInputStream(new FileInputStream(updateFile));
-
-            byte[] buf = new byte[bufSize];
-            int len;
-            while ((len = input.read(buf, 0, bufSize)) > 0) {
-                digest.update(buf, 0, len);
-            }
-        } catch (java.io.IOException e) {
-            if (DEBUG) {
-                Log.e(LOGTAG, "Failed to verify update package: ", e);
-            }
-            return false;
-        } finally {
-            try {
-                if (input != null)
-                    input.close();
-            } catch (java.io.IOException e) { }
-        }
-
-        String hex = Hex.encodeHexString(digest.digest());
-        if (!hex.equals(prefs.getLastHashValue())) {
-            if (DEBUG) {
-                Log.e(LOGTAG, "Package hash does not match");
-            }
-            return false;
-        }
-
-        return true;
-    }
-
-    private static MessageDigest createMessageDigest(String hashFunction) {
-        String javaHashFunction;
-
-        if ("sha512".equalsIgnoreCase(hashFunction)) {
-            javaHashFunction = "SHA-512";
-        } else {
-            if (DEBUG) {
-                Log.e(LOGTAG, "Unhandled hash function: " + hashFunction);
-            }
-            return null;
-        }
-
-        try {
-            return MessageDigest.getInstance(javaHashFunction);
-        } catch (java.security.NoSuchAlgorithmException e) {
-            if (DEBUG) {
-                Log.e(LOGTAG, "Couldn't find algorithm " + javaHashFunction, e);
-            }
-            return null;
-        }
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdateServiceHelper.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.v4.app.JobIntentService;
-import android.util.Log;
-
-import org.mozilla.gecko.AppConstants;
-import org.mozilla.gecko.JobIdsConstants;
-import org.mozilla.gecko.PrefsHelper;
-import org.mozilla.gecko.annotation.RobocopTarget;
-import org.mozilla.gecko.util.ContextUtils;
-import org.mozilla.gecko.util.GeckoJarReader;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-
-public class UpdateServiceHelper {
-    // Following can be used to start a specific UpdaterService
-    public static final String ACTION_REGISTER_FOR_UPDATES = AppConstants.ANDROID_PACKAGE_NAME + ".REGISTER_FOR_UPDATES";
-    public static final String ACTION_CHECK_FOR_UPDATE = AppConstants.ANDROID_PACKAGE_NAME + ".CHECK_FOR_UPDATE";
-    public static final String ACTION_DOWNLOAD_UPDATE = AppConstants.ANDROID_PACKAGE_NAME + ".DOWNLOAD_UPDATE";
-    public static final String ACTION_APPLY_UPDATE = AppConstants.ANDROID_PACKAGE_NAME + ".APPLY_UPDATE";
-
-    // Used to inform Gecko about current status
-    public static final String ACTION_CHECK_UPDATE_RESULT = AppConstants.ANDROID_PACKAGE_NAME + ".CHECK_UPDATE_RESULT"; //
-    // Used to change running service state
-    public static final String ACTION_CANCEL_DOWNLOAD = AppConstants.ANDROID_PACKAGE_NAME + ".CANCEL_DOWNLOAD";     //
-
-    // Update intervals
-    private static final int INTERVAL_LONG = 1000 * 60 * 60 * 24; // 1 day in milliseconds
-    private static final int INTERVAL_SHORT = 1000 * 60 * 60 * 4; // 4 hours in milliseconds
-    private static final int INTERVAL_RETRY = 1000 * 60 * 60 * 1; // 1 hour in milliseconds
-
-    // The number of bytes to read when working with the updated package
-    static final int BUFSIZE = 8192;
-
-    // All the notifications posted by the update services will use the same id
-    static final int NOTIFICATION_ID = 0x3e40ddbd;
-
-    // Name of the Intent extra for the autodownload policy, used with ACTION_REGISTER_FOR_UPDATES
-    protected static final String EXTRA_AUTODOWNLOAD_NAME = "autodownload";
-
-    // Name of the Intent extra that holds the flags for ACTION_CHECK_FOR_UPDATE
-    protected static final String EXTRA_UPDATE_FLAGS_NAME = "updateFlags";
-
-    // Name of the Intent extra that holds the APK path, used with ACTION_APPLY_UPDATE
-    protected static final String EXTRA_PACKAGE_PATH_NAME = "packagePath";
-
-    // Name of the Intent extra for the update URL, used with ACTION_REGISTER_FOR_UPDATES
-    protected static final String EXTRA_UPDATE_URL_NAME = "updateUrl";
-
-    private static final String LOGTAG = "GeckoUpdatesHelper";
-    private static final boolean DEBUG = false;
-    private static final String DEFAULT_UPDATE_LOCALE = "en-US";
-
-    // So that updates can be disabled by tests.
-    private static volatile boolean isEnabled = true;
-
-    static final class UpdateInfo {
-        public URI uri;
-        public String buildID;
-        public String hashFunction;
-        public String hashValue;
-        public int size;
-
-        private boolean isNonEmpty(String s) {
-            return s != null && s.length() > 0;
-        }
-
-        public boolean isValid() {
-            return uri != null && isNonEmpty(buildID) &&
-                    isNonEmpty(hashFunction) && isNonEmpty(hashValue) && size > 0;
-        }
-
-        @Override
-        public String toString() {
-            return "uri = " + uri + ", buildID = " + buildID + ", hashFunction = " + hashFunction + ", hashValue = " + hashValue + ", size = " + size;
-        }
-    }
-
-    public enum AutoDownloadPolicy {
-        NONE(-1),
-        WIFI(0),
-        DISABLED(1),
-        ENABLED(2);
-
-        public final int value;
-
-        AutoDownloadPolicy(int value) {
-            this.value = value;
-        }
-
-        private final static AutoDownloadPolicy[] sValues = AutoDownloadPolicy.values();
-
-        public static AutoDownloadPolicy get(int value) {
-            for (AutoDownloadPolicy id: sValues) {
-                if (id.value == value) {
-                    return id;
-                }
-            }
-            return NONE;
-        }
-
-        public static AutoDownloadPolicy get(String name) {
-            for (AutoDownloadPolicy id: sValues) {
-                if (name.equalsIgnoreCase(id.toString())) {
-                    return id;
-                }
-            }
-            return NONE;
-        }
-    }
-
-    enum CheckUpdateResult {
-        // Keep these in sync with mobile/android/chrome/content/about.xhtml
-        NOT_AVAILABLE,
-        AVAILABLE,
-        DOWNLOADING,
-        DOWNLOADED
-    }
-
-    private enum Pref {
-        AUTO_DOWNLOAD_POLICY("app.update.autodownload"),
-        UPDATE_URL("app.update.url.android");
-
-        final String name;
-
-        Pref(String name) {
-            this.name = name;
-        }
-
-        final static String[] names;
-
-        @Override
-        public String toString() {
-            return this.name;
-        }
-
-        static {
-            ArrayList<String> nameList = new ArrayList<String>();
-
-            for (Pref id: Pref.values()) {
-                nameList.add(id.toString());
-            }
-
-            names = nameList.toArray(new String[0]);
-        }
-    }
-
-    @RobocopTarget
-    public static void setEnabled(final boolean enabled) {
-        isEnabled = enabled;
-    }
-
-    public static URI expandUpdateURI(Context context, String updateUri, boolean force) {
-        if (updateUri == null) {
-            return null;
-        }
-
-        PackageManager pm = context.getPackageManager();
-
-        String pkgSpecial = AppConstants.MOZ_PKG_SPECIAL != null ?
-                            "-" + AppConstants.MOZ_PKG_SPECIAL :
-                            "";
-        String locale = DEFAULT_UPDATE_LOCALE;
-
-        try {
-            ApplicationInfo info = pm.getApplicationInfo(AppConstants.ANDROID_PACKAGE_NAME, 0);
-            String updateLocaleUrl = "jar:jar:file://" + info.sourceDir + "!/" + AppConstants.OMNIJAR_NAME + "!/update.locale";
-
-            final String jarLocale = GeckoJarReader.getText(context, updateLocaleUrl);
-            if (jarLocale != null) {
-                locale = jarLocale.trim();
-            }
-        } catch (android.content.pm.PackageManager.NameNotFoundException e) {
-            // Shouldn't really be possible, but fallback to default locale
-            if (DEBUG) {
-                Log.i(LOGTAG, "Failed to read update locale file, falling back to " + locale);
-            }
-        }
-
-        String url = updateUri.replace("%PRODUCT%", AppConstants.MOZ_APP_BASENAME)
-            .replace("%VERSION%", AppConstants.MOZ_APP_VERSION)
-            .replace("%BUILD_ID%", force ? "0" : AppConstants.MOZ_APP_BUILDID)
-            .replace("%BUILD_TARGET%", "Android_" + AppConstants.MOZ_APP_ABI + pkgSpecial)
-            .replace("%LOCALE%", locale)
-            .replace("%CHANNEL%", AppConstants.MOZ_UPDATE_CHANNEL)
-            .replace("%OS_VERSION%", Build.VERSION.RELEASE)
-            .replace("%DISTRIBUTION%", "default")
-            .replace("%DISTRIBUTION_VERSION%", "default")
-            .replace("%MOZ_VERSION%", AppConstants.MOZILLA_VERSION);
-
-        Log.i(LOGTAG, "AUS Url is: " + url);
-
-        try {
-            return new URI(url);
-        } catch (java.net.URISyntaxException e) {
-            Log.e(LOGTAG, "Failed to create update url: ", e);
-            return null;
-        }
-    }
-
-    public static boolean isUpdaterEnabled(final Context context) {
-        return AppConstants.MOZ_UPDATER && isEnabled && !ContextUtils.isInstalledFromGooglePlay(context);
-    }
-
-    public static void setUpdateUrl(Context context, String url) {
-        registerForUpdates(context, null, url);
-    }
-
-    public static void setAutoDownloadPolicy(Context context, AutoDownloadPolicy policy) {
-        registerForUpdates(context, policy, null);
-    }
-
-    public static void checkForUpdate(Context context) {
-        if (context == null) {
-            return;
-        }
-
-        enqueueUpdateCheck(context, new Intent());
-    }
-
-    public static void downloadUpdate(Context context) {
-        if (context == null) {
-            return;
-        }
-
-        enqueueUpdateDownload(context, new Intent());
-    }
-
-    public static void applyUpdate(Context context) {
-        if (context == null) {
-            return;
-        }
-
-        enqueueUpdateApply(context, new Intent());
-    }
-
-    public static void registerForUpdates(final Context context) {
-        if (!isUpdaterEnabled(context)) {
-             return;
-        }
-
-        final HashMap<String, Object> prefs = new HashMap<String, Object>();
-
-        PrefsHelper.getPrefs(Pref.names, new PrefsHelper.PrefHandlerBase() {
-            @Override public void prefValue(String pref, String value) {
-                prefs.put(pref, value);
-            }
-
-            @Override public void finish() {
-                UpdateServiceHelper.registerForUpdates(context,
-                    AutoDownloadPolicy.get(
-                        (String) prefs.get(Pref.AUTO_DOWNLOAD_POLICY.toString())),
-                      (String) prefs.get(Pref.UPDATE_URL.toString()));
-            }
-        });
-    }
-
-    private static void registerForUpdates(Context context, AutoDownloadPolicy policy, String url) {
-        if (!isUpdaterEnabled(context)) {
-             return;
-        }
-
-        Intent intent = new Intent(ACTION_REGISTER_FOR_UPDATES);
-
-        if (policy != null) {
-            intent.putExtra(EXTRA_AUTODOWNLOAD_NAME, policy.value);
-        }
-
-        if (url != null) {
-            intent.putExtra(EXTRA_UPDATE_URL_NAME, url);
-        }
-
-        enqueueUpdateRegister(context, intent);
-    }
-
-    static int getUpdateInterval(boolean isRetry) {
-        int interval;
-        if (isRetry) {
-            interval = INTERVAL_RETRY;
-        } else if (!AppConstants.RELEASE_OR_BETA) {
-            interval = INTERVAL_SHORT;
-        } else {
-            interval = INTERVAL_LONG;
-        }
-
-        return interval;
-    }
-
-    public static void enqueueUpdateApply(@NonNull final Context context, @NonNull final Intent workIntent) {
-        JobIntentService.enqueueWork(context, UpdatesApplyService.class,
-                JobIdsConstants.getIdForUpdatesApplyJob(), workIntent);
-    }
-
-    public static void enqueueUpdateCheck(@NonNull final Context context, @NonNull final Intent workIntent) {
-        JobIntentService.enqueueWork(context, UpdatesCheckService.class,
-                JobIdsConstants.getIdForUpdatesCheckJob(), workIntent);
-    }
-
-    public static void enqueueUpdateDownload(@NonNull final Context context, @NonNull final Intent workIntent) {
-        JobIntentService.enqueueWork(context, UpdatesDownloadService.class,
-                JobIdsConstants.getIdForUpdatesDownloadJob(), workIntent);
-    }
-
-    public static void enqueueUpdateRegister(@NonNull final Context context, @NonNull final Intent workIntent) {
-        JobIntentService.enqueueWork(context, UpdatesRegisterService.class,
-                JobIdsConstants.getIdForUpdatesRegisterJob(), workIntent);
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdateServiceReceiver.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-/**
- * Receiver only used in local notifications posted by an {@link UpdaterService} after which it finishes.<br>
- * Used to start another variant of {@link UpdaterService}.
- */
-public class UpdateServiceReceiver extends BroadcastReceiver {
-    private static final String LOGTAG = "GeckoUpdateServiceRcv";   // must be <= 23 characters
-    private static final boolean DEBUG = false;
-
-    public UpdateServiceReceiver() {
-    }
-
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        final String action = intent.getAction();
-
-        if (DEBUG) {
-            Log.d(LOGTAG, String.format("Will enqueue \"%s\" work", action));
-        }
-
-        switch (action) {
-            case UpdateServiceHelper.ACTION_CHECK_FOR_UPDATE:
-                UpdateServiceHelper.enqueueUpdateCheck(context, intent);
-                break;
-            case UpdateServiceHelper.ACTION_APPLY_UPDATE:
-                UpdateServiceHelper.enqueueUpdateApply(context, intent);
-                break;
-            case UpdateServiceHelper.ACTION_DOWNLOAD_UPDATE:
-                UpdateServiceHelper.enqueueUpdateDownload(context, intent);
-                break;
-            default:
-                // no-op, we only listen for the above
-        }
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/Updater.java
+++ /dev/null
@@ -1,701 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.Manifest;
-import android.annotation.SuppressLint;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.Uri;
-import android.net.wifi.WifiManager;
-import android.net.wifi.WifiManager.WifiLock;
-import android.os.Environment;
-import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.content.FileProvider;
-import android.support.v4.net.ConnectivityManagerCompat;
-import android.util.Log;
-
-import org.mozilla.gecko.AppConstants;
-import org.mozilla.gecko.GeckoUpdateReceiver;
-import org.mozilla.gecko.R;
-import org.mozilla.gecko.notifications.NotificationHelper;
-import org.mozilla.gecko.permissions.Permissions;
-import org.mozilla.gecko.updater.UpdateServiceHelper.AutoDownloadPolicy;
-import org.mozilla.gecko.updater.UpdateServiceHelper.CheckUpdateResult;
-import org.mozilla.gecko.updater.UpdateServiceHelper.UpdateInfo;
-import org.mozilla.gecko.util.IOUtils;
-import org.mozilla.gecko.util.ProxySelector;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.URI;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-/**
- * Helper class that handles everything needed to download and apply an updated package.<br>
- * Only to be used on background threads because of the long time running operations involved.
- */
-public class Updater {
-    // Because this class can be called by multiple parties the log tag
-    // will actually be the caller's name to easily identify whom requested the operations.
-    private String logtag;
-    private static final boolean DEBUG = false;
-
-    // Flags for ACTION_CHECK_FOR_UPDATE
-    static final int FLAG_FORCE_DOWNLOAD = 1;
-    static final int FLAG_OVERWRITE_EXISTING = 1 << 1;
-    static final int FLAG_REINSTALL = 1 << 2;
-
-    private final Context context;
-    private final ConnectivityManager connectivityManager;
-    private final NotificationManagerCompat notificationManager;
-    private final int bufferSize;
-    private final int notificationId;
-    private volatile WifiLock mWifiLock;
-
-    private NotificationCompat.Builder notifBuilder;
-    private BroadcastReceiver innerBroadcastReceiver;
-    private UpdatesPrefs prefs;
-
-    private boolean shouldCancelDownload;
-    private boolean shouldApplyImmediately;
-
-    Updater(final Context context, final UpdatesPrefs prefs, final int bufSize, final int notificationId) {
-        this.logtag = getLogtagFromParentName(context);
-        this.context = context;
-        this.connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-        this.notificationManager = NotificationManagerCompat.from(context);
-        this.prefs = prefs;
-        this.mWifiLock = ((WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE))
-                .createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, prefs.getPreferenceName());
-        this.bufferSize = bufSize;
-        this.notificationId = notificationId;
-
-        registerForLocalBroadcasts(context);
-
-        if (DEBUG) {
-            Log.d(logtag, "Updater created");
-        }
-    }
-
-    /**
-     * Must be called everytime the caller finished it's work to cleanup used resources.
-     */
-    void finish() {
-        unregisterFromLocalBroadcasts();
-
-        if (mWifiLock.isHeld()) {
-            mWifiLock.release();
-        }
-    }
-
-    void setIfShouldApplyUpdateImmediately(boolean shouldApplyImmediately) {
-        this.shouldApplyImmediately = shouldApplyImmediately;
-    }
-
-    void startUpdate(final int flags) {
-        prefs.setLastAttemptDate();
-
-        if (!UpdateServiceHelper.isUpdaterEnabled(context)) {
-            if (DEBUG) {
-                Log.i(logtag, "Updater not enabled");
-            }
-            sendCheckUpdateResult(CheckUpdateResult.NOT_AVAILABLE);
-            return;
-        }
-
-        NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
-        if (netInfo == null || !netInfo.isConnected()) {
-            if (DEBUG) {
-                Log.i(logtag, "not connected to the network");
-            }
-            registerForUpdates(true);
-            sendCheckUpdateResult(CheckUpdateResult.NOT_AVAILABLE);
-            return;
-        }
-
-        registerForUpdates(false);
-
-        final UpdateInfo info = findUpdate(hasFlag(flags, FLAG_REINSTALL));
-        boolean haveUpdate = (info != null);
-
-        if (!haveUpdate) {
-            if (DEBUG) {
-                Log.i(logtag, "no update available");
-            }
-            sendCheckUpdateResult(CheckUpdateResult.NOT_AVAILABLE);
-            return;
-        }
-
-        if (DEBUG) {
-            Log.i(logtag, "update available, buildID = " + info.buildID);
-        }
-
-        Permissions.from(context)
-                .withPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
-                .doNotPrompt()
-                .andFallback(new Runnable() {
-                    @Override
-                    public void run() {
-                        showPermissionNotification();
-                        sendCheckUpdateResult(CheckUpdateResult.NOT_AVAILABLE);
-                    }
-                })
-                .run(new Runnable() {
-                    @Override
-                    public void run() {
-                        startDownload(info, flags);
-                    }
-                });
-
-    }
-
-    void registerForUpdates(boolean isRetry) {
-        Calendar lastAttempt = prefs.getLastAttemptDate();
-        Calendar now = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-
-        int interval = UpdateServiceHelper.getUpdateInterval(isRetry);
-
-        if (lastAttempt == null || (now.getTimeInMillis() - lastAttempt.getTimeInMillis()) > interval) {
-            // We've either never attempted an update, or we are passed the desired
-            // time. Start an update now.
-            if (DEBUG) {
-                Log.i(logtag, "no update has ever been attempted, checking now");
-            }
-            startUpdate(0);
-            return;
-        }
-
-        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
-        if (manager == null)
-            return;
-
-        PendingIntent pending = PendingIntent.getBroadcast(context, 0,
-                new Intent(UpdateServiceHelper.ACTION_CHECK_FOR_UPDATE, null, context, UpdateServiceReceiver.class),
-                PendingIntent.FLAG_UPDATE_CURRENT);
-        manager.cancel(pending);
-
-        lastAttempt.setTimeInMillis(lastAttempt.getTimeInMillis() + interval);
-        if (DEBUG) {
-            Log.i(logtag, "next update will be at: " + lastAttempt.getTime());
-        }
-
-        manager.set(AlarmManager.RTC_WAKEUP, lastAttempt.getTimeInMillis(), pending);
-    }
-
-     void applyUpdate(String updatePath) {
-        if (updatePath == null) {
-            updatePath = prefs.getLastFileName();
-        }
-
-        if (updatePath != null) {
-            applyUpdate(new File(updatePath));
-        }
-    }
-
-    @SuppressLint("NewApi")
-    private void showPermissionNotification() {
-        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
-                Uri.fromParts("package", context.getPackageName(), null));
-
-        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
-
-        NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
-                .bigText(getString(R.string.updater_permission_text));
-
-        NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
-                .setContentTitle(getString(R.string.updater_permission_title))
-                .setContentText(getString(R.string.updater_permission_text))
-                .setStyle(bigTextStyle)
-                .setAutoCancel(true)
-                .setSmallIcon(R.drawable.ic_status_logo)
-                .setColor(ContextCompat.getColor(context, R.color.rejection_red))
-                .setContentIntent(pendingIntent);
-
-        if (!AppConstants.Versions.preO) {
-            builder.setChannelId(NotificationHelper.getInstance(context)
-                    .getNotificationChannel(NotificationHelper.Channel.UPDATER).getId());
-        }
-
-        NotificationManagerCompat.from(context)
-                .notify(R.id.updateServicePermissionNotification, builder.build());
-    }
-
-    @SuppressLint("NewApi")
-    private void startDownload(UpdateInfo info, int flags) {
-        AutoDownloadPolicy policy = prefs.getAutoDownloadPolicy();
-
-        // We only start a download automatically if one of following criteria are met:
-        //
-        // - We have a FORCE_DOWNLOAD flag passed in
-        // - The preference is set to 'always'
-        // - The preference is set to 'wifi' and we are using a non-metered network (i.e. the user
-        //   is OK with large data transfers occurring)
-        //
-        boolean shouldStartDownload = hasFlag(flags, FLAG_FORCE_DOWNLOAD) ||
-                policy == AutoDownloadPolicy.ENABLED ||
-                (policy == AutoDownloadPolicy.WIFI && !ConnectivityManagerCompat.isActiveNetworkMetered(connectivityManager));
-
-        if (!shouldStartDownload) {
-            if (DEBUG) {
-                Log.i(logtag, "not initiating automatic update download due to policy " + policy.toString());
-            }
-            sendCheckUpdateResult(CheckUpdateResult.AVAILABLE);
-
-            // We aren't autodownloading here, so prompt to start the update with a new JobIntentService
-            Intent notificationIntent = new Intent(UpdateServiceHelper.ACTION_DOWNLOAD_UPDATE);
-            notificationIntent.setClass(context, UpdateServiceReceiver.class);
-            PendingIntent contentIntent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
-            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-            builder.setSmallIcon(R.drawable.ic_status_logo);
-            builder.setWhen(System.currentTimeMillis());
-            builder.setAutoCancel(true);
-            builder.setContentTitle(getString(R.string.updater_start_title));
-            builder.setContentText(getString(R.string.updater_start_select));
-            builder.setContentIntent(contentIntent);
-
-            if (!AppConstants.Versions.preO) {
-                builder.setChannelId(NotificationHelper.getInstance(context)
-                        .getNotificationChannel(NotificationHelper.Channel.UPDATER).getId());
-            }
-
-            notificationManager.notify(notificationId, builder.build());
-
-            return;
-        }
-
-        File pkg = downloadUpdatePackage(info, hasFlag(flags, FLAG_OVERWRITE_EXISTING));
-        if (pkg == null) {
-            sendCheckUpdateResult(CheckUpdateResult.NOT_AVAILABLE);
-            return;
-        }
-
-        if (DEBUG) {
-            Log.i(logtag, "have update package at " + pkg);
-        }
-
-        prefs.saveUpdateInfo(info, pkg);
-        sendCheckUpdateResult(CheckUpdateResult.DOWNLOADED);
-
-        if (shouldApplyImmediately) {
-            applyUpdate(pkg);
-        } else {
-            // Prompt to apply the update with a new JobIntentService
-
-            Intent notificationIntent = new Intent(UpdateServiceHelper.ACTION_APPLY_UPDATE);
-            notificationIntent.setClass(context, UpdateServiceReceiver.class);
-            notificationIntent.putExtra(UpdateServiceHelper.EXTRA_PACKAGE_PATH_NAME, pkg.getAbsolutePath());
-            PendingIntent contentIntent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
-
-            NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-            builder.setSmallIcon(R.drawable.ic_status_logo);
-            builder.setWhen(System.currentTimeMillis());
-            builder.setAutoCancel(true);
-            builder.setContentTitle(getString(R.string.updater_apply_title));
-            builder.setContentText(getString(R.string.updater_apply_select));
-            builder.setContentIntent(contentIntent);
-
-            if (!AppConstants.Versions.preO) {
-                builder.setChannelId(NotificationHelper.getInstance(context)
-                        .getNotificationChannel(NotificationHelper.Channel.UPDATER).getId());
-            }
-
-            notificationManager.notify(notificationId, builder.build());
-        }
-    }
-
-    private File downloadUpdatePackage(UpdateInfo info, boolean overwriteExisting) {
-        URL url = null;
-        try {
-            url = info.uri.toURL();
-        } catch (java.net.MalformedURLException e) {
-            Log.e(logtag, "failed to read URL: ", e);
-            return null;
-        }
-
-        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
-        path.mkdirs();
-        String fileName = new File(url.getFile()).getName();
-        File downloadFile = new File(path, fileName);
-
-
-        final String lastBuildId = prefs.getLastBuildID();
-        if (!overwriteExisting && info.buildID.equals(lastBuildId) && downloadFile.exists()) {
-            // The last saved buildID is the same as the one for the current update. We also have a file
-            // already downloaded, so it's probably the package we want. Verify it to be sure and just
-            // return that if it matches.
-
-            if (PackageVerifier.verifyDownloadedPackage(prefs, downloadFile, bufferSize)) {
-                if (DEBUG) {
-                    Log.i(logtag, "using existing update package");
-                }
-                return downloadFile;
-            } else {
-                // Didn't match, so we're going to download a new one.
-                downloadFile.delete();
-            }
-        }
-
-        if (!info.buildID.equals(prefs.getLastBuildID())) {
-            // Delete the previous package when a new version becomes available.
-            deleteUpdatePackage(prefs.getLastFileName());
-        }
-
-        if (DEBUG) {
-            Log.i(logtag, "downloading update package");
-        }
-        sendCheckUpdateResult(CheckUpdateResult.DOWNLOADING);
-
-        OutputStream output = null;
-        InputStream input = null;
-        URLConnection conn = null;
-
-        shouldCancelDownload = false;
-        showDownloadNotification(downloadFile);
-
-        try {
-            NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo();
-            if (netInfo != null && netInfo.isConnected() &&
-                    netInfo.getType() == ConnectivityManager.TYPE_WIFI) {
-                mWifiLock.acquire();
-            }
-
-            conn = ProxySelector.openConnectionWithProxy(info.uri);
-            int length = conn.getContentLength();
-
-            output = new BufferedOutputStream(new FileOutputStream(downloadFile));
-            input = new BufferedInputStream(conn.getInputStream());
-
-            byte[] buf = new byte[bufferSize];
-            int len = 0;
-
-            int bytesRead = 0;
-            int lastNotify = 0;
-
-            while ((len = input.read(buf, 0, bufferSize)) > 0 && !shouldCancelDownload) {
-                output.write(buf, 0, len);
-                bytesRead += len;
-                // Updating the notification takes time so only do it every 1MB
-                if (bytesRead - lastNotify > 1048576) {
-                    notifBuilder.setProgress(length, bytesRead, false);
-                    notificationManager.notify(notificationId, notifBuilder.build());
-                    lastNotify = bytesRead;
-                }
-            }
-
-            notificationManager.cancel(notificationId);
-
-            // if the download was canceled by the user
-            // delete the update package
-            if (shouldCancelDownload) {
-                if (DEBUG) {
-                    Log.i(logtag, "download canceled by user!");
-                }
-                downloadFile.delete();
-
-                return null;
-            } else {
-                if (DEBUG) {
-                    Log.i(logtag, "completed update download!");
-                }
-                return downloadFile;
-            }
-        } catch (Exception e) {
-            downloadFile.delete();
-            showDownloadFailure();
-
-            Log.e(logtag, "failed to download update: ", e);
-            return null;
-        } finally {
-            IOUtils.safeStreamClose(input);
-            IOUtils.safeStreamClose(output);
-
-            if (mWifiLock.isHeld()) {
-                mWifiLock.release();
-            }
-
-            // conn isn't guaranteed to be an HttpURLConnection, hence we don't want to cast earlier
-            // in this method. However in our current implementation it usually is, so we need to
-            // make sure we close it in that case:
-            final HttpURLConnection httpConn = (HttpURLConnection) conn;
-            if (httpConn != null) {
-                httpConn.disconnect();
-            }
-        }
-    }
-
-    private void showDownloadNotification() {
-        showDownloadNotification(null);
-    }
-
-    @SuppressLint("NewApi")
-    private void showDownloadNotification(File downloadFile) {
-
-        Intent notificationIntent = new Intent(UpdateServiceHelper.ACTION_APPLY_UPDATE);
-        Intent cancelIntent = new Intent(UpdateServiceHelper.ACTION_CANCEL_DOWNLOAD);
-
-        if (downloadFile != null)
-            notificationIntent.putExtra(UpdateServiceHelper.EXTRA_PACKAGE_PATH_NAME, downloadFile.getAbsolutePath());
-
-        PendingIntent contentIntent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-        PendingIntent deleteIntent = PendingIntent.getBroadcast(context, 0, cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
-
-        notifBuilder = new NotificationCompat.Builder(context);
-        notifBuilder.setContentTitle(getString(R.string.updater_downloading_title))
-                .setContentText(shouldApplyImmediately ? "" : getString(R.string.updater_downloading_select))
-                .setSmallIcon(android.R.drawable.stat_sys_download)
-                .setContentIntent(contentIntent)
-                .setDeleteIntent(deleteIntent)
-                .setOnlyAlertOnce(true);
-
-        if (!AppConstants.Versions.preO) {
-            notifBuilder.setChannelId(NotificationHelper.getInstance(context)
-                    .getNotificationChannel(NotificationHelper.Channel.UPDATER).getId());
-        }
-
-        notifBuilder.setProgress(100, 0, true);
-        notificationManager.notify(notificationId, notifBuilder.build());
-    }
-
-    @SuppressLint("NewApi")
-    private void showDownloadFailure() {
-        // Let the user restart the update process with a new JobIntentService
-        Intent notificationIntent = new Intent(UpdateServiceHelper.ACTION_CHECK_FOR_UPDATE);
-        notificationIntent.setClass(context, UpdateServiceReceiver.class);
-        PendingIntent contentIntent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-
-        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-        builder.setSmallIcon(R.drawable.ic_status_logo);
-        builder.setWhen(System.currentTimeMillis());
-        builder.setContentTitle(getString(R.string.updater_downloading_title_failed));
-        builder.setContentText(getString(R.string.updater_downloading_retry));
-        builder.setContentIntent(contentIntent);
-
-        if (!AppConstants.Versions.preO) {
-            builder.setChannelId(NotificationHelper.getInstance(context)
-                    .getNotificationChannel(NotificationHelper.Channel.UPDATER).getId());
-        }
-
-        notificationManager.notify(notificationId, builder.build());
-    }
-
-    private void applyUpdate(File updateFile) {
-        shouldApplyImmediately = false;
-
-        if (!updateFile.exists())
-            return;
-
-        if (DEBUG) {
-            Log.i(logtag, "Verifying package: " + updateFile);
-        }
-
-        if (!PackageVerifier.verifyDownloadedPackage(prefs, updateFile, bufferSize)) {
-            Log.e(logtag, "Not installing update, failed verification");
-            return;
-        }
-
-        Intent intent = new Intent(Intent.ACTION_VIEW);
-        if (AppConstants.Versions.preN) {
-            intent.setDataAndType(Uri.fromFile(updateFile), "application/vnd.android.package-archive");
-        } else {
-            Uri apkUri = FileProvider.getUriForFile(context,
-                    AppConstants.MOZ_FILE_PROVIDER_AUTHORITY, updateFile);
-            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
-            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-        }
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        context.startActivity(intent);
-    }
-
-    private boolean deleteUpdatePackage(String path) {
-        if (path == null) {
-            return false;
-        }
-
-        File pkg = new File(path);
-        if (!pkg.exists()) {
-            return false;
-        }
-
-        pkg.delete();
-
-        if (DEBUG) {
-            Log.i(logtag, "deleted update package: " + path);
-        }
-
-        return true;
-    }
-
-    private void sendCheckUpdateResult(CheckUpdateResult result) {
-        Intent resultIntent = new Intent(context, GeckoUpdateReceiver.class);
-        resultIntent.setAction(UpdateServiceHelper.ACTION_CHECK_UPDATE_RESULT);
-        resultIntent.putExtra("result", result.toString());
-        context.sendBroadcast(resultIntent);
-    }
-
-    private UpdateInfo findUpdate(boolean force) {
-        URLConnection conn = null;
-        try {
-            URI uri = prefs.getUpdateURI(force);
-
-            if (uri == null) {
-                Log.e(logtag, "failed to get update URI");
-                return null;
-            }
-
-            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-            conn = ProxySelector.openConnectionWithProxy(uri);
-            Document dom = builder.parse(conn.getInputStream());
-
-            NodeList nodes = dom.getElementsByTagName("update");
-            if (nodes == null || nodes.getLength() == 0)
-                return null;
-
-            Node updateNode = nodes.item(0);
-            Node buildIdNode = updateNode.getAttributes().getNamedItem("buildID");
-            if (buildIdNode == null)
-                return null;
-
-            nodes = dom.getElementsByTagName("patch");
-            if (nodes == null || nodes.getLength() == 0)
-                return null;
-
-            Node patchNode = nodes.item(0);
-            Node urlNode = patchNode.getAttributes().getNamedItem("URL");
-            Node hashFunctionNode = patchNode.getAttributes().getNamedItem("hashFunction");
-            Node hashValueNode = patchNode.getAttributes().getNamedItem("hashValue");
-            Node sizeNode = patchNode.getAttributes().getNamedItem("size");
-
-            if (urlNode == null || hashFunctionNode == null ||
-                    hashValueNode == null || sizeNode == null) {
-                return null;
-            }
-
-            // Fill in UpdateInfo from the XML data
-            UpdateInfo info = new UpdateInfo();
-            info.uri = new URI(urlNode.getTextContent());
-            info.buildID = buildIdNode.getTextContent();
-            info.hashFunction = hashFunctionNode.getTextContent();
-            info.hashValue = hashValueNode.getTextContent();
-
-            try {
-                info.size = Integer.parseInt(sizeNode.getTextContent());
-            } catch (NumberFormatException e) {
-                Log.e(logtag, "Failed to find APK size: ", e);
-                return null;
-            }
-
-            // Make sure we have all the stuff we need to apply the update
-            if (!info.isValid()) {
-                Log.e(logtag, "missing some required update information, have: " + info);
-                return null;
-            }
-
-            return info;
-        } catch (Exception e) {
-            Log.e(logtag, "failed to check for update: ", e);
-            return null;
-        } finally {
-            // conn isn't guaranteed to be an HttpURLConnection, hence we don't want to cast earlier
-            // in this method. However in our current implementation it usually is, so we need to
-            // make sure we close it in that case:
-            final HttpURLConnection httpConn = (HttpURLConnection) conn;
-            if (httpConn != null) {
-                httpConn.disconnect();
-            }
-        }
-    }
-
-    private String getString(@StringRes final int stringResId) {
-        return context.getString(stringResId);
-    }
-
-    private static boolean hasFlag(int flags, int flag) {
-        return (flags & flag) == flag;
-    }
-
-    // The log tag can have at most 23 chars or Log will throw an IllegalArgumentException
-    private String getLogtagFromParentName(@NonNull final Context context) {
-        final String parentName = "Gecko" + context.getClass().getSimpleName();
-        if (parentName.length() > 23) {
-            return parentName.substring(0, 24);
-        } else {
-            return parentName;
-        }
-    }
-
-    /**
-     * Receiver only used in local notifications that allow for actions to modify current running state.
-     * As such it is an inner class of current JobIntentService.<br>
-     * For any notifications that could allow for actions after the service completed it's work
-     * use {@link UpdateServiceReceiver}
-     */
-    private class UserUpdatesReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            final String action = intent.getAction();
-
-            switch (action) {
-                case UpdateServiceHelper.ACTION_APPLY_UPDATE:
-                    // User can only press a notification button for this while a download is in progress.
-                    // If download finished the notification will be update to allow starting
-                    // a new JobIntentService to apply the update
-                    if (DEBUG) {
-                        Log.i(logtag, "will apply update when download finished");
-                    }
-                    shouldApplyImmediately = true;
-                    showDownloadNotification();
-                    break;
-                case UpdateServiceHelper.ACTION_CANCEL_DOWNLOAD:
-                    shouldCancelDownload = true;
-                    break;
-                default:
-                    // no-op, we only listen for the above
-            }
-        }
-    }
-
-    private void registerForLocalBroadcasts(@NonNull final Context context) {
-        innerBroadcastReceiver = new UserUpdatesReceiver();
-        final IntentFilter intentFilter = new IntentFilter();
-        intentFilter.addAction(UpdateServiceHelper.ACTION_APPLY_UPDATE);
-        intentFilter.addAction(UpdateServiceHelper.ACTION_CANCEL_DOWNLOAD);
-
-        context.registerReceiver(innerBroadcastReceiver, intentFilter);
-    }
-
-    private void unregisterFromLocalBroadcasts() {
-        context.unregisterReceiver(innerBroadcastReceiver);
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdaterService.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Context;
-import android.content.Intent;
-import android.support.annotation.NonNull;
-import android.support.v4.app.JobIntentService;
-
-import org.mozilla.gecko.CrashHandler;
-
-public abstract class UpdaterService extends JobIntentService {
-    private static CrashHandler crashHandler;
-    protected Updater updater;
-    protected UpdatesPrefs prefs;
-
-    @Override
-    public void onCreate() {
-        initCrashHandler(getApplicationContext());
-
-        super.onCreate();
-
-        prefs = new UpdatesPrefs(this);
-        updater = new Updater(this, prefs, UpdateServiceHelper.BUFSIZE, UpdateServiceHelper.NOTIFICATION_ID);
-    }
-
-    @Override
-    protected abstract void onHandleWork(@NonNull Intent intent);
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        updater.finish();
-        crashHandler.unregister();
-    }
-
-    private void initCrashHandler(@NonNull final Context appContext) {
-        // Will only need one
-        if (crashHandler == null) {
-            synchronized (this) {
-                if (crashHandler == null) {
-                    crashHandler = CrashHandler.createDefaultCrashHandler(appContext);
-                }
-            }
-        }
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdatesApplyService.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Intent;
-import android.support.annotation.NonNull;
-
-public class UpdatesApplyService extends UpdaterService {
-    @Override
-    protected void onHandleWork(@NonNull Intent intent) {
-        // The apply action from the notification while the download is in progress is
-        // treated in the inner BroadcastReceiver of the service which posted the notification
-        updater.applyUpdate(intent.getStringExtra(UpdateServiceHelper.EXTRA_PACKAGE_PATH_NAME));
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdatesCheckService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Intent;
-import android.support.annotation.NonNull;
-
-public class UpdatesCheckService extends UpdaterService {
-    @Override
-    protected void onHandleWork(@NonNull Intent intent) {
-        updater.startUpdate(intent.getIntExtra(UpdateServiceHelper.EXTRA_UPDATE_FLAGS_NAME, 0));
-
-        // Use this instead for forcing a download from about:fennec
-        // startUpdate(UpdateServiceHelper.FLAG_FORCE_DOWNLOAD | UpdateServiceHelper.FLAG_REINSTALL);
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdatesDownloadService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Intent;
-import android.support.annotation.NonNull;
-
-public class UpdatesDownloadService extends UpdaterService {
-    @Override
-    protected void onHandleWork(@NonNull Intent intent) {
-        updater.setIfShouldApplyUpdateImmediately(true);
-        updater.startUpdate(Updater.FLAG_FORCE_DOWNLOAD);
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdatesPrefs.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
-
-import org.mozilla.gecko.GeckoAppShell;
-import org.mozilla.gecko.updater.UpdateServiceHelper.AutoDownloadPolicy;
-import org.mozilla.gecko.updater.UpdateServiceHelper.UpdateInfo;
-
-import java.io.File;
-import java.net.URI;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.TimeZone;
-
-public final class UpdatesPrefs {
-    private static final String PREFS_NAME = "UpdateService";
-    private static final String KEY_LAST_BUILDID = "UpdateService.lastBuildID";
-    private static final String KEY_LAST_HASH_FUNCTION = "UpdateService.lastHashFunction";
-    private static final String KEY_LAST_HASH_VALUE = "UpdateService.lastHashValue";
-    private static final String KEY_LAST_FILE_NAME = "UpdateService.lastFileName";
-    private static final String KEY_LAST_ATTEMPT_DATE = "UpdateService.lastAttemptDate";
-    private static final String KEY_AUTODOWNLOAD_POLICY = "UpdateService.autoDownloadPolicy";
-    private static final String KEY_UPDATE_URL = "UpdateService.updateUrl";
-
-    private SharedPreferences sharedPrefs;
-
-    UpdatesPrefs(@NonNull final Context context) {
-        sharedPrefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
-    }
-
-    String getPreferenceName() {
-        return PREFS_NAME;
-    }
-
-    String getLastBuildID() {
-        return sharedPrefs.getString(KEY_LAST_BUILDID, null);
-    }
-
-    String getLastHashFunction() {
-        return sharedPrefs.getString(KEY_LAST_HASH_FUNCTION, null);
-    }
-
-    String getLastHashValue() {
-        return sharedPrefs.getString(KEY_LAST_HASH_VALUE, null);
-    }
-
-    String getLastFileName() {
-        return sharedPrefs.getString(KEY_LAST_FILE_NAME, null);
-    }
-
-    Calendar getLastAttemptDate() {
-        long lastAttempt = sharedPrefs.getLong(KEY_LAST_ATTEMPT_DATE, -1);
-        if (lastAttempt < 0)
-            return null;
-
-        GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
-        cal.setTimeInMillis(lastAttempt);
-        return cal;
-    }
-
-    void setLastAttemptDate() {
-        SharedPreferences.Editor editor = sharedPrefs.edit();
-        editor.putLong(KEY_LAST_ATTEMPT_DATE, System.currentTimeMillis());
-        editor.commit();
-    }
-
-    AutoDownloadPolicy getAutoDownloadPolicy() {
-        return AutoDownloadPolicy.get(sharedPrefs.getInt(KEY_AUTODOWNLOAD_POLICY, AutoDownloadPolicy.WIFI.value));
-    }
-
-    void setAutoDownloadPolicy(AutoDownloadPolicy policy) {
-        SharedPreferences.Editor editor = sharedPrefs.edit();
-        editor.putInt(KEY_AUTODOWNLOAD_POLICY, policy.value);
-        editor.commit();
-    }
-
-    URI getUpdateURI(boolean force) {
-        return UpdateServiceHelper.expandUpdateURI(GeckoAppShell.getApplicationContext(),
-                sharedPrefs.getString(KEY_UPDATE_URL, null), force);
-    }
-
-    void setUpdateUrl(String url) {
-        SharedPreferences.Editor editor = sharedPrefs.edit();
-        editor.putString(KEY_UPDATE_URL, url);
-        editor.commit();
-    }
-
-    void saveUpdateInfo(UpdateInfo info, File downloaded) {
-        SharedPreferences.Editor editor = sharedPrefs.edit();
-        editor.putString(KEY_LAST_BUILDID, info.buildID);
-        editor.putString(KEY_LAST_HASH_FUNCTION, info.hashFunction);
-        editor.putString(KEY_LAST_HASH_VALUE, info.hashValue);
-        editor.putString(KEY_LAST_FILE_NAME, downloaded.toString());
-        editor.commit();
-    }
-}
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/updater/UpdatesRegisterService.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * 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/. */
-
-package org.mozilla.gecko.updater;
-
-import android.content.Intent;
-import android.support.annotation.NonNull;
-
-import org.mozilla.gecko.updater.UpdateServiceHelper.AutoDownloadPolicy;
-
-public class UpdatesRegisterService extends UpdaterService {
-    @Override
-    protected void onHandleWork(@NonNull Intent intent) {
-        AutoDownloadPolicy policy = AutoDownloadPolicy.get(
-                intent.getIntExtra(UpdateServiceHelper.EXTRA_AUTODOWNLOAD_NAME,
-                        AutoDownloadPolicy.NONE.value));
-
-        if (policy != AutoDownloadPolicy.NONE) {
-            prefs.setAutoDownloadPolicy(policy);
-        }
-
-        String url = intent.getStringExtra(UpdateServiceHelper.EXTRA_UPDATE_URL_NAME);
-        if (url != null) {
-            prefs.setUpdateUrl(url);
-        }
-
-        updater.registerForUpdates(false);
-    }
-}
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -467,24 +467,16 @@ shown from Android O while a tab is bein
 <!ENTITY datareporting_crashreporter_title_short "Crash Reporter">
 <!ENTITY datareporting_wifi_title2 "&vendorShortName; Location Service">
 <!ENTITY datareporting_wifi_geolocation_summary4 "Help &vendorShortName; map the world! Share the approximate Wi-Fi and cellular location of your device to improve our geolocation service.">
 <!-- Localization note (datareporting_notification_title ) : This will be the title
      of the notification shown whenever the user has enabled data reporting and the stumbler
      service is running. -->
 <!ENTITY datareporting_stumbler_notification_title "&vendorShortName; Location Service running">
 
-<!-- Localization note (pref_update_autodownload2) : This should mention downloading
-     specifically, since the pref only prevents automatic downloads and not the
-     actual notification that an update is available. -->
-<!ENTITY pref_update_autodownload3 "Automatic updates">
-<!ENTITY pref_update_autodownload_wifi "Only over Wi-Fi">
-<!ENTITY pref_update_autodownload_never "Never">
-<!ENTITY pref_update_autodownload_always "Always">
-
 <!-- Localization note (help_menu) : This string is used in the main menu-->
 <!ENTITY help_menu "Help">
 
 <!ENTITY quit "Quit">
 
 <!ENTITY addons "Add-ons">
 <!ENTITY logins "Logins">
 <!ENTITY downloads "Downloads">
@@ -743,35 +735,16 @@ just addresses the organization to follo
 
 <!-- Localization note (suggestion_for_engine): The placeholder &formatS1; will be
      replaced with the name of the search engine. The placeholder &formatS2; will be
      replaced with the search query. -->
 <!ENTITY suggestion_for_engine "Search &formatS1; for &formatS2;">
 
 <!ENTITY searchable_description "Bookmarks and history">
 
- <!-- Updater notifications -->
-<!ENTITY updater_start_title2 "Update available for &brandShortName;">
-<!ENTITY updater_start_select2 "Touch to download">
-
-<!ENTITY updater_downloading_title2 "Downloading &brandShortName;">
-<!ENTITY updater_downloading_title_failed2 "Download failed">
-<!ENTITY updater_downloading_select2 "Touch to apply update once downloaded">
-<!ENTITY updater_downloading_retry2 "Touch to retry">
-
-<!ENTITY updater_apply_title3 "Update downloaded for &brandShortName;">
-<!ENTITY updater_apply_select3 "Touch to install">
-
-<!-- Localization note (updater_permission_text): This text is shown in a notification and as a snackbar
-     if the app requires a runtime permission to download updates. Currently, the updater only sees
-     remotely advertised updates in the Nightly and Aurora channels. -->
-<!ENTITY updater_permission_text "To download files and updates, allow &brandShortName; permission to access storage.">
-<!-- LOCALIZATION NOTE (updater_permission_allow): This action is shown in a snackbar along with updater_permission_text. -->
-<!ENTITY updater_permission_allow "Allow">
-
     <!-- Guest mode -->
 <!ENTITY new_guest_session "New Guest Session">
 <!ENTITY exit_guest_session "Exit Guest Session">
 <!ENTITY guest_session_dialog_continue "Continue">
 <!ENTITY guest_session_dialog_cancel "Cancel">
 <!ENTITY new_guest_session_title "&brandShortName; will now restart">
 <!ENTITY new_guest_session_text2 "The person using it will not be able to see any of your personal browsing data (like saved logins, history or bookmarks).\n\nWhen your guest is done, their browsing data will be deleted and your session will be restored.">
 <!ENTITY guest_browsing_notification_title "Guest browsing is enabled">
@@ -946,14 +919,13 @@ Picture-in-picture mini window -->
 <!ENTITY pref_notification_settings_link "Manage notification settings">
 <!-- Notification channels names -->
 <!ENTITY default_notification_channel2 "Browser">
 <!ENTITY mls_notification_channel "&vendorShortName; Location Service">
 <!ENTITY download_notification_channel "Downloads">
 <!ENTITY media_notification_channel2 "Sound and video">
 <!-- These push notifications come without a specific channel and/or name from Leanplum -->
 <!ENTITY leanplum_default_notifications_channel2 "&vendorShortName; tips and tricks">
-<!ENTITY updater_notification_channel "App updates">
 <!ENTITY synced_tabs_notification_channel "Synced tabs">
 <!-- LOCALIZATION NOTE (site_notifications_channel): This is for system notifications displayed by
 web sites through the HTML Notifications API. -->
 <!ENTITY site_notifications_channel "Site notifications">
 <!ENTITY crash_handler_notifications_channel "&brandShortName; Crash Reporter">
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -287,20 +287,16 @@
   <string name="pref_private_data_cookies2">&pref_private_data_cookies2;</string>
   <string name="pref_private_data_cache">&pref_private_data_cache;</string>
   <string name="pref_private_data_offlineApps">&pref_private_data_offlineApps;</string>
   <string name="pref_private_data_siteSettings">&pref_private_data_siteSettings2;</string>
   <string name="pref_private_data_downloadFiles2">&pref_private_data_downloadFiles2;</string>
   <string name="pref_private_data_syncedTabs">&pref_private_data_syncedTabs;</string>
   <string name="pref_import_android">&pref_import_options;</string>
   <string name="pref_import_android_summary">&pref_import_android_summary;</string>
-  <string name="pref_update_autodownload">&pref_update_autodownload3;</string>
-  <string name="pref_update_autodownload_wifi">&pref_update_autodownload_wifi;</string>
-  <string name="pref_update_autodownload_disabled">&pref_update_autodownload_never;</string>
-  <string name="pref_update_autodownload_enabled">&pref_update_autodownload_always;</string>
 
   <string name="pref_tab_queue_title">&pref_tab_queue_title3;</string>
   <string name="pref_tab_queue_summary">&pref_tab_queue_summary4;</string>
   <string name="tab_queue_prompt_title">&tab_queue_prompt_title;</string>
   <string name="tab_queue_prompt_text">&tab_queue_prompt_text4;</string>
   <string name="tab_queue_prompt_tip_text">&tab_queue_prompt_tip_text2;</string>
   <string name="tab_queue_prompt_positive_action_button">&tab_queue_prompt_positive_action_button;</string>
   <string name="tab_queue_prompt_negative_action_button">&tab_queue_prompt_negative_action_button;</string>
@@ -539,32 +535,16 @@
   <string name="bookmarkhistory_button_import">&bookmarkhistory_button_import;</string>
   <string name="bookmarkhistory_import_both">&bookmarkhistory_import_both;</string>
   <string name="bookmarkhistory_import_bookmarks">&bookmarkhistory_import_bookmarks;</string>
   <string name="bookmarkhistory_import_history">&bookmarkhistory_import_history;</string>
   <string name="bookmarkhistory_import_wait">&bookmarkhistory_import_wait;</string>
 
   <string name="searchable_description">&searchable_description;</string>
 
-  <!-- Updater notifications -->
-  <string name="updater_start_title">&updater_start_title2;</string>
-  <string name="updater_start_select">&updater_start_select2;</string>
-
-  <string name="updater_downloading_title">&updater_downloading_title2;</string>
-  <string name="updater_downloading_title_failed">&updater_downloading_title_failed2;</string>
-  <string name="updater_downloading_select">&updater_downloading_select2;</string>
-  <string name="updater_downloading_retry">&updater_downloading_retry2;</string>
-
-  <string name="updater_apply_title">&updater_apply_title3;</string>
-  <string name="updater_apply_select">&updater_apply_select3;</string>
-
-  <string name="updater_permission_title">&brandShortName;</string>
-  <string name="updater_permission_text">&updater_permission_text;</string>
-  <string name="updater_permission_allow">&updater_permission_allow;</string>
-
   <!-- Awesomescreen screen -->
   <string name="suggestions_prompt">&suggestions_prompt3;</string>
   <string name="search_bar_item_desc">&search_bar_item_desc;</string>
 
   <string name="suggestion_for_engine">&suggestion_for_engine;</string>
 
   <!-- Set Image Notifications -->
   <string name="set_image_fail">&set_image_fail;</string>
@@ -674,13 +654,12 @@
   <string name="pip_pause_button_description">&pip_pause_button_description;</string>
 
   <string name="pref_notification_settings_link">&pref_notification_settings_link;</string>
   <string name="default_notification_channel2">&default_notification_channel2;</string>
   <string name="mls_notification_channel">&mls_notification_channel;</string>
   <string name="media_notification_channel2">&media_notification_channel2;</string>
   <string name="download_notification_channel">&download_notification_channel;</string>
   <string name="leanplum_default_notifications_channel2">&leanplum_default_notifications_channel2;</string>
-  <string name="updater_notification_channel">&updater_notification_channel;</string>
   <string name="synced_tabs_notification_channel">&synced_tabs_notification_channel;</string>
   <string name="site_notifications_channel">&site_notifications_channel;</string>
   <string name="crash_handler_notifications_channel">&crash_handler_notifications_channel;</string>
 </resources>
--- a/mobile/android/chrome/content/about.xhtml
+++ b/mobile/android/chrome/content/about.xhtml
@@ -24,26 +24,16 @@
 <body dir="&locale.dir;">
   <div id="header" dir="ltr">
     <div id="wordmark"></div>
 #expand <p id="version">__MOZ_APP_VERSION_DISPLAY__</p>
   </div>
 
   <div id="banner">
     <div id="logo"/>
-#ifdef MOZ_UPDATER
-    <div id="updateBox">
-      <a id="updateLink" href="">&aboutPage.checkForUpdates.link;</a>
-      <span id="update-message-checking">&aboutPage.checkForUpdates.checking;</span>
-      <span id="update-message-none">&aboutPage.checkForUpdates.none;</span>
-      <span id="update-message-found">&aboutPage.checkForUpdates.available2;</span>
-      <span id="update-message-downloading">&aboutPage.checkForUpdates.downloading;</span>
-      <span id="update-message-downloaded">&aboutPage.checkForUpdates.downloaded2;</span>
-    </div>
-#endif
 
     <div id="messages">
       <p id="distributionAbout" hidden="true"/>
       <p id="distributionID" hidden="true"/>
       <p id="telemetry" hidden="true">
         &aboutPage.warningVersion;
       </p>
     </div>
--- a/mobile/android/locales/en-US/chrome/about.dtd
+++ b/mobile/android/locales/en-US/chrome/about.dtd
@@ -1,19 +1,13 @@
 <!-- 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/. -->
 <!ENTITY aboutPage.title                        "About &brandShortName;">
 <!ENTITY aboutPage.warningVersion               "&brandShortName; is experimental and may be unstable.">
-<!ENTITY aboutPage.checkForUpdates.link         "Check for Updates »">
-<!ENTITY aboutPage.checkForUpdates.checking     "Looking for updates…">
-<!ENTITY aboutPage.checkForUpdates.none         "No updates available">
-<!ENTITY aboutPage.checkForUpdates.available2   "Download update">
-<!ENTITY aboutPage.checkForUpdates.downloading  "Downloading update…">
-<!ENTITY aboutPage.checkForUpdates.downloaded2  "Install update">
 <!ENTITY aboutPage.faq.label                    "FAQ">
 <!ENTITY aboutPage.support.label                "Support">
 <!ENTITY aboutPage.privacyPolicy.label          "Privacy Policy">
 <!ENTITY aboutPage.rights.label                 "Know Your Rights">
 <!ENTITY aboutPage.relNotes.label               "Release Notes">
 <!ENTITY aboutPage.credits.label                "Credits">
 <!ENTITY aboutPage.license.label                "Licensing Information">
 
--- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/BaseRobocopTest.java
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/BaseRobocopTest.java
@@ -21,17 +21,16 @@ import org.mozilla.gecko.Assert;
 import org.mozilla.gecko.Driver;
 import org.mozilla.gecko.FennecInstrumentationTestRunner;
 import org.mozilla.gecko.FennecMochitestAssert;
 import org.mozilla.gecko.FennecNativeActions;
 import org.mozilla.gecko.FennecNativeDriver;
 import org.mozilla.gecko.FennecTalosAssert;
 import org.mozilla.gecko.GeckoProfile;
 import org.mozilla.gecko.firstrun.OnboardingHelper;
-import org.mozilla.gecko.updater.UpdateServiceHelper;
 
 import java.lang.reflect.Method;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.util.Map;
 
 @SuppressWarnings("unchecked")
 public abstract class BaseRobocopTest extends ActivityInstrumentationTestCase2<Activity> {
@@ -138,18 +137,16 @@ public abstract class BaseRobocopTest ex
             }
         }
 
         return intent;
     }
 
     @Override
     protected void setUp() throws Exception {
-        // Disable the updater.
-        UpdateServiceHelper.setEnabled(false);
 
         // Load config file from root path (set up by Python script).
         mRootPath = FennecInstrumentationTestRunner.getFennecArguments().getString("deviceroot");
         if (mRootPath == null) {
             Log.w("Robocop", "Did not find deviceroot in arguments; falling back to: " + DEFAULT_ROOT_PATH);
             mRootPath = DEFAULT_ROOT_PATH;
         }
         String configFile = FennecNativeDriver.getFile(mRootPath + "/robotium.config");
--- a/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/StringHelper.java
+++ b/mobile/android/tests/browser/robocop/src/org/mozilla/gecko/tests/StringHelper.java
@@ -225,22 +225,18 @@ public class StringHelper {
 
     // Clear Private Data Section
     public final String SITE_SETTINGS_LABEL;
 
     // Mozilla Firefox Section
     public final String FAQS_LABEL;
 
 
-    // Update Settings
+    // Aswesomescreen content update settings
     public final String AUTOMATIC_UPDATES;
-    public final String OVER_WIFI_OPTION;
-    public final String DOWNLOAD_UPDATES_AUTO;
-    public final String ALWAYS;
-    public final String NEVER;
 
     // Restore Tabs Settings
     public final String DONT_RESTORE_TABS;
     public final String ALWAYS_RESTORE_TABS;
     public final String DONT_RESTORE_QUIT;
 
     private StringHelper(final Resources res) {
 
@@ -405,22 +401,18 @@ public class StringHelper {
         RESTORE_TABS_LABEL = res.getString(R.string.pref_restore);
 
         // Clear Private Data Settings
         SITE_SETTINGS_LABEL = res.getString(R.string.pref_private_data_siteSettings);
 
         // Mozilla Firefox Settings
         FAQS_LABEL = res.getString(R.string.pref_vendor_faqs);
 
-        // Update Settings
+        // Aswesomescreen content update settings
         AUTOMATIC_UPDATES = res.getString(R.string.pref_home_updates);
-        OVER_WIFI_OPTION = res.getString(R.string.pref_update_autodownload_wifi);
-        DOWNLOAD_UPDATES_AUTO = res.getString(R.string.pref_update_autodownload);
-        ALWAYS = res.getString(R.string.pref_update_autodownload_enabled);
-        NEVER = res.getString(R.string.pref_update_autodownload_disabled);
 
         // Restore Tabs Settings
         DONT_RESTORE_TABS = res.getString(R.string.pref_restore_quit);
         ALWAYS_RESTORE_TABS = res.getString(R.string.pref_restore_always);
         DONT_RESTORE_QUIT = res.getString(R.string.pref_restore_quit);
     }
 
     public static StringHelper initialize(Resources res) {