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