| Index: base/android/java/src/org/chromium/base/PathUtils.java
 | 
| diff --git a/base/android/java/src/org/chromium/base/PathUtils.java b/base/android/java/src/org/chromium/base/PathUtils.java
 | 
| index 00977d56d576ac94335c6ab0578a86c75b1c2833..1546e001b94f7bb08232759f7bbcddbbcf5a0a9c 100644
 | 
| --- a/base/android/java/src/org/chromium/base/PathUtils.java
 | 
| +++ b/base/android/java/src/org/chromium/base/PathUtils.java
 | 
| @@ -34,9 +34,13 @@ public abstract class PathUtils {
 | 
|      private static final AtomicBoolean sInitializationStarted = new AtomicBoolean();
 | 
|      private static AsyncTask<Void, Void, String[]> sDirPathFetchTask;
 | 
|  
 | 
| -    // If the AsyncTask started in setPrivateDataDirectorySuffix() fails to complete by the time we
 | 
| -    // need the values, we will need the suffix so that we can restart the task synchronously on
 | 
| -    // the UI thread.
 | 
| +    // In setPrivateDataDirectorySuffix(), we store the app's context. If the AsyncTask started in
 | 
| +    // setPrivateDataDirectorySuffix() fails to complete by the time we need the values, we will
 | 
| +    // need the context so that we can restart the task synchronously on the UI thread.
 | 
| +    private static Context sDataDirectoryAppContext;
 | 
| +
 | 
| +    // We also store the directory path suffix from setPrivateDataDirectorySuffix() for the same
 | 
| +    // reason as above.
 | 
|      private static String sDataDirectorySuffix;
 | 
|  
 | 
|      // Prevent instantiation.
 | 
| @@ -97,14 +101,13 @@ public abstract class PathUtils {
 | 
|       */
 | 
|      private static String[] setPrivateDataDirectorySuffixInternal() {
 | 
|          String[] paths = new String[NUM_DIRECTORIES];
 | 
| -        Context appContext = ContextUtils.getApplicationContext();
 | 
| -        paths[DATA_DIRECTORY] = appContext.getDir(
 | 
| -                sDataDirectorySuffix, Context.MODE_PRIVATE).getPath();
 | 
| -        paths[THUMBNAIL_DIRECTORY] = appContext.getDir(
 | 
| +        paths[DATA_DIRECTORY] = sDataDirectoryAppContext.getDir(sDataDirectorySuffix,
 | 
| +                Context.MODE_PRIVATE).getPath();
 | 
| +        paths[THUMBNAIL_DIRECTORY] = sDataDirectoryAppContext.getDir(
 | 
|                  THUMBNAIL_DIRECTORY_NAME, Context.MODE_PRIVATE).getPath();
 | 
| -        paths[DATABASE_DIRECTORY] = appContext.getDatabasePath("foo").getParent();
 | 
| -        if (appContext.getCacheDir() != null) {
 | 
| -            paths[CACHE_DIRECTORY] = appContext.getCacheDir().getPath();
 | 
| +        paths[DATABASE_DIRECTORY] = sDataDirectoryAppContext.getDatabasePath("foo").getParent();
 | 
| +        if (sDataDirectoryAppContext.getCacheDir() != null) {
 | 
| +            paths[CACHE_DIRECTORY] = sDataDirectoryAppContext.getCacheDir().getPath();
 | 
|          }
 | 
|          return paths;
 | 
|      }
 | 
| @@ -121,12 +124,12 @@ public abstract class PathUtils {
 | 
|       * @param suffix The private data directory suffix.
 | 
|       * @see Context#getDir(String, int)
 | 
|       */
 | 
| -    public static void setPrivateDataDirectorySuffix(String suffix) {
 | 
| +    public static void setPrivateDataDirectorySuffix(String suffix, Context context) {
 | 
|          // This method should only be called once, but many tests end up calling it multiple times,
 | 
|          // so adding a guard here.
 | 
|          if (!sInitializationStarted.getAndSet(true)) {
 | 
| -            assert ContextUtils.getApplicationContext() != null;
 | 
|              sDataDirectorySuffix = suffix;
 | 
| +            sDataDirectoryAppContext = context.getApplicationContext();
 | 
|              sDirPathFetchTask = new AsyncTask<Void, Void, String[]>() {
 | 
|                  @Override
 | 
|                  protected String[] doInBackground(Void... unused) {
 | 
| 
 |