Index: chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java |
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java |
index 709b02196d7169db56cbb27a02a0b30566e05495..07768135a2bbee027f5794ca2ddb7a9e694a1ea2 100644 |
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java |
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java |
@@ -5,6 +5,7 @@ |
package org.chromium.chrome.test.util; |
import android.annotation.TargetApi; |
+import android.app.Activity; |
import android.app.ActivityManager; |
import android.content.Context; |
import android.content.Intent; |
@@ -14,10 +15,13 @@ import android.os.PowerManager; |
import junit.framework.Assert; |
import junit.framework.AssertionFailedError; |
+import org.chromium.base.ActivityState; |
import org.chromium.base.ApplicationState; |
import org.chromium.base.ApplicationStatus; |
+import org.chromium.base.ThreadUtils; |
import org.chromium.chrome.browser.ChromeActivity; |
import org.chromium.chrome.browser.omaha.OmahaClient; |
+import org.chromium.content.browser.test.util.CallbackHelper; |
import org.chromium.content.browser.test.util.Criteria; |
import org.chromium.content.browser.test.util.CriteriaHelper; |
@@ -117,6 +121,40 @@ public class ApplicationTestUtils { |
})); |
} |
+ /** Finishes the given activity and waits for its onDestroy() to be called. */ |
+ public static void finishActivity(final Activity activity) throws Exception { |
+ final CallbackHelper callbackHelper = new CallbackHelper(); |
+ final ApplicationStatus.ActivityStateListener activityStateListener = |
+ new ApplicationStatus.ActivityStateListener() { |
+ @Override |
+ public void onActivityStateChange(Activity activity, int newState) { |
+ if (newState == ActivityState.DESTROYED) { |
+ callbackHelper.notifyCalled(); |
+ } |
+ } |
+ }; |
+ try { |
+ boolean alreadyDestroyed = ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() { |
+ @Override |
+ public Boolean call() { |
+ if (ApplicationStatus.getStateForActivity(activity) |
+ == ActivityState.DESTROYED) { |
+ return true; |
+ } |
+ ApplicationStatus.registerStateListenerForActivity( |
+ activityStateListener, activity); |
+ activity.finish(); |
+ return false; |
+ } |
+ }); |
+ if (!alreadyDestroyed) { |
+ callbackHelper.waitForCallback(0); |
+ } |
+ } finally { |
+ ApplicationStatus.unregisterActivityStateListener(activityStateListener); |
+ } |
+ } |
+ |
/** Finishes all tasks Chrome has listed in Android's Overview. */ |
@TargetApi(Build.VERSION_CODES.LOLLIPOP) |
public static void finishAllChromeTasks(final Context context) throws Exception { |