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 3 // found in the LICENSE file. 4 5 #include "content/app/android/content_main.h" 6 7 #include "base/at_exit.h" 8 #include "base/base_switches.h" 9 #include "base/command_line.h" 10 #include "base/debug/trace_event.h" 11 #include "base/lazy_instance.h" 12 #include "content/public/app/content_main.h" 13 #include "content/public/app/content_main_delegate.h" 14 #include "content/public/app/content_main_runner.h" 15 #include "content/public/common/content_switches.h" 16 #include "jni/ContentMain_jni.h" 17 18 using base::LazyInstance; 19 20 namespace content { 21 22 namespace { 23 LazyInstance<scoped_ptr<ContentMainRunner> > g_content_runner = 24 LAZY_INSTANCE_INITIALIZER; 25 26 LazyInstance<scoped_ptr<ContentMainDelegate> > g_content_main_delegate = 27 LAZY_INSTANCE_INITIALIZER; 28 29 } // namespace 30 31 static void InitApplicationContext(JNIEnv* env, jclass clazz, jobject context) { 32 base::android::ScopedJavaLocalRef<jobject> scoped_context(env, context); 33 base::android::InitApplicationContext(env, scoped_context); 34 } 35 36 static jint Start(JNIEnv* env, jclass clazz) { 37 TRACE_EVENT0("startup", "content::Start"); 38 39 // On Android we can have multiple requests to start the browser in process 40 // simultaneously. If we get an asynchonous request followed by a synchronous 41 // request then we have to call this a second time to finish starting the 42 // browser synchronously. 43 if (!g_content_runner.Get().get()) { 44 ContentMainParams params(g_content_main_delegate.Get().get()); 45 g_content_runner.Get().reset(ContentMainRunner::Create()); 46 g_content_runner.Get()->Initialize(params); 47 } 48 return g_content_runner.Get()->Run(); 49 } 50 51 void SetContentMainDelegate(ContentMainDelegate* delegate) { 52 DCHECK(!g_content_main_delegate.Get().get()); 53 g_content_main_delegate.Get().reset(delegate); 54 } 55 56 bool RegisterContentMain(JNIEnv* env) { 57 return RegisterNativesImpl(env); 58 } 59 60 } // namespace content 61