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 |
index 1889808e2e9c5227b880dc0e51eed16606f57ca5..3e20cd06406c32b40b32196e8276aa92180c7bb7 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/browseractions/BrowserActionActivityTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/browseractions/BrowserActionActivityTest.java |
@@ -13,6 +13,7 @@ import android.content.Context; |
import android.content.Intent; |
import android.net.Uri; |
import android.os.Bundle; |
+import android.os.StrictMode; |
import android.support.customtabs.browseractions.BrowserActionsIntent; |
import android.support.test.InstrumentationRegistry; |
import android.support.test.filters.SmallTest; |
@@ -41,11 +42,13 @@ 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.Criteria; |
import org.chromium.content.browser.test.util.CriteriaHelper; |
import org.chromium.net.test.EmbeddedTestServer; |
import java.util.ArrayList; |
import java.util.List; |
+import java.util.concurrent.Callable; |
/** |
* Instrumentation tests for context menu of a {@link BrowserActionActivity}. |
@@ -68,6 +71,7 @@ public class BrowserActionActivityTest { |
private ProgressDialog mProgressDialog; |
private TestDelegate mTestDelegate; |
private EmbeddedTestServer mTestServer; |
+ private StrictMode.ThreadPolicy mOldPolicy; |
private String mTestPage; |
private String mTestPage2; |
private String mTestPage3; |
@@ -121,6 +125,12 @@ public class BrowserActionActivityTest { |
mTestPage = mTestServer.getURL(TEST_PAGE); |
mTestPage2 = mTestServer.getURL(TEST_PAGE_2); |
mTestPage3 = mTestServer.getURL(TEST_PAGE_3); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ mOldPolicy = StrictMode.allowThreadDiskWrites(); |
+ } |
+ }); |
} |
@After |
@@ -132,6 +142,12 @@ public class BrowserActionActivityTest { |
} |
}); |
mTestServer.stopAndDestroyServer(); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ StrictMode.setThreadPolicy(mOldPolicy); |
+ } |
+ }); |
} |
@Test |
@@ -200,7 +216,7 @@ public class BrowserActionActivityTest { |
mOnFinishNativeInitializationCallback.waitForCallback(0); |
Assert.assertEquals(1, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
// No notification should be shown. |
- Assert.assertFalse(mMenuItemDelegate.hasBrowserActionsNotification()); |
+ Assert.assertFalse(BrowserActionsService.hasBrowserActionsNotification()); |
// Open a tab in the background. |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@@ -212,7 +228,12 @@ public class BrowserActionActivityTest { |
}); |
// Notification for single tab should be shown. |
- Assert.assertTrue(mMenuItemDelegate.hasBrowserActionsNotification()); |
+ CriteriaHelper.pollUiThread(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return BrowserActionsService.hasBrowserActionsNotification(); |
+ } |
+ }); |
// Tabs should always be added at the end of the model. |
Assert.assertEquals(2, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
Assert.assertEquals(mTestPage, |
@@ -222,7 +243,7 @@ public class BrowserActionActivityTest { |
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(); |
+ Intent notificationIntent = BrowserActionsService.getNotificationIntent(); |
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
// Force ChromeTabbedActivity dismissed to make sure it calls onStop then calls onStart next |
@@ -240,7 +261,8 @@ public class BrowserActionActivityTest { |
@Test |
@SmallTest |
- public void testOpenMulitpleTabInBackgroundWhenChromeAvailable() throws Exception { |
+ public void testOpenMulitpleTabsInBackgroundWhenChromeAvailable() throws Exception { |
+ Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); |
// Start ChromeTabbedActivity first. |
mActivityTestRule.startMainActivityWithURL(mTestPage); |
@@ -263,7 +285,12 @@ public class BrowserActionActivityTest { |
Assert.assertEquals(2, mActivityTestRule.getActivity().getCurrentTabModel().getCount()); |
// Notification for multiple tabs should be shown. |
- Assert.assertTrue(mMenuItemDelegate.hasBrowserActionsNotification()); |
+ CriteriaHelper.pollUiThread(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return BrowserActionsService.hasBrowserActionsNotification(); |
+ } |
+ }); |
ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
@Override |
public void run() { |
@@ -280,7 +307,7 @@ public class BrowserActionActivityTest { |
mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(1).getUrl()); |
Assert.assertEquals(mTestPage3, |
mActivityTestRule.getActivity().getCurrentTabModel().getTabAt(2).getUrl()); |
- Intent notificationIntent = mMenuItemDelegate.getNotificationIntent(); |
+ Intent notificationIntent = BrowserActionsService.getNotificationIntent(); |
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
// Force ChromeTabbedActivity dismissed to make sure it calls onStop then calls onStart next |
@@ -294,6 +321,106 @@ public class BrowserActionActivityTest { |
Assert.assertTrue(mActivityTestRule.getActivity().getLayoutManager().overviewVisible()); |
} |
+ @Test |
+ @SmallTest |
+ public void testOpenSingleTabInBackgroundWhenChromeNotAvailable() throws Exception { |
+ // Load Browser Actions menu completely. |
+ final BrowserActionActivity activity = startBrowserActionActivity(mTestPage); |
+ mOnBrowserActionsMenuShownCallback.waitForCallback(0); |
+ mOnFinishNativeInitializationCallback.waitForCallback(0); |
+ // No notification should be shown. |
+ Assert.assertFalse(BrowserActionsService.hasBrowserActionsNotification()); |
+ |
+ final BrowserActionsTabCreatorManager manager = mMenuItemDelegate.getTabCreatorManager(); |
+ final BrowserActionsTabModelSelector selector = |
+ ThreadUtils.runOnUiThreadBlocking(new Callable<BrowserActionsTabModelSelector>() { |
+ @Override |
+ public BrowserActionsTabModelSelector call() { |
+ return BrowserActionsTabModelSelector.getInstance(activity, manager); |
+ } |
+ }); |
+ Assert.assertFalse(selector.isActiveState()); |
+ // 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. |
+ CriteriaHelper.pollUiThread(new Criteria() { |
+ @Override |
+ public boolean isSatisfied() { |
+ return BrowserActionsService.hasBrowserActionsNotification(); |
+ } |
+ }); |
+ // New tab should be added to the BrowserActionTabModelSelector. |
+ Assert.assertEquals(1, selector.getCurrentModel().getCount()); |
+ CriteriaHelper.pollUiThread(Criteria.equals(mTestPage, new Callable<String>() { |
+ @Override |
+ public String call() { |
+ return selector.getCurrentModel().getTabAt(0).getUrl(); |
+ } |
+ })); |
+ } |
+ |
+ @Test |
+ @SmallTest |
+ public void testOpenMultipleTabsInBackgroundWhenChromeNotAvailable() throws Exception { |
+ // Load Browser Actions menu completely and open a tab in the background. |
+ final BrowserActionActivity activity1 = startBrowserActionActivity(mTestPage); |
+ mOnBrowserActionsMenuShownCallback.waitForCallback(0); |
+ mOnFinishNativeInitializationCallback.waitForCallback(0); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ activity1.getHelperForTesting().onItemSelected( |
+ R.id.browser_actions_open_in_background); |
+ } |
+ }); |
+ |
+ // Load Browser Actions menu again and open another tab in the background. |
+ final BrowserActionActivity activity2 = startBrowserActionActivity(mTestPage2, 1); |
+ mOnBrowserActionsMenuShownCallback.waitForCallback(1); |
+ mOnFinishNativeInitializationCallback.waitForCallback(1); |
+ // Notification should already be shown. |
+ Assert.assertTrue(BrowserActionsService.hasBrowserActionsNotification()); |
+ final BrowserActionsTabCreatorManager manager = mMenuItemDelegate.getTabCreatorManager(); |
+ final BrowserActionsTabModelSelector selector = |
+ ThreadUtils.runOnUiThreadBlocking(new Callable<BrowserActionsTabModelSelector>() { |
+ @Override |
+ public BrowserActionsTabModelSelector call() { |
+ return BrowserActionsTabModelSelector.getInstance(activity2, manager); |
+ } |
+ }); |
+ // BrowserActionsTabModelSelector should already been initialized and have one tab. |
+ Assert.assertTrue(selector.isActiveState()); |
+ Assert.assertEquals(1, selector.getCurrentModel().getCount()); |
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ activity2.getHelperForTesting().onItemSelected( |
+ R.id.browser_actions_open_in_background); |
+ } |
+ }); |
+ // BrowserActionTabModelSelector should have two tabs and tabs should be added sequentially. |
+ Assert.assertEquals(2, selector.getCurrentModel().getCount()); |
+ CriteriaHelper.pollUiThread(Criteria.equals(mTestPage, new Callable<String>() { |
+ @Override |
+ public String call() { |
+ return selector.getCurrentModel().getTabAt(0).getUrl(); |
+ } |
+ })); |
+ CriteriaHelper.pollUiThread(Criteria.equals(mTestPage2, new Callable<String>() { |
+ @Override |
+ public String call() { |
+ return selector.getCurrentModel().getTabAt(1).getUrl(); |
+ } |
+ })); |
+ } |
+ |
private BrowserActionActivity startBrowserActionActivity(String url) throws Exception { |
return startBrowserActionActivity(url, 0); |
} |