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) { |