| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeLifetimeController.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeLifetimeController.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeLifetimeController.java
|
| index 7a060c88f41684aa8eadba71b2ac7b96f0e8413f..0cc4c8f0b9def74e201515f89fb091bba5a27e0c 100644
|
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeLifetimeController.java
|
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeLifetimeController.java
|
| @@ -29,9 +29,13 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer,
|
| ApplicationStatus.ActivityStateListener {
|
| private static final String TAG = "ChromeLifetimeController";
|
|
|
| + // The amount of time to wait for Chrome to destroy all the activities.
|
| + private static final long WATCHDOG_DELAY = 1000;
|
| +
|
| private final Context mContext;
|
| private boolean mRestartChromeOnDestroy;
|
| private int mRemainingActivitiesCount = 0;
|
| + private final Handler mHandler;
|
|
|
| /**
|
| * Creates a {@link ChromeLifetimeController} instance.
|
| @@ -41,6 +45,7 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer,
|
| public ChromeLifetimeController(Context context) {
|
| mContext = context.getApplicationContext();
|
| ApplicationLifetime.addObserver(this);
|
| + mHandler = new Handler(Looper.getMainLooper());
|
| }
|
|
|
| @Override
|
| @@ -61,6 +66,16 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer,
|
| activity.finish();
|
| }
|
| }
|
| +
|
| + // Post a watchdog -- if Android is taking a long time to call onDestroy, kill the process.
|
| + mHandler.postDelayed(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + if (mRemainingActivitiesCount > 0) {
|
| + destroyProcess();
|
| + }
|
| + }
|
| + }, WATCHDOG_DELAY);
|
| }
|
|
|
|
|
| @@ -77,8 +92,7 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer,
|
| }
|
|
|
| private void destroyProcess() {
|
| - Handler handler = new Handler(Looper.getMainLooper());
|
| - handler.post(new Runnable() {
|
| + mHandler.post(new Runnable() {
|
| @Override
|
| public void run() {
|
| if (mRestartChromeOnDestroy) scheduleRestart(mContext);
|
|
|