| Index: chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaUpdateInfoBarTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaUpdateInfoBarTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaUpdateInfoBarTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..95e33850ffd5af17ae3bca921c107c577d1a3625
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaUpdateInfoBarTest.java
|
| @@ -0,0 +1,289 @@
|
| +// Copyright 2015 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.omaha;
|
| +
|
| +import android.content.Context;
|
| +import android.test.suitebuilder.annotation.MediumTest;
|
| +
|
| +import org.chromium.base.test.util.Feature;
|
| +import org.chromium.base.test.util.UrlUtils;
|
| +import org.chromium.chrome.browser.ChromeActivity;
|
| +import org.chromium.chrome.browser.UrlConstants;
|
| +import org.chromium.chrome.browser.infobar.InfoBar;
|
| +import org.chromium.chrome.test.ChromeActivityTestCaseBase;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +
|
| +import java.util.List;
|
| +
|
| +/**
|
| + * Checks to see that Main is properly displaying InfoBars when an update is detected.
|
| + */
|
| +public class OmahaUpdateInfoBarTest extends ChromeActivityTestCaseBase<ChromeActivity> {
|
| + private static final String HTML_FILENAME_1 =
|
| + "chrome/test/data/android/omahaupdateinfobar/omaha_update_infobar_test_page_1.html";
|
| + private static final String HTML_FILENAME_2 =
|
| + "chrome/test/data/android/omahaupdateinfobar/omaha_update_infobar_test_page_2.html";
|
| +
|
| + private static final long MS_TIMEOUT = 2000;
|
| + private static final long MS_INTERVAL = 500;
|
| +
|
| + public OmahaUpdateInfoBarTest() {
|
| + super(ChromeActivity.class);
|
| + }
|
| +
|
| + /** Reports versions that we want back to OmahaClient. */
|
| + private static class MockVersionNumberGetter extends VersionNumberGetter {
|
| + // Both of these strings must be of the format "#.#.#.#".
|
| + private final String mCurrentVersion;
|
| + private final String mLatestVersion;
|
| +
|
| + private boolean mAskedForCurrentVersion;
|
| + private boolean mAskedForLatestVersion;
|
| +
|
| + public MockVersionNumberGetter(String currentVersion, String latestVersion) {
|
| + mCurrentVersion = currentVersion;
|
| + mLatestVersion = latestVersion;
|
| + }
|
| +
|
| + @Override
|
| + public String getCurrentlyUsedVersion(Context applicationContext) {
|
| + assertNotNull("Never set the current version", mCurrentVersion);
|
| + mAskedForCurrentVersion = true;
|
| + return mCurrentVersion;
|
| + }
|
| +
|
| + @Override
|
| + public String getLatestKnownVersion(
|
| + Context applicationContext, String prefPackage, String prefLatestVersion) {
|
| + assertNotNull("Never set the latest version", mLatestVersion);
|
| + mAskedForLatestVersion = true;
|
| + return mLatestVersion;
|
| + }
|
| +
|
| + public boolean askedForCurrentVersion() {
|
| + return mAskedForCurrentVersion;
|
| + }
|
| +
|
| + public boolean askedForLatestVersion() {
|
| + return mAskedForLatestVersion;
|
| + }
|
| + }
|
| +
|
| + /** Reports a dummy market URL back to OmahaClient. */
|
| + private static class MockMarketURLGetter extends MarketURLGetter {
|
| + private final String mURL;
|
| +
|
| + MockMarketURLGetter(String url) {
|
| + mURL = url;
|
| + }
|
| +
|
| + @Override
|
| + public String getMarketURL(
|
| + Context applicationContext, String prefPackage, String prefMarketUrl) {
|
| + return mURL;
|
| + }
|
| + }
|
| +
|
| + private MockVersionNumberGetter mMockVersionNumberGetter;
|
| + private MockMarketURLGetter mMockMarketURLGetter;
|
| +
|
| + @Override
|
| + public void setUp() throws Exception {
|
| + super.setUp();
|
| +
|
| + // This test explicitly tests for the infobar, so turn it on.
|
| + OmahaClient.setEnableUpdateDetection(true);
|
| + }
|
| +
|
| + @Override
|
| + public void startMainActivity() throws InterruptedException {
|
| + // Don't start Main until we've had a chance to override everything.
|
| + }
|
| +
|
| + /**
|
| + * Prepares Main before actually launching it. This is required since we don't have all of the
|
| + * info we need in setUp().
|
| + * @param currentVersion Version to report as the current version of Chrome
|
| + * @param latestVersion Version to report is available by Omaha
|
| + * @param url URL to show. null = NTP.
|
| + */
|
| + private void prepareAndStartMainActivity(String currentVersion, String latestVersion,
|
| + String url) throws Exception {
|
| + if (url == null) url = UrlConstants.NTP_URL;
|
| +
|
| + // Report fake versions back to Main when it asks.
|
| + mMockVersionNumberGetter = new MockVersionNumberGetter(currentVersion, latestVersion);
|
| + OmahaClient.setVersionNumberGetterForTests(mMockVersionNumberGetter);
|
| +
|
| + // Report a dummy URL to Omaha.
|
| + mMockMarketURLGetter = new MockMarketURLGetter(
|
| + "https://market.android.com/details?id=com.google.android.apps.chrome");
|
| + OmahaClient.setMarketURLGetterForTests(mMockMarketURLGetter);
|
| +
|
| + // Start up main.
|
| + startMainActivityWithURL(url);
|
| +
|
| + // Check to make sure that the version numbers get queried.
|
| + assertTrue("Main didn't ask Omaha for version numbers.", versionNumbersQueried());
|
| + }
|
| +
|
| + private boolean versionNumbersQueried() throws Exception {
|
| + return CriteriaHelper.pollForCriteria(
|
| + new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return mMockVersionNumberGetter.askedForCurrentVersion()
|
| + && mMockVersionNumberGetter.askedForLatestVersion();
|
| + }
|
| + },
|
| + MS_TIMEOUT, MS_INTERVAL);
|
| + }
|
| +
|
| + /**
|
| + * Checks to see if one of the InfoBars is a NavigateToURLInfoBar pointing to the market.
|
| + */
|
| + private boolean correctInfoBarExists() {
|
| + // Check the current InfoBars for a NavigateToURLInfoBar.
|
| + List<InfoBar> infobars = getInfoBars();
|
| + if (infobars == null) {
|
| + return false;
|
| + }
|
| +
|
| + // Check if one of the InfoBars is pointing to the market URL.
|
| + Context context = getInstrumentation().getTargetContext();
|
| + String expectedURL = OmahaClient.getMarketURL(context);
|
| + for (int i = 0; i < infobars.size(); ++i) {
|
| + if (infobars.get(i) instanceof OmahaUpdateInfobar) {
|
| + OmahaUpdateInfobar bar = (OmahaUpdateInfobar) infobars.get(i);
|
| + if (expectedURL.equals(bar.getUrl())) {
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + /**
|
| + * Waits until the NavigateToURLInfoBar appears for the current tab.
|
| + */
|
| + private boolean correctInfoBarAdded() throws Exception {
|
| + return CriteriaHelper.pollForCriteria(
|
| + new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return correctInfoBarExists();
|
| +
|
| + }
|
| + },
|
| + MS_TIMEOUT, MS_INTERVAL);
|
| + }
|
| +
|
| + /**
|
| + * Waits until the NavigateToURLInfoBar goes away.
|
| + */
|
| + private boolean correctInfoBarRemoved() throws Exception {
|
| + return CriteriaHelper.pollForCriteria(
|
| + new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return !correctInfoBarExists();
|
| +
|
| + }
|
| + },
|
| + MS_TIMEOUT, MS_INTERVAL);
|
| + }
|
| +
|
| + /**
|
| + * Checks to see that the InfoBar is created when an update is detected.
|
| + */
|
| + private void checkInfobarAppearsAndIsDismissed(String currentVersion, String latestVersion,
|
| + String url) throws Exception {
|
| + prepareAndStartMainActivity(currentVersion, latestVersion, url);
|
| +
|
| + if (url == null) {
|
| + // The InfoBar shouldn't be created yet because we're on the NTP.
|
| + assertFalse("InfoBar shown on NTP.", correctInfoBarAdded());
|
| +
|
| + // Navigate somewhere else and then check for the InfoBar.
|
| + loadUrl(UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_1));
|
| + assertTrue("InfoBar failed to show after navigating from NTP.",
|
| + correctInfoBarAdded());
|
| + } else {
|
| + // The InfoBar be shown ASAP since we're not on the NTP.
|
| + assertTrue("InfoBar failed to show.", correctInfoBarAdded());
|
| + }
|
| +
|
| + // Make sure the InfoBar doesn't disappear immediately.
|
| + assertFalse("InfoBar was removed too quickly.", correctInfoBarRemoved());
|
| +
|
| + // Make sure the InfoBar goes away once we navigate somewhere else on the same tab.
|
| + loadUrl(UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_2));
|
| + assertTrue("InfoBar is still showing", correctInfoBarRemoved());
|
| + }
|
| +
|
| + /**
|
| + * Makes sure that no InfoBar is shown at all, after the initial page load or after
|
| + * moving away.
|
| + */
|
| + private void checkInfobarDoesNotAppear(String currentVersion, String latestVersion, String url)
|
| + throws Exception {
|
| + prepareAndStartMainActivity(currentVersion, latestVersion, url);
|
| + assertFalse("Infobar is showing.", correctInfoBarAdded());
|
| + loadUrl(UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_2));
|
| + assertFalse("Infobar is now showing", correctInfoBarAdded());
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testCurrentVersionIsOlderNTP() throws Exception {
|
| + checkInfobarAppearsAndIsDismissed("0.0.0.0", "1.2.3.4", null);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testCurrentVersionIsOlderNotNTP() throws Exception {
|
| + checkInfobarAppearsAndIsDismissed("0.0.0.0", "1.2.3.4",
|
| + UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_1));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testCurrentVersionIsSameNTP() throws Exception {
|
| + checkInfobarDoesNotAppear("1.2.3.4", "1.2.3.4", null);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testCurrentVersionIsSameNotNTP() throws Exception {
|
| + checkInfobarDoesNotAppear("1.2.3.4", "1.2.3.4",
|
| + UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_1));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testCurrentVersionIsNewerNTP() throws Exception {
|
| + checkInfobarDoesNotAppear("27.0.1453.42", "26.0.1410.49", null);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testCurrentVersionIsNewerNotNTP() throws Exception {
|
| + checkInfobarDoesNotAppear("27.0.1453.42", "26.0.1410.49",
|
| + UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_1));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testNoVersionKnownNTP() throws Exception {
|
| + checkInfobarDoesNotAppear("1.2.3.4", "0", null);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omaha"})
|
| + public void testNoVersionKnownNotNTP() throws Exception {
|
| + checkInfobarDoesNotAppear("1.2.3.4", "", UrlUtils.getIsolatedTestFileUrl(HTML_FILENAME_1));
|
| + }
|
| +}
|
|
|