| Index: chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheService.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheService.java b/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheService.java
|
| deleted file mode 100644
|
| index 09a557be3d0995a6133972c2cf629ee69b6e4c0b..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/precache/PrecacheService.java
|
| +++ /dev/null
|
| @@ -1,211 +0,0 @@
|
| -// Copyright 2015 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.chrome.browser.precache;
|
| -
|
| -import android.app.Service;
|
| -import android.content.BroadcastReceiver;
|
| -import android.content.Context;
|
| -import android.content.Intent;
|
| -import android.content.IntentFilter;
|
| -import android.net.ConnectivityManager;
|
| -import android.os.IBinder;
|
| -import android.os.PowerManager;
|
| -import android.os.PowerManager.WakeLock;
|
| -import android.util.Log;
|
| -
|
| -import org.chromium.base.VisibleForTesting;
|
| -import org.chromium.base.annotations.SuppressFBWarnings;
|
| -import org.chromium.base.library_loader.LibraryProcessType;
|
| -import org.chromium.base.library_loader.ProcessInitException;
|
| -import org.chromium.components.precache.DeviceState;
|
| -import org.chromium.content.browser.BrowserStartupController;
|
| -
|
| -/**
|
| - * Background service that runs while Chrome is precaching resources. Precaching is only done while
|
| - * the device is connected to power, Wi-Fi, and the device is not interactive (e.g., the screen is
|
| - * off. This is a sticky service that is started when the {@link PrecacheServiceLauncher}
|
| - * determines that conditions are right for precaching. Once started, this service runs until
|
| - * either precaching finishes successfully, or the conditions are no longer met.
|
| - */
|
| -public class PrecacheService extends Service {
|
| - private static final String TAG = "PrecacheService";
|
| -
|
| - public static final String ACTION_START_PRECACHE =
|
| - "org.chromium.chrome.browser.precache.PrecacheService.START_PRECACHE";
|
| -
|
| - /** Wakelock that is held while precaching is in progress. */
|
| - private WakeLock mPrecachingWakeLock;
|
| -
|
| - /** True if there is a precache in progress. */
|
| - private boolean mIsPrecaching = false;
|
| -
|
| - @VisibleForTesting
|
| - boolean isPrecaching() {
|
| - return mIsPrecaching;
|
| - }
|
| -
|
| - private DeviceState mDeviceState = DeviceState.getInstance();
|
| -
|
| - @VisibleForTesting
|
| - void setDeviceState(DeviceState deviceState) {
|
| - mDeviceState = deviceState;
|
| - }
|
| -
|
| -
|
| - /** Receiver that will be notified when conditions become wrong for precaching. */
|
| - private final BroadcastReceiver mDeviceStateReceiver = new BroadcastReceiver() {
|
| - @Override
|
| - public void onReceive(Context context, Intent intent) {
|
| - if (mIsPrecaching && (mDeviceState.isInteractive(context)
|
| - || !mDeviceState.isPowerConnected(context)
|
| - || !mDeviceState.isWifiAvailable(context))) {
|
| - cancelPrecaching();
|
| - }
|
| - }
|
| - };
|
| -
|
| - @VisibleForTesting
|
| - BroadcastReceiver getDeviceStateReceiver() {
|
| - return mDeviceStateReceiver;
|
| - }
|
| -
|
| - @VisibleForTesting
|
| - void handlePrecacheCompleted() {
|
| - if (mIsPrecaching) finishPrecaching();
|
| - }
|
| -
|
| - /** PrecacheLauncher used to run precaching. */
|
| - private PrecacheLauncher mPrecacheLauncher = new PrecacheLauncher() {
|
| - @Override
|
| - protected void onPrecacheCompleted() {
|
| - handlePrecacheCompleted();
|
| - }
|
| - };
|
| -
|
| - @VisibleForTesting
|
| - void setPrecacheLauncher(PrecacheLauncher precacheLauncher) {
|
| - mPrecacheLauncher = precacheLauncher;
|
| - }
|
| -
|
| - @Override
|
| - public void onCreate() {
|
| - super.onCreate();
|
| - registerDeviceStateReceiver();
|
| - }
|
| -
|
| - @Override
|
| - public void onDestroy() {
|
| - if (mIsPrecaching) cancelPrecaching();
|
| -
|
| - unregisterReceiver(mDeviceStateReceiver);
|
| - mPrecacheLauncher.destroy();
|
| - releasePrecachingWakeLock();
|
| -
|
| - super.onDestroy();
|
| - }
|
| -
|
| - @Override
|
| - public int onStartCommand(Intent intent, int flags, int startId) {
|
| - try {
|
| - if (intent != null && ACTION_START_PRECACHE.equals(intent.getAction())
|
| - && !mIsPrecaching) {
|
| - // Only start precaching if precaching is not already in progress.
|
| - startPrecaching();
|
| - }
|
| - } finally {
|
| - PrecacheServiceLauncher.releaseWakeLock();
|
| - }
|
| - // The PrecacheService should only be running while precaching is in progress. Return
|
| - // {@link Service.START_STICKY} if precaching is in progress to keep the service running;
|
| - // otherwise, return {@link Service.START_NOT_STICKY} to cause the service to stop once it
|
| - // is done processing commands sent to it.
|
| - return mIsPrecaching ? START_STICKY : START_NOT_STICKY;
|
| - }
|
| -
|
| - /** PrecacheService does not support binding. */
|
| - @Override
|
| - public IBinder onBind(Intent intent) {
|
| - return null;
|
| - }
|
| -
|
| - /** Attempt to start up the browser processes and load the native libraries. */
|
| - @SuppressFBWarnings("DM_EXIT")
|
| - @VisibleForTesting
|
| - void prepareNativeLibraries() {
|
| - try {
|
| - BrowserStartupController.get(getApplicationContext(),
|
| - LibraryProcessType.PROCESS_BROWSER)
|
| - .startBrowserProcessesSync(false);
|
| - } catch (ProcessInitException e) {
|
| - Log.e(TAG, "ProcessInitException while starting the browser process");
|
| - // Since the library failed to initialize nothing in the application
|
| - // can work, so kill the whole application not just the activity.
|
| - System.exit(-1);
|
| - }
|
| - }
|
| -
|
| - /** Begin a precache cycle. */
|
| - private void startPrecaching() {
|
| - Log.v(TAG, "Start precaching");
|
| - prepareNativeLibraries();
|
| - mIsPrecaching = true;
|
| - acquirePrecachingWakeLock();
|
| -
|
| - // In certain cases, the PrecacheLauncher will skip precaching entirely and call
|
| - // finishPrecaching() before this call to mPrecacheLauncher.start() returns, so the call to
|
| - // mPrecacheLauncher.start() must happen after acquiring the wake lock to ensure that the
|
| - // wake lock is released properly.
|
| - mPrecacheLauncher.start();
|
| - }
|
| -
|
| - /** End a precache cycle. */
|
| - private void finishPrecaching() {
|
| - Log.v(TAG, "Finish precaching");
|
| - shutdownPrecaching();
|
| - }
|
| -
|
| - /** Cancel a precache cycle. */
|
| - private void cancelPrecaching() {
|
| - Log.v(TAG, "Cancel precaching");
|
| - prepareNativeLibraries();
|
| - mPrecacheLauncher.cancel();
|
| -
|
| - shutdownPrecaching();
|
| - }
|
| -
|
| - /**
|
| - * Update state to indicate that precaching is no longer in progress, and stop the service.
|
| - */
|
| - private void shutdownPrecaching() {
|
| - mIsPrecaching = false;
|
| - releasePrecachingWakeLock();
|
| - stopSelf();
|
| - }
|
| -
|
| - /** Register a BroadcastReceiver to detect when conditions become wrong for precaching. */
|
| - private void registerDeviceStateReceiver() {
|
| - IntentFilter filter = new IntentFilter();
|
| - filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
|
| - filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
| - filter.addAction(Intent.ACTION_SCREEN_ON);
|
| - registerReceiver(mDeviceStateReceiver, filter);
|
| - }
|
| -
|
| - /** Acquire the precaching WakeLock. */
|
| - private void acquirePrecachingWakeLock() {
|
| - if (mPrecachingWakeLock == null) {
|
| - PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
| - mPrecachingWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
|
| - }
|
| - mPrecachingWakeLock.acquire();
|
| - }
|
| -
|
| - /** Release the precaching WakeLock if it is held. */
|
| - private void releasePrecachingWakeLock() {
|
| - if (mPrecachingWakeLock != null && mPrecachingWakeLock.isHeld()) {
|
| - mPrecachingWakeLock.release();
|
| - }
|
| - }
|
| -}
|
|
|