Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java |
| diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java |
| index a8fd972bb4d0cf249b8c33f0fdb5934c514ba76b..d7a13aaa0b8ce00216e788ef09d047d6021f406c 100644 |
| --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java |
| +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java |
| @@ -5,6 +5,7 @@ |
| package org.chromium.content.browser; |
| import android.content.Intent; |
| +import android.util.SparseArray; |
| import org.chromium.base.library_loader.LibraryProcessType; |
| @@ -15,22 +16,59 @@ import org.chromium.base.library_loader.LibraryProcessType; |
| * specifying additional child service binging flags. |
| */ |
| public class ChildProcessCreationParams { |
| - private final String mPackageName; |
| - private final boolean mIsExternalService; |
| - private final int mLibraryProcessType; |
| private static final String EXTRA_LIBRARY_PROCESS_TYPE = |
| "org.chromium.content.common.child_service_params.library_process_type"; |
| - private static volatile ChildProcessCreationParams sChildProcessCreationParams; |
| + /** ID used for the default params. */ |
| + public static final int DEFAULT_ID = 0; |
| + private static final Object sLock = new Object(); |
| + private static int sNextId = 1; // 0 is reserved for DEFAULT_ID. |
|
Ted C
2017/02/27 22:25:17
nit put this below the finals
boliu
2017/02/27 23:43:02
Done.
|
| + private static final SparseArray<ChildProcessCreationParams> sParamMap = new SparseArray<>(); |
| + |
| + /** Register default params. This should be called once on start up. */ |
| + public static void registerDefault(ChildProcessCreationParams params) { |
| + synchronized (sLock) { |
| + sParamMap.append(DEFAULT_ID, params); |
|
Ted C
2017/02/27 22:25:17
maybe add a TODO to do something like:
assert get
boliu
2017/02/27 23:43:01
Done.
|
| + } |
| + } |
| + |
| + // TODO(boliu): Make package visible once WebApk is fixed. |
| + public static ChildProcessCreationParams getDefault() { |
| + return get(DEFAULT_ID); |
| + } |
| - public static void set(ChildProcessCreationParams params) { |
| - sChildProcessCreationParams = params; |
| + /** Register new params. Returns the allocated ID corresponding this params. */ |
| + public static int register(ChildProcessCreationParams params) { |
| + assert params != null; |
| + int id = -1; |
| + synchronized (sLock) { |
| + id = sNextId++; |
| + sParamMap.append(id, params); |
| + } |
| + assert id > 0; |
| + return id; |
| } |
| - public static ChildProcessCreationParams get() { |
| - return sChildProcessCreationParams; |
| + /** Releases param corresponding to this ID. Any future use of this ID will crash. */ |
| + public static void unregister(int id) { |
| + assert id > DEFAULT_ID; // Not allowed to unregister default. |
| + synchronized (sLock) { |
| + sParamMap.delete(id); |
| + } |
| } |
| + static ChildProcessCreationParams get(int id) { |
| + assert id >= 0; |
| + synchronized (sLock) { |
| + return sParamMap.get(id); |
| + } |
| + } |
| + |
| + // Members should all be immutable to avoid worrying about thread safety. |
| + private final String mPackageName; |
| + private final boolean mIsExternalService; |
| + private final int mLibraryProcessType; |
| + |
| public ChildProcessCreationParams(String packageName, boolean isExternalService, |
| int libraryProcessType) { |
| mPackageName = packageName; |
| @@ -38,24 +76,19 @@ public class ChildProcessCreationParams { |
| mLibraryProcessType = libraryProcessType; |
| } |
| - public ChildProcessCreationParams copy() { |
| - return new ChildProcessCreationParams(mPackageName, mIsExternalService, |
| - mLibraryProcessType); |
| - } |
| - |
| - public String getPackageName() { |
| + String getPackageName() { |
| return mPackageName; |
| } |
| - public boolean getIsExternalService() { |
| + boolean getIsExternalService() { |
| return mIsExternalService; |
| } |
| - public int getLibraryProcessType() { |
| + int getLibraryProcessType() { |
| return mLibraryProcessType; |
| } |
| - public void addIntentExtras(Intent intent) { |
| + void addIntentExtras(Intent intent) { |
| intent.putExtra(EXTRA_LIBRARY_PROCESS_TYPE, mLibraryProcessType); |
| } |