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 18using base::LazyInstance; 19 20namespace content { 21 22namespace { 23LazyInstance<scoped_ptr<ContentMainRunner> > g_content_runner = 24 LAZY_INSTANCE_INITIALIZER; 25 26LazyInstance<scoped_ptr<ContentMainDelegate> > g_content_main_delegate = 27 LAZY_INSTANCE_INITIALIZER; 28 29} // namespace 30 31static 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 36static 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 51void SetContentMainDelegate(ContentMainDelegate* delegate) { 52 DCHECK(!g_content_main_delegate.Get().get()); 53 g_content_main_delegate.Get().reset(delegate); 54} 55 56bool RegisterContentMain(JNIEnv* env) { 57 return RegisterNativesImpl(env); 58} 59 60} // namespace content 61