| // Copyright 2013 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.infobar; |
| |
| import android.test.suitebuilder.annotation.MediumTest; |
| import android.test.suitebuilder.annotation.Smoke; |
| |
| import org.chromium.base.test.util.Feature; |
| import org.chromium.base.test.util.UrlUtils; |
| import org.chromium.chrome.browser.infobar.InfoBar; |
| import org.chromium.chrome.browser.infobar.InfoBarContainer; |
| import org.chromium.chrome.browser.infobar.InfoBarListeners; |
| import org.chromium.content.browser.test.util.Criteria; |
| import org.chromium.content.browser.test.util.CriteriaHelper; |
| import org.chromium.chrome.test.util.InfoBarTestAnimationListener; |
| import org.chromium.chrome.test.util.InfoBarUtil; |
| import org.chromium.chrome.test.util.TestHttpServerClient; |
| import org.chromium.chrome.testshell.ChromiumTestShellTestBase; |
| |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.concurrent.TimeoutException; |
| |
| public class InfoBarTest extends ChromiumTestShellTestBase { |
| private final static int MAX_TIMEOUT = 2000; |
| private final static int CHECK_INTERVAL = 500; |
| private final static String GEOLOCATION_PAGE = |
| "chrome/test/data/geolocation/geolocation_on_load.html"; |
| private final static String POPUP_PAGE = |
| "chrome/test/data/popup_blocker/popup-window-open.html"; |
| public final static String HELLO_WORLD_URL = UrlUtils.encodeHtmlDataUri( |
| "<html>" + |
| "<head><title>Hello, World!</title></head>" + |
| "<body>Hello, World!</body>" + |
| "</html>"); |
| |
| private InfoBarTestAnimationListener mListener; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| |
| // Register for animation notifications |
| InfoBarContainer container = |
| getActivity().getActiveTab().getInfoBarContainer(); |
| mListener = new InfoBarTestAnimationListener(); |
| container.setAnimationListener(mListener); |
| } |
| |
| /** |
| * Verify PopUp InfoBar. Only basic triggering verified due to lack of tabs |
| * in ChromiumTestShell |
| */ |
| @Smoke |
| @MediumTest |
| @Feature({"Browser", "Main"}) |
| public void testInfoBarForPopUp() throws InterruptedException { |
| loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE)); |
| assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished()); |
| |
| List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars(); |
| assertEquals("Wrong infobar count", 1, infoBars.size()); |
| assertTrue(InfoBarUtil.hasPrimaryButton(this, infoBars.get(0))); |
| assertFalse(InfoBarUtil.hasSecondaryButton(this, infoBars.get(0))); |
| InfoBarUtil.clickPrimaryButton(this, infoBars.get(0)); |
| assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished()); |
| assertEquals("Wrong infobar count", 0, infoBars.size()); |
| |
| // A second load should not show the infobar. |
| loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE)); |
| assertFalse("InfoBar added when it should not", mListener.addInfoBarAnimationFinished()); |
| } |
| |
| /** |
| * Verify Geolocation creates an InfoBar. |
| */ |
| @Smoke |
| @MediumTest |
| @Feature({"Browser", "Main"}) |
| public void testInfoBarForGeolocation() throws InterruptedException { |
| loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE)); |
| assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished()); |
| |
| // Make sure it has OK/Cancel buttons. |
| List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars(); |
| assertEquals("Wrong infobar count", 1, infoBars.size()); |
| assertTrue(InfoBarUtil.hasPrimaryButton(this, infoBars.get(0))); |
| assertTrue(InfoBarUtil.hasSecondaryButton(this, infoBars.get(0))); |
| |
| loadUrlWithSanitization(HELLO_WORLD_URL); |
| assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished()); |
| infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars(); |
| assertTrue("Wrong infobar count", infoBars.isEmpty()); |
| } |
| |
| |
| /** |
| * Verify Geolocation creates an InfoBar and that it's destroyed when navigating back. |
| * |
| */ |
| @MediumTest |
| @Feature({"Browser"}) |
| public void testInfoBarForGeolocationDisappearsOnBack() throws InterruptedException { |
| loadUrlWithSanitization(HELLO_WORLD_URL); |
| loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE)); |
| assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished()); |
| |
| List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars(); |
| assertEquals("Wrong infobar count", 1, infoBars.size()); |
| |
| // Navigate back and ensure the InfoBar has been removed. |
| getInstrumentation().runOnMainSync( |
| new Runnable() { |
| @Override |
| public void run() { |
| getActivity().getActiveTab().goBack(); |
| } |
| }); |
| CriteriaHelper.pollForCriteria( |
| new Criteria() { |
| @Override |
| public boolean isSatisfied() { |
| List<InfoBar> infoBars = |
| getActivity().getActiveTab().getInfoBarContainer().getInfoBars(); |
| return infoBars.isEmpty(); |
| } |
| }, |
| MAX_TIMEOUT, CHECK_INTERVAL); |
| assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished()); |
| } |
| } |