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 = [
"-content/public/android/java",
"+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",
"+device/gamepad/android/java",
......
......@@ -31,9 +31,9 @@ import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.components.minidump_uploader.CrashFileManager;
import org.chromium.content.browser.ChildProcessCreationParams;
import org.chromium.content.browser.ChildProcessLauncherHelper;
import org.chromium.content_public.browser.BrowserStartupController;
import org.chromium.content_public.browser.ChildProcessCreationParams;
import org.chromium.policy.CombinedPolicyProvider;
import java.io.File;
......@@ -92,9 +92,9 @@ public final class AwBrowserProcess {
final boolean isExternalService = true;
final boolean bindToCaller = true;
final boolean ignoreVisibilityForImportance = true;
ChildProcessCreationParams.set(new ChildProcessCreationParams(getWebViewPackageName(),
isExternalService, LibraryProcessType.PROCESS_WEBVIEW_CHILD, bindToCaller,
ignoreVisibilityForImportance));
ChildProcessCreationParams.set(getWebViewPackageName(), isExternalService,
LibraryProcessType.PROCESS_WEBVIEW_CHILD, bindToCaller,
ignoreVisibilityForImportance);
}
/**
......
......@@ -20,7 +20,6 @@ include_rules = [
"-content/public/android",
"+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",
"+device/gamepad/android/java",
......
......@@ -9,7 +9,7 @@ import com.android.webview.chromium.MonochromeLibraryPreloader;
import org.chromium.base.library_loader.LibraryLoader;
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.
......@@ -28,8 +28,7 @@ public class MonochromeApplication extends ChromeApplication {
// created and set in all processes.
boolean bindToCaller = false;
boolean ignoreVisibilityForImportance = false;
ChildProcessCreationParams.set(new ChildProcessCreationParams(getPackageName(),
true /* isExternalService */, LibraryProcessType.PROCESS_CHILD, bindToCaller,
ignoreVisibilityForImportance));
ChildProcessCreationParams.set(getPackageName(), true /* isExternalService */,
LibraryProcessType.PROCESS_CHILD, bindToCaller, ignoreVisibilityForImportance);
}
}
......@@ -110,7 +110,7 @@ android_library("content_java") {
"java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java",
"java/src/org/chromium/content/browser/BindingManager.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/ChildProcessRanking.java",
"java/src/org/chromium/content/browser/ContentChildProcessConstants.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/DeviceUtils.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/ContentVideoViewEmbedder.java",
"java/src/org/chromium/content_public/browser/ContentViewCore.java",
......
......@@ -26,7 +26,7 @@ import org.chromium.base.library_loader.Linker;
import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.memory.MemoryPressureUma;
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.common.IGpuProcessCallback;
import org.chromium.content.common.SurfaceWrapper;
......@@ -69,7 +69,8 @@ public class ContentChildProcessServiceDelegate implements ChildProcessServiceDe
@Override
public void onServiceBound(Intent intent) {
mLinkerParams = ChromiumLinkerParams.create(intent.getExtras());
mLibraryProcessType = ChildProcessCreationParams.getLibraryProcessType(intent.getExtras());
mLibraryProcessType =
ChildProcessCreationParamsImpl.getLibraryProcessType(intent.getExtras());
}
@Override
......
......@@ -10,69 +10,57 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.library_loader.LibraryProcessType;
/**
* 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.
* Implementation of the interface {@link ChildProcessCreationParams}.
*/
public class ChildProcessCreationParams {
public class ChildProcessCreationParamsImpl {
private static final String EXTRA_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.
private final String mPackageNameForService;
private final boolean mIsSandboxedServiceExternal;
private final int mLibraryProcessType;
private final boolean mBindToCallerCheck;
private static String sPackageNameForService;
private static boolean sIsSandboxedServiceExternal;
private static int sLibraryProcessType;
private static boolean sBindToCallerCheck;
// Use only the explicit WebContents.setImportance signal, and ignore other implicit
// signals in content.
private final boolean mIgnoreVisibilityForImportance;
private static boolean sIgnoreVisibilityForImportance;
private static boolean sInitialized;
public ChildProcessCreationParams(String packageNameForService,
boolean isExternalSandboxedService, int libraryProcessType, boolean bindToCallerCheck,
private ChildProcessCreationParamsImpl() {}
/** Set params. This should be called once on start up. */
public static void set(String packageNameForService, boolean isExternalSandboxedService,
int libraryProcessType, boolean bindToCallerCheck,
boolean ignoreVisibilityForImportance) {
mPackageNameForService = packageNameForService;
mIsSandboxedServiceExternal = isExternalSandboxedService;
mLibraryProcessType = libraryProcessType;
mBindToCallerCheck = bindToCallerCheck;
mIgnoreVisibilityForImportance = ignoreVisibilityForImportance;
assert !sInitialized;
sPackageNameForService = packageNameForService;
sIsSandboxedServiceExternal = isExternalSandboxedService;
sLibraryProcessType = libraryProcessType;
sBindToCallerCheck = bindToCallerCheck;
sIgnoreVisibilityForImportance = ignoreVisibilityForImportance;
sInitialized = true;
}
public void addIntentExtras(Bundle extras) {
extras.putInt(EXTRA_LIBRARY_PROCESS_TYPE, mLibraryProcessType);
public static void addIntentExtras(Bundle extras) {
if (sInitialized) extras.putInt(EXTRA_LIBRARY_PROCESS_TYPE, sLibraryProcessType);
}
public static String getPackageNameForService() {
ChildProcessCreationParams params = ChildProcessCreationParams.get();
return params != null ? params.mPackageNameForService
: ContextUtils.getApplicationContext().getPackageName();
return sInitialized ? sPackageNameForService
: ContextUtils.getApplicationContext().getPackageName();
}
public static boolean getIsSandboxedServiceExternal() {
ChildProcessCreationParams params = ChildProcessCreationParams.get();
return params != null && params.mIsSandboxedServiceExternal;
return sInitialized && sIsSandboxedServiceExternal;
}
public static boolean getBindToCallerCheck() {
ChildProcessCreationParams params = ChildProcessCreationParams.get();
return params != null && params.mBindToCallerCheck;
return sInitialized && sBindToCallerCheck;
}
public static boolean getIgnoreVisibilityForImportance() {
ChildProcessCreationParams params = ChildProcessCreationParams.get();
return params != null && params.mIgnoreVisibilityForImportance;
return sInitialized && sIgnoreVisibilityForImportance;
}
public static int getLibraryProcessType(Bundle extras) {
......
......@@ -320,10 +320,10 @@ public class ChildProcessLauncherHelper {
@VisibleForTesting
static ChildConnectionAllocator getConnectionAllocator(Context context, boolean sandboxed) {
assert LauncherThread.runningOnLauncherThread();
final String packageName = ChildProcessCreationParams.getPackageNameForService();
boolean bindToCaller = ChildProcessCreationParams.getBindToCallerCheck();
final String packageName = ChildProcessCreationParamsImpl.getPackageNameForService();
boolean bindToCaller = ChildProcessCreationParamsImpl.getBindToCallerCheck();
boolean bindAsExternalService =
sandboxed && ChildProcessCreationParams.getIsSandboxedServiceExternal();
sandboxed && ChildProcessCreationParamsImpl.getIsSandboxedServiceExternal();
if (!sandboxed) {
if (sPrivilegedChildConnectionAllocator == null) {
......@@ -461,7 +461,7 @@ public class ChildProcessLauncherHelper {
}
ChildProcessConnection connection = mLauncher.getConnection();
if (ChildProcessCreationParams.getIgnoreVisibilityForImportance()) {
if (ChildProcessCreationParamsImpl.getIgnoreVisibilityForImportance()) {
foreground = false;
boostForPendingViews = false;
}
......@@ -580,12 +580,9 @@ public class ChildProcessLauncherHelper {
}
private static Bundle populateServiceBundle(Bundle bundle) {
ChildProcessCreationParams creationParams = ChildProcessCreationParams.get();
if (creationParams != null) {
creationParams.addIntentExtras(bundle);
}
ChildProcessCreationParamsImpl.addIntentExtras(bundle);
bundle.putBoolean(ChildProcessConstants.EXTRA_BIND_TO_CALLER,
ChildProcessCreationParams.getBindToCallerCheck());
ChildProcessCreationParamsImpl.getBindToCallerCheck());
ChromiumLinkerParams linkerParams = getLinkerParamsForNewConnection();
if (linkerParams != null) linkerParams.populateBundle(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 {
// 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.
ChildProcessCreationParams.set(new ChildProcessCreationParams(context.getPackageName(),
false /* isExternalService */, LibraryProcessType.PROCESS_CHILD,
true /* bindToCallerCheck */, false /* ignoreVisibilityForImportance */));
ChildProcessCreationParamsImpl.set(context.getPackageName(), false /* isExternalService */,
LibraryProcessType.PROCESS_CHILD, true /* bindToCallerCheck */,
false /* ignoreVisibilityForImportance */);
ChildProcessLauncherHelper launcher =
startSandboxedChildProcess(BLOCK_UNTIL_SETUP, true /* doSetupConnection */);
......@@ -258,9 +258,9 @@ public class ChildProcessLauncherHelperTest {
@Feature({"ProcessManagement"})
public void testWarmUpWithBindToCaller() {
Context context = InstrumentationRegistry.getTargetContext();
ChildProcessCreationParams.set(new ChildProcessCreationParams(context.getPackageName(),
false /* isExternalService */, LibraryProcessType.PROCESS_CHILD,
true /* bindToCallerCheck */, false /* ignoreVisibilityForImportance */));
ChildProcessCreationParamsImpl.set(context.getPackageName(), false /* isExternalService */,
LibraryProcessType.PROCESS_CHILD, true /* bindToCallerCheck */,
false /* ignoreVisibilityForImportance */);
testWarmUpImpl();
}
......
......@@ -20,8 +20,8 @@ import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.library_loader.ProcessInitException;
import org.chromium.base.process_launcher.ChildProcessConnection;
import org.chromium.base.process_launcher.FileDescriptorInfo;
import org.chromium.content.browser.ChildProcessCreationParams;
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
......@@ -77,9 +77,8 @@ public class ChildProcessLauncherTestHelperService extends Service {
private void doBindService(final Message msg) {
String[] commandLine = { "_", "--" + BaseSwitches.RENDERER_WAIT_FOR_JAVA_DEBUGGER };
final boolean bindToCaller = true;
ChildProcessCreationParams.set(new ChildProcessCreationParams(getPackageName(), false,
LibraryProcessType.PROCESS_CHILD, bindToCaller,
false /* ignoreVisibilityForImportance */));
ChildProcessCreationParams.set(getPackageName(), false, LibraryProcessType.PROCESS_CHILD,
bindToCaller, false /* ignoreVisibilityForImportance */);
mProcessLauncher = ChildProcessLauncherTestUtils.startForTesting(true /* sandboxed */,
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