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/shell/android/shell_manager.h"
6
7#include "base/android/jni_android.h"
8#include "base/android/jni_string.h"
9#include "base/android/scoped_java_ref.h"
10#include "base/bind.h"
11#include "base/lazy_instance.h"
12#include "content/public/browser/web_contents.h"
13#include "content/shell/browser/shell.h"
14#include "content/shell/browser/shell_browser_context.h"
15#include "content/shell/browser/shell_content_browser_client.h"
16#include "jni/ShellManager_jni.h"
17#include "url/gurl.h"
18
19using base::android::ScopedJavaLocalRef;
20
21namespace {
22
23struct GlobalState {
24  GlobalState() {}
25  base::android::ScopedJavaGlobalRef<jobject> j_shell_manager;
26};
27
28base::LazyInstance<GlobalState> g_global_state = LAZY_INSTANCE_INITIALIZER;
29
30}  // namespace
31
32namespace content {
33
34jobject CreateShellView(Shell* shell) {
35  JNIEnv* env = base::android::AttachCurrentThread();
36  jobject j_shell_manager = g_global_state.Get().j_shell_manager.obj();
37  return Java_ShellManager_createShell(
38      env,
39      j_shell_manager,
40      reinterpret_cast<intptr_t>(shell)).Release();
41}
42
43void RemoveShellView(jobject shell_view) {
44  JNIEnv* env = base::android::AttachCurrentThread();
45  jobject j_shell_manager = g_global_state.Get().j_shell_manager.obj();
46  Java_ShellManager_removeShell(env, j_shell_manager, shell_view);
47}
48
49// Register native methods
50bool RegisterShellManager(JNIEnv* env) {
51  return RegisterNativesImpl(env);
52}
53
54static void Init(JNIEnv* env, jclass clazz, jobject obj) {
55  g_global_state.Get().j_shell_manager.Reset(
56      base::android::ScopedJavaLocalRef<jobject>(env, obj));
57}
58
59void LaunchShell(JNIEnv* env, jclass clazz, jstring jurl) {
60  ShellBrowserContext* browserContext =
61      ShellContentBrowserClient::Get()->browser_context();
62  GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
63  Shell::CreateNewWindow(browserContext,
64                         url,
65                         NULL,
66                         MSG_ROUTING_NONE,
67                         gfx::Size());
68}
69
70}  // namespace content
71