| Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java
|
| index 1401866a9327af33e8acf65a3bfcab3ad17f21e9..89d356d2f2cad5cfb81c809eed84d4aa7218de9c 100644
|
| --- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java
|
| +++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnection.java
|
| @@ -24,6 +24,8 @@ import org.chromium.base.CpuFeatures;
|
| import org.chromium.base.SysUtils;
|
| import org.chromium.base.ThreadUtils;
|
| import org.chromium.content.app.ChildProcessService;
|
| +import org.chromium.content.app.Linker;
|
| +import org.chromium.content.app.LinkerParams;
|
| import org.chromium.content.common.CommandLine;
|
| import org.chromium.content.common.IChildProcessCallback;
|
| import org.chromium.content.common.IChildProcessService;
|
| @@ -103,18 +105,23 @@ public class ChildProcessConnection {
|
| // Incremented on attachAsActive(), decremented on detachAsActive().
|
| private int mAttachAsActiveCount = 0;
|
|
|
| + // Linker-related parameters.
|
| + private LinkerParams mLinkerParams = null;
|
| +
|
| private static final String TAG = "ChildProcessConnection";
|
|
|
| private static class ConnectionParams {
|
| final String[] mCommandLine;
|
| final FileDescriptorInfo[] mFilesToBeMapped;
|
| final IChildProcessCallback mCallback;
|
| + final Bundle mSharedRelros;
|
|
|
| ConnectionParams(String[] commandLine, FileDescriptorInfo[] filesToBeMapped,
|
| - IChildProcessCallback callback) {
|
| + IChildProcessCallback callback, Bundle sharedRelros) {
|
| mCommandLine = commandLine;
|
| mFilesToBeMapped = filesToBeMapped;
|
| mCallback = callback;
|
| + mSharedRelros = sharedRelros;
|
| }
|
| }
|
|
|
| @@ -142,6 +149,8 @@ public class ChildProcessConnection {
|
| if (commandLine != null) {
|
| intent.putExtra(EXTRA_COMMAND_LINE, commandLine);
|
| }
|
| + if (mLinkerParams != null)
|
| + mLinkerParams.addIntentExtras(intent);
|
| mBound = mContext.bindService(intent, this, mBindFlags);
|
| }
|
| return mBound;
|
| @@ -204,12 +213,14 @@ public class ChildProcessConnection {
|
|
|
| ChildProcessConnection(Context context, int number, boolean inSandbox,
|
| ChildProcessConnection.DeathCallback deathCallback,
|
| - Class<? extends ChildProcessService> serviceClass) {
|
| + Class<? extends ChildProcessService> serviceClass,
|
| + LinkerParams linkerParams) {
|
| mContext = context;
|
| mServiceNumber = number;
|
| mInSandbox = inSandbox;
|
| mDeathCallback = deathCallback;
|
| mServiceClass = serviceClass;
|
| + mLinkerParams = linkerParams;
|
| mInitialBinding = new ChildServiceConnection(Context.BIND_AUTO_CREATE);
|
| mStrongBinding = new ChildServiceConnection(
|
| Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT);
|
| @@ -273,12 +284,14 @@ public class ChildProcessConnection {
|
| String[] commandLine,
|
| FileDescriptorInfo[] filesToBeMapped,
|
| IChildProcessCallback processCallback,
|
| - ConnectionCallback connectionCallbacks) {
|
| + ConnectionCallback connectionCallbacks,
|
| + Bundle sharedRelros) {
|
| synchronized(mLock) {
|
| TraceEvent.begin();
|
| assert mConnectionParams == null;
|
| mConnectionCallback = connectionCallbacks;
|
| - mConnectionParams = new ConnectionParams(commandLine, filesToBeMapped, processCallback);
|
| + mConnectionParams = new ConnectionParams(
|
| + commandLine, filesToBeMapped, processCallback, sharedRelros);
|
| // Make sure that the service is already connected. If not, doConnectionSetup() will be
|
| // called from onServiceConnected().
|
| if (mServiceConnectComplete) {
|
| @@ -361,6 +374,9 @@ public class ChildProcessConnection {
|
| bundle.putInt(EXTRA_CPU_COUNT, CpuFeatures.getCount());
|
| bundle.putLong(EXTRA_CPU_FEATURES, CpuFeatures.getMask());
|
|
|
| + bundle.putBundle(Linker.EXTRA_LINKER_SHARED_RELROS,
|
| + mConnectionParams.mSharedRelros);
|
| +
|
| try {
|
| mPID = mService.setupConnection(bundle, mConnectionParams.mCallback);
|
| } catch (android.os.RemoteException re) {
|
|
|