| 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" |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |