Commit c6292daa authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Public interface for ChildProcessCreationParams

This CL splits class ChildProcessCreationParams into interface
definition and implementation details, and moves the definition
to content_public. Sldo removes the DEPS exception rules.

Bug: 617324
Change-Id: I27d87fbb0258a208aafa6a932e35b21846b73261
Reviewed-on: https://chromium-review.googlesource.com/1077711Reviewed-by: default avatarMaria Khomenko <mariakhomenko@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#563107}
parent 932bd30c
...@@ -10,7 +10,6 @@ include_rules = [ ...@@ -10,7 +10,6 @@ include_rules = [
"-content/public/android/java", "-content/public/android/java",
"+content/public/android/java/src/org/chromium/content_public", "+content/public/android/java/src/org/chromium/content_public",
"!content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java",
"!content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java", "!content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java",
"+device/gamepad/android/java", "+device/gamepad/android/java",
......
...@@ -31,9 +31,9 @@ import org.chromium.base.library_loader.LibraryLoader; ...@@ -31,9 +31,9 @@ import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.library_loader.ProcessInitException; import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.components.minidump_uploader.CrashFileManager; import org.chromium.components.minidump_uploader.CrashFileManager;
import org.chromium.content.browser.ChildProcessCreationParams;
import org.chromium.content.browser.ChildProcessLauncherHelper; import org.chromium.content.browser.ChildProcessLauncherHelper;
import org.chromium.content_public.browser.BrowserStartupController; import org.chromium.content_public.browser.BrowserStartupController;
import org.chromium.content_public.browser.ChildProcessCreationParams;
import org.chromium.policy.CombinedPolicyProvider; import org.chromium.policy.CombinedPolicyProvider;
import java.io.File; import java.io.File;
...@@ -92,9 +92,9 @@ public final class AwBrowserProcess { ...@@ -92,9 +92,9 @@ public final class AwBrowserProcess {
final boolean isExternalService = true; final boolean isExternalService = true;
final boolean bindToCaller = true; final boolean bindToCaller = true;
final boolean ignoreVisibilityForImportance = true; final boolean ignoreVisibilityForImportance = true;
ChildProcessCreationParams.set(new ChildProcessCreationParams(getWebViewPackageName(), ChildProcessCreationParams.set(getWebViewPackageName(), isExternalService,
isExternalService, LibraryProcessType.PROCESS_WEBVIEW_CHILD, bindToCaller, LibraryProcessType.PROCESS_WEBVIEW_CHILD, bindToCaller,
ignoreVisibilityForImportance)); ignoreVisibilityForImportance);
} }
/** /**
......
...@@ -20,7 +20,6 @@ include_rules = [ ...@@ -20,7 +20,6 @@ include_rules = [
"-content/public/android", "-content/public/android",
"+content/public/android/java/src/org/chromium/content_public", "+content/public/android/java/src/org/chromium/content_public",
"!content/public/android/java/src/org/chromium/content/browser/ChildProcessCreationParams.java",
"!content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java", "!content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java",
"+device/gamepad/android/java", "+device/gamepad/android/java",
......
...@@ -9,7 +9,7 @@ import com.android.webview.chromium.MonochromeLibraryPreloader; ...@@ -9,7 +9,7 @@ import com.android.webview.chromium.MonochromeLibraryPreloader;
import org.chromium.base.library_loader.LibraryLoader; import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.content.browser.ChildProcessCreationParams; import org.chromium.content_public.browser.ChildProcessCreationParams;
/** /**
* This is Application class for Monochrome. * This is Application class for Monochrome.
...@@ -28,8 +28,7 @@ public class MonochromeApplication extends ChromeApplication { ...@@ -28,8 +28,7 @@ public class MonochromeApplication extends ChromeApplication {
// created and set in all processes. // created and set in all processes.
boolean bindToCaller = false; boolean bindToCaller = false;
boolean ignoreVisibilityForImportance = false; boolean ignoreVisibilityForImportance = false;
ChildProcessCreationParams.set(new ChildProcessCreationParams(getPackageName(), ChildProcessCreationParams.set(getPackageName(), true /* isExternalService */,
true /* isExternalService */, LibraryProcessType.PROCESS_CHILD, bindToCaller, LibraryProcessType.PROCESS_CHILD, bindToCaller, ignoreVisibilityForImportance);
ignoreVisibilityForImportance));
} }
} }
...@@ -110,7 +110,7 @@ android_library("content_java") { ...@@ -110,7 +110,7 @@ android_library("content_java") {
"java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java", "java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java",
"java/src/org/chromium/content/browser/BindingManager.java", "java/src/org/chromium/content/browser/BindingManager.java",
"java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java", "java/src/org/chromium/content/browser/BrowserStartupControllerImpl.java",
"java/src/org/chromium/content/browser/ChildProcessCreationParams.java", "java/src/org/chromium/content/browser/ChildProcessCreationParamsImpl.java",
"java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java", "java/src/org/chromium/content/browser/ChildProcessLauncherHelper.java",
"java/src/org/chromium/content/browser/ChildProcessRanking.java", "java/src/org/chromium/content/browser/ChildProcessRanking.java",
"java/src/org/chromium/content/browser/ContentChildProcessConstants.java", "java/src/org/chromium/content/browser/ContentChildProcessConstants.java",
...@@ -230,6 +230,7 @@ android_library("content_java") { ...@@ -230,6 +230,7 @@ android_library("content_java") {
"java/src/org/chromium/content_public/browser/ContentViewStatics.java", "java/src/org/chromium/content_public/browser/ContentViewStatics.java",
"java/src/org/chromium/content_public/browser/DeviceUtils.java", "java/src/org/chromium/content_public/browser/DeviceUtils.java",
"java/src/org/chromium/content_public/browser/InputMethodManagerWrapper.java", "java/src/org/chromium/content_public/browser/InputMethodManagerWrapper.java",
"java/src/org/chromium/content_public/browser/ChildProcessCreationParams.java",
"java/src/org/chromium/content_public/browser/ContentVideoView.java", "java/src/org/chromium/content_public/browser/ContentVideoView.java",
"java/src/org/chromium/content_public/browser/ContentVideoViewEmbedder.java", "java/src/org/chromium/content_public/browser/ContentVideoViewEmbedder.java",
"java/src/org/chromium/content_public/browser/ContentViewCore.java", "java/src/org/chromium/content_public/browser/ContentViewCore.java",
......
...@@ -26,7 +26,7 @@ import org.chromium.base.library_loader.Linker; ...@@ -26,7 +26,7 @@ import org.chromium.base.library_loader.Linker;
import org.chromium.base.library_loader.ProcessInitException; import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.memory.MemoryPressureUma; import org.chromium.base.memory.MemoryPressureUma;
import org.chromium.base.process_launcher.ChildProcessServiceDelegate; import org.chromium.base.process_launcher.ChildProcessServiceDelegate;
import org.chromium.content.browser.ChildProcessCreationParams; import org.chromium.content.browser.ChildProcessCreationParamsImpl;
import org.chromium.content.browser.ContentChildProcessConstants; import org.chromium.content.browser.ContentChildProcessConstants;
import org.chromium.content.common.IGpuProcessCallback; import org.chromium.content.common.IGpuProcessCallback;
import org.chromium.content.common.SurfaceWrapper; import org.chromium.content.common.SurfaceWrapper;
...@@ -69,7 +69,8 @@ public class ContentChildProcessServiceDelegate implements ChildProcessServiceDe ...@@ -69,7 +69,8 @@ public class ContentChildProcessServiceDelegate implements ChildProcessServiceDe
@Override @Override
public void onServiceBound(Intent intent) { public void onServiceBound(Intent intent) {
mLinkerParams = ChromiumLinkerParams.create(intent.getExtras()); mLinkerParams = ChromiumLinkerParams.create(intent.getExtras());
mLibraryProcessType = ChildProcessCreationParams.getLibraryProcessType(intent.getExtras()); mLibraryProcessType =
ChildProcessCreationParamsImpl.getLibraryProcessType(intent.getExtras());
} }
@Override @Override
......
...@@ -10,69 +10,57 @@ import org.chromium.base.ContextUtils; ...@@ -10,69 +10,57 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.library_loader.LibraryProcessType; import org.chromium.base.library_loader.LibraryProcessType;
/** /**
* Allows specifying the package name for looking up child services * Implementation of the interface {@link ChildProcessCreationParams}.
* configuration and classes into (if it differs from the application package
* name, like in the case of Android WebView). Also allows specifying additional
* child service binging flags.
*/ */
public class ChildProcessCreationParams { public class ChildProcessCreationParamsImpl {
private static final String EXTRA_LIBRARY_PROCESS_TYPE = private static final String EXTRA_LIBRARY_PROCESS_TYPE =
"org.chromium.content.common.child_service_params.library_process_type"; "org.chromium.content.common.child_service_params.library_process_type";
private static ChildProcessCreationParams sParams;
/** Set params. This should be called once on start up. */
public static void set(ChildProcessCreationParams params) {
assert sParams == null;
sParams = params;
}
public static ChildProcessCreationParams get() {
return sParams;
}
// Members should all be immutable to avoid worrying about thread safety. // Members should all be immutable to avoid worrying about thread safety.
private final String mPackageNameForService; private static String sPackageNameForService;
private final boolean mIsSandboxedServiceExternal; private static boolean sIsSandboxedServiceExternal;
private final int mLibraryProcessType; private static int sLibraryProcessType;
private final boolean mBindToCallerCheck; private static boolean sBindToCallerCheck;
// Use only the explicit WebContents.setImportance signal, and ignore other implicit // Use only the explicit WebContents.setImportance signal, and ignore other implicit
// signals in content. // signals in content.
private final boolean mIgnoreVisibilityForImportance; private static boolean sIgnoreVisibilityForImportance;
private static boolean sInitialized;
public ChildProcessCreationParams(String packageNameForService, private ChildProcessCreationParamsImpl() {}
boolean isExternalSandboxedService, int libraryProcessType, boolean bindToCallerCheck,
/** Set params. This should be called once on start up. */
public static void set(String packageNameForService, boolean isExternalSandboxedService,
int libraryProcessType, boolean bindToCallerCheck,
boolean ignoreVisibilityForImportance) { boolean ignoreVisibilityForImportance) {
mPackageNameForService = packageNameForService; assert !sInitialized;
mIsSandboxedServiceExternal = isExternalSandboxedService; sPackageNameForService = packageNameForService;
mLibraryProcessType = libraryProcessType; sIsSandboxedServiceExternal = isExternalSandboxedService;
mBindToCallerCheck = bindToCallerCheck; sLibraryProcessType = libraryProcessType;
mIgnoreVisibilityForImportance = ignoreVisibilityForImportance; sBindToCallerCheck = bindToCallerCheck;
sIgnoreVisibilityForImportance = ignoreVisibilityForImportance;
sInitialized = true;
} }
public void addIntentExtras(Bundle extras) { public static void addIntentExtras(Bundle extras) {
extras.putInt(EXTRA_LIBRARY_PROCESS_TYPE, mLibraryProcessType); if (sInitialized) extras.putInt(EXTRA_LIBRARY_PROCESS_TYPE, sLibraryProcessType);
} }
public static String getPackageNameForService() { public static String getPackageNameForService() {
ChildProcessCreationParams params = ChildProcessCreationParams.get(); return sInitialized ? sPackageNameForService
return params != null ? params.mPackageNameForService
: ContextUtils.getApplicationContext().getPackageName(); : ContextUtils.getApplicationContext().getPackageName();
} }
public static boolean getIsSandboxedServiceExternal() { public static boolean getIsSandboxedServiceExternal() {
ChildProcessCreationParams params = ChildProcessCreationParams.get(); return sInitialized && sIsSandboxedServiceExternal;
return params != null && params.mIsSandboxedServiceExternal;
} }
public static boolean getBindToCallerCheck() { public static boolean getBindToCallerCheck() {
ChildProcessCreationParams params = ChildProcessCreationParams.get(); return sInitialized && sBindToCallerCheck;
return params != null && params.mBindToCallerCheck;
} }
public static boolean getIgnoreVisibilityForImportance() { public static boolean getIgnoreVisibilityForImportance() {
ChildProcessCreationParams params = ChildProcessCreationParams.get(); return sInitialized && sIgnoreVisibilityForImportance;
return params != null && params.mIgnoreVisibilityForImportance;
} }
public static int getLibraryProcessType(Bundle extras) { public static int getLibraryProcessType(Bundle extras) {
......
...@@ -320,10 +320,10 @@ public class ChildProcessLauncherHelper { ...@@ -320,10 +320,10 @@ public class ChildProcessLauncherHelper {
@VisibleForTesting @VisibleForTesting
static ChildConnectionAllocator getConnectionAllocator(Context context, boolean sandboxed) { static ChildConnectionAllocator getConnectionAllocator(Context context, boolean sandboxed) {
assert LauncherThread.runningOnLauncherThread(); assert LauncherThread.runningOnLauncherThread();
final String packageName = ChildProcessCreationParams.getPackageNameForService(); final String packageName = ChildProcessCreationParamsImpl.getPackageNameForService();
boolean bindToCaller = ChildProcessCreationParams.getBindToCallerCheck(); boolean bindToCaller = ChildProcessCreationParamsImpl.getBindToCallerCheck();
boolean bindAsExternalService = boolean bindAsExternalService =
sandboxed && ChildProcessCreationParams.getIsSandboxedServiceExternal(); sandboxed && ChildProcessCreationParamsImpl.getIsSandboxedServiceExternal();
if (!sandboxed) { if (!sandboxed) {
if (sPrivilegedChildConnectionAllocator == null) { if (sPrivilegedChildConnectionAllocator == null) {
...@@ -461,7 +461,7 @@ public class ChildProcessLauncherHelper { ...@@ -461,7 +461,7 @@ public class ChildProcessLauncherHelper {
} }
ChildProcessConnection connection = mLauncher.getConnection(); ChildProcessConnection connection = mLauncher.getConnection();
if (ChildProcessCreationParams.getIgnoreVisibilityForImportance()) { if (ChildProcessCreationParamsImpl.getIgnoreVisibilityForImportance()) {
foreground = false; foreground = false;
boostForPendingViews = false; boostForPendingViews = false;
} }
...@@ -580,12 +580,9 @@ public class ChildProcessLauncherHelper { ...@@ -580,12 +580,9 @@ public class ChildProcessLauncherHelper {
} }
private static Bundle populateServiceBundle(Bundle bundle) { private static Bundle populateServiceBundle(Bundle bundle) {
ChildProcessCreationParams creationParams = ChildProcessCreationParams.get(); ChildProcessCreationParamsImpl.addIntentExtras(bundle);
if (creationParams != null) {
creationParams.addIntentExtras(bundle);
}
bundle.putBoolean(ChildProcessConstants.EXTRA_BIND_TO_CALLER, bundle.putBoolean(ChildProcessConstants.EXTRA_BIND_TO_CALLER,
ChildProcessCreationParams.getBindToCallerCheck()); ChildProcessCreationParamsImpl.getBindToCallerCheck());
ChromiumLinkerParams linkerParams = getLinkerParamsForNewConnection(); ChromiumLinkerParams linkerParams = getLinkerParamsForNewConnection();
if (linkerParams != null) linkerParams.populateBundle(bundle); if (linkerParams != null) linkerParams.populateBundle(bundle);
return bundle; return bundle;
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content_public.browser;
import org.chromium.content.browser.ChildProcessCreationParamsImpl;
/**
* Allows specifying the package name for looking up child services
* configuration and classes into (if it differs from the application package
* name, like in the case of Android WebView). Also allows specifying additional
* child service binging flags.
*/
public final class ChildProcessCreationParams {
/** Set params. This should be called once on start up. */
public static void set(String packageNameForService, boolean isExternalSandboxedService,
int libraryProcessType, boolean bindToCallerCheck,
boolean ignoreVisibilityForImportance) {
ChildProcessCreationParamsImpl.set(packageNameForService, isExternalSandboxedService,
libraryProcessType, bindToCallerCheck, ignoreVisibilityForImportance);
}
}
...@@ -149,9 +149,9 @@ public class ChildProcessLauncherHelperTest { ...@@ -149,9 +149,9 @@ public class ChildProcessLauncherHelperTest {
// Launch a service from this process. Since slot 0 is already bound by the Helper, it // Launch a service from this process. Since slot 0 is already bound by the Helper, it
// will fail to start and the ChildProcessLauncher will retry and use the slot 1. // will fail to start and the ChildProcessLauncher will retry and use the slot 1.
ChildProcessCreationParams.set(new ChildProcessCreationParams(context.getPackageName(), ChildProcessCreationParamsImpl.set(context.getPackageName(), false /* isExternalService */,
false /* isExternalService */, LibraryProcessType.PROCESS_CHILD, LibraryProcessType.PROCESS_CHILD, true /* bindToCallerCheck */,
true /* bindToCallerCheck */, false /* ignoreVisibilityForImportance */)); false /* ignoreVisibilityForImportance */);
ChildProcessLauncherHelper launcher = ChildProcessLauncherHelper launcher =
startSandboxedChildProcess(BLOCK_UNTIL_SETUP, true /* doSetupConnection */); startSandboxedChildProcess(BLOCK_UNTIL_SETUP, true /* doSetupConnection */);
...@@ -258,9 +258,9 @@ public class ChildProcessLauncherHelperTest { ...@@ -258,9 +258,9 @@ public class ChildProcessLauncherHelperTest {
@Feature({"ProcessManagement"}) @Feature({"ProcessManagement"})
public void testWarmUpWithBindToCaller() { public void testWarmUpWithBindToCaller() {
Context context = InstrumentationRegistry.getTargetContext(); Context context = InstrumentationRegistry.getTargetContext();
ChildProcessCreationParams.set(new ChildProcessCreationParams(context.getPackageName(), ChildProcessCreationParamsImpl.set(context.getPackageName(), false /* isExternalService */,
false /* isExternalService */, LibraryProcessType.PROCESS_CHILD, LibraryProcessType.PROCESS_CHILD, true /* bindToCallerCheck */,
true /* bindToCallerCheck */, false /* ignoreVisibilityForImportance */)); false /* ignoreVisibilityForImportance */);
testWarmUpImpl(); testWarmUpImpl();
} }
......
...@@ -20,8 +20,8 @@ import org.chromium.base.library_loader.LibraryProcessType; ...@@ -20,8 +20,8 @@ import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.library_loader.ProcessInitException; import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.process_launcher.ChildProcessConnection; import org.chromium.base.process_launcher.ChildProcessConnection;
import org.chromium.base.process_launcher.FileDescriptorInfo; import org.chromium.base.process_launcher.FileDescriptorInfo;
import org.chromium.content.browser.ChildProcessCreationParams;
import org.chromium.content.browser.ChildProcessLauncherHelper; import org.chromium.content.browser.ChildProcessLauncherHelper;
import org.chromium.content_public.browser.ChildProcessCreationParams;
/** /**
* A Service that assists the ChildProcessLauncherTest that responds to one message, which * A Service that assists the ChildProcessLauncherTest that responds to one message, which
...@@ -77,9 +77,8 @@ public class ChildProcessLauncherTestHelperService extends Service { ...@@ -77,9 +77,8 @@ public class ChildProcessLauncherTestHelperService extends Service {
private void doBindService(final Message msg) { private void doBindService(final Message msg) {
String[] commandLine = { "_", "--" + BaseSwitches.RENDERER_WAIT_FOR_JAVA_DEBUGGER }; String[] commandLine = { "_", "--" + BaseSwitches.RENDERER_WAIT_FOR_JAVA_DEBUGGER };
final boolean bindToCaller = true; final boolean bindToCaller = true;
ChildProcessCreationParams.set(new ChildProcessCreationParams(getPackageName(), false, ChildProcessCreationParams.set(getPackageName(), false, LibraryProcessType.PROCESS_CHILD,
LibraryProcessType.PROCESS_CHILD, bindToCaller, bindToCaller, false /* ignoreVisibilityForImportance */);
false /* ignoreVisibilityForImportance */));
mProcessLauncher = ChildProcessLauncherTestUtils.startForTesting(true /* sandboxed */, mProcessLauncher = ChildProcessLauncherTestUtils.startForTesting(true /* sandboxed */,
commandLine, new FileDescriptorInfo[0], true /* doSetupConnection */); commandLine, new FileDescriptorInfo[0], true /* doSetupConnection */);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment