Index: chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
index 3ee9a35621bf3cfbc253f5354ee8c945198e2d51..83646723b829140df357fbf683bc80289cfd8dd5 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java |
@@ -32,7 +32,6 @@ |
import android.support.customtabs.CustomTabsServiceConnection; |
import android.support.customtabs.CustomTabsSession; |
import android.support.customtabs.CustomTabsSessionToken; |
-import android.support.test.filters.LargeTest; |
import android.support.test.filters.MediumTest; |
import android.support.test.filters.SmallTest; |
import android.text.TextUtils; |
@@ -50,7 +49,6 @@ |
import org.chromium.base.ObserverList.RewindableIterator; |
import org.chromium.base.PathUtils; |
import org.chromium.base.ThreadUtils; |
-import org.chromium.base.annotations.SuppressFBWarnings; |
import org.chromium.base.library_loader.LibraryLoader; |
import org.chromium.base.library_loader.LibraryProcessType; |
import org.chromium.base.test.util.CallbackHelper; |
@@ -70,7 +68,6 @@ |
import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
import org.chromium.chrome.browser.firstrun.FirstRunStatus; |
import org.chromium.chrome.browser.metrics.PageLoadMetrics; |
-import org.chromium.chrome.browser.preferences.Preferences; |
import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler; |
import org.chromium.chrome.browser.profiles.Profile; |
import org.chromium.chrome.browser.tab.EmptyTabObserver; |
@@ -82,8 +79,6 @@ |
import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
import org.chromium.chrome.browser.toolbar.CustomTabToolbar; |
import org.chromium.chrome.browser.util.ColorUtils; |
-import org.chromium.chrome.test.util.ApplicationTestUtils; |
-import org.chromium.chrome.test.util.ApplicationTestUtils.ActivityCloser; |
import org.chromium.chrome.test.util.ChromeRestriction; |
import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; |
import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils; |
@@ -99,10 +94,7 @@ |
import org.chromium.net.test.util.TestWebServer; |
import org.chromium.ui.mojom.WindowOpenDisposition; |
-import java.lang.ref.WeakReference; |
import java.util.ArrayList; |
-import java.util.Collections; |
-import java.util.List; |
import java.util.concurrent.Callable; |
import java.util.concurrent.TimeoutException; |
import java.util.concurrent.atomic.AtomicBoolean; |
@@ -2358,144 +2350,6 @@ |
assertEquals(testUrl, tab.getUrl()); |
} |
- @LargeTest |
- public void testClosedActivitiesNotLeaked() throws Exception { |
- openCloseActivities(true /* closeFrontToBack */, new ActivityCloser<CustomTabActivity>() { |
- @Override |
- public void close(CustomTabActivity activity) { |
- CustomTabToolbar toolbar = (CustomTabToolbar) activity.findViewById(R.id.toolbar); |
- toolbar.getCloseButtonForTest().performClick(); |
- } |
- }); |
- } |
- |
- @LargeTest |
- public void testClosedBackActivitiesNotLeaked() throws Exception { |
- openCloseActivities(true /* closeFrontToBack */, new ActivityCloser<CustomTabActivity>() { |
- @Override |
- public void close(CustomTabActivity activity) { |
- activity.onBackPressed(); |
- } |
- }); |
- } |
- |
- @LargeTest |
- public void testFinishedActivitiesNotLeaked() throws Exception { |
- openCloseActivities(true /* closeFrontToBack */, new ActivityCloser<CustomTabActivity>() { |
- @Override |
- public void close(CustomTabActivity activity) { |
- activity.finish(); |
- } |
- }); |
- } |
- |
- @LargeTest |
- public void testStoppedFinishedActivitiesNotLeaked() throws Exception { |
- openCloseActivities(false /* closeFrontToBack */, new ActivityCloser<CustomTabActivity>() { |
- @Override |
- public void close(CustomTabActivity activity) { |
- activity.finish(); |
- } |
- }); |
- } |
- |
- /** |
- * Opens several activities, closes them, and checks that activities are GCed. |
- * |
- * @param closeFrontToBack Whether to close activities starting from the |
- * last opened one (front), or from the first opened one (back). |
- * Essentially this param controls whether activities are closed |
- * in the active (true) or stopped (false) state. |
- * @param activityCloser Activity closing logic. |
- */ |
- @SuppressFBWarnings("DM_GC") |
- private void openCloseActivities(boolean closeFrontToBack, |
- final ActivityCloser<CustomTabActivity> activityCloser) throws Exception { |
- final int activityCount = 5; |
- |
- final List<WeakReference<Activity>> activityRefs = new ArrayList<>(); |
- |
- // Something in ApplicationTestUtils.closeActivity() call below retains last closed |
- // activity (in a local reference). I couldn't figure out what it is, so to avoid |
- // the problem we start one extra activity so that it's closed last. We don't care |
- // what that extra activity is, as long it's not CustomTabActivity. Note that we |
- // need to start extra activity before / after CCT activities according to |
- // closeFrontToBack flag. |
- Runnable extraActivityStarter = new Runnable() { |
- @Override |
- public void run() { |
- Intent intent = new Intent(); |
- intent.setClass(getInstrumentation().getTargetContext(), Preferences.class); |
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- activityRefs.add( |
- new WeakReference<>(getInstrumentation().startActivitySync(intent))); |
- } |
- }; |
- ActivityCloser<Activity> extraActivityCloser = new ActivityCloser<Activity>() { |
- @Override |
- public void close(Activity activity) { |
- activity.finish(); |
- } |
- }; |
- |
- // We're closing front to back, so extra activity should be started first. |
- if (closeFrontToBack) extraActivityStarter.run(); |
- |
- for (int i = 0; i != activityCount; ++i) { |
- // Don't use startActivityCompletely() because it retains the started |
- // activity in several member variables. |
- CustomTabActivity activity = |
- launchCustomTabActivityCompletely(createMinimalCustomTabIntent()); |
- waitForCustomTab(activity); |
- activityRefs.add(new WeakReference<Activity>(activity)); |
- } |
- |
- // We're closing back to front, so extra activity should be started last. |
- if (!closeFrontToBack) extraActivityStarter.run(); |
- |
- // Make sure that the first activity we need to close is at the beginning. |
- if (closeFrontToBack) Collections.reverse(activityRefs); |
- |
- for (WeakReference<Activity> ref : activityRefs) { |
- Activity activity = ref.get(); |
- // Activity can be null here if "Don't keep activities" developer option |
- // is turned on. |
- if (activity != null) { |
- if (activity instanceof CustomTabActivity) { |
- ApplicationTestUtils.closeActivity( |
- (CustomTabActivity) activity, activityCloser); |
- } else { |
- // Must be an extra activity started above. |
- ApplicationTestUtils.closeActivity(activity, extraActivityCloser); |
- } |
- } |
- } |
- |
- // GC the activities. Note that System.gc() is a no-op unless it is followed |
- // by or following a call to System.runFinalization(). |
- System.gc(); |
- System.runFinalization(); |
- System.gc(); |
- |
- for (int i = 0; i != activityCount; ++i) { |
- WeakReference<Activity> ref = activityRefs.get(i); |
- |
- // If this fails: something retains activities! It's probably a leak! |
- // In order to find the culprit: |
- // * Repro locally |
- // * Comment out the assert |
- // * Add Thread.sleep() for a minute or so |
- // * While it's sleeping, open DDMS and take an HPROF dump |
- // * Use ahat tool (go/ahat) to open the dump |
- // * Go to 'allocations' page |
- // * Find 'SeparateTaskCustomTabActivity' row |
- // * Click on the number, *not* on the class name |
- // * You will see a list of live SeparateTaskCustomTabActivity objects - |
- // click on entries and inspect their 'Sample Path from GC Root'. |
- assertNull("Activity is leaked", ref.get()); |
- } |
- } |
- |
/** Maybe prerenders a URL with a referrer, then launch it with another one. */ |
private void maybeSpeculateAndLaunchWithReferrers(String url, int speculationMode, |
String speculationReferrer, String launchReferrer) throws Exception { |