Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/browser/android/child_process_launcher_android.h" | 5 #include "content/browser/android/child_process_launcher_android.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_array.h" | 8 #include "base/android/jni_array.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 121 base::android::CheckException(env); | 121 base::android::CheckException(env); |
| 122 jint* file_fds = env->GetIntArrayElements(j_file_fds.obj(), NULL); | 122 jint* file_fds = env->GetIntArrayElements(j_file_fds.obj(), NULL); |
| 123 base::android::CheckException(env); | 123 base::android::CheckException(env); |
| 124 ScopedJavaLocalRef<jbooleanArray> j_file_auto_close( | 124 ScopedJavaLocalRef<jbooleanArray> j_file_auto_close( |
| 125 env, env->NewBooleanArray(file_count)); | 125 env, env->NewBooleanArray(file_count)); |
| 126 base::android::CheckException(env); | 126 base::android::CheckException(env); |
| 127 jboolean* file_auto_close = | 127 jboolean* file_auto_close = |
| 128 env->GetBooleanArrayElements(j_file_auto_close.obj(), NULL); | 128 env->GetBooleanArrayElements(j_file_auto_close.obj(), NULL); |
| 129 base::android::CheckException(env); | 129 base::android::CheckException(env); |
| 130 for (size_t i = 0; i < file_count; ++i) { | 130 for (size_t i = 0; i < file_count; ++i) { |
| 131 // Owners of passed descriptors can outlive this function and we don't know | |
| 132 // when it is safe to close() them. So we pass dup()-ed FD and | |
| 133 // let ChildProcessLauncher in java take care of their lifetimes. | |
| 134 // TODO(morrita): Drop FileDescriptorInfo.mAutoClose on Java side. | |
| 135 file_auto_close[i] = true; // This indicates ownership transfer. | |
| 136 file_ids[i] = files_to_register->GetIDAt(i); | 131 file_ids[i] = files_to_register->GetIDAt(i); |
| 137 file_fds[i] = dup(files_to_register->GetFDAt(i)); | 132 file_fds[i] = files_to_register->GetFDAt(i); |
| 138 PCHECK(0 <= file_fds[i]); | 133 PCHECK(0 <= file_fds[i]); |
| 134 file_auto_close[i] = files_to_register->OwnsFD(file_fds[i]); | |
|
mdempsky
2015/02/07 02:37:05
OwnsFD and ReleaseFD seem like clunky APIs, but un
| |
| 135 if (file_auto_close[i]) | |
| 136 ignore_result(files_to_register->ReleaseFD(file_fds[i]).release()); | |
| 139 } | 137 } |
| 140 env->ReleaseIntArrayElements(j_file_ids.obj(), file_ids, 0); | 138 env->ReleaseIntArrayElements(j_file_ids.obj(), file_ids, 0); |
| 141 env->ReleaseIntArrayElements(j_file_fds.obj(), file_fds, 0); | 139 env->ReleaseIntArrayElements(j_file_fds.obj(), file_fds, 0); |
| 142 env->ReleaseBooleanArrayElements(j_file_auto_close.obj(), file_auto_close, 0); | 140 env->ReleaseBooleanArrayElements(j_file_auto_close.obj(), file_auto_close, 0); |
| 143 | 141 |
| 144 Java_ChildProcessLauncher_start(env, | 142 Java_ChildProcessLauncher_start(env, |
| 145 base::android::GetApplicationContext(), | 143 base::android::GetApplicationContext(), |
| 146 j_argv.obj(), | 144 j_argv.obj(), |
| 147 child_process_id, | 145 child_process_id, |
| 148 j_file_ids.obj(), | 146 j_file_ids.obj(), |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 228 jboolean IsSingleProcess(JNIEnv* env, jclass clazz) { | 226 jboolean IsSingleProcess(JNIEnv* env, jclass clazz) { |
| 229 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 227 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 230 switches::kSingleProcess); | 228 switches::kSingleProcess); |
| 231 } | 229 } |
| 232 | 230 |
| 233 bool RegisterChildProcessLauncher(JNIEnv* env) { | 231 bool RegisterChildProcessLauncher(JNIEnv* env) { |
| 234 return RegisterNativesImpl(env); | 232 return RegisterNativesImpl(env); |
| 235 } | 233 } |
| 236 | 234 |
| 237 } // namespace content | 235 } // namespace content |
| OLD | NEW |