// Copyright (c) 2013 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 "chrome/browser/ui/android/validation_message_bubble_android.h" #include "base/android/jni_string.h" #include "content/public/browser/android/content_view_core.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "jni/ValidationMessageBubble_jni.h" #include "ui/gfx/rect.h" using base::android::ConvertUTF16ToJavaString; using content::ContentViewCore; using content::RenderWidgetHost; namespace { inline ContentViewCore* GetContentViewCoreFrom(RenderWidgetHost* widget_host) { return ContentViewCore::FromWebContents( content::WebContents::FromRenderViewHost( content::RenderViewHost::From(widget_host))); } } ValidationMessageBubbleAndroid::ValidationMessageBubbleAndroid( RenderWidgetHost* widget_host, const gfx::Rect& anchor_in_root_view, const string16& main_text, const string16& sub_text) { JNIEnv* env = base::android::AttachCurrentThread(); java_validation_message_bubble_.Reset( Java_ValidationMessageBubble_createAndShow( env, GetContentViewCoreFrom(widget_host)->GetJavaObject().obj(), anchor_in_root_view.x(), anchor_in_root_view.y(), anchor_in_root_view.width(), anchor_in_root_view.height(), ConvertUTF16ToJavaString(env, main_text).obj(), ConvertUTF16ToJavaString(env, sub_text).obj())); } ValidationMessageBubbleAndroid::~ValidationMessageBubbleAndroid() { Java_ValidationMessageBubble_close(base::android::AttachCurrentThread(), java_validation_message_bubble_.obj()); } void ValidationMessageBubbleAndroid::SetPositionRelativeToAnchor( RenderWidgetHost* widget_host, const gfx::Rect& anchor_in_root_view) { Java_ValidationMessageBubble_setPositionRelativeToAnchor( base::android::AttachCurrentThread(), java_validation_message_bubble_.obj(), GetContentViewCoreFrom(widget_host)->GetJavaObject().obj(), anchor_in_root_view.x(), anchor_in_root_view.y(), anchor_in_root_view.width(), anchor_in_root_view.height()); } // static bool ValidationMessageBubbleAndroid::Register(JNIEnv* env) { return RegisterNativesImpl(env); } namespace chrome { scoped_ptr<ValidationMessageBubble> ValidationMessageBubble::CreateAndShow( RenderWidgetHost* widget_host, const gfx::Rect& anchor_in_root_view, const string16& main_text, const string16& sub_text) { return scoped_ptr<ValidationMessageBubble>(new ValidationMessageBubbleAndroid( widget_host, anchor_in_root_view, main_text, sub_text)).Pass(); } } // namespace chrome