Loosen up heuristics for detecting account creation forms.
[chromium-blink-merge.git] / content / shell / android / shell_manager.cc
bloba7b6b263b25615e9c5307cded799bfe974496c03
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.
5 #include "content/shell/android/shell_manager.h"
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 "base/memory/scoped_ptr.h"
13 #include "content/shell/shell.h"
14 #include "content/shell/shell_browser_context.h"
15 #include "content/shell/shell_content_browser_client.h"
16 #include "content/public/browser/android/compositor.h"
17 #include "content/public/browser/android/draw_delegate.h"
18 #include "content/public/browser/web_contents.h"
19 #include "content/shell/shell.h"
20 #include "googleurl/src/gurl.h"
21 #include "jni/ShellManager_jni.h"
22 #include "third_party/WebKit/Source/Platform/chromium/public/WebLayer.h"
23 #include "ui/gfx/size.h"
25 #include <android/native_window_jni.h>
27 using base::android::ScopedJavaLocalRef;
28 using content::Compositor;
29 using content::DrawDelegate;
31 namespace {
33 struct GlobalState {
34 base::android::ScopedJavaGlobalRef<jobject> j_obj;
35 scoped_ptr<content::Compositor> compositor;
36 scoped_ptr<WebKit::WebLayer> root_layer;
39 base::LazyInstance<GlobalState> g_global_state = LAZY_INSTANCE_INITIALIZER;
41 content::Compositor* GetCompositor() {
42 return g_global_state.Get().compositor.get();
45 static void SurfacePresented(
46 const DrawDelegate::SurfacePresentedCallback& callback,
47 uint32 sync_point) {
48 callback.Run(sync_point);
51 static void SurfaceUpdated(
52 uint64 texture,
53 content::RenderWidgetHostView* view,
54 const DrawDelegate::SurfacePresentedCallback& callback) {
55 GetCompositor()->OnSurfaceUpdated(base::Bind(
56 &SurfacePresented, callback));
59 } // anonymous namespace
61 namespace content {
63 jobject CreateShellView() {
64 JNIEnv* env = base::android::AttachCurrentThread();
65 if (!GetCompositor()) {
66 Compositor::Initialize();
67 g_global_state.Get().compositor.reset(Compositor::Create());
68 DCHECK(!g_global_state.Get().root_layer.get());
69 g_global_state.Get().root_layer.reset(WebKit::WebLayer::create());
71 return Java_ShellManager_createShell(
72 env, g_global_state.Get().j_obj.obj()).Release();
75 // Register native methods
76 bool RegisterShellManager(JNIEnv* env) {
77 return RegisterNativesImpl(env);
80 static void Init(JNIEnv* env, jclass clazz, jobject obj) {
81 g_global_state.Get().j_obj.Reset(
82 base::android::ScopedJavaLocalRef<jobject>(env, obj));
83 DrawDelegate::SurfaceUpdatedCallback cb = base::Bind(
84 &SurfaceUpdated);
85 DrawDelegate::GetInstance()->SetUpdateCallback(cb);
88 static void SurfaceCreated(
89 JNIEnv* env, jclass clazz, jobject jsurface) {
90 ANativeWindow* native_window = ANativeWindow_fromSurface(env, jsurface);
91 if (native_window) {
92 GetCompositor()->SetWindowSurface(native_window);
93 ANativeWindow_release(native_window);
94 GetCompositor()->SetRootLayer(g_global_state.Get().root_layer.get());
98 static void SurfaceDestroyed(JNIEnv* env, jclass clazz) {
99 GetCompositor()->SetWindowSurface(NULL);
102 static void SurfaceSetSize(
103 JNIEnv* env, jclass clazz, jint width, jint height) {
104 gfx::Size size = gfx::Size(width, height);
105 DrawDelegate::GetInstance()->SetBounds(size);
106 GetCompositor()->SetWindowBounds(size);
109 void LaunchShell(JNIEnv* env, jclass clazz, jstring jurl) {
110 ShellBrowserContext* browserContext =
111 static_cast<ShellContentBrowserClient*>(
112 GetContentClient()->browser())->browser_context();
113 GURL url(base::android::ConvertJavaStringToUTF8(env, jurl));
114 Shell::CreateNewWindow(browserContext,
115 url,
116 NULL,
117 MSG_ROUTING_NONE,
118 NULL);
121 void ShellAttachLayer(WebKit::WebLayer* layer) {
122 g_global_state.Get().root_layer->addChild(layer);
126 void ShellRemoveLayer(WebKit::WebLayer* layer) {
127 layer->removeFromParent();
130 } // namespace content