Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
| index 21a005710765507f2012be9d9786a235f3c293d2..8c2f281121591c8b7a212ddb7c1c4a793cfd644d 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/blimp/ChromeBlimpClientContextDelegate.java |
| @@ -4,9 +4,12 @@ |
| package org.chromium.chrome.browser.blimp; |
| +import org.chromium.base.ContextUtils; |
| import org.chromium.base.annotations.CalledByNative; |
| +import org.chromium.blimp_public.BlimpClientContext; |
| import org.chromium.blimp_public.BlimpClientContextDelegate; |
| import org.chromium.chrome.browser.profiles.Profile; |
| +import org.chromium.chrome.browser.signin.AccountTrackerService; |
| /** |
| * The ChromeBlimpClientContextDelegate for //chrome which provides the necessary functionality |
| @@ -17,7 +20,12 @@ import org.chromium.chrome.browser.profiles.Profile; |
| * it, call {@link ChromeBlimpClientContextDelegate#createAndSetDelegateForContext(Profile)}. |
| * When the delegate should be deleted, a call to {@link #destroy} is required. |
| */ |
| -public class ChromeBlimpClientContextDelegate implements BlimpClientContextDelegate { |
| +public class ChromeBlimpClientContextDelegate implements BlimpClientContextDelegate, |
| + AccountTrackerService.OnSystemAccountsSeededListener { |
| + |
| + // Blimp client context reference associated with this delegate. |
| + private BlimpClientContext mBlimpClientContext; |
| + |
| /** |
| * Creates a new ChromeBlimpClientContextDelegate that is owned by the caller. It automatically |
| * attaches itself as the sole delegate for the BlimpClientContext attached to the given |
| @@ -34,6 +42,28 @@ public class ChromeBlimpClientContextDelegate implements BlimpClientContextDeleg |
| } |
| /** |
| + * @return {@link BlimpClientContext} object this delegate belongs to. |
| + */ |
| + public BlimpClientContext getBlimpClientContext() { |
| + return mBlimpClientContext; |
| + } |
| + |
| + @Override |
| + public void onSystemAccountsSeedingComplete() { |
| + AccountTrackerService.get(ContextUtils.getApplicationContext()) |
| + .removeSystemAccountsSeededListener(this); |
| + |
| + // Start authentication. |
| + // Must request OAuth2 token after account seeded, or native ProfileOAuth2TokenService might |
| + // revoke the refresh token during request, making token retrieval flaky. |
| + mBlimpClientContext.connect(); |
| + } |
| + |
| + @Override |
| + public void onSystemAccountsChanged() { |
| + } |
| + |
| + /** |
| * The pointer to the ChromeBlimpClientContextDelegateAndroid JNI bridge. |
| */ |
| private long mNativeChromeBlimpClientContextDelegateAndroid; |
| @@ -42,8 +72,15 @@ public class ChromeBlimpClientContextDelegate implements BlimpClientContextDeleg |
| // Create native delegate object. |
| mNativeChromeBlimpClientContextDelegateAndroid = nativeInit(profile); |
| + BlimpClientContext context = BlimpClientContextFactory |
| + .getBlimpClientContextForProfile(profile); |
| + mBlimpClientContext = context; |
| + |
| // Set ourselves as the Java delegate object. |
| - BlimpClientContextFactory.getBlimpClientContextForProfile(profile).setDelegate(this); |
| + mBlimpClientContext.setDelegate(this); |
| + |
| + AccountTrackerService.get(ContextUtils.getApplicationContext()) |
| + .addSystemAccountsSeededListener(this); |
|
nyquist
2016/08/10 01:20:34
If this class is instantiated late (after accounts
xingliu
2016/08/10 21:03:15
Yes, I think so. It has state check, and will dire
|
| } |
| @CalledByNative |
| @@ -53,6 +90,10 @@ public class ChromeBlimpClientContextDelegate implements BlimpClientContextDeleg |
| public void destroy() { |
| assert mNativeChromeBlimpClientContextDelegateAndroid != 0; |
| + |
| + AccountTrackerService.get(ContextUtils.getApplicationContext()) |
| + .removeSystemAccountsSeededListener(this); |
| + |
| nativeDestroy(mNativeChromeBlimpClientContextDelegateAndroid); |
| } |