Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3502)

Unified Diff: chrome/test/android/javatests/src/org/chromium/chrome/test/util/ApplicationTestUtils.java

Issue 2143203002: 🎨 Tidy up of TabPersistentStore's clean-up logic (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix incognito tabs persisting when cct service is active Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 {

Powered by Google App Engine
This is Rietveld 408576698