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

Side by Side Diff: content/public/android/java/src/org/chromium/content/app/ChildProcessServiceImpl.java

Issue 2795913003: [Merge m58] android: Limit bindToCaller check to webview (Closed)
Patch Set: remove final from chrome Created 3 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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.app; 5 package org.chromium.content.app;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.Intent; 8 import android.content.Intent;
9 import android.graphics.SurfaceTexture; 9 import android.graphics.SurfaceTexture;
10 import android.os.Binder; 10 import android.os.Binder;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 @SuppressWarnings("SynchronizeOnNonFinalField") 52 @SuppressWarnings("SynchronizeOnNonFinalField")
53 @MainDex 53 @MainDex
54 @UsedByReflection("WebApkSandboxedProcessService") 54 @UsedByReflection("WebApkSandboxedProcessService")
55 public class ChildProcessServiceImpl { 55 public class ChildProcessServiceImpl {
56 private static final String MAIN_THREAD_NAME = "ChildProcessMain"; 56 private static final String MAIN_THREAD_NAME = "ChildProcessMain";
57 private static final String TAG = "ChildProcessService"; 57 private static final String TAG = "ChildProcessService";
58 58
59 // Lock that protects the following members. 59 // Lock that protects the following members.
60 private final Object mBinderLock = new Object(); 60 private final Object mBinderLock = new Object();
61 private IChildProcessCallback mCallback; 61 private IChildProcessCallback mCallback;
62 // PID of the client of this service, set in bindToCaller(). 62 private boolean mBindToCallerCheck;
63 // PID of the client of this service, set in bindToCaller(), if mBindToCalle rCheck is true.
63 private int mBoundCallingPid; 64 private int mBoundCallingPid;
64 65
65 // This is the native "Main" thread for the renderer / utility process. 66 // This is the native "Main" thread for the renderer / utility process.
66 private Thread mMainThread; 67 private Thread mMainThread;
67 // Parameters received via IPC, only accessed while holding the mMainThread monitor. 68 // Parameters received via IPC, only accessed while holding the mMainThread monitor.
68 private String[] mCommandLineParams; 69 private String[] mCommandLineParams;
69 private int mCpuCount; 70 private int mCpuCount;
70 private long mCpuFeatures; 71 private long mCpuFeatures;
71 // File descriptors that should be registered natively. 72 // File descriptors that should be registered natively.
72 private FileDescriptorInfo[] mFdInfos; 73 private FileDescriptorInfo[] mFdInfos;
(...skipping 30 matching lines...) Expand all
103 mLinkerParams.mTestRunnerClassNameForTesting); 104 mLinkerParams.mTestRunnerClassNameForTesting);
104 } 105 }
105 return Linker.getInstance(); 106 return Linker.getInstance();
106 } 107 }
107 108
108 // Binder object used by clients for this service. 109 // Binder object used by clients for this service.
109 private final IChildProcessService.Stub mBinder = new IChildProcessService.S tub() { 110 private final IChildProcessService.Stub mBinder = new IChildProcessService.S tub() {
110 // NOTE: Implement any IChildProcessService methods here. 111 // NOTE: Implement any IChildProcessService methods here.
111 @Override 112 @Override
112 public boolean bindToCaller() { 113 public boolean bindToCaller() {
114 assert mBindToCallerCheck;
113 synchronized (mBinderLock) { 115 synchronized (mBinderLock) {
114 int callingPid = Binder.getCallingPid(); 116 int callingPid = Binder.getCallingPid();
115 if (mBoundCallingPid == 0) { 117 if (mBoundCallingPid == 0) {
116 mBoundCallingPid = callingPid; 118 mBoundCallingPid = callingPid;
117 } else if (mBoundCallingPid != callingPid) { 119 } else if (mBoundCallingPid != callingPid) {
118 Log.e(TAG, "Service is already bound by pid %d, cannot bind for pid %d", 120 Log.e(TAG, "Service is already bound by pid %d, cannot bind for pid %d",
119 mBoundCallingPid, callingPid); 121 mBoundCallingPid, callingPid);
120 return false; 122 return false;
121 } 123 }
122 } 124 }
123 return true; 125 return true;
124 } 126 }
125 127
126 @Override 128 @Override
127 public int setupConnection(Bundle args, IChildProcessCallback callback) { 129 public int setupConnection(Bundle args, IChildProcessCallback callback) {
128 int callingPid = Binder.getCallingPid(); 130 int callingPid = Binder.getCallingPid();
129 synchronized (mBinderLock) { 131 synchronized (mBinderLock) {
130 if (mBoundCallingPid != callingPid) { 132 if (mBindToCallerCheck && mBoundCallingPid != callingPid) {
131 if (mBoundCallingPid == 0) { 133 if (mBoundCallingPid == 0) {
132 Log.e(TAG, "Service has not been bound with bindToCaller ()"); 134 Log.e(TAG, "Service has not been bound with bindToCaller ()");
133 } else { 135 } else {
134 Log.e(TAG, "Client pid %d does not match the bound pid % d", callingPid, 136 Log.e(TAG, "Client pid %d does not match the bound pid % d", callingPid,
135 mBoundCallingPid); 137 mBoundCallingPid);
136 } 138 }
137 return -1; 139 return -1;
138 } 140 }
139
140 mCallback = callback;
141 getServiceInfo(args);
142 return Process.myPid();
143 } 141 }
142 mCallback = callback;
143 getServiceInfo(args);
144 return Process.myPid();
144 } 145 }
145 146
146 @Override 147 @Override
147 public void crashIntentionallyForTesting() { 148 public void crashIntentionallyForTesting() {
148 Process.killProcess(Process.myPid()); 149 Process.killProcess(Process.myPid());
149 } 150 }
150 151
151 @Override 152 @Override
152 public boolean onTransact(int arg0, Parcel arg1, Parcel arg2, int arg3) 153 public boolean onTransact(int arg0, Parcel arg1, Parcel arg2, int arg3)
153 throws RemoteException { 154 throws RemoteException {
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 334
334 private void initializeParams(Intent intent) { 335 private void initializeParams(Intent intent) {
335 synchronized (mMainThread) { 336 synchronized (mMainThread) {
336 // mLinkerParams is never used if Linker.isUsed() returns false. 337 // mLinkerParams is never used if Linker.isUsed() returns false.
337 // See onCreate(). 338 // See onCreate().
338 mLinkerParams = (ChromiumLinkerParams) intent.getParcelableExtra( 339 mLinkerParams = (ChromiumLinkerParams) intent.getParcelableExtra(
339 ChildProcessConstants.EXTRA_LINKER_PARAMS); 340 ChildProcessConstants.EXTRA_LINKER_PARAMS);
340 mLibraryProcessType = ChildProcessCreationParams.getLibraryProcessTy pe(intent); 341 mLibraryProcessType = ChildProcessCreationParams.getLibraryProcessTy pe(intent);
341 mMainThread.notifyAll(); 342 mMainThread.notifyAll();
342 } 343 }
344 synchronized (mBinderLock) {
345 mBindToCallerCheck =
346 intent.getBooleanExtra(ChildProcessConstants.EXTRA_BIND_TO_C ALLER, false);
347 }
343 } 348 }
344 349
345 private void getServiceInfo(Bundle bundle) { 350 private void getServiceInfo(Bundle bundle) {
346 // Required to unparcel FileDescriptorInfo. 351 // Required to unparcel FileDescriptorInfo.
347 bundle.setClassLoader(mHostClassLoader); 352 bundle.setClassLoader(mHostClassLoader);
348 synchronized (mMainThread) { 353 synchronized (mMainThread) {
349 if (mCommandLineParams == null) { 354 if (mCommandLineParams == null) {
350 mCommandLineParams = 355 mCommandLineParams =
351 bundle.getStringArray(ChildProcessConstants.EXTRA_COMMAN D_LINE); 356 bundle.getStringArray(ChildProcessConstants.EXTRA_COMMAN D_LINE);
352 mMainThread.notifyAll(); 357 mMainThread.notifyAll();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 private static native void nativeInitChildProcessImpl( 435 private static native void nativeInitChildProcessImpl(
431 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures) ; 436 ChildProcessServiceImpl serviceImpl, int cpuCount, long cpuFeatures) ;
432 437
433 /** 438 /**
434 * Force the child process to exit. 439 * Force the child process to exit.
435 */ 440 */
436 private static native void nativeExitChildProcess(); 441 private static native void nativeExitChildProcess();
437 442
438 private native void nativeShutdownMainThread(); 443 private native void nativeShutdownMainThread();
439 } 444 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698