| // 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<jobject> 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<jobject>(); |
| 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<jobject> 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<jobject> 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 |