| OLD | NEW |
| 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" |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "content/public/browser/web_contents.h" | 49 #include "content/public/browser/web_contents.h" |
| 50 #include "content/public/common/content_client.h" | 50 #include "content/public/common/content_client.h" |
| 51 #include "content/public/common/content_switches.h" | 51 #include "content/public/common/content_switches.h" |
| 52 #include "content/public/common/menu_item.h" | 52 #include "content/public/common/menu_item.h" |
| 53 #include "content/public/common/page_transition_types.h" | 53 #include "content/public/common/page_transition_types.h" |
| 54 #include "jni/ContentViewCore_jni.h" | 54 #include "jni/ContentViewCore_jni.h" |
| 55 #include "third_party/WebKit/public/web/WebBindings.h" | 55 #include "third_party/WebKit/public/web/WebBindings.h" |
| 56 #include "third_party/WebKit/public/web/WebInputEvent.h" | 56 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 57 #include "ui/base/android/view_android.h" | 57 #include "ui/base/android/view_android.h" |
| 58 #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" |
| 59 #include "ui/gfx/android/java_bitmap.h" | 60 #include "ui/gfx/android/java_bitmap.h" |
| 60 #include "ui/gfx/screen.h" | 61 #include "ui/gfx/screen.h" |
| 61 #include "ui/gfx/size_conversions.h" | 62 #include "ui/gfx/size_conversions.h" |
| 62 #include "ui/gfx/size_f.h" | 63 #include "ui/gfx/size_f.h" |
| 63 #include "webkit/common/user_agent/user_agent_util.h" | 64 #include "webkit/common/user_agent/user_agent_util.h" |
| 64 | 65 |
| 65 using base::android::AttachCurrentThread; | 66 using base::android::AttachCurrentThread; |
| 66 using base::android::ConvertJavaStringToUTF16; | 67 using base::android::ConvertJavaStringToUTF16; |
| 67 using base::android::ConvertJavaStringToUTF8; | 68 using base::android::ConvertJavaStringToUTF8; |
| 68 using base::android::ConvertUTF16ToJavaString; | 69 using base::android::ConvertUTF16ToJavaString; |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 return -1; | 157 return -1; |
| 157 }; | 158 }; |
| 158 } | 159 } |
| 159 | 160 |
| 160 float GetPrimaryDisplayDeviceScaleFactor() { | 161 float GetPrimaryDisplayDeviceScaleFactor() { |
| 161 const gfx::Display& display = | 162 const gfx::Display& display = |
| 162 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 163 gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
| 163 return display.device_scale_factor(); | 164 return display.device_scale_factor(); |
| 164 } | 165 } |
| 165 | 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 |
| 166 } // namespace | 174 } // namespace |
| 167 | 175 |
| 168 // Enables a callback when the underlying WebContents is destroyed, to enable | 176 // Enables a callback when the underlying WebContents is destroyed, to enable |
| 169 // nulling the back-pointer. | 177 // nulling the back-pointer. |
| 170 class ContentViewCoreImpl::ContentViewUserData | 178 class ContentViewCoreImpl::ContentViewUserData |
| 171 : public base::SupportsUserData::Data { | 179 : public base::SupportsUserData::Data { |
| 172 public: | 180 public: |
| 173 explicit ContentViewUserData(ContentViewCoreImpl* content_view_core) | 181 explicit ContentViewUserData(ContentViewCoreImpl* content_view_core) |
| 174 : content_view_core_(content_view_core) { | 182 : content_view_core_(content_view_core) { |
| 175 } | 183 } |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 java_ref_(env, obj), | 230 java_ref_(env, obj), |
| 223 web_contents_(static_cast<WebContentsImpl*>(web_contents)), | 231 web_contents_(static_cast<WebContentsImpl*>(web_contents)), |
| 224 root_layer_(cc::Layer::Create()), | 232 root_layer_(cc::Layer::Create()), |
| 225 dpi_scale_(GetPrimaryDisplayDeviceScaleFactor()), | 233 dpi_scale_(GetPrimaryDisplayDeviceScaleFactor()), |
| 226 vsync_interval_(base::TimeDelta::FromMicroseconds( | 234 vsync_interval_(base::TimeDelta::FromMicroseconds( |
| 227 kDefaultVSyncIntervalMicros)), | 235 kDefaultVSyncIntervalMicros)), |
| 228 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( | 236 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( |
| 229 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), | 237 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), |
| 230 view_android_(view_android), | 238 view_android_(view_android), |
| 231 window_android_(window_android), | 239 window_android_(window_android), |
| 232 gesture_provider_(this, 1.f / dpi_scale_), | 240 gesture_provider_(GetGestureProviderConfig(), this), |
| 233 device_orientation_(0), | 241 device_orientation_(0), |
| 234 geolocation_needs_pause_(false) { | 242 geolocation_needs_pause_(false) { |
| 235 CHECK(web_contents) << | 243 CHECK(web_contents) << |
| 236 "A ContentViewCoreImpl should be created with a valid WebContents."; | 244 "A ContentViewCoreImpl should be created with a valid WebContents."; |
| 237 | 245 |
| 238 // 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 |
| 239 // spoofing a desktop Linux user agent for "Request desktop site". | 247 // spoofing a desktop Linux user agent for "Request desktop site". |
| 240 // 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 |
| 241 // NavigationEntry requires the user agent to be overridden. | 249 // NavigationEntry requires the user agent to be overridden. |
| 242 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 Loading... |
| 352 break; | 360 break; |
| 353 } | 361 } |
| 354 } | 362 } |
| 355 } | 363 } |
| 356 | 364 |
| 357 void ContentViewCoreImpl::RenderViewReady() { | 365 void ContentViewCoreImpl::RenderViewReady() { |
| 358 if (device_orientation_ != 0) | 366 if (device_orientation_ != 0) |
| 359 SendOrientationChangeEventInternal(); | 367 SendOrientationChangeEventInternal(); |
| 360 } | 368 } |
| 361 | 369 |
| 362 void ContentViewCoreImpl::OnGestureEvent(const blink::WebGestureEvent& event) { | 370 void ContentViewCoreImpl::OnGestureEvent(const ui::GestureEventData& gesture) { |
| 363 SendGestureEvent(event); | 371 SendGestureEvent( |
| 372 CreateWebGestureEventFromGestureEventData(gesture, 1.f / dpi_scale())); |
| 364 } | 373 } |
| 365 | 374 |
| 366 RenderWidgetHostViewAndroid* | 375 RenderWidgetHostViewAndroid* |
| 367 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { | 376 ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { |
| 368 RenderWidgetHostView* rwhv = NULL; | 377 RenderWidgetHostView* rwhv = NULL; |
| 369 if (web_contents_) { | 378 if (web_contents_) { |
| 370 rwhv = web_contents_->GetRenderWidgetHostView(); | 379 rwhv = web_contents_->GetRenderWidgetHostView(); |
| 371 if (web_contents_->ShowingInterstitialPage()) { | 380 if (web_contents_->ShowingInterstitialPage()) { |
| 372 rwhv = static_cast<InterstitialPageImpl*>( | 381 rwhv = static_cast<InterstitialPageImpl*>( |
| 373 web_contents_->GetInterstitialPage())-> | 382 web_contents_->GetInterstitialPage())-> |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); | 556 env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); |
| 548 } | 557 } |
| 549 ScopedJavaLocalRef<jobjectArray> items_array( | 558 ScopedJavaLocalRef<jobjectArray> items_array( |
| 550 base::android::ToJavaArrayOfStrings(env, labels)); | 559 base::android::ToJavaArrayOfStrings(env, labels)); |
| 551 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), | 560 Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), |
| 552 items_array.obj(), enabled_array.obj(), | 561 items_array.obj(), enabled_array.obj(), |
| 553 multiple, selected_array.obj()); | 562 multiple, selected_array.obj()); |
| 554 } | 563 } |
| 555 | 564 |
| 556 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { | 565 void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { |
| 557 gesture_provider_.OnTouchEventAck(ack_result); | 566 const bool event_consumed = ack_result == INPUT_EVENT_ACK_STATE_CONSUMED; |
| 567 gesture_provider_.OnTouchEventAck(event_consumed); |
| 558 } | 568 } |
| 559 | 569 |
| 560 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, | 570 void ContentViewCoreImpl::OnGestureEventAck(const blink::WebGestureEvent& event, |
| 561 InputEventAckState ack_result) { | 571 InputEventAckState ack_result) { |
| 562 JNIEnv* env = AttachCurrentThread(); | 572 JNIEnv* env = AttachCurrentThread(); |
| 563 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 573 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 564 if (j_obj.is_null()) | 574 if (j_obj.is_null()) |
| 565 return; | 575 return; |
| 566 | 576 |
| 567 switch (event.type) { | 577 switch (event.type) { |
| 568 case WebInputEvent::GestureFlingStart: | 578 case WebInputEvent::GestureFlingStart: |
| 569 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) { | 579 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) { |
| 570 // The view expects the fling velocity in pixels/s. | 580 // The view expects the fling velocity in pixels/s. |
| 571 Java_ContentViewCore_onFlingStartEventConsumed(env, j_obj.obj(), | 581 Java_ContentViewCore_onFlingStartEventConsumed(env, j_obj.obj(), |
| 572 event.data.flingStart.velocityX * GetDpiScale(), | 582 event.data.flingStart.velocityX * dpi_scale(), |
| 573 event.data.flingStart.velocityY * GetDpiScale()); | 583 event.data.flingStart.velocityY * dpi_scale()); |
| 574 } else { | 584 } else { |
| 575 // 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. |
| 576 // 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 |
| 577 // listeners know that scrolling has ended. | 587 // listeners know that scrolling has ended. |
| 578 Java_ContentViewCore_onScrollEndEventAck(env, j_obj.obj()); | 588 Java_ContentViewCore_onScrollEndEventAck(env, j_obj.obj()); |
| 579 } | 589 } |
| 580 | 590 |
| 581 if (ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) { | 591 if (ack_result == INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS) { |
| 582 // The view expects the fling velocity in pixels/s. | 592 // The view expects the fling velocity in pixels/s. |
| 583 Java_ContentViewCore_onFlingStartEventHadNoConsumer(env, j_obj.obj(), | 593 Java_ContentViewCore_onFlingStartEventHadNoConsumer(env, j_obj.obj(), |
| 584 event.data.flingStart.velocityX * GetDpiScale(), | 594 event.data.flingStart.velocityX * dpi_scale(), |
| 585 event.data.flingStart.velocityY * GetDpiScale()); | 595 event.data.flingStart.velocityY * dpi_scale()); |
| 586 } | 596 } |
| 587 break; | 597 break; |
| 588 case WebInputEvent::GestureFlingCancel: | 598 case WebInputEvent::GestureFlingCancel: |
| 589 Java_ContentViewCore_onFlingCancelEventAck(env, j_obj.obj()); | 599 Java_ContentViewCore_onFlingCancelEventAck(env, j_obj.obj()); |
| 590 break; | 600 break; |
| 591 case WebInputEvent::GestureScrollBegin: | 601 case WebInputEvent::GestureScrollBegin: |
| 592 Java_ContentViewCore_onScrollBeginEventAck(env, j_obj.obj()); | 602 Java_ContentViewCore_onScrollBeginEventAck(env, j_obj.obj()); |
| 593 break; | 603 break; |
| 594 case WebInputEvent::GestureScrollUpdate: | 604 case WebInputEvent::GestureScrollUpdate: |
| 595 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) | 605 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) |
| (...skipping 27 matching lines...) Expand all Loading... |
| 623 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 633 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 624 if (j_obj.is_null()) | 634 if (j_obj.is_null()) |
| 625 return false; | 635 return false; |
| 626 | 636 |
| 627 const blink::WebGestureEvent& gesture = | 637 const blink::WebGestureEvent& gesture = |
| 628 static_cast<const blink::WebGestureEvent&>(event); | 638 static_cast<const blink::WebGestureEvent&>(event); |
| 629 int gesture_type = ToGestureEventType(event.type); | 639 int gesture_type = ToGestureEventType(event.type); |
| 630 return Java_ContentViewCore_filterTapOrPressEvent(env, | 640 return Java_ContentViewCore_filterTapOrPressEvent(env, |
| 631 j_obj.obj(), | 641 j_obj.obj(), |
| 632 gesture_type, | 642 gesture_type, |
| 633 gesture.x * GetDpiScale(), | 643 gesture.x * dpi_scale(), |
| 634 gesture.y * GetDpiScale()); | 644 gesture.y * dpi_scale()); |
| 635 | 645 |
| 636 // TODO(jdduke): Also report double-tap UMA, crbug/347568. | 646 // TODO(jdduke): Also report double-tap UMA, crbug/347568. |
| 637 } | 647 } |
| 638 | 648 |
| 639 bool ContentViewCoreImpl::HasFocus() { | 649 bool ContentViewCoreImpl::HasFocus() { |
| 640 JNIEnv* env = AttachCurrentThread(); | 650 JNIEnv* env = AttachCurrentThread(); |
| 641 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 651 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 642 if (obj.is_null()) | 652 if (obj.is_null()) |
| 643 return false; | 653 return false; |
| 644 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 Loading... |
| 802 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 812 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 803 if (j_obj.is_null()) | 813 if (j_obj.is_null()) |
| 804 return gfx::Size(); | 814 return gfx::Size(); |
| 805 return gfx::Size( | 815 return gfx::Size( |
| 806 Java_ContentViewCore_getViewportSizeOffsetWidthPix(env, j_obj.obj()), | 816 Java_ContentViewCore_getViewportSizeOffsetWidthPix(env, j_obj.obj()), |
| 807 Java_ContentViewCore_getViewportSizeOffsetHeightPix(env, j_obj.obj())); | 817 Java_ContentViewCore_getViewportSizeOffsetHeightPix(env, j_obj.obj())); |
| 808 } | 818 } |
| 809 | 819 |
| 810 gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { | 820 gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { |
| 811 return gfx::ToCeiledSize( | 821 return gfx::ToCeiledSize( |
| 812 gfx::ScaleSize(GetViewportSizePix(), 1.0f / GetDpiScale())); | 822 gfx::ScaleSize(GetViewportSizePix(), 1.0f / dpi_scale())); |
| 813 } | 823 } |
| 814 | 824 |
| 815 gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetDip() const { | 825 gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetDip() const { |
| 816 return gfx::ToCeiledSize( | 826 return gfx::ToCeiledSize( |
| 817 gfx::ScaleSize(GetViewportSizeOffsetPix(), 1.0f / GetDpiScale())); | 827 gfx::ScaleSize(GetViewportSizeOffsetPix(), 1.0f / dpi_scale())); |
| 818 } | 828 } |
| 819 | 829 |
| 820 float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const { | 830 float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const { |
| 821 JNIEnv* env = AttachCurrentThread(); | 831 JNIEnv* env = AttachCurrentThread(); |
| 822 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); | 832 ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); |
| 823 if (j_obj.is_null()) | 833 if (j_obj.is_null()) |
| 824 return 0.f; | 834 return 0.f; |
| 825 return Java_ContentViewCore_getOverdrawBottomHeightPix(env, j_obj.obj()) | 835 return Java_ContentViewCore_getOverdrawBottomHeightPix(env, j_obj.obj()) |
| 826 / GetDpiScale(); | 836 / dpi_scale(); |
| 827 } | 837 } |
| 828 | 838 |
| 829 void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { | 839 void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { |
| 830 root_layer_->AddChild(layer); | 840 root_layer_->AddChild(layer); |
| 831 } | 841 } |
| 832 | 842 |
| 833 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { | 843 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { |
| 834 layer->RemoveFromParent(); | 844 layer->RemoveFromParent(); |
| 835 } | 845 } |
| 836 | 846 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1005 gesture_provider_.GetCurrentDownEvent(); | 1015 gesture_provider_.GetCurrentDownEvent(); |
| 1006 if (!current_down_event) | 1016 if (!current_down_event) |
| 1007 return; | 1017 return; |
| 1008 | 1018 |
| 1009 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel(); | 1019 scoped_ptr<ui::MotionEvent> cancel_event = current_down_event->Cancel(); |
| 1010 DCHECK(cancel_event); | 1020 DCHECK(cancel_event); |
| 1011 if (!gesture_provider_.OnTouchEvent(*cancel_event)) | 1021 if (!gesture_provider_.OnTouchEvent(*cancel_event)) |
| 1012 return; | 1022 return; |
| 1013 | 1023 |
| 1014 rwhv->SendTouchEvent( | 1024 rwhv->SendTouchEvent( |
| 1015 CreateWebTouchEventFromMotionEvent(*cancel_event, 1.f / GetDpiScale())); | 1025 CreateWebTouchEventFromMotionEvent(*cancel_event, 1.f / dpi_scale())); |
| 1016 } | 1026 } |
| 1017 | 1027 |
| 1018 jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env, | 1028 jboolean ContentViewCoreImpl::OnTouchEvent(JNIEnv* env, |
| 1019 jobject obj, | 1029 jobject obj, |
| 1020 jobject motion_event) { | 1030 jobject motion_event) { |
| 1021 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); | 1031 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); |
| 1022 if (!rwhv) | 1032 if (!rwhv) |
| 1023 return false; | 1033 return false; |
| 1024 | 1034 |
| 1025 MotionEventAndroid event(env, motion_event, false); | 1035 MotionEventAndroid event(env, motion_event, false); |
| 1026 | 1036 |
| 1027 if (!gesture_provider_.OnTouchEvent(event)) | 1037 if (!gesture_provider_.OnTouchEvent(event)) |
| 1028 return false; | 1038 return false; |
| 1029 | 1039 |
| 1030 rwhv->SendTouchEvent(WebTouchEventBuilder::Build(event, 1.f / GetDpiScale())); | 1040 rwhv->SendTouchEvent(WebTouchEventBuilder::Build(event, 1.f / dpi_scale())); |
| 1031 return true; | 1041 return true; |
| 1032 } | 1042 } |
| 1033 | 1043 |
| 1034 float ContentViewCoreImpl::GetDpiScale() const { | 1044 float ContentViewCoreImpl::GetDpiScale() const { |
| 1035 return dpi_scale_; | 1045 return dpi_scale_; |
| 1036 } | 1046 } |
| 1037 | 1047 |
| 1038 jboolean ContentViewCoreImpl::SendMouseMoveEvent(JNIEnv* env, | 1048 jboolean ContentViewCoreImpl::SendMouseMoveEvent(JNIEnv* env, |
| 1039 jobject obj, | 1049 jobject obj, |
| 1040 jlong time_ms, | 1050 jlong time_ms, |
| 1041 jfloat x, | 1051 jfloat x, |
| 1042 jfloat y) { | 1052 jfloat y) { |
| 1043 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); | 1053 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); |
| 1044 if (!rwhv) | 1054 if (!rwhv) |
| 1045 return false; | 1055 return false; |
| 1046 | 1056 |
| 1047 blink::WebMouseEvent event = WebMouseEventBuilder::Build( | 1057 blink::WebMouseEvent event = WebMouseEventBuilder::Build( |
| 1048 WebInputEvent::MouseMove, | 1058 WebInputEvent::MouseMove, |
| 1049 blink::WebMouseEvent::ButtonNone, | 1059 blink::WebMouseEvent::ButtonNone, |
| 1050 time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale(), 0, 1); | 1060 time_ms / 1000.0, x / dpi_scale(), y / dpi_scale(), 0, 1); |
| 1051 | 1061 |
| 1052 rwhv->SendMouseEvent(event); | 1062 rwhv->SendMouseEvent(event); |
| 1053 return true; | 1063 return true; |
| 1054 } | 1064 } |
| 1055 | 1065 |
| 1056 jboolean ContentViewCoreImpl::SendMouseWheelEvent(JNIEnv* env, | 1066 jboolean ContentViewCoreImpl::SendMouseWheelEvent(JNIEnv* env, |
| 1057 jobject obj, | 1067 jobject obj, |
| 1058 jlong time_ms, | 1068 jlong time_ms, |
| 1059 jfloat x, | 1069 jfloat x, |
| 1060 jfloat y, | 1070 jfloat y, |
| 1061 jfloat vertical_axis) { | 1071 jfloat vertical_axis) { |
| 1062 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); | 1072 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); |
| 1063 if (!rwhv) | 1073 if (!rwhv) |
| 1064 return false; | 1074 return false; |
| 1065 | 1075 |
| 1066 WebMouseWheelEventBuilder::Direction direction; | 1076 WebMouseWheelEventBuilder::Direction direction; |
| 1067 if (vertical_axis > 0) { | 1077 if (vertical_axis > 0) { |
| 1068 direction = WebMouseWheelEventBuilder::DIRECTION_UP; | 1078 direction = WebMouseWheelEventBuilder::DIRECTION_UP; |
| 1069 } else if (vertical_axis < 0) { | 1079 } else if (vertical_axis < 0) { |
| 1070 direction = WebMouseWheelEventBuilder::DIRECTION_DOWN; | 1080 direction = WebMouseWheelEventBuilder::DIRECTION_DOWN; |
| 1071 } else { | 1081 } else { |
| 1072 return false; | 1082 return false; |
| 1073 } | 1083 } |
| 1074 blink::WebMouseWheelEvent event = WebMouseWheelEventBuilder::Build( | 1084 blink::WebMouseWheelEvent event = WebMouseWheelEventBuilder::Build( |
| 1075 direction, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); | 1085 direction, time_ms / 1000.0, x / dpi_scale(), y / dpi_scale()); |
| 1076 | 1086 |
| 1077 rwhv->SendMouseWheelEvent(event); | 1087 rwhv->SendMouseWheelEvent(event); |
| 1078 return true; | 1088 return true; |
| 1079 } | 1089 } |
| 1080 | 1090 |
| 1081 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( | 1091 WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( |
| 1082 WebInputEvent::Type type, int64 time_ms, float x, float y) const { | 1092 WebInputEvent::Type type, int64 time_ms, float x, float y) const { |
| 1083 return WebGestureEventBuilder::Build( | 1093 return WebGestureEventBuilder::Build( |
| 1084 type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); | 1094 type, time_ms / 1000.0, x / dpi_scale(), y / dpi_scale()); |
| 1085 } | 1095 } |
| 1086 | 1096 |
| 1087 void ContentViewCoreImpl::SendGestureEvent( | 1097 void ContentViewCoreImpl::SendGestureEvent( |
| 1088 const blink::WebGestureEvent& event) { | 1098 const blink::WebGestureEvent& event) { |
| 1089 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); | 1099 RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); |
| 1090 if (rwhv) | 1100 if (rwhv) |
| 1091 rwhv->SendGestureEvent(event); | 1101 rwhv->SendGestureEvent(event); |
| 1092 } | 1102 } |
| 1093 | 1103 |
| 1094 void ContentViewCoreImpl::ScrollBegin(JNIEnv* env, | 1104 void ContentViewCoreImpl::ScrollBegin(JNIEnv* env, |
| 1095 jobject obj, | 1105 jobject obj, |
| 1096 jlong time_ms, | 1106 jlong time_ms, |
| 1097 jfloat x, | 1107 jfloat x, |
| 1098 jfloat y, | 1108 jfloat y, |
| 1099 jfloat hintx, | 1109 jfloat hintx, |
| 1100 jfloat hinty) { | 1110 jfloat hinty) { |
| 1101 WebGestureEvent event = MakeGestureEvent( | 1111 WebGestureEvent event = MakeGestureEvent( |
| 1102 WebInputEvent::GestureScrollBegin, time_ms, x, y); | 1112 WebInputEvent::GestureScrollBegin, time_ms, x, y); |
| 1103 event.data.scrollBegin.deltaXHint = hintx / GetDpiScale(); | 1113 event.data.scrollBegin.deltaXHint = hintx / dpi_scale(); |
| 1104 event.data.scrollBegin.deltaYHint = hinty / GetDpiScale(); | 1114 event.data.scrollBegin.deltaYHint = hinty / dpi_scale(); |
| 1105 | 1115 |
| 1106 SendGestureEvent(event); | 1116 SendGestureEvent(event); |
| 1107 } | 1117 } |
| 1108 | 1118 |
| 1109 void ContentViewCoreImpl::ScrollEnd(JNIEnv* env, jobject obj, jlong time_ms) { | 1119 void ContentViewCoreImpl::ScrollEnd(JNIEnv* env, jobject obj, jlong time_ms) { |
| 1110 WebGestureEvent event = MakeGestureEvent( | 1120 WebGestureEvent event = MakeGestureEvent( |
| 1111 WebInputEvent::GestureScrollEnd, time_ms, 0, 0); | 1121 WebInputEvent::GestureScrollEnd, time_ms, 0, 0); |
| 1112 SendGestureEvent(event); | 1122 SendGestureEvent(event); |
| 1113 } | 1123 } |
| 1114 | 1124 |
| 1115 void ContentViewCoreImpl::ScrollBy(JNIEnv* env, jobject obj, jlong time_ms, | 1125 void ContentViewCoreImpl::ScrollBy(JNIEnv* env, jobject obj, jlong time_ms, |
| 1116 jfloat x, jfloat y, jfloat dx, jfloat dy) { | 1126 jfloat x, jfloat y, jfloat dx, jfloat dy) { |
| 1117 WebGestureEvent event = MakeGestureEvent( | 1127 WebGestureEvent event = MakeGestureEvent( |
| 1118 WebInputEvent::GestureScrollUpdate, time_ms, x, y); | 1128 WebInputEvent::GestureScrollUpdate, time_ms, x, y); |
| 1119 event.data.scrollUpdate.deltaX = -dx / GetDpiScale(); | 1129 event.data.scrollUpdate.deltaX = -dx / dpi_scale(); |
| 1120 event.data.scrollUpdate.deltaY = -dy / GetDpiScale(); | 1130 event.data.scrollUpdate.deltaY = -dy / dpi_scale(); |
| 1121 | 1131 |
| 1122 SendGestureEvent(event); | 1132 SendGestureEvent(event); |
| 1123 } | 1133 } |
| 1124 | 1134 |
| 1125 void ContentViewCoreImpl::FlingStart(JNIEnv* env, jobject obj, jlong time_ms, | 1135 void ContentViewCoreImpl::FlingStart(JNIEnv* env, jobject obj, jlong time_ms, |
| 1126 jfloat x, jfloat y, jfloat vx, jfloat vy) { | 1136 jfloat x, jfloat y, jfloat vx, jfloat vy) { |
| 1127 WebGestureEvent event = MakeGestureEvent( | 1137 WebGestureEvent event = MakeGestureEvent( |
| 1128 WebInputEvent::GestureFlingStart, time_ms, x, y); | 1138 WebInputEvent::GestureFlingStart, time_ms, x, y); |
| 1129 event.data.flingStart.velocityX = vx / GetDpiScale(); | 1139 event.data.flingStart.velocityX = vx / dpi_scale(); |
| 1130 event.data.flingStart.velocityY = vy / GetDpiScale(); | 1140 event.data.flingStart.velocityY = vy / dpi_scale(); |
| 1131 | 1141 |
| 1132 SendGestureEvent(event); | 1142 SendGestureEvent(event); |
| 1133 } | 1143 } |
| 1134 | 1144 |
| 1135 void ContentViewCoreImpl::FlingCancel(JNIEnv* env, jobject obj, jlong time_ms) { | 1145 void ContentViewCoreImpl::FlingCancel(JNIEnv* env, jobject obj, jlong time_ms) { |
| 1136 WebGestureEvent event = MakeGestureEvent( | 1146 WebGestureEvent event = MakeGestureEvent( |
| 1137 WebInputEvent::GestureFlingCancel, time_ms, 0, 0); | 1147 WebInputEvent::GestureFlingCancel, time_ms, 0, 0); |
| 1138 SendGestureEvent(event); | 1148 SendGestureEvent(event); |
| 1139 } | 1149 } |
| 1140 | 1150 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 event.data.pinchUpdate.scale = delta; | 1193 event.data.pinchUpdate.scale = delta; |
| 1184 | 1194 |
| 1185 SendGestureEvent(event); | 1195 SendGestureEvent(event); |
| 1186 } | 1196 } |
| 1187 | 1197 |
| 1188 void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj, | 1198 void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj, |
| 1189 jfloat x1, jfloat y1, | 1199 jfloat x1, jfloat y1, |
| 1190 jfloat x2, jfloat y2) { | 1200 jfloat x2, jfloat y2) { |
| 1191 if (GetRenderWidgetHostViewAndroid()) { | 1201 if (GetRenderWidgetHostViewAndroid()) { |
| 1192 GetRenderWidgetHostViewAndroid()->SelectRange( | 1202 GetRenderWidgetHostViewAndroid()->SelectRange( |
| 1193 gfx::Point(x1 / GetDpiScale(), y1 / GetDpiScale()), | 1203 gfx::Point(x1 / dpi_scale(), y1 / dpi_scale()), |
| 1194 gfx::Point(x2 / GetDpiScale(), y2 / GetDpiScale())); | 1204 gfx::Point(x2 / dpi_scale(), y2 / dpi_scale())); |
| 1195 } | 1205 } |
| 1196 } | 1206 } |
| 1197 | 1207 |
| 1198 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj, | 1208 void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj, |
| 1199 jfloat x, jfloat y) { | 1209 jfloat x, jfloat y) { |
| 1200 if (GetRenderWidgetHostViewAndroid()) { | 1210 if (GetRenderWidgetHostViewAndroid()) { |
| 1201 GetRenderWidgetHostViewAndroid()->MoveCaret( | 1211 GetRenderWidgetHostViewAndroid()->MoveCaret( |
| 1202 gfx::Point(x / GetDpiScale(), y / GetDpiScale())); | 1212 gfx::Point(x / dpi_scale(), y / dpi_scale())); |
| 1203 } | 1213 } |
| 1204 } | 1214 } |
| 1205 | 1215 |
| 1206 void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) { | 1216 void ContentViewCoreImpl::ResetGestureDetectors(JNIEnv* env, jobject obj) { |
| 1207 gesture_provider_.ResetGestureDetectors(); | 1217 gesture_provider_.ResetGestureDetectors(); |
| 1208 } | 1218 } |
| 1209 | 1219 |
| 1210 void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) { | 1220 void ContentViewCoreImpl::IgnoreRemainingTouchEvents(JNIEnv* env, jobject obj) { |
| 1211 CancelActiveTouchSequenceIfNecessary(); | 1221 CancelActiveTouchSequenceIfNecessary(); |
| 1212 } | 1222 } |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1686 sodh->OnOrientationChange(orientation); | 1696 sodh->OnOrientationChange(orientation); |
| 1687 } | 1697 } |
| 1688 | 1698 |
| 1689 void ContentViewCoreImpl::ExtractSmartClipData(JNIEnv* env, | 1699 void ContentViewCoreImpl::ExtractSmartClipData(JNIEnv* env, |
| 1690 jobject obj, | 1700 jobject obj, |
| 1691 jint x, | 1701 jint x, |
| 1692 jint y, | 1702 jint y, |
| 1693 jint width, | 1703 jint width, |
| 1694 jint height) { | 1704 jint height) { |
| 1695 gfx::Rect rect( | 1705 gfx::Rect rect( |
| 1696 static_cast<int>(x / GetDpiScale()), | 1706 static_cast<int>(x / dpi_scale()), |
| 1697 static_cast<int>(y / GetDpiScale()), | 1707 static_cast<int>(y / dpi_scale()), |
| 1698 static_cast<int>((width > 0 && width < GetDpiScale()) ? | 1708 static_cast<int>((width > 0 && width < dpi_scale()) ? |
| 1699 1 : (int)(width / GetDpiScale())), | 1709 1 : (int)(width / dpi_scale())), |
| 1700 static_cast<int>((height > 0 && height < GetDpiScale()) ? | 1710 static_cast<int>((height > 0 && height < dpi_scale()) ? |
| 1701 1 : (int)(height / GetDpiScale()))); | 1711 1 : (int)(height / dpi_scale()))); |
| 1702 GetWebContents()->Send(new ViewMsg_ExtractSmartClipData( | 1712 GetWebContents()->Send(new ViewMsg_ExtractSmartClipData( |
| 1703 GetWebContents()->GetRoutingID(), rect)); | 1713 GetWebContents()->GetRoutingID(), rect)); |
| 1704 } | 1714 } |
| 1705 | 1715 |
| 1706 void ContentViewCoreImpl::OnSmartClipDataExtracted( | 1716 void ContentViewCoreImpl::OnSmartClipDataExtracted( |
| 1707 const base::string16& result) { | 1717 const base::string16& result) { |
| 1708 JNIEnv* env = AttachCurrentThread(); | 1718 JNIEnv* env = AttachCurrentThread(); |
| 1709 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 1719 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 1710 if (obj.is_null()) | 1720 if (obj.is_null()) |
| 1711 return; | 1721 return; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1733 reinterpret_cast<ui::ViewAndroid*>(view_android), | 1743 reinterpret_cast<ui::ViewAndroid*>(view_android), |
| 1734 reinterpret_cast<ui::WindowAndroid*>(window_android)); | 1744 reinterpret_cast<ui::WindowAndroid*>(window_android)); |
| 1735 return reinterpret_cast<intptr_t>(view); | 1745 return reinterpret_cast<intptr_t>(view); |
| 1736 } | 1746 } |
| 1737 | 1747 |
| 1738 bool RegisterContentViewCore(JNIEnv* env) { | 1748 bool RegisterContentViewCore(JNIEnv* env) { |
| 1739 return RegisterNativesImpl(env); | 1749 return RegisterNativesImpl(env); |
| 1740 } | 1750 } |
| 1741 | 1751 |
| 1742 } // namespace content | 1752 } // namespace content |
| OLD | NEW |