| Index: content/browser/android/child_process_launcher_android.cc
|
| diff --git a/content/browser/android/child_process_launcher_android.cc b/content/browser/android/child_process_launcher_android.cc
|
| index 44e1bd38f6dd2ae8a0ce7faac3d3b0b17f31b373..401f265d20dbab6422cd395eba026967fe201cd8 100644
|
| --- a/content/browser/android/child_process_launcher_android.cc
|
| +++ b/content/browser/android/child_process_launcher_android.cc
|
| @@ -230,6 +230,39 @@ jboolean IsSingleProcess(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
|
| switches::kSingleProcess);
|
| }
|
|
|
| +static void ExecuteOnLauncherThread(
|
| + const base::android::JavaRef<jobject>& runnable) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + DCHECK(env);
|
| + Java_ChildProcessLauncher_executeOnLauncherThread(env, runnable.obj());
|
| +}
|
| +
|
| +jboolean RunOnLauncherThread(JNIEnv* env,
|
| + const JavaParamRef<jclass>& clazz,
|
| + const JavaParamRef<jobject>& jrunnable,
|
| + jlong delayInMS) {
|
| + if (!BrowserThread::IsThreadInitialized(BrowserThread::PROCESS_LAUNCHER))
|
| + return false;
|
| +
|
| + if (delayInMS > 0) {
|
| + ScopedJavaGlobalRef<jobject> scoped_runnable;
|
| + scoped_runnable.Reset(env, jrunnable.obj());
|
| + BrowserThread::PostDelayedTask(
|
| + BrowserThread::PROCESS_LAUNCHER, FROM_HERE,
|
| + base::Bind(&ExecuteOnLauncherThread, scoped_runnable),
|
| + base::TimeDelta::FromMilliseconds(delayInMS));
|
| + } else if (BrowserThread::CurrentlyOn(BrowserThread::PROCESS_LAUNCHER)) {
|
| + ExecuteOnLauncherThread(jrunnable);
|
| + } else {
|
| + ScopedJavaGlobalRef<jobject> scoped_runnable;
|
| + scoped_runnable.Reset(env, jrunnable.obj());
|
| + BrowserThread::PostTask(
|
| + BrowserThread::PROCESS_LAUNCHER, FROM_HERE,
|
| + base::Bind(&ExecuteOnLauncherThread, scoped_runnable));
|
| + }
|
| + return true;
|
| +}
|
| +
|
| bool RegisterChildProcessLauncher(JNIEnv* env) {
|
| return RegisterNativesImpl(env);
|
| }
|
|
|