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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/superviseduser/SupervisedUserContentProvider.java

Issue 2713513004: [Webview, Child Accounts] Always Google Play Services to show the reauthentication page. (Closed)
Patch Set: fix Created 3 years, 9 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 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.annotation.TargetApi; 7 import android.annotation.TargetApi;
8 import android.content.BroadcastReceiver; 8 import android.content.BroadcastReceiver;
9 import android.content.Context; 9 import android.content.Context;
10 import android.content.Intent; 10 import android.content.Intent;
11 import android.content.IntentFilter; 11 import android.content.IntentFilter;
12 import android.net.Uri;
12 import android.os.Build; 13 import android.os.Build;
13 import android.os.Bundle; 14 import android.os.Bundle;
14 import android.os.SystemClock; 15 import android.os.SystemClock;
15 import android.os.UserManager; 16 import android.os.UserManager;
16 17
17 import org.chromium.base.Callback; 18 import org.chromium.base.Callback;
18 import org.chromium.base.ThreadUtils; 19 import org.chromium.base.ThreadUtils;
19 import org.chromium.base.VisibleForTesting; 20 import org.chromium.base.VisibleForTesting;
20 import org.chromium.base.annotations.CalledByNative; 21 import org.chromium.base.annotations.CalledByNative;
21 import org.chromium.base.library_loader.LibraryLoader; 22 import org.chromium.base.library_loader.LibraryLoader;
(...skipping 16 matching lines...) Expand all
38 public class SupervisedUserContentProvider extends WebRestrictionsContentProvide r { 39 public class SupervisedUserContentProvider extends WebRestrictionsContentProvide r {
39 private static final String SUPERVISED_USER_CONTENT_PROVIDER_ENABLED = 40 private static final String SUPERVISED_USER_CONTENT_PROVIDER_ENABLED =
40 "SupervisedUserContentProviderEnabled"; 41 "SupervisedUserContentProviderEnabled";
41 private long mNativeSupervisedUserContentProvider; 42 private long mNativeSupervisedUserContentProvider;
42 private boolean mChromeAlreadyStarted; 43 private boolean mChromeAlreadyStarted;
43 private static Object sEnabledLock = new Object(); 44 private static Object sEnabledLock = new Object();
44 private static Object sContentProviderLock = new Object(); 45 private static Object sContentProviderLock = new Object();
45 46
46 private static final String TAG = "SupervisedUserContent"; 47 private static final String TAG = "SupervisedUserContent";
47 48
49 private static final Object ACCOUNTS_GOOGLE_COM = "accounts.google.com";
50 private static final Object GOOGLE_PLAY_SERVICES_UI_PACKAGE = "com.google.an droid.gms.ui";
51
48 // Three value "boolean" caching enabled state, null if not yet known. 52 // Three value "boolean" caching enabled state, null if not yet known.
49 private static Boolean sEnabled; 53 private static Boolean sEnabled;
50 54
51 @VisibleForTesting 55 @VisibleForTesting
52 void startForcedSigninProcessor(Context appContext, Runnable onComplete) { 56 void startForcedSigninProcessor(Context appContext, Runnable onComplete) {
53 ForcedSigninProcessor.start(appContext, onComplete); 57 ForcedSigninProcessor.start(appContext, onComplete);
54 } 58 }
55 59
56 @VisibleForTesting 60 @VisibleForTesting
57 void listenForChildAccountStatusChange(Callback<Boolean> callback) { 61 void listenForChildAccountStatusChange(Callback<Boolean> callback) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 }; 156 };
153 onQueryFinished(new WebRestrictionsResult(false, errorInt, errorStri ng)); 157 onQueryFinished(new WebRestrictionsResult(false, errorInt, errorStri ng));
154 } 158 }
155 159
156 void onQueryFailedNoErrorData() { 160 void onQueryFailedNoErrorData() {
157 onQueryFinished(new WebRestrictionsResult(false, null, null)); 161 onQueryFinished(new WebRestrictionsResult(false, null, null));
158 } 162 }
159 } 163 }
160 164
161 @Override 165 @Override
162 protected WebRestrictionsResult shouldProceed(final String url) { 166 protected WebRestrictionsResult shouldProceed(String callingPackage, final S tring url) {
163 // This will be called on multiple threads (but never the UI thread), 167 // This will be called on multiple threads (but never the UI thread),
164 // see http://developer.android.com/guide/components/processes-and-threa ds.html#ThreadSafe. 168 // see http://developer.android.com/guide/components/processes-and-threa ds.html#ThreadSafe.
165 // The reply comes back on a different thread (possibly the UI thread) s ome time later. 169 // The reply comes back on a different thread (possibly the UI thread) s ome time later.
166 // As such it needs to correctly match the replies to the calls. It does this by creating a 170 // As such it needs to correctly match the replies to the calls. It does this by creating a
167 // reply object for each query, and passing this through the callback st ructure. The reply 171 // reply object for each query, and passing this through the callback st ructure. The reply
168 // object also handles waiting for the reply. 172 // object also handles waiting for the reply.
169 long startTimeMs = SystemClock.elapsedRealtime(); 173 long startTimeMs = SystemClock.elapsedRealtime();
170 final SupervisedUserQueryReply queryReply = new SupervisedUserQueryReply (); 174 if (requestIsWhitelisted(callingPackage, url)) {
175 return new WebRestrictionsResult(true, null, null);
176 }
177
171 final long contentProvider = getSupervisedUserContentProvider(); 178 final long contentProvider = getSupervisedUserContentProvider();
172 if (contentProvider == 0) { 179 if (contentProvider == 0) {
173 return new WebRestrictionsResult( 180 return new WebRestrictionsResult(
174 false, new int[] {FilteringBehaviorReason.NOT_SIGNED_IN}, nu ll); 181 false, new int[] {FilteringBehaviorReason.NOT_SIGNED_IN}, nu ll);
175 } 182 }
183
184 final SupervisedUserQueryReply queryReply = new SupervisedUserQueryReply ();
176 ThreadUtils.runOnUiThread(new Runnable() { 185 ThreadUtils.runOnUiThread(new Runnable() {
177 @Override 186 @Override
178 public void run() { 187 public void run() {
179 nativeShouldProceed(contentProvider, queryReply, url); 188 nativeShouldProceed(contentProvider, queryReply, url);
180 } 189 }
181 }); 190 });
182 try { 191 try {
183 // This will block until an onQueryComplete call on a different thre ad adds 192 // This will block until an onQueryComplete call on a different thre ad adds
184 // something to the queue. 193 // something to the queue.
185 WebRestrictionsResult result = queryReply.getResult(); 194 WebRestrictionsResult result = queryReply.getResult();
186 String histogramName = mChromeAlreadyStarted 195 String histogramName = mChromeAlreadyStarted
187 ? "SupervisedUserContentProvider.ChromeStartedRequestTime" 196 ? "SupervisedUserContentProvider.ChromeStartedRequestTime"
188 : "SupervisedUserContentProvider.ChromeNotStartedRequestTime "; 197 : "SupervisedUserContentProvider.ChromeNotStartedRequestTime ";
189 RecordHistogram.recordTimesHistogram(histogramName, 198 RecordHistogram.recordTimesHistogram(histogramName,
190 SystemClock.elapsedRealtime() - startTimeMs, TimeUnit.MILLIS ECONDS); 199 SystemClock.elapsedRealtime() - startTimeMs, TimeUnit.MILLIS ECONDS);
191 RecordHistogram.recordBooleanHistogram( 200 RecordHistogram.recordBooleanHistogram(
192 "SupervisedUserContentProvider.RequestTimedOut", result == n ull); 201 "SupervisedUserContentProvider.RequestTimedOut", result == n ull);
193 if (result == null) return new WebRestrictionsResult(false, null, nu ll); 202 if (result == null) return new WebRestrictionsResult(false, null, nu ll);
194 return result; 203 return result;
195 } catch (InterruptedException e) { 204 } catch (InterruptedException e) {
196 return new WebRestrictionsResult(false, null, null); 205 return new WebRestrictionsResult(false, null, null);
197 } 206 }
198 } 207 }
199 208
209 private boolean requestIsWhitelisted(String callingPackage, String url) {
210 // Always allow Google Play Services to show the reauthentication page ( which is necessary
211 // to fix account issues).
212 return callingPackage != null && callingPackage.equals(GOOGLE_PLAY_SERVI CES_UI_PACKAGE)
dgn 2017/02/23 12:19:49 nit: TextUtils.equals() to avoid having to check f
Bernhard Bauer 2017/02/23 16:36:21 Good idea! Done.
213 && Uri.parse(url).getHost().equals(ACCOUNTS_GOOGLE_COM);
214 }
215
200 @Override 216 @Override
201 protected boolean canInsert() { 217 protected boolean canInsert() {
202 // Chrome always allows insertion requests. 218 // Chrome always allows insertion requests.
203 return true; 219 return true;
204 } 220 }
205 221
206 static class SupervisedUserInsertReply extends SupervisedUserReply<Boolean> { 222 static class SupervisedUserInsertReply extends SupervisedUserReply<Boolean> {
207 @CalledByNative("SupervisedUserInsertReply") 223 @CalledByNative("SupervisedUserInsertReply")
208 void onInsertRequestSendComplete(boolean result) { 224 void onInsertRequestSendComplete(boolean result) {
209 onQueryFinished(result); 225 onQueryFinished(result);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 345
330 native void nativeShouldProceed(long nativeSupervisedUserContentProvider, 346 native void nativeShouldProceed(long nativeSupervisedUserContentProvider,
331 SupervisedUserQueryReply queryReply, String url); 347 SupervisedUserQueryReply queryReply, String url);
332 348
333 native void nativeRequestInsert(long nativeSupervisedUserContentProvider, 349 native void nativeRequestInsert(long nativeSupervisedUserContentProvider,
334 SupervisedUserInsertReply insertReply, String url); 350 SupervisedUserInsertReply insertReply, String url);
335 351
336 private native void nativeSetFilterForTesting(long nativeSupervisedUserConte ntProvider); 352 private native void nativeSetFilterForTesting(long nativeSupervisedUserConte ntProvider);
337 353
338 } 354 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698