Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / android / javatests / src / org / chromium / chrome / browser / infobar / InfoBarTest.java
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.
4
5 package org.chromium.chrome.browser.infobar;
6
7 import android.test.suitebuilder.annotation.MediumTest;
8 import android.test.suitebuilder.annotation.Smoke;
9
10 import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
11
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;
20
21
22 import java.util.List;
23
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(
32             "<html>" +
33             "<head><title>Hello, World!</title></head>" +
34             "<body>Hello, World!</body>" +
35             "</html>");
36
37     private InfoBarTestAnimationListener mListener;
38
39     @Override
40     protected void setUp() throws Exception {
41         super.setUp();
42
43         // Register for animation notifications
44         InfoBarContainer container =
45                 getActivity().getActiveTab().getInfoBarContainer();
46         mListener =  new InfoBarTestAnimationListener();
47         container.setAnimationListener(mListener);
48     }
49
50     /**
51      * Verify PopUp InfoBar. Only basic triggering verified due to lack of tabs
52      * in ChromiumTestShell
53      */
54     @Smoke
55     @MediumTest
56     @Feature({"Browser", "Main"})
57     public void testInfoBarForPopUp() throws InterruptedException {
58         loadUrlWithSanitization(TestHttpServerClient.getUrl(POPUP_PAGE));
59         assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
60
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());
68
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());
72     }
73
74     /**
75      * Verify Geolocation creates an InfoBar.
76      */
77     @Smoke
78     @MediumTest
79     @Feature({"Browser", "Main"})
80     public void testInfoBarForGeolocation() throws InterruptedException {
81         loadUrlWithSanitization(TestHttpServerClient.getUrl(GEOLOCATION_PAGE));
82         assertTrue("InfoBar not added", mListener.addInfoBarAnimationFinished());
83
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)));
89
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());
94     }
95
96
97     /**
98      * Verify Geolocation creates an InfoBar and that it's destroyed when navigating back.
99      *
100      */
101     @MediumTest
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());
107
108         List<InfoBar> infoBars = getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
109         assertEquals("Wrong infobar count", 1, infoBars.size());
110
111         // Navigate back and ensure the InfoBar has been removed.
112         getInstrumentation().runOnMainSync(
113             new Runnable() {
114                 @Override
115                 public void run() {
116                     getActivity().getActiveTab().goBack();
117                 }
118             });
119         CriteriaHelper.pollForCriteria(
120             new Criteria() {
121                 @Override
122                 public boolean isSatisfied() {
123                     List<InfoBar> infoBars =
124                             getActivity().getActiveTab().getInfoBarContainer().getInfoBars();
125                     return infoBars.isEmpty();
126                 }
127             },
128             MAX_TIMEOUT, CHECK_INTERVAL);
129         assertTrue("InfoBar not removed.", mListener.removeInfoBarAnimationFinished());
130     }
131 }