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

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

Issue 2038753004: Add a LocationUtils class to give all Chromium Android code access to location helpers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Adjust DEPS. Created 4 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; 5 package org.chromium.chrome.browser;
6 6
7 import android.Manifest; 7 import android.Manifest;
8 import android.app.Dialog; 8 import android.app.Dialog;
9 import android.content.Context;
9 import android.content.pm.PackageManager; 10 import android.content.pm.PackageManager;
10 import android.test.MoreAsserts; 11 import android.test.MoreAsserts;
11 import android.test.suitebuilder.annotation.SmallTest; 12 import android.test.suitebuilder.annotation.SmallTest;
12 import android.view.View; 13 import android.view.View;
13 import android.widget.Button; 14 import android.widget.Button;
14 import android.widget.ListView; 15 import android.widget.ListView;
15 16
16 import org.chromium.base.ThreadUtils; 17 import org.chromium.base.ThreadUtils;
17 import org.chromium.chrome.R; 18 import org.chromium.chrome.R;
18 import org.chromium.chrome.test.ChromeActivityTestCaseBase; 19 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
20 import org.chromium.components.location.LocationUtils;
19 import org.chromium.components.security_state.ConnectionSecurityLevel; 21 import org.chromium.components.security_state.ConnectionSecurityLevel;
20 import org.chromium.content.browser.test.util.Criteria; 22 import org.chromium.content.browser.test.util.Criteria;
21 import org.chromium.content.browser.test.util.CriteriaHelper; 23 import org.chromium.content.browser.test.util.CriteriaHelper;
22 import org.chromium.content.browser.test.util.TouchCommon; 24 import org.chromium.content.browser.test.util.TouchCommon;
23 import org.chromium.ui.base.ActivityWindowAndroid; 25 import org.chromium.ui.base.ActivityWindowAndroid;
24 import org.chromium.ui.base.AndroidPermissionDelegate; 26 import org.chromium.ui.base.AndroidPermissionDelegate;
25 import org.chromium.ui.base.WindowAndroid; 27 import org.chromium.ui.base.WindowAndroid;
26 import org.chromium.ui.base.WindowAndroid.PermissionCallback; 28 import org.chromium.ui.base.WindowAndroid.PermissionCallback;
27 import org.chromium.ui.widget.TextViewWithClickableSpans; 29 import org.chromium.ui.widget.TextViewWithClickableSpans;
28 30
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 void nativeShowBluetoothOverviewLink(long nativeBluetoothChooserAndroid) {} 63 void nativeShowBluetoothOverviewLink(long nativeBluetoothChooserAndroid) {}
62 64
63 @Override 65 @Override
64 void nativeShowBluetoothAdapterOffLink(long nativeBluetoothChooserAndroi d) {} 66 void nativeShowBluetoothAdapterOffLink(long nativeBluetoothChooserAndroi d) {}
65 67
66 @Override 68 @Override
67 void nativeShowNeedLocationPermissionLink(long nativeBluetoothChooserAnd roid) {} 69 void nativeShowNeedLocationPermissionLink(long nativeBluetoothChooserAnd roid) {}
68 } 70 }
69 71
70 private ActivityWindowAndroid mWindowAndroid; 72 private ActivityWindowAndroid mWindowAndroid;
73 private FakeLocationUtils mLocationUtils;
71 private BluetoothChooserDialogWithFakeNatives mChooserDialog; 74 private BluetoothChooserDialogWithFakeNatives mChooserDialog;
72 75
73 public BluetoothChooserDialogTest() { 76 public BluetoothChooserDialogTest() {
74 super(ChromeActivity.class); 77 super(ChromeActivity.class);
75 } 78 }
76 79
77 // ChromeActivityTestCaseBase: 80 // ChromeActivityTestCaseBase:
78 81
79 @Override 82 @Override
80 protected void setUp() throws Exception { 83 protected void setUp() throws Exception {
81 super.setUp(); 84 super.setUp();
85 mLocationUtils = new FakeLocationUtils();
86 LocationUtils.setFactory(new LocationUtils.Factory() {
87 @Override
88 public LocationUtils create() {
89 return mLocationUtils;
90 }
91 });
82 mChooserDialog = createDialog(); 92 mChooserDialog = createDialog();
83 } 93 }
84 94
85 @Override 95 @Override
96 protected void tearDown() throws Exception {
97 LocationUtils.setFactory(null);
98 super.tearDown();
99 }
100
101 @Override
86 public void startMainActivity() throws InterruptedException { 102 public void startMainActivity() throws InterruptedException {
87 startMainActivityOnBlankPage(); 103 startMainActivityOnBlankPage();
88 } 104 }
89 105
90 private BluetoothChooserDialogWithFakeNatives createDialog() { 106 private BluetoothChooserDialogWithFakeNatives createDialog() {
91 return ThreadUtils.runOnUiThreadBlockingNoException( 107 return ThreadUtils.runOnUiThreadBlockingNoException(
92 new Callable<BluetoothChooserDialogWithFakeNatives>() { 108 new Callable<BluetoothChooserDialogWithFakeNatives>() {
93 @Override 109 @Override
94 public BluetoothChooserDialogWithFakeNatives call() { 110 public BluetoothChooserDialogWithFakeNatives call() {
95 mWindowAndroid = new ActivityWindowAndroid(getActivity() ); 111 mWindowAndroid = new ActivityWindowAndroid(getActivity() );
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 public void run() { 274 public void run() {
259 errorView.getClickableSpans()[0].onClick(errorView); 275 errorView.getClickableSpans()[0].onClick(errorView);
260 } 276 }
261 }); 277 });
262 278
263 // Permission was requested. 279 // Permission was requested.
264 MoreAsserts.assertEquals(permissionDelegate.mPermissionsRequested, 280 MoreAsserts.assertEquals(permissionDelegate.mPermissionsRequested,
265 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION}); 281 new String[] {Manifest.permission.ACCESS_COARSE_LOCATION});
266 assertNotNull(permissionDelegate.mCallback); 282 assertNotNull(permissionDelegate.mCallback);
267 // Grant permission. 283 // Grant permission.
268 permissionDelegate.mLocationGranted = true; 284 mLocationUtils.mLocationGranted = true;
269 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 285 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
270 @Override 286 @Override
271 public void run() { 287 public void run() {
272 permissionDelegate.mCallback.onRequestPermissionsResult( 288 permissionDelegate.mCallback.onRequestPermissionsResult(
273 new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 289 new String[] {Manifest.permission.ACCESS_FINE_LOCATION},
274 new int[] {PackageManager.PERMISSION_GRANTED}); 290 new int[] {PackageManager.PERMISSION_GRANTED});
275 } 291 }
276 }); 292 });
277 293
278 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_a dapter_off_help)), 294 assertEquals(removeLinkTags(getActivity().getString(R.string.bluetooth_a dapter_off_help)),
279 statusView.getText().toString()); 295 statusView.getText().toString());
280 296
281 mChooserDialog.closeDialog(); 297 mChooserDialog.closeDialog();
282 } 298 }
283 299
284 // TODO(jyasskin): Test when the user denies Chrome the ability to ask for p ermission. 300 // TODO(jyasskin): Test when the user denies Chrome the ability to ask for p ermission.
285 301
286 private static class TestAndroidPermissionDelegate implements AndroidPermiss ionDelegate { 302 private static class TestAndroidPermissionDelegate implements AndroidPermiss ionDelegate {
287 boolean mLocationGranted = false;
288 PermissionCallback mCallback = null; 303 PermissionCallback mCallback = null;
289 String[] mPermissionsRequested = null; 304 String[] mPermissionsRequested = null;
290 305
291 @Override 306 @Override
292 public boolean hasPermission(String permission) { 307 public boolean hasPermission(String permission) {
293 return permission.equals(Manifest.permission.ACCESS_COARSE_LOCATION) 308 return false;
294 && mLocationGranted;
295 } 309 }
310
296 @Override 311 @Override
297 public boolean canRequestPermission(String permission) { 312 public boolean canRequestPermission(String permission) {
298 return true; 313 return true;
299 } 314 }
300 @Override 315 @Override
301 public boolean isPermissionRevokedByPolicy(String permission) { 316 public boolean isPermissionRevokedByPolicy(String permission) {
302 return false; 317 return false;
303 } 318 }
304 @Override 319 @Override
305 public void requestPermissions(String[] permissions, PermissionCallback callback) { 320 public void requestPermissions(String[] permissions, PermissionCallback callback) {
306 mPermissionsRequested = permissions; 321 mPermissionsRequested = permissions;
307 if (permissions.length == 1 322 if (permissions.length == 1
308 && permissions[0].equals(Manifest.permission.ACCESS_COARSE_L OCATION)) { 323 && permissions[0].equals(Manifest.permission.ACCESS_COARSE_L OCATION)) {
309 mCallback = callback; 324 mCallback = callback;
310 } 325 }
311 } 326 }
312 } 327 }
328
329 private static class FakeLocationUtils extends LocationUtils {
330 public boolean mLocationGranted = false;
331
332 @Override
333 public boolean hasAndroidLocationPermission(Context context) {
334 return mLocationGranted;
335 }
336 }
313 } 337 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698