| Index: base/android/java/src/org/chromium/base/ContextUtils.java
|
| diff --git a/base/android/java/src/org/chromium/base/ContextUtils.java b/base/android/java/src/org/chromium/base/ContextUtils.java
|
| index 95cdc4015348dd0af75da09e14d0955f82f22edb..51adcff8f67375a4bf0507fedfeecf72daa07396 100644
|
| --- a/base/android/java/src/org/chromium/base/ContextUtils.java
|
| +++ b/base/android/java/src/org/chromium/base/ContextUtils.java
|
| @@ -6,6 +6,7 @@
|
|
|
| import android.content.Context;
|
|
|
| +import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.base.annotations.JNINamespace;
|
|
|
| /**
|
| @@ -13,7 +14,6 @@
|
| */
|
| @JNINamespace("base::android")
|
| public class ContextUtils {
|
| - private static final String TAG = "ContextUtils";
|
| private static Context sApplicationContext;
|
|
|
| /**
|
| @@ -29,52 +29,34 @@
|
| * may make is that it is a Context whose lifetime is the same as the lifetime of the process.
|
| */
|
| public static Context getApplicationContext() {
|
| + assert sApplicationContext != null;
|
| return sApplicationContext;
|
| }
|
|
|
| /**
|
| - * Initializes the java application context.
|
| + * Initialize the Android application context.
|
| *
|
| - * This should be called exactly once early on during startup, before native is loaded and
|
| - * before any other clients make use of the application context through this class.
|
| - *
|
| - * @param appContext The application context.
|
| + * Either this or the native equivalent base::android::InitApplicationContext must be called
|
| + * once during startup. JNI bindings must have been initialized, as the context is stored on
|
| + * both sides.
|
| */
|
| public static void initApplicationContext(Context appContext) {
|
| - // Conceding that occasionally in tests, native is loaded before the browser process is
|
| - // started, in which case the browser process re-sets the application context.
|
| - if (sApplicationContext != null && sApplicationContext != appContext) {
|
| - throw new RuntimeException("Attempting to set multiple global application contexts.");
|
| - }
|
| + assert appContext != null;
|
| + assert sApplicationContext == null || sApplicationContext == appContext;
|
| + initJavaSideApplicationContext(appContext);
|
| + nativeInitNativeSideApplicationContext(appContext);
|
| + }
|
| +
|
| + /**
|
| + * JUnit Robolectric tests run without native code; allow them to set just the Java-side
|
| + * context. Do not use in configurations that actually run on Android!
|
| + */
|
| + public static void initApplicationContextForJUnitTests(Context appContext) {
|
| initJavaSideApplicationContext(appContext);
|
| }
|
|
|
| - /**
|
| - * Initialize the native Android application context to be the same as the java counter-part.
|
| - */
|
| - public static void initApplicationContextForNative() {
|
| - if (sApplicationContext == null) {
|
| - throw new RuntimeException("Cannot have native global application context be null.");
|
| - }
|
| - nativeInitNativeSideApplicationContext(sApplicationContext);
|
| - }
|
| -
|
| - /**
|
| - * Occasionally tests cannot ensure the application context doesn't change between tests (junit)
|
| - * and sometimes specific tests has its own special needs, initApplicationContext should be used
|
| - * as much as possible, but this method can be used to override it.
|
| - *
|
| - * @param appContext The new application context.
|
| - */
|
| - @VisibleForTesting
|
| - public static void initApplicationContextForTests(Context appContext) {
|
| - initJavaSideApplicationContext(appContext);
|
| - }
|
| -
|
| + @CalledByNative
|
| private static void initJavaSideApplicationContext(Context appContext) {
|
| - if (appContext == null) {
|
| - throw new RuntimeException("Global application context cannot be set to null.");
|
| - }
|
| sApplicationContext = appContext;
|
| }
|
|
|
|
|