| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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.superviseduser; | 5 package org.chromium.chrome.browser.superviseduser; |
| 6 | 6 |
| 7 import android.accounts.Account; | 7 import android.accounts.Account; |
| 8 import android.content.ContentProviderClient; | 8 import android.content.ContentProviderClient; |
| 9 import android.content.ContentResolver; | 9 import android.content.ContentResolver; |
| 10 import android.database.Cursor; | 10 import android.database.Cursor; |
| 11 import android.net.Uri; | 11 import android.net.Uri; |
| 12 import android.os.RemoteException; | 12 import android.os.RemoteException; |
| 13 import android.support.test.InstrumentationRegistry; |
| 13 import android.support.test.filters.SmallTest; | 14 import android.support.test.filters.SmallTest; |
| 14 | 15 |
| 16 import org.junit.After; |
| 17 import org.junit.Assert; |
| 18 import org.junit.Before; |
| 19 import org.junit.Rule; |
| 20 import org.junit.Test; |
| 21 import org.junit.runner.RunWith; |
| 22 |
| 15 import org.chromium.base.ThreadUtils; | 23 import org.chromium.base.ThreadUtils; |
| 24 import org.chromium.base.test.util.CommandLineFlags; |
| 16 import org.chromium.base.test.util.RetryOnFailure; | 25 import org.chromium.base.test.util.RetryOnFailure; |
| 17 import org.chromium.chrome.browser.ChromeActivity; | 26 import org.chromium.chrome.browser.ChromeActivity; |
| 27 import org.chromium.chrome.browser.ChromeSwitches; |
| 18 import org.chromium.chrome.browser.childaccounts.ChildAccountService; | 28 import org.chromium.chrome.browser.childaccounts.ChildAccountService; |
| 19 import org.chromium.chrome.browser.preferences.PrefServiceBridge; | 29 import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| 20 import org.chromium.chrome.test.ChromeActivityTestCaseBase; | 30 import org.chromium.chrome.test.ChromeActivityTestRule; |
| 31 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
| 21 import org.chromium.chrome.test.util.browser.signin.SigninTestUtil; | 32 import org.chromium.chrome.test.util.browser.signin.SigninTestUtil; |
| 22 import org.chromium.components.webrestrictions.browser.WebRestrictionsContentPro
vider; | 33 import org.chromium.components.webrestrictions.browser.WebRestrictionsContentPro
vider; |
| 23 | 34 |
| 24 import java.util.concurrent.Callable; | 35 import java.util.concurrent.Callable; |
| 25 import java.util.concurrent.ExecutionException; | 36 import java.util.concurrent.ExecutionException; |
| 26 | 37 |
| 27 /** | 38 /** |
| 28 * Instrumentation test for SupervisedUserContentProvider. | 39 * Instrumentation test for SupervisedUserContentProvider. |
| 29 */ | 40 */ |
| 41 @RunWith(ChromeJUnit4ClassRunner.class) |
| 30 @RetryOnFailure | 42 @RetryOnFailure |
| 31 public class SupervisedUserContentProviderTest extends ChromeActivityTestCaseBas
e<ChromeActivity> { | 43 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, |
| 44 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG}) |
| 45 public class SupervisedUserContentProviderTest { |
| 46 @Rule |
| 47 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = |
| 48 new ChromeActivityTestRule<>(ChromeActivity.class); |
| 49 |
| 32 private static final String DEFAULT_ACCOUNT = "test@gmail.com"; | 50 private static final String DEFAULT_ACCOUNT = "test@gmail.com"; |
| 33 private static final String AUTHORITY_SUFFIX = ".SupervisedUserProvider"; | 51 private static final String AUTHORITY_SUFFIX = ".SupervisedUserProvider"; |
| 34 private ContentResolver mResolver; | 52 private ContentResolver mResolver; |
| 35 private String mAuthority; | 53 private String mAuthority; |
| 36 private Uri mUri; | 54 private Uri mUri; |
| 37 | 55 |
| 38 public SupervisedUserContentProviderTest() { | 56 @Before |
| 39 super(ChromeActivity.class); | 57 public void setUp() throws Exception { |
| 40 } | 58 SigninTestUtil.setUpAuthForTest(InstrumentationRegistry.getInstrumentati
on()); |
| 41 | 59 |
| 42 @Override | 60 // In principle the SupervisedUserContentProvider should work whenever C
hrome is installed |
| 43 public void setUp() throws Exception { | 61 // (even if it isn't running), but to test it we need to set up a dummy
child, and to do |
| 44 super.setUp(); | 62 // this within a test we need to start Chrome. |
| 45 mResolver = getInstrumentation().getTargetContext().getContentResolver()
; | 63 mActivityTestRule.startMainActivityOnBlankPage(); |
| 46 assertNotNull(mResolver); | 64 mResolver = InstrumentationRegistry.getInstrumentation() |
| 47 mAuthority = getInstrumentation().getTargetContext().getPackageName() +
AUTHORITY_SUFFIX; | 65 .getTargetContext() |
| 66 .getContentResolver(); |
| 67 Assert.assertNotNull(mResolver); |
| 68 mAuthority = |
| 69 InstrumentationRegistry.getInstrumentation().getTargetContext().
getPackageName() |
| 70 + AUTHORITY_SUFFIX; |
| 48 mUri = new Uri.Builder() | 71 mUri = new Uri.Builder() |
| 49 .scheme(ContentResolver.SCHEME_CONTENT) | 72 .scheme(ContentResolver.SCHEME_CONTENT) |
| 50 .authority(mAuthority) | 73 .authority(mAuthority) |
| 51 .path("authorized") | 74 .path("authorized") |
| 52 .build(); | 75 .build(); |
| 53 SigninTestUtil.resetSigninState(); | 76 SigninTestUtil.resetSigninState(); |
| 54 } | 77 } |
| 55 | 78 |
| 56 @Override | 79 @After |
| 57 public void tearDown() throws Exception { | 80 public void tearDown() throws Exception { |
| 58 SigninTestUtil.resetSigninState(); | 81 SigninTestUtil.resetSigninState(); |
| 59 SigninTestUtil.tearDownAuthForTest(); | 82 SigninTestUtil.tearDownAuthForTest(); |
| 60 super.tearDown(); | |
| 61 } | 83 } |
| 62 | 84 |
| 63 @Override | 85 @Test |
| 64 public void startMainActivity() throws InterruptedException { | |
| 65 SigninTestUtil.setUpAuthForTest(getInstrumentation()); | |
| 66 | |
| 67 // In principle the SupervisedUserContentProvider should work whenever C
hrome is installed | |
| 68 // (even if it isn't running), but to test it we need to set up a dummy
child, and to do | |
| 69 // this within a test we need to start Chrome. | |
| 70 startMainActivityOnBlankPage(); | |
| 71 } | |
| 72 | |
| 73 @SmallTest | 86 @SmallTest |
| 74 public void testSupervisedUserDisabled() throws RemoteException, ExecutionEx
ception { | 87 public void testSupervisedUserDisabled() throws RemoteException, ExecutionEx
ception { |
| 75 ContentProviderClient client = mResolver.acquireContentProviderClient(mA
uthority); | 88 ContentProviderClient client = mResolver.acquireContentProviderClient(mA
uthority); |
| 76 assertNotNull(client); | 89 Assert.assertNotNull(client); |
| 77 Cursor cursor = client.query(mUri, null, "url = 'http://google.com'", nu
ll, null); | 90 Cursor cursor = client.query(mUri, null, "url = 'http://google.com'", nu
ll, null); |
| 78 assertNull(cursor); | 91 Assert.assertNull(cursor); |
| 79 } | 92 } |
| 80 | 93 |
| 94 @Test |
| 81 @SmallTest | 95 @SmallTest |
| 82 public void testNoSupervisedUser() throws RemoteException, ExecutionExceptio
n { | 96 public void testNoSupervisedUser() throws RemoteException, ExecutionExceptio
n { |
| 83 assertFalse(ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() { | 97 Assert.assertFalse(ThreadUtils.runOnUiThreadBlocking(new Callable<Boolea
n>() { |
| 84 | 98 |
| 85 @Override | 99 @Override |
| 86 public Boolean call() throws Exception { | 100 public Boolean call() throws Exception { |
| 87 PrefServiceBridge.getInstance().setSupervisedUserId(""); | 101 PrefServiceBridge.getInstance().setSupervisedUserId(""); |
| 88 return ChildAccountService.isChildAccount(); | 102 return ChildAccountService.isChildAccount(); |
| 89 } | 103 } |
| 90 | 104 |
| 91 })); | 105 })); |
| 92 ContentProviderClient client = mResolver.acquireContentProviderClient(mA
uthority); | 106 ContentProviderClient client = mResolver.acquireContentProviderClient(mA
uthority); |
| 93 assertNotNull(client); | 107 Assert.assertNotNull(client); |
| 94 SupervisedUserContentProvider.enableContentProviderForTesting(); | 108 SupervisedUserContentProvider.enableContentProviderForTesting(); |
| 95 Cursor cursor = client.query(mUri, null, "url = 'http://google.com'", nu
ll, null); | 109 Cursor cursor = client.query(mUri, null, "url = 'http://google.com'", nu
ll, null); |
| 96 assertNotNull(cursor); | 110 Assert.assertNotNull(cursor); |
| 97 assertEquals(WebRestrictionsContentProvider.BLOCKED, cursor.getInt(0)); | 111 Assert.assertEquals(WebRestrictionsContentProvider.BLOCKED, cursor.getIn
t(0)); |
| 98 cursor = client.query(mUri, null, "url = 'http://www.notgoogle.com'", nu
ll, null); | 112 cursor = client.query(mUri, null, "url = 'http://www.notgoogle.com'", nu
ll, null); |
| 99 assertNotNull(cursor); | 113 Assert.assertNotNull(cursor); |
| 100 assertEquals(WebRestrictionsContentProvider.BLOCKED, cursor.getInt(0)); | 114 Assert.assertEquals(WebRestrictionsContentProvider.BLOCKED, cursor.getIn
t(0)); |
| 101 } | 115 } |
| 102 | 116 |
| 117 @Test |
| 103 @SmallTest | 118 @SmallTest |
| 104 public void testWithSupervisedUser() throws RemoteException, ExecutionExcept
ion { | 119 public void testWithSupervisedUser() throws RemoteException, ExecutionExcept
ion { |
| 105 final Account account = SigninTestUtil.addAndSignInTestAccount(); | 120 final Account account = SigninTestUtil.addAndSignInTestAccount(); |
| 106 assertNotNull(account); | 121 Assert.assertNotNull(account); |
| 107 assertTrue(ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() { | 122 Assert.assertTrue(ThreadUtils.runOnUiThreadBlocking(new Callable<Boolean
>() { |
| 108 | 123 |
| 109 @Override | 124 @Override |
| 110 public Boolean call() throws Exception { | 125 public Boolean call() throws Exception { |
| 111 PrefServiceBridge.getInstance().setSupervisedUserId("ChildAccoun
tSUID"); | 126 PrefServiceBridge.getInstance().setSupervisedUserId("ChildAccoun
tSUID"); |
| 112 return ChildAccountService.isChildAccount(); | 127 return ChildAccountService.isChildAccount(); |
| 113 } | 128 } |
| 114 | 129 |
| 115 })); | 130 })); |
| 116 ContentProviderClient client = mResolver.acquireContentProviderClient(mA
uthority); | 131 ContentProviderClient client = mResolver.acquireContentProviderClient(mA
uthority); |
| 117 assertNotNull(client); | 132 Assert.assertNotNull(client); |
| 118 SupervisedUserContentProvider.enableContentProviderForTesting(); | 133 SupervisedUserContentProvider.enableContentProviderForTesting(); |
| 119 // setFilter for testing sets a default filter that blocks by default. | 134 // setFilter for testing sets a default filter that blocks by default. |
| 120 mResolver.call(mUri, "setFilterForTesting", null, null); | 135 mResolver.call(mUri, "setFilterForTesting", null, null); |
| 121 Cursor cursor = client.query(mUri, null, "url = 'http://www.google.com'"
, null, null); | 136 Cursor cursor = client.query(mUri, null, "url = 'http://www.google.com'"
, null, null); |
| 122 assertNotNull(cursor); | 137 Assert.assertNotNull(cursor); |
| 123 assertEquals(WebRestrictionsContentProvider.BLOCKED, cursor.getInt(0)); | 138 Assert.assertEquals(WebRestrictionsContentProvider.BLOCKED, cursor.getIn
t(0)); |
| 124 } | 139 } |
| 125 } | 140 } |
| OLD | NEW |