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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionTestCaseBase.java

Issue 2899973002: Hide modal permission prompts on Android upon tab navigation/destruction (Closed)
Patch Set: fix test (permission request from js goes through mojo so need to poll) Created 3 years, 6 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.permissions; 5 package org.chromium.chrome.browser.permissions;
6 6
7 import android.content.DialogInterface; 7 import android.content.DialogInterface;
8 import android.support.v7.app.AlertDialog; 8 import android.support.v7.app.AlertDialog;
9 import android.support.v7.widget.SwitchCompat; 9 import android.support.v7.widget.SwitchCompat;
10 10
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 public void waitForNumUpdates(int numUpdates) throws Exception { 82 public void waitForNumUpdates(int numUpdates) throws Exception {
83 mExpectedCount = numUpdates; 83 mExpectedCount = numUpdates;
84 mCallbackHelper.waitForCallback(0); 84 mCallbackHelper.waitForCallback(0);
85 } 85 }
86 } 86 }
87 87
88 /** 88 /**
89 * Criteria class to detect whether the permission dialog is shown. 89 * Criteria class to detect whether the permission dialog is shown.
90 */ 90 */
91 private static class DialogShownCriteria extends Criteria { 91 protected static class DialogShownCriteria extends Criteria {
92 private AlertDialog mDialog; 92 private AlertDialog mDialog;
93 private boolean mExpectDialog;
93 94
94 public DialogShownCriteria(String error) { 95 public DialogShownCriteria(String error, boolean expectDialog) {
95 super(error); 96 super(error);
97 mExpectDialog = expectDialog;
96 } 98 }
97 99
98 public AlertDialog getDialog() { 100 public AlertDialog getDialog() {
99 return mDialog; 101 return mDialog;
100 } 102 }
101 103
102 @Override 104 @Override
103 public boolean isSatisfied() { 105 public boolean isSatisfied() {
104 try { 106 try {
105 return ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() { 107 return ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() {
106 @Override 108 @Override
107 public Boolean call() { 109 public Boolean call() {
108 mDialog = PermissionDialogController.getInstance() 110 mDialog = PermissionDialogController.getInstance()
109 .getCurrentDialogForTesting(); 111 .getCurrentDialogForTesting();
110 return mDialog != null; 112 return (mDialog != null) == mExpectDialog;
111 } 113 }
112 }); 114 });
113 } catch (ExecutionException e) { 115 } catch (ExecutionException e) {
114 return false; 116 return false;
115 } 117 }
116 } 118 }
117 } 119 }
118 120
119 public PermissionTestCaseBase() { 121 public PermissionTestCaseBase() {
120 super(ChromeActivity.class); 122 super(ChromeActivity.class);
121 } 123 }
122 124
123 @Override 125 @Override
124 protected void setUp() throws Exception { 126 protected void setUp() throws Exception {
125 super.setUp(); 127 super.setUp();
126 InfoBarContainer container = 128 InfoBarContainer container =
127 getActivity().getTabModelSelector().getCurrentTab().getInfoBarCo ntainer(); 129 getActivity().getTabModelSelector().getCurrentTab().getInfoBarCo ntainer();
128 mListener = new InfoBarTestAnimationListener(); 130 mListener = new InfoBarTestAnimationListener();
129 container.addAnimationListener(mListener); 131 container.addAnimationListener(mListener);
130 mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation ().getContext()); 132 mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation ().getContext());
131 } 133 }
132 134
133 @Override 135 @Override
134 protected void tearDown() throws Exception { 136 protected void tearDown() throws Exception {
135 mTestServer.stopAndDestroyServer(); 137 mTestServer.stopAndDestroyServer();
136 super.tearDown(); 138 super.tearDown();
137 } 139 }
138 140
141 protected void setUpUrl(final String url) throws InterruptedException {
142 loadUrl(mTestServer.getURL(url));
143 }
144
139 /** 145 /**
140 * Simulates clicking a button on an AlertDialog. 146 * Simulates clicking a button on an AlertDialog.
141 */ 147 */
142 private void clickButton(final AlertDialog dialog, final int button) { 148 private void clickButton(final AlertDialog dialog, final int button) {
143 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 149 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
144 @Override 150 @Override
145 public void run() { 151 public void run() {
146 dialog.getButton(button).performClick(); 152 dialog.getButton(button).performClick();
147 } 153 }
148 }); 154 });
149 } 155 }
150 156
151 /** 157 /**
152 * Runs a permission prompt test that grants the permission and expects the page title to be 158 * Runs a permission prompt test that grants the permission and expects the page title to be
153 * updated in response. 159 * updated in response.
154 * @param updateWaiter The update waiter to wait for callbacks. Should be a dded as an observer 160 * @param updateWaiter The update waiter to wait for callbacks. Should be a dded as an observer
155 * to the current tab prior to calling this method. 161 * to the current tab prior to calling this method.
156 * @param javascript The JS function to run in the current tab to execute the test and update 162 * @param javascript The JS function to run in the current tab to execute the test and update
157 * the page title. 163 * the page title.
158 * @param nUpdates How many updates of the page title to wait for. 164 * @param nUpdates How many updates of the page title to wait for.
159 * @param withGeature True if we require a user gesture to trigger the pro mpt. 165 * @param withGeature True if we require a user gesture to trigger the pro mpt.
160 * @param isDialog True if we are expecting a permission dialog, false for an infobar. 166 * @param isDialog True if we are expecting a permission dialog, false for an infobar.
161 * @param hasSwitch True if we are expecting a persistence switch, false otherwise. 167 * @param hasSwitch True if we are expecting a persistence switch, false otherwise.
162 * @param toggleSwitch True if we should toggle the switch off, false other wise. 168 * @param toggleSwitch True if we should toggle the switch off, false other wise.
163 * @throws Exception 169 * @throws Exception
164 */ 170 */
165 protected void runAllowTest(PermissionUpdateWaiter updateWaiter, final Strin g url, 171 protected void runAllowTest(PermissionUpdateWaiter updateWaiter, final Strin g url,
166 String javascript, int nUpdates, boolean withGesture, boolean isDial og, 172 String javascript, int nUpdates, boolean withGesture, boolean isDial og,
167 boolean hasSwitch, boolean toggleSwitch) throws Exception { 173 boolean hasSwitch, boolean toggleSwitch) throws Exception {
168 final String test_url = mTestServer.getURL(url); 174 setUpUrl(url);
169 loadUrl(test_url);
170 175
171 if (withGesture) { 176 if (withGesture) {
172 runJavaScriptCodeInCurrentTab("functionToRun = '" + javascript + "'" ); 177 runJavaScriptCodeInCurrentTab("functionToRun = '" + javascript + "'" );
173 singleClickView(getActivity().getActivityTab().getView()); 178 singleClickView(getActivity().getActivityTab().getView());
174 } else { 179 } else {
175 runJavaScriptCodeInCurrentTab(javascript); 180 runJavaScriptCodeInCurrentTab(javascript);
176 } 181 }
177 182
178 if (isDialog) { 183 if (isDialog) {
179 DialogShownCriteria criteria = new DialogShownCriteria("Dialog not s hown"); 184 DialogShownCriteria criteria = new DialogShownCriteria("Dialog not s hown", true);
180 CriteriaHelper.pollUiThread(criteria); 185 CriteriaHelper.pollUiThread(criteria);
181 replyToDialogAndWaitForUpdates( 186 replyToDialogAndWaitForUpdates(
182 updateWaiter, criteria.getDialog(), nUpdates, true, hasSwitc h, toggleSwitch); 187 updateWaiter, criteria.getDialog(), nUpdates, true, hasSwitc h, toggleSwitch);
183 } else { 188 } else {
184 replyToInfoBarAndWaitForUpdates(updateWaiter, nUpdates, true, hasSwi tch, toggleSwitch); 189 replyToInfoBarAndWaitForUpdates(updateWaiter, nUpdates, true, hasSwi tch, toggleSwitch);
185 } 190 }
186 } 191 }
187 192
188 /** 193 /**
189 * Replies to an infobar permission prompt, optionally checking for the pres ence of a 194 * Replies to an infobar permission prompt, optionally checking for the pres ence of a
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 } 248 }
244 }); 249 });
245 } 250 }
246 } 251 }
247 252
248 @Override 253 @Override
249 public void startMainActivity() throws InterruptedException { 254 public void startMainActivity() throws InterruptedException {
250 startMainActivityOnBlankPage(); 255 startMainActivityOnBlankPage();
251 } 256 }
252 } 257 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698