Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(760)

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java

Issue 2756053002: Abstracting parameters passed to child processes on Android. (Closed)
Patch Set: Abstracting parameters passed to child processes on Android. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.content.ComponentName; 7 import android.content.ComponentName;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.ServiceConnection; 10 import android.content.ServiceConnection;
11 import android.content.pm.PackageManager; 11 import android.content.pm.PackageManager;
12 import android.content.pm.ServiceInfo; 12 import android.content.pm.ServiceInfo;
13 import android.os.Build; 13 import android.os.Build;
14 import android.os.Bundle; 14 import android.os.Bundle;
15 import android.os.DeadObjectException; 15 import android.os.DeadObjectException;
16 import android.os.IBinder; 16 import android.os.IBinder;
17 import android.os.RemoteException; 17 import android.os.RemoteException;
18 18
19 import org.chromium.base.Log; 19 import org.chromium.base.Log;
20 import org.chromium.base.ThreadUtils; 20 import org.chromium.base.ThreadUtils;
21 import org.chromium.base.TraceEvent; 21 import org.chromium.base.TraceEvent;
22 import org.chromium.base.VisibleForTesting; 22 import org.chromium.base.VisibleForTesting;
23 import org.chromium.content.app.ChromiumLinkerParams;
24 import org.chromium.content.common.FileDescriptorInfo; 23 import org.chromium.content.common.FileDescriptorInfo;
25 import org.chromium.content.common.IChildProcessCallback; 24 import org.chromium.content.common.IChildProcessCallback;
26 import org.chromium.content.common.IChildProcessService; 25 import org.chromium.content.common.IChildProcessService;
27 26
28 import java.io.IOException; 27 import java.io.IOException;
29 28
30 /** 29 /**
31 * Manages a connection between the browser activity and a child service. 30 * Manages a connection between the browser activity and a child service.
32 */ 31 */
33 public class ChildProcessConnectionImpl implements ChildProcessConnection { 32 public class ChildProcessConnectionImpl implements ChildProcessConnection {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 // Low priority binding maintained in the entire lifetime of the connection, i.e. between calls 64 // Low priority binding maintained in the entire lifetime of the connection, i.e. between calls
66 // to start() and stop(). 65 // to start() and stop().
67 private ChildServiceConnection mWaivedBinding; 66 private ChildServiceConnection mWaivedBinding;
68 // Incremented on addStrongBinding(), decremented on removeStrongBinding(). 67 // Incremented on addStrongBinding(), decremented on removeStrongBinding().
69 private int mStrongBindingCount; 68 private int mStrongBindingCount;
70 // Moderate binding will make the service priority equal to the priority of a visible process 69 // Moderate binding will make the service priority equal to the priority of a visible process
71 // while the app is in the foreground. It will stay bound only while the app is in the 70 // while the app is in the foreground. It will stay bound only while the app is in the
72 // foreground to protect a background process from the system out-of-memory killer. 71 // foreground to protect a background process from the system out-of-memory killer.
73 private ChildServiceConnection mModerateBinding; 72 private ChildServiceConnection mModerateBinding;
74 73
75 // Linker-related parameters. 74 // Parameters passed to the child process through the service binding intent .
76 private ChromiumLinkerParams mLinkerParams; 75 // If the service gets recreated by the framework the intent will be reused, so these parameters
76 // should be common to all processes of that type.
77 private Bundle mChildProcessCommonParameters;
boliu 2017/03/17 02:51:39 final?
Jay Civelli 2017/03/17 03:01:02 Done.
77 78
78 private final boolean mAlwaysInForeground; 79 private final boolean mAlwaysInForeground;
79 private final ChildProcessCreationParams mCreationParams; 80 private final ChildProcessCreationParams mCreationParams;
80 81
81 // Caches whether non-sandboxed and sandboxed services require an extra 82 // Caches whether non-sandboxed and sandboxed services require an extra
82 // binding flag provided via ChildProcessCreationParams. 83 // binding flag provided via ChildProcessCreationParams.
83 // TODO(mnaganov): Get rid of it after the release of the next Android SDK. 84 // TODO(mnaganov): Get rid of it after the release of the next Android SDK.
84 private static Boolean sNeedsExtrabindFlags[] = new Boolean[2]; 85 private static Boolean sNeedsExtrabindFlags[] = new Boolean[2];
85 86
86 private static final String TAG = "ChildProcessConnect"; 87 private static final String TAG = "ChildProcessConnect";
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 } 129 }
129 130
130 public ChildServiceConnection(int bindFlags) { 131 public ChildServiceConnection(int bindFlags) {
131 mBindFlags = bindFlags; 132 mBindFlags = bindFlags;
132 } 133 }
133 134
134 boolean bind() { 135 boolean bind() {
135 if (!mBound) { 136 if (!mBound) {
136 try { 137 try {
137 TraceEvent.begin("ChildProcessConnectionImpl.ChildServiceCon nection.bind"); 138 TraceEvent.begin("ChildProcessConnectionImpl.ChildServiceCon nection.bind");
138 final Intent intent = createServiceBindIntent(); 139 Intent intent = createServiceBindIntent();
139 // Note, the intent may be saved and re-used by Android for re-launching the 140 if (mChildProcessCommonParameters != null) {
140 // child service. Do not pass data that is different for eac h child; command 141 intent.putExtras(mChildProcessCommonParameters);
141 // line arguments for example.
142 if (mLinkerParams != null) {
143 mLinkerParams.addIntentExtras(intent);
144 } 142 }
145 mBound = mContext.bindService(intent, this, mBindFlags); 143 mBound = mContext.bindService(intent, this, mBindFlags);
146 } finally { 144 } finally {
147 TraceEvent.end("ChildProcessConnectionImpl.ChildServiceConne ction.bind"); 145 TraceEvent.end("ChildProcessConnectionImpl.ChildServiceConne ction.bind");
148 } 146 }
149 } 147 }
150 return mBound; 148 return mBound;
151 } 149 }
152 150
153 void unbind() { 151 void unbind() {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 // the caller. 232 // the caller.
235 if (mConnectionCallback != null) { 233 if (mConnectionCallback != null) {
236 mConnectionCallback.onConnected(0); 234 mConnectionCallback.onConnected(0);
237 } 235 }
238 mConnectionCallback = null; 236 mConnectionCallback = null;
239 } 237 }
240 } 238 }
241 } 239 }
242 240
243 ChildProcessConnectionImpl(Context context, int number, boolean inSandbox, 241 ChildProcessConnectionImpl(Context context, int number, boolean inSandbox,
244 ChildProcessConnection.DeathCallback deathCallback, 242 ChildProcessConnection.DeathCallback deathCallback, String serviceCl assName,
245 String serviceClassName, 243 Bundle childProcessCommonParameters, boolean alwaysInForeground,
246 ChromiumLinkerParams chromiumLinkerParams,
247 boolean alwaysInForeground,
248 ChildProcessCreationParams creationParams) { 244 ChildProcessCreationParams creationParams) {
249 mContext = context; 245 mContext = context;
250 mServiceNumber = number; 246 mServiceNumber = number;
251 mInSandbox = inSandbox; 247 mInSandbox = inSandbox;
252 mDeathCallback = deathCallback; 248 mDeathCallback = deathCallback;
253 String packageName = 249 String packageName =
254 creationParams != null ? creationParams.getPackageName() : conte xt.getPackageName(); 250 creationParams != null ? creationParams.getPackageName() : conte xt.getPackageName();
255 mServiceName = new ComponentName(packageName, serviceClassName + mServic eNumber); 251 mServiceName = new ComponentName(packageName, serviceClassName + mServic eNumber);
256 mLinkerParams = chromiumLinkerParams; 252 mChildProcessCommonParameters = childProcessCommonParameters;
257 mAlwaysInForeground = alwaysInForeground; 253 mAlwaysInForeground = alwaysInForeground;
258 mCreationParams = creationParams; 254 mCreationParams = creationParams;
259 int initialFlags = Context.BIND_AUTO_CREATE; 255 int initialFlags = Context.BIND_AUTO_CREATE;
260 if (mAlwaysInForeground) initialFlags |= Context.BIND_IMPORTANT; 256 if (mAlwaysInForeground) initialFlags |= Context.BIND_IMPORTANT;
261 int extraBindFlags = 0; 257 int extraBindFlags = 0;
262 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && mCreationParams != null 258 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && mCreationParams != null
263 && mCreationParams.getIsExternalService() 259 && mCreationParams.getIsExternalService()
264 && isExportedService(inSandbox, mContext, mServiceName)) { 260 && isExportedService(inSandbox, mContext, mServiceName)) {
265 extraBindFlags = Context.BIND_EXTERNAL_SERVICE; 261 extraBindFlags = Context.BIND_EXTERNAL_SERVICE;
266 } 262 }
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 return true; 552 return true;
557 } 553 }
558 return false; 554 return false;
559 } 555 }
560 556
561 @VisibleForTesting 557 @VisibleForTesting
562 public boolean isConnected() { 558 public boolean isConnected() {
563 return mService != null; 559 return mService != null;
564 } 560 }
565 } 561 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698