Chromium Code Reviews| 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); |