Index: chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java |
index 526353144a8e24d42c64c51498640895180f10a2..a171ca0041e19032c1b86ae03f5716b2cd3cfa3d 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/VariationsSession.java |
@@ -13,39 +13,61 @@ import org.chromium.base.Callback; |
* triggering seed fetches on application startup. |
*/ |
public class VariationsSession { |
- private boolean mInitialized; |
+ private boolean mRestrictModeFetchStarted; |
private String mRestrictMode; |
/** |
* Triggers to the native VariationsService that the application has entered the foreground. |
*/ |
public void start(Context context) { |
- if (!mInitialized) { |
- mInitialized = true; |
- // Check the restrict mode only once initially to avoid doing extra work each time the |
- // app enters foreground. |
- getRestrictMode(context, new Callback<String>() { |
- @Override |
- public void onResult(String restrictMode) { |
- assert restrictMode != null; |
- mRestrictMode = restrictMode; |
- nativeStartVariationsSession(mRestrictMode); |
- } |
- }); |
- // If |mRestrictMode| is null, async initialization is in progress and |
- // nativeStartVariationsSession will be called when it completes. |
- } else if (mRestrictMode != null) { |
- nativeStartVariationsSession(mRestrictMode); |
+ // If |mRestrictModeFetchStarted| is true and |mRestrictMode| is null, then async |
+ // initializationn is in progress and nativeStartVariationsSession() will be called |
+ // when it completes. |
+ if (mRestrictModeFetchStarted && mRestrictMode == null) { |
+ return; |
} |
+ |
+ mRestrictModeFetchStarted = true; |
+ getRestrictModeValue(context, new Callback<String>() { |
+ @Override |
+ public void onResult(String restrictMode) { |
+ nativeStartVariationsSession(mRestrictMode); |
+ } |
+ }); |
+ } |
+ |
+ /** |
+ * Asynchronously returns the value of the "restrict" URL param that the variations service |
+ * should use for variation seed requests. Public version that can be called externally. |
+ * Uses the protected version (that could be overridden by subclasses) to actually get the |
+ * value and also sets that value internally when retrieved. |
+ * @param callback Callback that will be called with the param value when available. |
+ */ |
+ public final void getRestrictModeValue(Context context, final Callback<String> callback) { |
+ // If |mRestrictMode| is not null, the value has already been fetched and so it can |
+ // simply be provided to the callback. |
+ if (mRestrictMode != null) { |
+ callback.onResult(mRestrictMode); |
+ return; |
+ } |
+ getRestrictMode(context, new Callback<String>() { |
Ted C
2017/04/07 19:13:43
Ok...overthinking this even more (something that v
Alexei Svitkine (slow)
2017/04/07 19:18:53
Right. I don't think the above is necessary at thi
|
+ @Override |
+ public void onResult(String restrictMode) { |
+ assert restrictMode != null; |
+ mRestrictMode = restrictMode; |
+ callback.onResult(restrictMode); |
+ } |
+ }); |
} |
/** |
* Asynchronously returns the value of the "restrict" URL param that the variations service |
- * should use for variation seed requests. |
+ * should use for variation seed requests. This can be overriden by subclass to provide actual |
+ * restrict values, which must not be null. |
*/ |
protected void getRestrictMode(Context context, Callback<String> callback) { |
callback.onResult(""); |
} |
- private native void nativeStartVariationsSession(String restrictMode); |
+ protected native void nativeStartVariationsSession(String restrictMode); |
} |