| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/shell/android/shell_manager.h" |
| |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| #include "base/android/scoped_java_ref.h" |
| #include "base/bind.h" |
| #include "base/lazy_instance.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/shell/android/content_shell_jni_headers/ShellManager_jni.h" |
| #include "content/shell/browser/shell.h" |
| #include "content/shell/browser/shell_browser_context.h" |
| #include "content/shell/browser/shell_content_browser_client.h" |
| #include "url/gurl.h" |
| |
| using base::android::JavaParamRef; |
| using base::android::JavaRef; |
| using base::android::ScopedJavaLocalRef; |
| |
| namespace { |
| |
| struct GlobalState { |
| GlobalState() {} |
| base::android::ScopedJavaGlobalRef<jobject> j_shell_manager; |
| }; |
| |
| base::LazyInstance<GlobalState>::DestructorAtExit g_global_state = |
| LAZY_INSTANCE_INITIALIZER; |
| |
| } // namespace |
| |
| namespace content { |
| |
| ScopedJavaLocalRef<jobject> CreateShellView(Shell* shell) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| return Java_ShellManager_createShell(env, |
| g_global_state.Get().j_shell_manager, |
| reinterpret_cast<intptr_t>(shell)); |
| } |
| |
| void RemoveShellView(const JavaRef<jobject>& shell_view) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| Java_ShellManager_removeShell(env, g_global_state.Get().j_shell_manager, |
| shell_view); |
| } |
| |
| static void JNI_ShellManager_Init(JNIEnv* env, |
| const JavaParamRef<jobject>& obj) { |
| g_global_state.Get().j_shell_manager.Reset(obj); |
| } |
| |
| void JNI_ShellManager_LaunchShell(JNIEnv* env, |
| const JavaParamRef<jstring>& jurl) { |
| ShellBrowserContext* browserContext = |
| ShellContentBrowserClient::Get()->browser_context(); |
| GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); |
| Shell::CreateNewWindow(browserContext, url, nullptr, gfx::Size()); |
| } |
| |
| void DestroyShellManager() { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| Java_ShellManager_destroy(env, g_global_state.Get().j_shell_manager); |
| } |
| |
| } // namespace content |