1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.chrome.browser.infobar;
7 import android.test.suitebuilder.annotation.MediumTest;
8 import android.test.suitebuilder.annotation.Smoke;
10 import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
12 import org.chromium.base.test.util.Feature;
13 import org.chromium.base.test.util.UrlUtils;
14 import org.chromium.chrome.test.util.InfoBarTestAnimationListener;
15 import org.chromium.chrome.test.util.InfoBarUtil;
16 import org.chromium.chrome.test.util.TestHttpServerClient;
17 import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
18 import org.chromium.content.browser.test.util.Criteria;
19 import org.chromium.content.browser.test.util.CriteriaHelper;
22 import java.util.List;
24 public class InfoBarTest extends ChromiumTestShellTestBase {
25 private static final long MAX_TIMEOUT = scaleTimeout(2000);
26 private static final int CHECK_INTERVAL = 500;
27 private static final String GEOLOCATION_PAGE =
28 "chrome/test/data/geolocation/geolocation_on_load.html";
29 private static final String POPUP_PAGE =
30 "chrome/test/data/popup_blocker/popup-window-open.html";
31 public static final String HELLO_WORLD_URL = UrlUtils.encodeHtmlDataUri(
33 "<head><title>Hello, World!</title></head>" +
34 "<body>Hello, World!</body>" +
37 private InfoBarTestAnimationListener mListener;
40 protected void setUp() throws Exception {
43 // Register for animation notifications
44 InfoBarContainer container =
45 getActivity().getActiveTab().getInfoBarContainer();
46 mListener = new InfoBarTestAnimationListener();
47 container.setAnimationListener(mListener);
51 * Verify PopUp InfoBar. Only basic triggering verified due to lack of tabs
52 * in ChromiumTestShell
56 @Feature({"Browser", "Main"})
57 public void testInfoBarForPopUp() throws InterruptedException {
58 loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE));
59 assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
61 List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
62 assertEquals("Wrong infobar count", 1, infoBars.size());
63 assertTrue(InfoBarUtil.hasPrimaryButton(this, infoBars.get(0)));
64 assertFalse(InfoBarUtil.hasSecondaryButton(this, infoBars.get(0)));
65 InfoBarUtil.clickPrimaryButton(this, infoBars.get(0));
66 assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
67 assertEquals("Wrong infobar count", 0, infoBars.size());
69 // A second load should not show the infobar.
70 loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE));
71 assertFalse("InfoBar added when it should not", mListener.addInfoBarAnimationFinished());
75 * Verify Geolocation creates an InfoBar.
79 @Feature({"Browser", "Main"})
80 public void testInfoBarForGeolocation() throws InterruptedException {
81 loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE));
82 assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
84 // Make sure it has OK/Cancel buttons.
85 List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
86 assertEquals("Wrong infobar count", 1, infoBars.size());
87 assertTrue(InfoBarUtil.hasPrimaryButton(this, infoBars.get(0)));
88 assertTrue(InfoBarUtil.hasSecondaryButton(this, infoBars.get(0)));
90 loadUrlWithSanitization(HELLO_WORLD_URL);
91 assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
92 infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
93 assertTrue("Wrong infobar count", infoBars.isEmpty());
98 * Verify Geolocation creates an InfoBar and that it's destroyed when navigating back.
102 @Feature({"Browser"})
103 public void testInfoBarForGeolocationDisappearsOnBack() throws InterruptedException {
104 loadUrlWithSanitization(HELLO_WORLD_URL);
105 loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE));
106 assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
108 List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
109 assertEquals("Wrong infobar count", 1, infoBars.size());
111 // Navigate back and ensure the InfoBar has been removed.
112 getInstrumentation().runOnMainSync(
116 getActivity().getActiveTab().goBack();
119 CriteriaHelper.pollForCriteria(
122 public boolean isSatisfied() {
123 List<InfoBar> infoBars =
124 getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
125 return infoBars.isEmpty();
128 MAX_TIMEOUT, CHECK_INTERVAL);
129 assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());