// 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 "components/web_contents_delegate_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/geometry/rect.h" using base::android::ConvertUTF16ToJavaString; using content::ContentViewCore; using content::RenderWidgetHost; namespace { base::android::ScopedJavaLocalRef GetJavaContentViewCoreFrom( RenderWidgetHost* widget_host) { ContentViewCore* content_view_core = ContentViewCore::FromWebContents(content::WebContents::FromRenderViewHost( content::RenderViewHost::From(widget_host))); if (!content_view_core) return base::android::ScopedJavaLocalRef(); return content_view_core->GetJavaObject(); } } namespace web_contents_delegate_android { ValidationMessageBubbleAndroid::ValidationMessageBubbleAndroid( RenderWidgetHost* widget_host, const gfx::Rect& anchor_in_root_view, const base::string16& main_text, const base::string16& sub_text) { base::android::ScopedJavaLocalRef java_content_view_core = GetJavaContentViewCoreFrom(widget_host); if (java_content_view_core.is_null()) return; JNIEnv* env = base::android::AttachCurrentThread(); java_validation_message_bubble_.Reset( Java_ValidationMessageBubble_createAndShowIfApplicable( env, java_content_view_core, anchor_in_root_view.x(), anchor_in_root_view.y(), anchor_in_root_view.width(), anchor_in_root_view.height(), ConvertUTF16ToJavaString(env, main_text), ConvertUTF16ToJavaString(env, sub_text))); } ValidationMessageBubbleAndroid::~ValidationMessageBubbleAndroid() { if (!java_validation_message_bubble_.is_null()) { Java_ValidationMessageBubble_close(base::android::AttachCurrentThread(), java_validation_message_bubble_); } } void ValidationMessageBubbleAndroid::SetPositionRelativeToAnchor( RenderWidgetHost* widget_host, const gfx::Rect& anchor_in_root_view) { base::android::ScopedJavaLocalRef java_content_view_core = GetJavaContentViewCoreFrom(widget_host); if (java_content_view_core.is_null() || java_validation_message_bubble_.is_null()) { return; } Java_ValidationMessageBubble_setPositionRelativeToAnchor( base::android::AttachCurrentThread(), java_validation_message_bubble_, java_content_view_core, anchor_in_root_view.x(), anchor_in_root_view.y(), anchor_in_root_view.width(), anchor_in_root_view.height()); } } // namespace web_contents_delegate_android