Index: chrome/android/javatests/src/org/chromium/chrome/browser/browseractions/BrowserActionActivityTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/browseractions/BrowserActionActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/browseractions/BrowserActionActivityTest.java |
deleted file mode 100644 |
index 1889808e2e9c5227b880dc0e51eed16606f57ca5..0000000000000000000000000000000000000000 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browseractions/BrowserActionActivityTest.java |
+++ /dev/null |
@@ -1,353 +0,0 @@ |
-// Copyright 2017 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.browseractions; |
- |
-import android.app.Activity; |
-import android.app.Instrumentation; |
-import android.app.Instrumentation.ActivityMonitor; |
-import android.app.PendingIntent; |
-import android.app.ProgressDialog; |
-import android.content.Context; |
-import android.content.Intent; |
-import android.net.Uri; |
-import android.os.Bundle; |
-import android.support.customtabs.browseractions.BrowserActionsIntent; |
-import android.support.test.InstrumentationRegistry; |
-import android.support.test.filters.SmallTest; |
-import android.util.Pair; |
-import android.util.SparseArray; |
- |
-import org.junit.After; |
-import org.junit.Assert; |
-import org.junit.Before; |
-import org.junit.Rule; |
-import org.junit.Test; |
-import org.junit.runner.RunWith; |
- |
-import org.chromium.base.ThreadUtils; |
-import org.chromium.base.test.util.CallbackHelper; |
-import org.chromium.base.test.util.CommandLineFlags; |
-import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.ChromeSwitches; |
-import org.chromium.chrome.browser.browseractions.BrowserActionsContextMenuHelper.BrowserActionsTestDelegate; |
-import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem; |
-import org.chromium.chrome.browser.contextmenu.ContextMenuItem; |
-import org.chromium.chrome.browser.contextmenu.ShareContextMenuItem; |
-import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; |
-import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; |
-import org.chromium.chrome.browser.firstrun.FirstRunStatus; |
-import org.chromium.chrome.browser.util.IntentUtils; |
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
-import org.chromium.chrome.test.ChromeTabbedActivityTestRule; |
-import org.chromium.content.browser.test.util.CriteriaHelper; |
-import org.chromium.net.test.EmbeddedTestServer; |
- |
-import java.util.ArrayList; |
-import java.util.List; |
- |
-/** |
- * Instrumentation tests for context menu of a {@link BrowserActionActivity}. |
- */ |
-@RunWith(ChromeJUnit4ClassRunner.class) |
-@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) |
-public class BrowserActionActivityTest { |
- private static final String TEST_PAGE = "/chrome/test/data/android/google.html"; |
- private static final String TEST_PAGE_2 = "/chrome/test/data/android/test.html"; |
- private static final String TEST_PAGE_3 = "/chrome/test/data/android/simple.html"; |
- private static final String CUSTOM_ITEM_TITLE = "Custom item"; |
- |
- private final CallbackHelper mOnBrowserActionsMenuShownCallback = new CallbackHelper(); |
- private final CallbackHelper mOnFinishNativeInitializationCallback = new CallbackHelper(); |
- private final CallbackHelper mOnOpenTabInBackgroundStartCallback = new CallbackHelper(); |
- |
- private BrowserActionsContextMenuItemDelegate mMenuItemDelegate; |
- private SparseArray<PendingIntent> mCustomActions; |
- private List<Pair<Integer, List<ContextMenuItem>>> mItems; |
- private ProgressDialog mProgressDialog; |
- private TestDelegate mTestDelegate; |
- private EmbeddedTestServer mTestServer; |
- private String mTestPage; |
- private String mTestPage2; |
- private String mTestPage3; |
- private PendingIntent mCustomPendingItent; |
- @Rule |
- public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); |
- @Rule |
- public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule(); |
- |
- private class TestDelegate implements BrowserActionsTestDelegate { |
- @Override |
- public void onBrowserActionsMenuShown() { |
- mOnBrowserActionsMenuShownCallback.notifyCalled(); |
- } |
- |
- @Override |
- public void onFinishNativeInitialization() { |
- mOnFinishNativeInitializationCallback.notifyCalled(); |
- } |
- |
- @Override |
- public void onOpenTabInBackgroundStart() { |
- mOnOpenTabInBackgroundStartCallback.notifyCalled(); |
- } |
- |
- @Override |
- public void initialize(BrowserActionsContextMenuItemDelegate menuItemDelegate, |
- SparseArray<PendingIntent> customActions, |
- List<Pair<Integer, List<ContextMenuItem>>> items, |
- ProgressDialog progressDialog) { |
- mMenuItemDelegate = menuItemDelegate; |
- mCustomActions = customActions; |
- mItems = items; |
- mProgressDialog = progressDialog; |
- } |
- } |
- |
- @Before |
- public void setUp() throws Exception { |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- FirstRunStatus.setFirstRunFlowComplete(true); |
- } |
- }); |
- mTestDelegate = new TestDelegate(); |
- Context appContext = InstrumentationRegistry.getInstrumentation() |
- .getTargetContext() |
- .getApplicationContext(); |
- mTestServer = EmbeddedTestServer.createAndStartServer(appContext); |
- mTestPage = mTestServer.getURL(TEST_PAGE); |
- mTestPage2 = mTestServer.getURL(TEST_PAGE_2); |
- mTestPage3 = mTestServer.getURL(TEST_PAGE_3); |
- } |
- |
- @After |
- public void tearDown() throws Exception { |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- FirstRunStatus.setFirstRunFlowComplete(false); |
- } |
- }); |
- mTestServer.stopAndDestroyServer(); |
- } |
- |
- @Test |
- @SmallTest |
- public void testMenuShownCorrectly() throws Exception { |
- startBrowserActionActivity(mTestPage); |
- |
- // Menu should be shown before native finish loading. |
- mOnBrowserActionsMenuShownCallback.waitForCallback(0); |
- Assert.assertEquals(0, mOnFinishNativeInitializationCallback.getCallCount()); |
- Assert.assertEquals(0, mOnOpenTabInBackgroundStartCallback.getCallCount()); |
- |
- // Let the initialization completes. |
- mOnFinishNativeInitializationCallback.waitForCallback(0); |
- Assert.assertEquals(1, mOnBrowserActionsMenuShownCallback.getCallCount()); |
- Assert.assertEquals(1, mOnFinishNativeInitializationCallback.getCallCount()); |
- |
- // Check menu populated correctly. |
- List<Pair<Integer, List<ContextMenuItem>>> menus = mItems; |
- Assert.assertEquals(1, menus.size()); |
- List<ContextMenuItem> items = menus.get(0).second; |
- Assert.assertEquals(6, items.size()); |
- for (int i = 0; i < 4; i++) { |
- Assert.assertTrue(items.get(i) instanceof ChromeContextMenuItem); |
- } |
- Assert.assertTrue(items.get(4) instanceof ShareContextMenuItem); |
- Assert.assertTrue(items.get(5) instanceof BrowserActionsCustomContextMenuItem); |
- Assert.assertEquals(mCustomPendingItent, |
- mCustomActions.get( |
- BrowserActionsContextMenuHelper.CUSTOM_BROWSER_ACTIONS_ID_GROUP.get(0))); |
- } |
- |
- @Test |
- @SmallTest |
- public void testOpenTabInBackgroundAfterInitialization() throws Exception { |
- final BrowserActionActivity activity = startBrowserActionActivity(mTestPage); |
- mOnBrowserActionsMenuShownCallback.waitForCallback(0); |
- // Open a tab in background before initialization finishes. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- activity.getHelperForTesting().onItemSelected( |
- R.id.browser_actions_open_in_background); |
- } |
- }); |
- |
- // A ProgressDialog should be displayed and tab opening should be pending until |
- // initialization finishes. |
- Assert.assertTrue(mProgressDialog.isShowing()); |
- Assert.assertEquals(0, mOnOpenTabInBackgroundStartCallback.getCallCount()); |
- mOnFinishNativeInitializationCallback.waitForCallback(0); |
- mOnOpenTabInBackgroundStartCallback.waitForCallback(0); |
- Assert.assertFalse(mProgressDialog.isShowing()); |
- Assert.assertEquals(1, mOnOpenTabInBackgroundStartCallback.getCallCount()); |
- } |
- |
- @Test |
- @SmallTest |
- public void testOpenSingleTabInBackgroundWhenChromeAvailable() throws Exception { |
- // Start ChromeTabbedActivity first. |
- mActivityTestRule.startMainActivityWithURL(mTestPage); |
- |
- // Load Browser Actions menu completely. |
- final BrowserActionActivity activity = startBrowserActionActivity(mTestPage2); |
- mOnBrowserActionsMenuShownCallback.waitForCallback(0); |
- mOnFinishNativeInitializationCallback.waitForCallback(0); |
- Assert.assertEquals(1, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
- // No notification should be shown. |
- Assert.assertFalse(mMenuItemDelegate.hasBrowserActionsNotification()); |
- |
- // Open a tab in the background. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- activity.getHelperForTesting().onItemSelected( |
- R.id.browser_actions_open_in_background); |
- } |
- }); |
- |
- // Notification for single tab should be shown. |
- Assert.assertTrue(mMenuItemDelegate.hasBrowserActionsNotification()); |
- // Tabs should always be added at the end of the model. |
- Assert.assertEquals(2, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
- Assert.assertEquals(mTestPage, |
- mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getUrl()); |
- Assert.assertEquals(mTestPage2, |
- mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(1).getUrl()); |
- int prevTabId = mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getId(); |
- int newTabId = mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(1).getId(); |
- // TODO(ltian): overwrite delegate prevent creating notifcation for test. |
- Intent notificationIntent = mMenuItemDelegate.getNotificationIntent(); |
- notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- |
- // Force ChromeTabbedActivity dismissed to make sure it calls onStop then calls onStart next |
- // time it is started by an Intent. |
- Intent customTabIntent = CustomTabsTestUtils.createMinimalCustomTabIntent( |
- InstrumentationRegistry.getInstrumentation().getTargetContext(), mTestPage); |
- mCustomTabActivityTestRule.startCustomTabActivityWithIntent(customTabIntent); |
- |
- // The Intent of the Browser Actions notification should not toggle overview mode and should |
- mActivityTestRule.startActivityCompletely(notificationIntent); |
- Assert.assertFalse(mActivityTestRule.getActivity().getLayoutManager().overviewVisible()); |
- Assert.assertNotEquals(prevTabId, mActivityTestRule.getActivity().getActivityTab().getId()); |
- Assert.assertEquals(newTabId, mActivityTestRule.getActivity().getActivityTab().getId()); |
- } |
- |
- @Test |
- @SmallTest |
- public void testOpenMulitpleTabInBackgroundWhenChromeAvailable() throws Exception { |
- // Start ChromeTabbedActivity first. |
- mActivityTestRule.startMainActivityWithURL(mTestPage); |
- |
- // Open two tabs in the background. |
- final BrowserActionActivity activity1 = startBrowserActionActivity(mTestPage2); |
- mOnBrowserActionsMenuShownCallback.waitForCallback(0); |
- mOnFinishNativeInitializationCallback.waitForCallback(0); |
- Assert.assertEquals(1, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- activity1.getHelperForTesting().onItemSelected( |
- R.id.browser_actions_open_in_background); |
- } |
- }); |
- |
- final BrowserActionActivity activity2 = startBrowserActionActivity(mTestPage3, 1); |
- mOnBrowserActionsMenuShownCallback.waitForCallback(1); |
- mOnFinishNativeInitializationCallback.waitForCallback(1); |
- Assert.assertEquals(2, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
- |
- // Notification for multiple tabs should be shown. |
- Assert.assertTrue(mMenuItemDelegate.hasBrowserActionsNotification()); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- activity2.getHelperForTesting().onItemSelected( |
- R.id.browser_actions_open_in_background); |
- } |
- }); |
- |
- // Tabs should always be added at the end of the model. |
- Assert.assertEquals(3, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
- Assert.assertEquals(mTestPage, |
- mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(0).getUrl()); |
- Assert.assertEquals(mTestPage2, |
- mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(1).getUrl()); |
- Assert.assertEquals(mTestPage3, |
- mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(2).getUrl()); |
- Intent notificationIntent = mMenuItemDelegate.getNotificationIntent(); |
- notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- |
- // Force ChromeTabbedActivity dismissed to make sure it calls onStop then calls onStart next |
- // time it is started by an Intent. |
- Intent customTabIntent = CustomTabsTestUtils.createMinimalCustomTabIntent( |
- InstrumentationRegistry.getInstrumentation().getTargetContext(), mTestPage); |
- mCustomTabActivityTestRule.startCustomTabActivityWithIntent(customTabIntent); |
- |
- // The Intent of the Browser Actions notification should toggle overview mode. |
- mActivityTestRule.startActivityCompletely(notificationIntent); |
- Assert.assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible()); |
- } |
- |
- private BrowserActionActivity startBrowserActionActivity(String url) throws Exception { |
- return startBrowserActionActivity(url, 0); |
- } |
- |
- private BrowserActionActivity startBrowserActionActivity(String url, int expectedCallCount) |
- throws Exception { |
- final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); |
- ActivityMonitor browserActionMonitor = |
- new ActivityMonitor(BrowserActionActivity.class.getName(), null, false); |
- instrumentation.addMonitor(browserActionMonitor); |
- |
- // The BrowserActionActivity shouldn't have started yet. |
- Assert.assertEquals(expectedCallCount, mOnBrowserActionsMenuShownCallback.getCallCount()); |
- Assert.assertEquals( |
- expectedCallCount, mOnFinishNativeInitializationCallback.getCallCount()); |
- Assert.assertEquals(expectedCallCount, mOnOpenTabInBackgroundStartCallback.getCallCount()); |
- |
- // Fire an Intent to start the BrowserActionActivity. |
- sendBrowserActionIntent(instrumentation, url); |
- |
- Activity activity = instrumentation.waitForMonitorWithTimeout( |
- browserActionMonitor, CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL); |
- Assert.assertNotNull("Activity didn't start", activity); |
- Assert.assertTrue("Wrong activity started", activity instanceof BrowserActionActivity); |
- instrumentation.removeMonitor(browserActionMonitor); |
- ((BrowserActionActivity) activity) |
- .getHelperForTesting() |
- .setTestDelegateForTesting(mTestDelegate); |
- return (BrowserActionActivity) activity; |
- } |
- |
- private void sendBrowserActionIntent(Instrumentation instrumentation, String url) { |
- Context context = instrumentation.getTargetContext(); |
- Intent intent = new Intent(BrowserActionsIntent.ACTION_BROWSER_ACTIONS_OPEN); |
- intent.setData(Uri.parse(url)); |
- intent.putExtra(BrowserActionsIntent.EXTRA_TYPE, BrowserActionsIntent.URL_TYPE_NONE); |
- PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, new Intent(), 0); |
- intent.putExtra(BrowserActionsIntent.EXTRA_APP_ID, pendingIntent); |
- |
- // Add a custom item. |
- Intent customIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); |
- mCustomPendingItent = PendingIntent.getActivity(context, 0, customIntent, 0); |
- Bundle item = new Bundle(); |
- item.putString(BrowserActionsIntent.KEY_TITLE, CUSTOM_ITEM_TITLE); |
- item.putParcelable(BrowserActionsIntent.KEY_ACTION, mCustomPendingItent); |
- ArrayList<Bundle> items = new ArrayList<>(); |
- items.add(item); |
- intent.putParcelableArrayListExtra(BrowserActionsIntent.EXTRA_MENU_ITEMS, items); |
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- |
- intent.setClass(context, BrowserActionActivity.class); |
- // Android Test Rule auto adds {@link Intent.FLAG_ACTIVITY_NEW_TASK} which violates {@link |
- // BrowserActionsIntent} policy. Add an extra to skip Intent.FLAG_ACTIVITY_NEW_TASK check |
- // for test. |
- IntentUtils.safeStartActivity(context, intent); |
- } |
-} |