Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(822)

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/media/ui/MediaPermissionsTest.java

Issue 2254763002: Enable the optional permission prompt persistence toggle on grouped infobars (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-infobardelegate-clean
Patch Set: Add CL dependency; improve media impl Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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.media.ui;
6
7 import android.os.Environment;
8 import android.support.v7.widget.SwitchCompat;
9 import android.test.suitebuilder.annotation.MediumTest;
10 import android.test.suitebuilder.annotation.Smoke;
11
12 import org.chromium.base.test.util.CommandLineFlags;
13 import org.chromium.base.test.util.Feature;
14 import org.chromium.chrome.R;
15 import org.chromium.chrome.browser.ChromeActivity;
16 import org.chromium.chrome.browser.ChromeSwitches;
17 import org.chromium.chrome.browser.infobar.InfoBar;
18 import org.chromium.chrome.browser.infobar.InfoBarContainer;
19 import org.chromium.chrome.browser.tab.EmptyTabObserver;
20 import org.chromium.chrome.browser.tab.Tab;
21 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
22 import org.chromium.chrome.test.util.InfoBarTestAnimationListener;
23 import org.chromium.chrome.test.util.InfoBarUtil;
24 import org.chromium.content.browser.test.util.CallbackHelper;
25 import org.chromium.content.browser.test.util.Criteria;
26 import org.chromium.content.browser.test.util.CriteriaHelper;
27 import org.chromium.content.browser.test.util.TouchCommon;
28 import org.chromium.net.test.EmbeddedTestServer;
29
30 import java.util.concurrent.Callable;
31
32 /**
33 * Test suite for media permissions requests.
34 */
35 public class MediaPermissionsTest extends ChromeActivityTestCaseBase<ChromeActiv ity> {
36 private static final String TEST_FILE = "/content/test/data/android/media_pe rmissions.html";
37
38 private InfoBarTestAnimationListener mListener;
39 private EmbeddedTestServer mTestServer;
40
41 /**
42 * Waits till the media JavaScript callback is called the specified number o f times.
43 */
44 private class MediaPermissionsUpdateWaiter extends EmptyTabObserver {
45 private CallbackHelper mCallbackHelper;
46 private int mExpectedCount;
47 private String mPrefix;
48
49 public MediaPermissionsUpdateWaiter(String prefix) {
50 mCallbackHelper = new CallbackHelper();
51 mPrefix = prefix;
52 }
53
54 @Override
55 public void onTitleUpdated(Tab tab) {
56 String expectedTitle = mPrefix + mExpectedCount;
57 if (getActivity().getActivityTab().getTitle().equals(expectedTitle)) {
58 mCallbackHelper.notifyCalled();
59 }
60 }
61
62 public void waitForNumUpdates(int numUpdates) throws Exception {
63 mExpectedCount = numUpdates;
64 mCallbackHelper.waitForCallback(0);
65 }
66 }
67
68 public MediaPermissionsTest() {
69 super(ChromeActivity.class);
70 }
71
72 @Override
73 protected void setUp() throws Exception {
74 super.setUp();
75
76 InfoBarContainer container =
77 getActivity().getTabModelSelector().getCurrentTab().getInfoBarCo ntainer();
78 mListener = new InfoBarTestAnimationListener();
79 container.setAnimationListener(mListener);
80
81 mTestServer = EmbeddedTestServer.createAndStartFileServer(
82 getInstrumentation().getContext(), Environment.getExternalStorag eDirectory());
83 }
84
85 @Override
86 protected void tearDown() throws Exception {
87 mTestServer.stopAndDestroyServer();
88 super.tearDown();
89 }
90
91 /**
92 * Verify asking for microphone creates an InfoBar and works when the permis sion is granted.
93 * @throws Exception
94 */
95 @Smoke
96 @MediumTest
97 @Feature({"MediaPermissions", "Main"})
98 @CommandLineFlags.Add(ChromeSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
99 public void testMicrophoneMediaPermissionsPlumbing() throws Exception {
100 testMediaPermissionsPlumbing("Mic count:", "initiate_getMicrophone()", 1 , false, false);
101 }
102
103 /**
104 * Verify asking for camera creates an InfoBar and works when the permission is granted.
105 * @throws Exception
106 */
107 @MediumTest
108 @Feature({"MediaPermissions", "Main"})
109 @CommandLineFlags.Add(ChromeSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
110 public void testCameraMediaPermissionsPlumbing() throws Exception {
111 testMediaPermissionsPlumbing("Camera count:", "initiate_getCamera()", 1, false, false);
112 }
113
114 /**
115 * Verify asking for both mic and camera creates a combined InfoBar and work s when the
116 * permissions are granted.
117 * @throws Exception
118 */
119 @MediumTest
120 @Feature({"MediaPermissions", "Main"})
121 @CommandLineFlags.Add(ChromeSwitches.USE_FAKE_DEVICE_FOR_MEDIA_STREAM)
122 public void testCombinedMediaPermissionsPlumbing() throws Exception {
123 testMediaPermissionsPlumbing("Combined count:", "initiate_getCombined()" , 1, false, false);
124 }
125
126 /**
127 * Verify microphone prompts with a persistence toggle if that feature is en abled. Check the
128 * switch appears and that permission is granted with it toggled on.
129 * @throws Exception
130 */
131 @MediumTest
132 @CommandLineFlags.Add("enable-features=DisplayPersistenceToggleInPermissionP rompts")
133 @Feature({"MediaPermissions"})
134 public void testMicrophonePersistenceOn() throws Exception {
135 testMediaPermissionsPlumbing("Mic count:", "initiate_getMicrophone()", 1 , true, false);
136 }
137
138 /**
139 * Verify microphone prompts with a persistence toggle if that feature is en abled. Check the
140 * switch appears and that permission is granted with it toggled off.
141 * @throws Exception
142 */
143 @MediumTest
144 @CommandLineFlags.Add("enable-features=DisplayPersistenceToggleInPermissionP rompts")
145 @Feature({"MediaPermissions"})
146 public void testMicrophonePersistenceOff() throws Exception {
147 testMediaPermissionsPlumbing("Mic count:", "initiate_getMicrophone()", 1 , true, true);
148 }
149
150 /**
151 * Verify camera prompts with a persistence toggle if that feature is enable d. Check the
152 * switch appears and that permission is granted with it toggled on.
153 * @throws Exception
154 */
155 @MediumTest
156 @CommandLineFlags.Add("enable-features=DisplayPersistenceToggleInPermissionP rompts")
157 @Feature({"MediaPermissions"})
158 public void testCameraPersistenceOn() throws Exception {
159 testMediaPermissionsPlumbing("Camera count:", "initiate_getCamera()", 1, true, false);
160 }
161
162 /**
163 * Verify camera prompts with a persistence toggle if that feature is enable d. Check the
164 * switch appears and that permission is granted with it toggled off.
165 * @throws Exception
166 */
167 @MediumTest
168 @CommandLineFlags.Add("enable-features=DisplayPersistenceToggleInPermissionP rompts")
169 @Feature({"MediaPermissions"})
170 public void testCameraPersistenceOff() throws Exception {
171 testMediaPermissionsPlumbing("Camera count:", "initiate_getCamera()", 1, true, true);
172 }
173
174 /**
175 * Verify combined prompts show a persistence toggle if that feature is enab led. Check the
176 * switch appears and that permission is granted with it toggled on.
177 * @throws Exception
178 */
179 @MediumTest
180 @CommandLineFlags.Add("enable-features=DisplayPersistenceToggleInPermissionP rompts")
181 @Feature({"MediaPermissions"})
182 public void testCombinedPersistenceOn() throws Exception {
183 testMediaPermissionsPlumbing("Combined count:", "initiate_getCombined()" , 1, true, false);
184 }
185
186 /**
187 * Verify combined prompts show a persistence toggle if that feature is enab led. Check the
188 * switch appears and that permission is granted with it toggled of.
raymes 2016/08/22 04:37:19 nit: off
dominickn 2016/08/22 05:30:02 Acknowledged, will fix.
189 * @throws Exception
190 */
191 @MediumTest
192 @CommandLineFlags.Add("enable-features=DisplayPersistenceToggleInPermissionP rompts")
193 @Feature({"MediaPermissions"})
194 public void testCombinedPersistenceOff() throws Exception {
195 testMediaPermissionsPlumbing("Combined count:", "initiate_getCombined()" , 1, true, true);
196 }
197
198 @Override
199 public void startMainActivity() throws InterruptedException {
200 startMainActivityOnBlankPage();
201 }
202
203 private void testMediaPermissionsPlumbing(String prefix, String script, int numUpdates,
204 boolean expectsSwitch, boolean toggleSwitch) throws Exception {
205 final String url = mTestServer.getURL(TEST_FILE);
206
207 Tab tab = getActivity().getActivityTab();
208 MediaPermissionsUpdateWaiter updateWaiter = new MediaPermissionsUpdateWa iter(prefix);
209 tab.addObserver(updateWaiter);
210
211 loadUrl(url);
212 runJavaScriptCodeInCurrentTab(script);
213 assertTrue("InfoBar not added.", mListener.addInfoBarAnimationFinished() );
214 InfoBar infobar = getInfoBars().get(0);
215
216 SwitchCompat persistSwitch = (SwitchCompat) infobar.getView().findViewBy Id(
217 R.id.permission_infobar_persist_toggle);
218 if (expectsSwitch) {
219 assertNotNull(persistSwitch);
220 assertTrue(persistSwitch.isChecked());
221 if (toggleSwitch) {
222 TouchCommon.singleClickView(persistSwitch);
223 waitForCheckedState(persistSwitch, false);
224 }
225 } else {
226 assertNull(persistSwitch);
227 }
228
229 assertTrue("OK button wasn't found", InfoBarUtil.clickPrimaryButton(info bar));
230 updateWaiter.waitForNumUpdates(numUpdates);
231
232 tab.removeObserver(updateWaiter);
233 }
234
235 private void waitForCheckedState(final SwitchCompat persistSwitch, boolean i sChecked)
236 throws InterruptedException {
237 CriteriaHelper.pollUiThread(Criteria.equals(isChecked, new Callable<Bool ean>() {
238 @Override
239 public Boolean call() {
240 return persistSwitch.isChecked();
241 }
242 }));
243 }
244 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698