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 static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
9 import android.test.suitebuilder.annotation.MediumTest;
10 import android.test.suitebuilder.annotation.Smoke;
12 import org.chromium.base.test.util.Feature;
13 import org.chromium.base.test.util.UrlUtils;
14 import org.chromium.chrome.shell.ChromeShellTestBase;
15 import org.chromium.chrome.test.util.InfoBarTestAnimationListener;
16 import org.chromium.chrome.test.util.InfoBarUtil;
17 import org.chromium.chrome.test.util.TestHttpServerClient;
18 import org.chromium.content.browser.test.util.Criteria;
19 import org.chromium.content.browser.test.util.CriteriaHelper;
21 import java.util.List;
23 public class InfoBarTest extends ChromeShellTestBase {
24 private static final long MAX_TIMEOUT = scaleTimeout(2000);
25 private static final int CHECK_INTERVAL = 500;
26 private static final String GEOLOCATION_PAGE =
27 "chrome/test/data/geolocation/geolocation_on_load.html";
28 private static final String POPUP_PAGE =
29 "chrome/test/data/popup_blocker/popup-window-open.html";
30 public static final String HELLO_WORLD_URL = UrlUtils.encodeHtmlDataUri(
32 "<head><title>Hello, World!</title></head>" +
33 "<body>Hello, World!</body>" +
36 private InfoBarTestAnimationListener mListener;
39 protected void setUp() throws Exception {
42 // Register for animation notifications
43 InfoBarContainer container =
44 getActivity().getActiveTab().getInfoBarContainer();
45 mListener = new InfoBarTestAnimationListener();
46 container.setAnimationListener(mListener);
50 * Verify PopUp InfoBar. Only basic triggering verified due to lack of tabs
55 @Feature({"Browser", "Main"})
56 public void testInfoBarForPopUp() throws InterruptedException {
57 loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE));
58 assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
60 List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
61 assertEquals("Wrong infobar count", 1, infoBars.size());
62 assertTrue(InfoBarUtil.hasPrimaryButton(infoBars.get(0)));
63 assertFalse(InfoBarUtil.hasSecondaryButton(infoBars.get(0)));
64 InfoBarUtil.clickPrimaryButton(infoBars.get(0));
65 assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
66 assertEquals("Wrong infobar count", 0, infoBars.size());
68 // A second load should not show the infobar.
69 loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE));
70 assertFalse("InfoBar added when it should not", mListener.addInfoBarAnimationFinished());
74 * Verify Geolocation creates an InfoBar.
78 @Feature({"Browser", "Main"})
79 public void testInfoBarForGeolocation() throws InterruptedException {
80 loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE));
81 assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
83 // Make sure it has OK/Cancel buttons.
84 List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
85 assertEquals("Wrong infobar count", 1, infoBars.size());
86 assertTrue(InfoBarUtil.hasPrimaryButton(infoBars.get(0)));
87 assertTrue(InfoBarUtil.hasSecondaryButton(infoBars.get(0)));
89 loadUrlWithSanitization(HELLO_WORLD_URL);
90 assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
91 infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
92 assertTrue("Wrong infobar count", infoBars.isEmpty());
97 * Verify Geolocation creates an InfoBar and that it's destroyed when navigating back.
101 @Feature({"Browser"})
102 public void testInfoBarForGeolocationDisappearsOnBack() throws InterruptedException {
103 loadUrlWithSanitization(HELLO_WORLD_URL);
104 loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE));
105 assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished());
107 List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
108 assertEquals("Wrong infobar count", 1, infoBars.size());
110 // Navigate back and ensure the InfoBar has been removed.
111 getInstrumentation().runOnMainSync(
115 getActivity().getActiveTab().goBack();
118 CriteriaHelper.pollForCriteria(
121 public boolean isSatisfied() {
122 List<InfoBar> infoBars =
123 getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
124 return infoBars.isEmpty();
127 MAX_TIMEOUT, CHECK_INTERVAL);
128 assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());