Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: content/browser/android/content_view_core_impl.cc

Issue 182383007: Make the ContentGestureProvider a ui::FilteredGestureProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Test fix Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/content_view_core_impl.h" 5 #include "content/browser/android/content_view_core_impl.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/android/scoped_java_ref.h" 10 #include "base/android/scoped_java_ref.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "cc/layers/layer.h" 17 #include "cc/layers/layer.h"
18 #include "cc/output/begin_frame_args.h" 18 #include "cc/output/begin_frame_args.h"
19 #include "content/browser/android/gesture_event_type.h" 19 #include "content/browser/android/gesture_event_type.h"
20 #include "content/browser/android/interstitial_page_delegate_android.h" 20 #include "content/browser/android/interstitial_page_delegate_android.h"
21 #include "content/browser/android/load_url_params.h" 21 #include "content/browser/android/load_url_params.h"
22 #include "content/browser/frame_host/interstitial_page_impl.h" 22 #include "content/browser/frame_host/interstitial_page_impl.h"
23 #include "content/browser/frame_host/navigation_controller_impl.h" 23 #include "content/browser/frame_host/navigation_controller_impl.h"
24 #include "content/browser/frame_host/navigation_entry_impl.h" 24 #include "content/browser/frame_host/navigation_entry_impl.h"
25 #include "content/browser/media/android/browser_media_player_manager.h" 25 #include "content/browser/media/android/browser_media_player_manager.h"
26 #include "content/browser/renderer_host/compositor_impl_android.h" 26 #include "content/browser/renderer_host/compositor_impl_android.h"
27 #include "content/browser/renderer_host/input/motion_event_android.h" 27 #include "content/browser/renderer_host/input/motion_event_android.h"
28 #include "content/browser/renderer_host/input/web_input_event_builders_android.h " 28 #include "content/browser/renderer_host/input/web_input_event_builders_android.h "
29 #include "content/browser/renderer_host/input/web_input_event_util.h"
29 #include "content/browser/renderer_host/java/java_bound_object.h" 30 #include "content/browser/renderer_host/java/java_bound_object.h"
30 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager .h" 31 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager .h"
31 #include "content/browser/renderer_host/render_view_host_impl.h" 32 #include "content/browser/renderer_host/render_view_host_impl.h"
32 #include "content/browser/renderer_host/render_widget_host_impl.h" 33 #include "content/browser/renderer_host/render_widget_host_impl.h"
33 #include "content/browser/renderer_host/render_widget_host_view_android.h" 34 #include "content/browser/renderer_host/render_widget_host_view_android.h"
34 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host. h" 35 #include "content/browser/screen_orientation/screen_orientation_dispatcher_host. h"
35 #include "content/browser/ssl/ssl_host_state.h" 36 #include "content/browser/ssl/ssl_host_state.h"
36 #include "content/browser/web_contents/web_contents_view_android.h" 37 #include "content/browser/web_contents/web_contents_view_android.h"
37 #include "content/common/input/web_input_event_traits.h" 38 #include "content/common/input/web_input_event_traits.h"
38 #include "content/common/input_messages.h" 39 #include "content/common/input_messages.h"
39 #include "content/common/view_messages.h" 40 #include "content/common/view_messages.h"
40 #include "content/public/browser/android/external_video_surface_container.h" 41 #include "content/public/browser/android/external_video_surface_container.h"
41 #include "content/public/browser/browser_accessibility_state.h" 42 #include "content/public/browser/browser_accessibility_state.h"
42 #include "content/public/browser/browser_context.h" 43 #include "content/public/browser/browser_context.h"
43 #include "content/public/browser/favicon_status.h" 44 #include "content/public/browser/favicon_status.h"
44 #include "content/public/browser/notification_details.h" 45 #include "content/public/browser/notification_details.h"
45 #include "content/public/browser/notification_service.h" 46 #include "content/public/browser/notification_service.h"
46 #include "content/public/browser/notification_source.h" 47 #include "content/public/browser/notification_source.h"
47 #include "content/public/browser/notification_types.h" 48 #include "content/public/browser/notification_types.h"
48 #include "content/public/browser/web_contents.h" 49 #include "content/public/browser/web_contents.h"
49 #include "content/public/common/content_client.h" 50 #include "content/public/common/content_client.h"
50 #include "content/public/common/content_switches.h" 51 #include "content/public/common/content_switches.h"
51 #include "content/public/common/menu_item.h" 52 #include "content/public/common/menu_item.h"
52 #include "content/public/common/page_transition_types.h" 53 #include "content/public/common/page_transition_types.h"
53 #include "jni/ContentViewCore_jni.h" 54 #include "jni/ContentViewCore_jni.h"
54 #include "third_party/WebKit/public/web/WebBindings.h" 55 #include "third_party/WebKit/public/web/WebBindings.h"
55 #include "third_party/WebKit/public/web/WebInputEvent.h" 56 #include "third_party/WebKit/public/web/WebInputEvent.h"
56 #include "ui/base/android/view_android.h" 57 #include "ui/base/android/view_android.h"
57 #include "ui/base/android/window_android.h" 58 #include "ui/base/android/window_android.h"
59 #include "ui/events/gesture_detection/gesture_config_helper.h"
58 #include "ui/gfx/android/java_bitmap.h" 60 #include "ui/gfx/android/java_bitmap.h"
59 #include "ui/gfx/screen.h" 61 #include "ui/gfx/screen.h"
60 #include "ui/gfx/size_conversions.h" 62 #include "ui/gfx/size_conversions.h"
61 #include "ui/gfx/size_f.h" 63 #include "ui/gfx/size_f.h"
62 #include "webkit/common/user_agent/user_agent_util.h" 64 #include "webkit/common/user_agent/user_agent_util.h"
63 65
64 using base::android::AttachCurrentThread; 66 using base::android::AttachCurrentThread;
65 using base::android::ConvertJavaStringToUTF16; 67 using base::android::ConvertJavaStringToUTF16;
66 using base::android::ConvertJavaStringToUTF8; 68 using base::android::ConvertJavaStringToUTF8;
67 using base::android::ConvertUTF16ToJavaString; 69 using base::android::ConvertUTF16ToJavaString;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 return -1; 157 return -1;
156 }; 158 };
157 } 159 }
158 160
159 float GetPrimaryDisplayDeviceScaleFactor() { 161 float GetPrimaryDisplayDeviceScaleFactor() {
160 const gfx::Display& display = 162 const gfx::Display& display =
161 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 163 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
162 return display.device_scale_factor(); 164 return display.device_scale_factor();
163 } 165 }
164 166
167 ui::GestureProvider::Config GetGestureProviderConfig() {
168 ui::GestureProvider::Config config = ui::DefaultGestureProviderConfig();
169 config.disable_click_delay =
170 CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableClickDelay);
171 return config;
172 }
173
165 } // namespace 174 } // namespace
166 175
167 // Enables a callback when the underlying WebContents is destroyed, to enable 176 // Enables a callback when the underlying WebContents is destroyed, to enable
168 // nulling the back-pointer. 177 // nulling the back-pointer.
169 class ContentViewCoreImpl::ContentViewUserData 178 class ContentViewCoreImpl::ContentViewUserData
170 : public base::SupportsUserData::Data { 179 : public base::SupportsUserData::Data {
171 public: 180 public:
172 explicit ContentViewUserData(ContentViewCoreImpl* content_view_core) 181 explicit ContentViewUserData(ContentViewCoreImpl* content_view_core)
173 : content_view_core_(content_view_core) { 182 : content_view_core_(content_view_core) {
174 } 183 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 java_ref_(env, obj), 230 java_ref_(env, obj),
222 web_contents_(static_cast<WebContentsImpl*>(web_contents)), 231 web_contents_(static_cast<WebContentsImpl*>(web_contents)),
223 root_layer_(cc::Layer::Create()), 232 root_layer_(cc::Layer::Create()),
224 dpi_scale_(GetPrimaryDisplayDeviceScaleFactor()), 233 dpi_scale_(GetPrimaryDisplayDeviceScaleFactor()),
225 vsync_interval_(base::TimeDelta::FromMicroseconds( 234 vsync_interval_(base::TimeDelta::FromMicroseconds(
226 kDefaultVSyncIntervalMicros)), 235 kDefaultVSyncIntervalMicros)),
227 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( 236 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds(
228 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), 237 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)),
229 view_android_(view_android), 238 view_android_(view_android),
230 window_android_(window_android), 239 window_android_(window_android),
231 gesture_provider_(this, 1.f / dpi_scale_), 240 gesture_provider_(GetGestureProviderConfig(), this),
232 device_orientation_(0), 241 device_orientation_(0),
233 geolocation_needs_pause_(false) { 242 geolocation_needs_pause_(false) {
234 CHECK(web_contents) << 243 CHECK(web_contents) <<
235 "A ContentViewCoreImpl should be created with a valid WebContents."; 244 "A ContentViewCoreImpl should be created with a valid WebContents.";
236 245
237 // Currently, the only use case we have for overriding a user agent involves 246 // Currently, the only use case we have for overriding a user agent involves
238 // spoofing a desktop Linux user agent for "Request desktop site". 247 // spoofing a desktop Linux user agent for "Request desktop site".
239 // Automatically set it for all WebContents so that it is available when a 248 // Automatically set it for all WebContents so that it is available when a
240 // NavigationEntry requires the user agent to be overridden. 249 // NavigationEntry requires the user agent to be overridden.
241 const char kLinuxInfoStr[] = "X11; Linux x86_64"; 250 const char kLinuxInfoStr[] = "X11; Linux x86_64";
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 break; 360 break;
352 } 361 }
353 } 362 }
354 } 363 }
355 364
356 void ContentViewCoreImpl::RenderViewReady() { 365 void ContentViewCoreImpl::RenderViewReady() {
357 if (device_orientation_ != 0) 366 if (device_orientation_ != 0)
358 SendOrientationChangeEventInternal(); 367 SendOrientationChangeEventInternal();
359 } 368 }
360 369
361 void ContentViewCoreImpl::OnGestureEvent(const blink::WebGestureEvent& event) { 370 void ContentViewCoreImpl::OnGestureEvent(const ui::GestureEventData& gesture) {
362 SendGestureEvent(event); 371 SendGestureEvent(
372 CreateWebGestureEventFromGestureEventData(gesture, 1.f / dpi_scale()));
363 } 373 }
364 374
365 RenderWidgetHostViewAndroid* 375 RenderWidgetHostViewAndroid*
366 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { 376 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() {
367 RenderWidgetHostView* rwhv = NULL; 377 RenderWidgetHostView* rwhv = NULL;
368 if (web_contents_) { 378 if (web_contents_) {
369 rwhv = web_contents_->GetRenderWidgetHostView(); 379 rwhv = web_contents_->GetRenderWidgetHostView();
370 if (web_contents_->ShowingInterstitialPage()) { 380 if (web_contents_->ShowingInterstitialPage()) {
371 rwhv = static_cast<InterstitialPageImpl*>( 381 rwhv = static_cast<InterstitialPageImpl*>(
372 web_contents_->GetInterstitialPage())-> 382 web_contents_->GetInterstitialPage())->
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); 556 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled);
547 } 557 }
548 ScopedJavaLocalRef<jobjectArray> items_array( 558 ScopedJavaLocalRef<jobjectArray> items_array(
549 base::android::ToJavaArrayOfStrings(env, labels)); 559 base::android::ToJavaArrayOfStrings(env, labels));
550 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), 560 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(),
551 items_array.obj(), enabled_array.obj(), 561 items_array.obj(), enabled_array.obj(),
552 multiple, selected_array.obj()); 562 multiple, selected_array.obj());
553 } 563 }
554 564
555 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { 565 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) {
556 gesture_provider_.OnTouchEventAck(ack_result); 566 const bool event_consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED;
567 gesture_provider_.OnTouchEventAck(event_consumed);
557 } 568 }
558 569
559 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, 570 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event,
560 InputEventAckState ack_result) { 571 InputEventAckState ack_result) {
561 JNIEnv* env = AttachCurrentThread(); 572 JNIEnv* env = AttachCurrentThread();
562 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 573 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
563 if (j_obj.is_null()) 574 if (j_obj.is_null())
564 return; 575 return;
565 576
566 switch (event.type) { 577 switch (event.type) {
567 case WebInputEvent::GestureFlingStart: 578 case WebInputEvent::GestureFlingStart:
568 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) { 579 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) {
569 // The view expects the fling velocity in pixels/s. 580 // The view expects the fling velocity in pixels/s.
570 Java_ContentViewCore_onFlingStartEventConsumed(env, j_obj.obj(), 581 Java_ContentViewCore_onFlingStartEventConsumed(env, j_obj.obj(),
571 event.data.flingStart.velocityX * GetDpiScale(), 582 event.data.flingStart.velocityX * dpi_scale(),
572 event.data.flingStart.velocityY * GetDpiScale()); 583 event.data.flingStart.velocityY * dpi_scale());
573 } else { 584 } else {
574 // If a scroll ends with a fling, a SCROLL_END event is never sent. 585 // If a scroll ends with a fling, a SCROLL_END event is never sent.
575 // However, if that fling went unconsumed, we still need to let the 586 // However, if that fling went unconsumed, we still need to let the
576 // listeners know that scrolling has ended. 587 // listeners know that scrolling has ended.
577 Java_ContentViewCore_onScrollEndEventAck(env, j_obj.obj()); 588 Java_ContentViewCore_onScrollEndEventAck(env, j_obj.obj());
578 } 589 }
579 590
580 if (ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) { 591 if (ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) {
581 // The view expects the fling velocity in pixels/s. 592 // The view expects the fling velocity in pixels/s.
582 Java_ContentViewCore_onFlingStartEventHadNoConsumer(env, j_obj.obj(), 593 Java_ContentViewCore_onFlingStartEventHadNoConsumer(env, j_obj.obj(),
583 event.data.flingStart.velocityX * GetDpiScale(), 594 event.data.flingStart.velocityX * dpi_scale(),
584 event.data.flingStart.velocityY * GetDpiScale()); 595 event.data.flingStart.velocityY * dpi_scale());
585 } 596 }
586 break; 597 break;
587 case WebInputEvent::GestureFlingCancel: 598 case WebInputEvent::GestureFlingCancel:
588 Java_ContentViewCore_onFlingCancelEventAck(env, j_obj.obj()); 599 Java_ContentViewCore_onFlingCancelEventAck(env, j_obj.obj());
589 break; 600 break;
590 case WebInputEvent::GestureScrollBegin: 601 case WebInputEvent::GestureScrollBegin:
591 Java_ContentViewCore_onScrollBeginEventAck(env, j_obj.obj()); 602 Java_ContentViewCore_onScrollBeginEventAck(env, j_obj.obj());
592 break; 603 break;
593 case WebInputEvent::GestureScrollUpdate: 604 case WebInputEvent::GestureScrollUpdate:
594 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) 605 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED)
(...skipping 27 matching lines...) Expand all
622 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 633 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
623 if (j_obj.is_null()) 634 if (j_obj.is_null())
624 return false; 635 return false;
625 636
626 const blink::WebGestureEvent& gesture = 637 const blink::WebGestureEvent& gesture =
627 static_cast<const blink::WebGestureEvent&>(event); 638 static_cast<const blink::WebGestureEvent&>(event);
628 int gesture_type = ToGestureEventType(event.type); 639 int gesture_type = ToGestureEventType(event.type);
629 return Java_ContentViewCore_filterTapOrPressEvent(env, 640 return Java_ContentViewCore_filterTapOrPressEvent(env,
630 j_obj.obj(), 641 j_obj.obj(),
631 gesture_type, 642 gesture_type,
632 gesture.x * GetDpiScale(), 643 gesture.x * dpi_scale(),
633 gesture.y * GetDpiScale()); 644 gesture.y * dpi_scale());
634 645
635 // TODO(jdduke): Also report double-tap UMA, crbug/347568. 646 // TODO(jdduke): Also report double-tap UMA, crbug/347568.
636 } 647 }
637 648
638 bool ContentViewCoreImpl::HasFocus() { 649 bool ContentViewCoreImpl::HasFocus() {
639 JNIEnv* env = AttachCurrentThread(); 650 JNIEnv* env = AttachCurrentThread();
640 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 651 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
641 if (obj.is_null()) 652 if (obj.is_null())
642 return false; 653 return false;
643 return Java_ContentViewCore_hasFocus(env, obj.obj()); 654 return Java_ContentViewCore_hasFocus(env, obj.obj());
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 812 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
802 if (j_obj.is_null()) 813 if (j_obj.is_null())
803 return gfx::Size(); 814 return gfx::Size();
804 return gfx::Size( 815 return gfx::Size(
805 Java_ContentViewCore_getViewportSizeOffsetWidthPix(env, j_obj.obj()), 816 Java_ContentViewCore_getViewportSizeOffsetWidthPix(env, j_obj.obj()),
806 Java_ContentViewCore_getViewportSizeOffsetHeightPix(env, j_obj.obj())); 817 Java_ContentViewCore_getViewportSizeOffsetHeightPix(env, j_obj.obj()));
807 } 818 }
808 819
809 gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { 820 gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const {
810 return gfx::ToCeiledSize( 821 return gfx::ToCeiledSize(
811 gfx::ScaleSize(GetViewportSizePix(), 1.0f / GetDpiScale())); 822 gfx::ScaleSize(GetViewportSizePix(), 1.0f / dpi_scale()));
812 } 823 }
813 824
814 gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetDip() const { 825 gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetDip() const {
815 return gfx::ToCeiledSize( 826 return gfx::ToCeiledSize(
816 gfx::ScaleSize(GetViewportSizeOffsetPix(), 1.0f / GetDpiScale())); 827 gfx::ScaleSize(GetViewportSizeOffsetPix(), 1.0f / dpi_scale()));
817 } 828 }
818 829
819 float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const { 830 float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const {
820 JNIEnv* env = AttachCurrentThread(); 831 JNIEnv* env = AttachCurrentThread();
821 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 832 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env);
822 if (j_obj.is_null()) 833 if (j_obj.is_null())
823 return 0.f; 834 return 0.f;
824 return Java_ContentViewCore_getOverdrawBottomHeightPix(env, j_obj.obj()) 835 return Java_ContentViewCore_getOverdrawBottomHeightPix(env, j_obj.obj())
825 / GetDpiScale(); 836 / dpi_scale();
826 } 837 }
827 838
828 void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { 839 void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) {
829 root_layer_->AddChild(layer); 840 root_layer_->AddChild(layer);
830 } 841 }
831 842
832 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { 843 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) {
833 layer->RemoveFromParent(); 844 layer->RemoveFromParent();
834 } 845 }
835 846
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
999 jobject motion_event) { 1010 jobject motion_event) {
1000 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 1011 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1001 if (!rwhv) 1012 if (!rwhv)
1002 return false; 1013 return false;
1003 1014
1004 MotionEventAndroid event(env, motion_event, false); 1015 MotionEventAndroid event(env, motion_event, false);
1005 1016
1006 if (!gesture_provider_.OnTouchEvent(event)) 1017 if (!gesture_provider_.OnTouchEvent(event))
1007 return false; 1018 return false;
1008 1019
1009 rwhv->SendTouchEvent(WebTouchEventBuilder::Build(event, GetDpiScale())); 1020 rwhv->SendTouchEvent(WebTouchEventBuilder::Build(event, dpi_scale()));
1010 return true; 1021 return true;
1011 } 1022 }
1012 1023
1013 float ContentViewCoreImpl::GetDpiScale() const { 1024 float ContentViewCoreImpl::GetDpiScale() const {
1014 return dpi_scale_; 1025 return dpi_scale_;
1015 } 1026 }
1016 1027
1017 jboolean ContentViewCoreImpl::SendMouseMoveEvent(JNIEnv* env, 1028 jboolean ContentViewCoreImpl::SendMouseMoveEvent(JNIEnv* env,
1018 jobject obj, 1029 jobject obj,
1019 jlong time_ms, 1030 jlong time_ms,
1020 jfloat x, 1031 jfloat x,
1021 jfloat y) { 1032 jfloat y) {
1022 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 1033 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1023 if (!rwhv) 1034 if (!rwhv)
1024 return false; 1035 return false;
1025 1036
1026 blink::WebMouseEvent event = WebMouseEventBuilder::Build( 1037 blink::WebMouseEvent event = WebMouseEventBuilder::Build(
1027 WebInputEvent::MouseMove, 1038 WebInputEvent::MouseMove,
1028 blink::WebMouseEvent::ButtonNone, 1039 blink::WebMouseEvent::ButtonNone,
1029 time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale(), 0, 1); 1040 time_ms / 1000.0, x / dpi_scale(), y / dpi_scale(), 0, 1);
1030 1041
1031 rwhv->SendMouseEvent(event); 1042 rwhv->SendMouseEvent(event);
1032 return true; 1043 return true;
1033 } 1044 }
1034 1045
1035 jboolean ContentViewCoreImpl::SendMouseWheelEvent(JNIEnv* env, 1046 jboolean ContentViewCoreImpl::SendMouseWheelEvent(JNIEnv* env,
1036 jobject obj, 1047 jobject obj,
1037 jlong time_ms, 1048 jlong time_ms,
1038 jfloat x, 1049 jfloat x,
1039 jfloat y, 1050 jfloat y,
1040 jfloat vertical_axis) { 1051 jfloat vertical_axis) {
1041 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 1052 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1042 if (!rwhv) 1053 if (!rwhv)
1043 return false; 1054 return false;
1044 1055
1045 WebMouseWheelEventBuilder::Direction direction; 1056 WebMouseWheelEventBuilder::Direction direction;
1046 if (vertical_axis > 0) { 1057 if (vertical_axis > 0) {
1047 direction = WebMouseWheelEventBuilder::DIRECTION_UP; 1058 direction = WebMouseWheelEventBuilder::DIRECTION_UP;
1048 } else if (vertical_axis < 0) { 1059 } else if (vertical_axis < 0) {
1049 direction = WebMouseWheelEventBuilder::DIRECTION_DOWN; 1060 direction = WebMouseWheelEventBuilder::DIRECTION_DOWN;
1050 } else { 1061 } else {
1051 return false; 1062 return false;
1052 } 1063 }
1053 blink::WebMouseWheelEvent event = WebMouseWheelEventBuilder::Build( 1064 blink::WebMouseWheelEvent event = WebMouseWheelEventBuilder::Build(
1054 direction, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 1065 direction, time_ms / 1000.0, x / dpi_scale(), y / dpi_scale());
1055 1066
1056 rwhv->SendMouseWheelEvent(event); 1067 rwhv->SendMouseWheelEvent(event);
1057 return true; 1068 return true;
1058 } 1069 }
1059 1070
1060 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( 1071 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent(
1061 WebInputEvent::Type type, int64 time_ms, float x, float y) const { 1072 WebInputEvent::Type type, int64 time_ms, float x, float y) const {
1062 return WebGestureEventBuilder::Build( 1073 return WebGestureEventBuilder::Build(
1063 type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 1074 type, time_ms / 1000.0, x / dpi_scale(), y / dpi_scale());
1064 } 1075 }
1065 1076
1066 void ContentViewCoreImpl::SendGestureEvent( 1077 void ContentViewCoreImpl::SendGestureEvent(
1067 const blink::WebGestureEvent& event) { 1078 const blink::WebGestureEvent& event) {
1068 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 1079 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid();
1069 if (rwhv) 1080 if (rwhv)
1070 rwhv->SendGestureEvent(event); 1081 rwhv->SendGestureEvent(event);
1071 } 1082 }
1072 1083
1073 void ContentViewCoreImpl::ScrollBegin(JNIEnv* env, 1084 void ContentViewCoreImpl::ScrollBegin(JNIEnv* env,
1074 jobject obj, 1085 jobject obj,
1075 jlong time_ms, 1086 jlong time_ms,
1076 jfloat x, 1087 jfloat x,
1077 jfloat y, 1088 jfloat y,
1078 jfloat hintx, 1089 jfloat hintx,
1079 jfloat hinty) { 1090 jfloat hinty) {
1080 WebGestureEvent event = MakeGestureEvent( 1091 WebGestureEvent event = MakeGestureEvent(
1081 WebInputEvent::GestureScrollBegin, time_ms, x, y); 1092 WebInputEvent::GestureScrollBegin, time_ms, x, y);
1082 event.data.scrollBegin.deltaXHint = hintx / GetDpiScale(); 1093 event.data.scrollBegin.deltaXHint = hintx / dpi_scale();
1083 event.data.scrollBegin.deltaYHint = hinty / GetDpiScale(); 1094 event.data.scrollBegin.deltaYHint = hinty / dpi_scale();
1084 1095
1085 SendGestureEvent(event); 1096 SendGestureEvent(event);
1086 } 1097 }
1087 1098
1088 void ContentViewCoreImpl::ScrollEnd(JNIEnv* env, jobject obj, jlong time_ms) { 1099 void ContentViewCoreImpl::ScrollEnd(JNIEnv* env, jobject obj, jlong time_ms) {
1089 WebGestureEvent event = MakeGestureEvent( 1100 WebGestureEvent event = MakeGestureEvent(
1090 WebInputEvent::GestureScrollEnd, time_ms, 0, 0); 1101 WebInputEvent::GestureScrollEnd, time_ms, 0, 0);
1091 SendGestureEvent(event); 1102 SendGestureEvent(event);
1092 } 1103 }
1093 1104
1094 void ContentViewCoreImpl::ScrollBy(JNIEnv* env, jobject obj, jlong time_ms, 1105 void ContentViewCoreImpl::ScrollBy(JNIEnv* env, jobject obj, jlong time_ms,
1095 jfloat x, jfloat y, jfloat dx, jfloat dy) { 1106 jfloat x, jfloat y, jfloat dx, jfloat dy) {
1096 WebGestureEvent event = MakeGestureEvent( 1107 WebGestureEvent event = MakeGestureEvent(
1097 WebInputEvent::GestureScrollUpdate, time_ms, x, y); 1108 WebInputEvent::GestureScrollUpdate, time_ms, x, y);
1098 event.data.scrollUpdate.deltaX = -dx / GetDpiScale(); 1109 event.data.scrollUpdate.deltaX = -dx / dpi_scale();
1099 event.data.scrollUpdate.deltaY = -dy / GetDpiScale(); 1110 event.data.scrollUpdate.deltaY = -dy / dpi_scale();
1100 1111
1101 SendGestureEvent(event); 1112 SendGestureEvent(event);
1102 } 1113 }
1103 1114
1104 void ContentViewCoreImpl::FlingStart(JNIEnv* env, jobject obj, jlong time_ms, 1115 void ContentViewCoreImpl::FlingStart(JNIEnv* env, jobject obj, jlong time_ms,
1105 jfloat x, jfloat y, jfloat vx, jfloat vy) { 1116 jfloat x, jfloat y, jfloat vx, jfloat vy) {
1106 WebGestureEvent event = MakeGestureEvent( 1117 WebGestureEvent event = MakeGestureEvent(
1107 WebInputEvent::GestureFlingStart, time_ms, x, y); 1118 WebInputEvent::GestureFlingStart, time_ms, x, y);
1108 event.data.flingStart.velocityX = vx / GetDpiScale(); 1119 event.data.flingStart.velocityX = vx / dpi_scale();
1109 event.data.flingStart.velocityY = vy / GetDpiScale(); 1120 event.data.flingStart.velocityY = vy / dpi_scale();
1110 1121
1111 SendGestureEvent(event); 1122 SendGestureEvent(event);
1112 } 1123 }
1113 1124
1114 void ContentViewCoreImpl::FlingCancel(JNIEnv* env, jobject obj, jlong time_ms) { 1125 void ContentViewCoreImpl::FlingCancel(JNIEnv* env, jobject obj, jlong time_ms) {
1115 WebGestureEvent event = MakeGestureEvent( 1126 WebGestureEvent event = MakeGestureEvent(
1116 WebInputEvent::GestureFlingCancel, time_ms, 0, 0); 1127 WebInputEvent::GestureFlingCancel, time_ms, 0, 0);
1117 SendGestureEvent(event); 1128 SendGestureEvent(event);
1118 } 1129 }
1119 1130
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1162 event.data.pinchUpdate.scale = delta; 1173 event.data.pinchUpdate.scale = delta;
1163 1174
1164 SendGestureEvent(event); 1175 SendGestureEvent(event);
1165 } 1176 }
1166 1177
1167 void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj, 1178 void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj,
1168 jfloat x1, jfloat y1, 1179 jfloat x1, jfloat y1,
1169 jfloat x2, jfloat y2) { 1180 jfloat x2, jfloat y2) {
1170 if (GetRenderWidgetHostViewAndroid()) { 1181 if (GetRenderWidgetHostViewAndroid()) {
1171 GetRenderWidgetHostViewAndroid()->SelectRange( 1182 GetRenderWidgetHostViewAndroid()->SelectRange(
1172 gfx::Point(x1 / GetDpiScale(), y1 / GetDpiScale()), 1183 gfx::Point(x1 / dpi_scale(), y1 / dpi_scale()),
1173 gfx::Point(x2 / GetDpiScale(), y2 / GetDpiScale())); 1184 gfx::Point(x2 / dpi_scale(), y2 / dpi_scale()));
1174 } 1185 }
1175 } 1186 }
1176 1187
1177 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj, 1188 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj,
1178 jfloat x, jfloat y) { 1189 jfloat x, jfloat y) {
1179 if (GetRenderWidgetHostViewAndroid()) { 1190 if (GetRenderWidgetHostViewAndroid()) {
1180 GetRenderWidgetHostViewAndroid()->MoveCaret( 1191 GetRenderWidgetHostViewAndroid()->MoveCaret(
1181 gfx::Point(x / GetDpiScale(), y / GetDpiScale())); 1192 gfx::Point(x / dpi_scale(), y / dpi_scale()));
1182 } 1193 }
1183 } 1194 }
1184 1195
1185 void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) { 1196 void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) {
1186 gesture_provider_.ResetGestureDetectors(); 1197 gesture_provider_.ResetGestureDetectors();
1187 } 1198 }
1188 1199
1189 void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) { 1200 void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) {
1190 gesture_provider_.CancelActiveTouchSequence(); 1201 gesture_provider_.CancelActiveTouchSequence();
1191 } 1202 }
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
1665 sodh->OnOrientationChange(orientation); 1676 sodh->OnOrientationChange(orientation);
1666 } 1677 }
1667 1678
1668 void ContentViewCoreImpl::ExtractSmartClipData(JNIEnv* env, 1679 void ContentViewCoreImpl::ExtractSmartClipData(JNIEnv* env,
1669 jobject obj, 1680 jobject obj,
1670 jint x, 1681 jint x,
1671 jint y, 1682 jint y,
1672 jint width, 1683 jint width,
1673 jint height) { 1684 jint height) {
1674 gfx::Rect rect( 1685 gfx::Rect rect(
1675 static_cast<int>(x / GetDpiScale()), 1686 static_cast<int>(x / dpi_scale()),
1676 static_cast<int>(y / GetDpiScale()), 1687 static_cast<int>(y / dpi_scale()),
1677 static_cast<int>((width > 0 && width < GetDpiScale()) ? 1688 static_cast<int>((width > 0 && width < dpi_scale()) ?
1678 1 : (int)(width / GetDpiScale())), 1689 1 : (int)(width / dpi_scale())),
1679 static_cast<int>((height > 0 && height < GetDpiScale()) ? 1690 static_cast<int>((height > 0 && height < dpi_scale()) ?
1680 1 : (int)(height / GetDpiScale()))); 1691 1 : (int)(height / dpi_scale())));
1681 GetWebContents()->Send(new ViewMsg_ExtractSmartClipData( 1692 GetWebContents()->Send(new ViewMsg_ExtractSmartClipData(
1682 GetWebContents()->GetRoutingID(), rect)); 1693 GetWebContents()->GetRoutingID(), rect));
1683 } 1694 }
1684 1695
1685 void ContentViewCoreImpl::OnSmartClipDataExtracted( 1696 void ContentViewCoreImpl::OnSmartClipDataExtracted(
1686 const base::string16& result) { 1697 const base::string16& result) {
1687 JNIEnv* env = AttachCurrentThread(); 1698 JNIEnv* env = AttachCurrentThread();
1688 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 1699 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
1689 if (obj.is_null()) 1700 if (obj.is_null())
1690 return; 1701 return;
(...skipping 21 matching lines...) Expand all
1712 reinterpret_cast<ui::ViewAndroid*>(view_android), 1723 reinterpret_cast<ui::ViewAndroid*>(view_android),
1713 reinterpret_cast<ui::WindowAndroid*>(window_android)); 1724 reinterpret_cast<ui::WindowAndroid*>(window_android));
1714 return reinterpret_cast<intptr_t>(view); 1725 return reinterpret_cast<intptr_t>(view);
1715 } 1726 }
1716 1727
1717 bool RegisterContentViewCore(JNIEnv* env) { 1728 bool RegisterContentViewCore(JNIEnv* env) {
1718 return RegisterNativesImpl(env); 1729 return RegisterNativesImpl(env);
1719 } 1730 }
1720 1731
1721 } // namespace content 1732 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698