Index: content/browser/android/content_view_core_impl.cc |
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc |
index 7d636b6f9cd372551f017f41d54572848b612c65..8cb7f905686760d6e15fdadbd75b75de0c18a0e0 100644 |
--- a/content/browser/android/content_view_core_impl.cc |
+++ b/content/browser/android/content_view_core_impl.cc |
@@ -499,8 +499,6 @@ void ContentViewCoreImpl::ShowSelectPopupMenu( |
if (j_obj.is_null()) |
return; |
- ScopedJavaLocalRef<jobject> bounds_rect(CreateJavaRect(env, bounds)); |
- |
// For multi-select list popups we find the list of previous selections by |
// iterating through the items. But for single selection popups we take the |
// given |selected_item| as is. |
@@ -537,12 +535,29 @@ void ContentViewCoreImpl::ShowSelectPopupMenu( |
} |
ScopedJavaLocalRef<jobjectArray> items_array( |
base::android::ToJavaArrayOfStrings(env, labels)); |
+ ScopedJavaLocalRef<jobject> anchor_view = AcquireAnchorView( |
+ gfx::RectF(bounds.x() * page_scale_, |
+ bounds.y() * page_scale_, |
+ bounds.width() * page_scale_, |
+ bounds.height() * page_scale_)); |
Java_ContentViewCore_showSelectPopup( |
- env, j_obj.obj(), reinterpret_cast<intptr_t>(frame), bounds_rect.obj(), |
+ env, j_obj.obj(), anchor_view.obj(), bounds.width() * page_scale_, |
+ reinterpret_cast<intptr_t>(frame), |
items_array.obj(), enabled_array.obj(), multiple, selected_array.obj(), |
right_aligned); |
} |
+ScopedJavaLocalRef<jobject> |
+ContentViewCoreImpl::AcquireAnchorView(const gfx::RectF& bounds) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
+ if (j_obj.is_null()) |
+ return ScopedJavaLocalRef<jobject>(); |
+ return Java_ContentViewCore_acquireAnchorView( |
+ env, j_obj.obj(), bounds.x(), bounds.y(), bounds.width(), |
+ bounds.height()); |
+} |
+ |
void ContentViewCoreImpl::HideSelectPopupMenu() { |
JNIEnv* env = AttachCurrentThread(); |
ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |