| // Copyright 2012 The Chromium Authors | |
| // 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/functional/bind.h" | |
| #include "base/lazy_instance.h" | |
| #include "content/public/browser/web_contents.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" | |
| // Must come after all headers that specialize FromJniType() / ToJniType(). | |
| #include "content/shell/android/content_shell_jni_headers/ShellManager_jni.h" | |
| 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 JavaRef<jobject>& obj) { | |
| g_global_state.Get().j_shell_manager.Reset(obj); | |
| } | |
| static void JNI_ShellManager_LaunchShell(JNIEnv* env, | |
| const JavaRef<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 | |
| DEFINE_JNI(ShellManager) |