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 509663b8df7c97f3ec1a8e88528c702f068b1cc2..8169ef3af3f580cf33673a9d70055879729af563 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 |
@@ -19,11 +19,9 @@ import org.chromium.base.Log; |
import org.chromium.base.TraceEvent; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.base.process_launcher.ChildProcessCreationParams; |
-import org.chromium.base.process_launcher.FileDescriptorInfo; |
import org.chromium.base.process_launcher.ICallbackInt; |
import org.chromium.base.process_launcher.IChildProcessService; |
-import java.io.IOException; |
import java.util.HashMap; |
import java.util.Map; |
@@ -166,14 +164,11 @@ public class ChildProcessConnection { |
private final ChildProcessCreationParams mCreationParams; |
private static class ConnectionParams { |
- final String[] mCommandLine; |
- final FileDescriptorInfo[] mFilesToBeMapped; |
+ final Bundle mConnectionBundle; |
final IBinder mCallback; |
- ConnectionParams( |
- String[] commandLine, FileDescriptorInfo[] filesToBeMapped, IBinder callback) { |
- mCommandLine = commandLine; |
- mFilesToBeMapped = filesToBeMapped; |
+ ConnectionParams(Bundle connectionBundle, IBinder callback) { |
+ mConnectionBundle = connectionBundle; |
mCallback = callback; |
} |
} |
@@ -181,8 +176,8 @@ public class ChildProcessConnection { |
// This is set in start() and is used in onServiceConnected(). |
private StartCallback mStartCallback; |
- // This is set in setupConnection() and is later used in doConnectionSetupLocked(), after which |
- // the variable is cleared. Therefore this is only valid while the connection is being set up. |
+ // This is set in setupConnection() and is later used in doConnectionSetup(), after which the |
+ // variable is cleared. Therefore this is only valid while the connection is being set up. |
private ConnectionParams mConnectionParams; |
// Callback provided in setupConnection() that will communicate the result to the caller. This |
@@ -315,16 +310,16 @@ public class ChildProcessConnection { |
} |
/** |
- * Setups the connection after it was started with start(). |
- * @param commandLine (optional) will be ignored if the command line was already sent in start() |
- * @param filesToBeMapped a list of file descriptors that should be registered |
+ * Sets-up the connection after it was started with start(). |
+ * @param connectionBundle a bundle passed to the service that can be used to pass various |
+ * parameters to the service |
* @param callback optional client specified callbacks that the child can use to communicate |
* with the parent process |
* @param connectionCallback will be called exactly once after the connection is set up or the |
* setup fails |
*/ |
- public void setupConnection(String[] commandLine, FileDescriptorInfo[] filesToBeMapped, |
- @Nullable IBinder callback, ConnectionCallback connectionCallback) { |
+ public void setupConnection(Bundle connectionBundle, @Nullable IBinder callback, |
+ ConnectionCallback connectionCallback) { |
assert LauncherThread.runningOnLauncherThread(); |
assert mConnectionParams == null; |
if (mServiceDisconnected) { |
@@ -335,11 +330,11 @@ public class ChildProcessConnection { |
try { |
TraceEvent.begin("ChildProcessConnection.setupConnection"); |
mConnectionCallback = connectionCallback; |
- mConnectionParams = new ConnectionParams(commandLine, filesToBeMapped, callback); |
- // Run the setup if the service is already connected. If not, |
- // doConnectionSetupLocked() will be called from onServiceConnected(). |
+ mConnectionParams = new ConnectionParams(connectionBundle, callback); |
+ // Run the setup if the service is already connected. If not, doConnectionSetup() will |
+ // be called from onServiceConnected(). |
if (mServiceConnectComplete) { |
- doConnectionSetupLocked(); |
+ doConnectionSetup(); |
} |
} finally { |
TraceEvent.end("ChildProcessConnection.setupConnection"); |
@@ -399,9 +394,9 @@ public class ChildProcessConnection { |
mServiceConnectComplete = true; |
// Run the setup if the connection parameters have already been provided. If |
- // not, doConnectionSetupLocked() will be called from setupConnection(). |
+ // not, doConnectionSetup() will be called from setupConnection(). |
if (mConnectionParams != null) { |
- doConnectionSetupLocked(); |
+ doConnectionSetup(); |
} |
} finally { |
TraceEvent.end("ChildProcessConnection.ChildServiceConnection.onServiceConnected"); |
@@ -440,16 +435,14 @@ public class ChildProcessConnection { |
/** |
* Called after the connection parameters have been set (in setupConnection()) *and* a |
* connection has been established (as signaled by onServiceConnected()). These two events can |
- * happen in any order. Has to be called with mLock. |
+ * happen in any order. |
*/ |
- private void doConnectionSetupLocked() { |
+ private void doConnectionSetup() { |
try { |
- TraceEvent.begin("ChildProcessConnection.doConnectionSetupLocked"); |
+ TraceEvent.begin("ChildProcessConnection.doConnectionSetup"); |
assert mServiceConnectComplete && mService != null; |
assert mConnectionParams != null; |
- Bundle bundle = ChildProcessLauncher.createsServiceBundle( |
- mConnectionParams.mCommandLine, mConnectionParams.mFilesToBeMapped); |
ICallbackInt pidCallback = new ICallbackInt.Stub() { |
@Override |
public void call(final int pid) { |
@@ -462,21 +455,14 @@ public class ChildProcessConnection { |
} |
}; |
try { |
- mService.setupConnection(bundle, pidCallback, mConnectionParams.mCallback); |
+ mService.setupConnection(mConnectionParams.mConnectionBundle, pidCallback, |
+ mConnectionParams.mCallback); |
} catch (RemoteException re) { |
Log.e(TAG, "Failed to setup connection.", re); |
} |
- // We proactively close the FDs rather than wait for GC & finalizer. |
- try { |
- for (FileDescriptorInfo fileInfo : mConnectionParams.mFilesToBeMapped) { |
- fileInfo.fd.close(); |
- } |
- } catch (IOException ioe) { |
- Log.w(TAG, "Failed to close FD.", ioe); |
- } |
mConnectionParams = null; |
} finally { |
- TraceEvent.end("ChildProcessConnection.doConnectionSetupLocked"); |
+ TraceEvent.end("ChildProcessConnection.doConnectionSetup"); |
} |
} |