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 b3bbe94d5620a07de286dbb360696bb5a4bd656a..48d546e8b8f4fb4f1956f4ad040be20caedb4f55 100644 |
--- a/content/browser/android/content_view_core_impl.cc |
+++ b/content/browser/android/content_view_core_impl.cc |
@@ -213,12 +213,13 @@ ContentViewCoreImpl::ContentViewCoreImpl( |
JNIEnv* env, |
jobject obj, |
WebContents* web_contents, |
+ const base::android::JavaRef<jobject>& view_context, |
const base::android::JavaRef<jobject>& view_android_delegate, |
ui::WindowAndroid* window_android, |
jobject java_bridge_retained_object_set) |
: WebContentsObserver(web_contents), |
java_ref_(env, obj), |
- view_(view_android_delegate, window_android), |
+ view_(view_context, view_android_delegate, window_android), |
web_contents_(static_cast<WebContentsImpl*>(web_contents)), |
page_scale_(1), |
dpi_scale_(ui::GetScaleFactorForNativeView(&view_)), |
@@ -503,8 +504,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. |
@@ -541,8 +540,12 @@ void ContentViewCoreImpl::ShowSelectPopupMenu( |
} |
ScopedJavaLocalRef<jobjectArray> items_array( |
base::android::ToJavaArrayOfStrings(env, labels)); |
+ select_popup_.Reset(view_.AcquireAnchorView()); |
+ view_.SetAnchorRect(select_popup_.obj(), |
+ gfx::ScaleRect(gfx::RectF(bounds), page_scale_)); |
Java_ContentViewCore_showSelectPopup( |
- env, j_obj.obj(), reinterpret_cast<intptr_t>(frame), bounds_rect.obj(), |
+ env, j_obj.obj(), select_popup_.obj(), bounds.width() * page_scale_, |
+ reinterpret_cast<intptr_t>(frame), |
items_array.obj(), enabled_array.obj(), multiple, selected_array.obj(), |
right_aligned); |
} |
@@ -552,6 +555,10 @@ void ContentViewCoreImpl::HideSelectPopupMenu() { |
ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
if (!j_obj.is_null()) |
Java_ContentViewCore_hideSelectPopup(env, j_obj.obj()); |
+ if (select_popup_.is_null()) { |
no sievers
2016/07/14 23:31:17
!select_popup_.is_null()
Jinsuk Kim
2016/07/15 05:46:26
Thanks for catching it. Done.
|
+ view_.RemoveAnchorView(select_popup_.obj()); |
+ select_popup_.Reset(); |
+ } |
} |
void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, |
@@ -863,11 +870,6 @@ void ContentViewCoreImpl::SelectBetweenCoordinates(const gfx::PointF& base, |
web_contents_->SelectRange(base_point, extent_point); |
} |
-const base::android::JavaRef<jobject>& |
-ContentViewCoreImpl::GetViewAndroidDelegate() const { |
- return view_.GetViewAndroidDelegate(); |
-} |
- |
ui::WindowAndroid* ContentViewCoreImpl::GetWindowAndroid() const { |
return view_.GetWindowAndroid(); |
} |
@@ -1630,11 +1632,13 @@ void ContentViewCoreImpl::PullReset() { |
jlong Init(JNIEnv* env, |
const JavaParamRef<jobject>& obj, |
const JavaParamRef<jobject>& web_contents, |
+ const JavaParamRef<jobject>& view_context, |
const JavaParamRef<jobject>& view_android_delegate, |
jlong window_android, |
const JavaParamRef<jobject>& retained_objects_set) { |
ContentViewCoreImpl* view = new ContentViewCoreImpl( |
env, obj, WebContents::FromJavaWebContents(web_contents), |
+ view_context, |
view_android_delegate, |
reinterpret_cast<ui::WindowAndroid*>(window_android), |
retained_objects_set); |