Index: content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
diff --git a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
index 849f9c753402e4a393219a229bacde645bc97429..2d6352b4e895447e96092a452ac6691f98da62fa 100644 |
--- a/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
+++ b/content/public/android/java/src/org/chromium/content/app/ChildProcessService.java |
@@ -51,6 +51,7 @@ import java.util.concurrent.atomic.AtomicReference; |
public class ChildProcessService extends Service { |
private static final String MAIN_THREAD_NAME = "ChildProcessMain"; |
private static final String TAG = "ChildProcessService"; |
+ protected static final FileDescriptorInfo[] EMPTY_FILE_DESCRIPTOR_INFO = {}; |
private IChildProcessCallback mCallback; |
// This is the native "Main" thread for the renderer / utility process. |
@@ -89,6 +90,7 @@ public class ChildProcessService extends Service { |
// NOTE: Implement any IChildProcessService methods here. |
@Override |
public int setupConnection(Bundle args, IChildProcessCallback callback) { |
+ assert isBoundService(); |
mCallback = callback; |
getServiceInfo(args); |
return Process.myPid(); |
@@ -237,6 +239,7 @@ public class ChildProcessService extends Service { |
@Override |
public IBinder onBind(Intent intent) { |
+ assert isBoundService(); |
// We call stopSelf() to request that this service be stopped as soon as the client |
// unbinds. Otherwise the system may keep it around and available for a reconnect. The |
// child processes do not currently support reconnect; they must be initialized from |
@@ -289,10 +292,7 @@ public class ChildProcessService extends Service { |
mFdInfos = new FileDescriptorInfo[fdInfosAsParcelable.length]; |
System.arraycopy(fdInfosAsParcelable, 0, mFdInfos, 0, fdInfosAsParcelable.length); |
} else { |
- // TODO(qinmin): On earlier androird versions, a started service running in another |
- // process can get killed after Chrome is killed. To work around this issue, client |
- // will never bind to the service. As a result, the file descriptors needs to be |
- // passed through an intent when starting the service. |
+ mFdInfos = getFileDescriptorInfo(bundle); |
svaldez
2016/01/25 15:33:43
Move to DownloadServiceProcess, so that ChildServi
qinmin
2016/01/25 22:48:23
Let the DownloadServiceProcess override getService
|
} |
Bundle sharedRelros = bundle.getBundle(Linker.EXTRA_LINKER_SHARED_RELROS); |
if (sharedRelros != null) { |
@@ -412,6 +412,23 @@ public class ChildProcessService extends Service { |
} |
/** |
+ * Retrive an array of FileDescriptorInfo from a bundle. |
+ * @param bundle The bundle through the intent to launch the service. |
+ * @return an array of FileDescriptorInfo. |
+ */ |
+ protected FileDescriptorInfo[] getFileDescriptorInfo(Bundle bundle) { |
+ return EMPTY_FILE_DESCRIPTOR_INFO; |
+ } |
+ |
+ /** |
+ * Check whether the service is a bound service or a started service. |
+ * @return true if the service is bound, or false otherwise. |
+ */ |
+ protected boolean isBoundService() { |
+ return true; |
+ } |
+ |
+ /** |
* Helper for registering FileDescriptorInfo objects with GlobalFileDescriptors. |
* This includes the IPC channel, the crash dump signals and resource related |
* files. |