| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/renderer_host/render_widget_host_view_android.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_android.h" |
| 6 | 6 |
| 7 #include <android/bitmap.h> | 7 #include <android/bitmap.h> |
| 8 | 8 |
| 9 #include "base/android/build_info.h" | 9 #include "base/android/build_info.h" |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 #include "content/public/common/content_switches.h" | 65 #include "content/public/common/content_switches.h" |
| 66 #include "gpu/command_buffer/client/gles2_implementation.h" | 66 #include "gpu/command_buffer/client/gles2_implementation.h" |
| 67 #include "gpu/command_buffer/client/gles2_interface.h" | 67 #include "gpu/command_buffer/client/gles2_interface.h" |
| 68 #include "gpu/config/gpu_driver_bug_workaround_type.h" | 68 #include "gpu/config/gpu_driver_bug_workaround_type.h" |
| 69 #include "skia/ext/image_operations.h" | 69 #include "skia/ext/image_operations.h" |
| 70 #include "third_party/khronos/GLES2/gl2.h" | 70 #include "third_party/khronos/GLES2/gl2.h" |
| 71 #include "third_party/khronos/GLES2/gl2ext.h" | 71 #include "third_party/khronos/GLES2/gl2ext.h" |
| 72 #include "third_party/skia/include/core/SkCanvas.h" | 72 #include "third_party/skia/include/core/SkCanvas.h" |
| 73 #include "ui/base/android/window_android.h" | 73 #include "ui/base/android/window_android.h" |
| 74 #include "ui/base/android/window_android_compositor.h" | 74 #include "ui/base/android/window_android_compositor.h" |
| 75 #include "ui/base/ime/android/cursor_anchor_info_builder.h" |
| 76 #include "ui/base/ime/android/cursor_anchor_info_controller.h" |
| 75 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" | 77 #include "ui/events/gesture_detection/gesture_provider_config_helper.h" |
| 76 #include "ui/events/gesture_detection/motion_event.h" | 78 #include "ui/events/gesture_detection/motion_event.h" |
| 77 #include "ui/gfx/android/device_display_info.h" | 79 #include "ui/gfx/android/device_display_info.h" |
| 78 #include "ui/gfx/android/java_bitmap.h" | 80 #include "ui/gfx/android/java_bitmap.h" |
| 79 #include "ui/gfx/android/view_configuration.h" | 81 #include "ui/gfx/android/view_configuration.h" |
| 80 #include "ui/gfx/display.h" | 82 #include "ui/gfx/display.h" |
| 81 #include "ui/gfx/geometry/dip_util.h" | 83 #include "ui/gfx/geometry/dip_util.h" |
| 82 #include "ui/gfx/geometry/size_conversions.h" | 84 #include "ui/gfx/geometry/size_conversions.h" |
| 83 #include "ui/gfx/screen.h" | 85 #include "ui/gfx/screen.h" |
| 84 #include "ui/touch_selection/touch_selection_controller.h" | 86 #include "ui/touch_selection/touch_selection_controller.h" |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 } | 328 } |
| 327 | 329 |
| 328 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 330 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
| 329 RenderWidgetHostImpl* widget_host, | 331 RenderWidgetHostImpl* widget_host, |
| 330 ContentViewCoreImpl* content_view_core) | 332 ContentViewCoreImpl* content_view_core) |
| 331 : host_(widget_host), | 333 : host_(widget_host), |
| 332 outstanding_vsync_requests_(0), | 334 outstanding_vsync_requests_(0), |
| 333 is_showing_(!widget_host->is_hidden()), | 335 is_showing_(!widget_host->is_hidden()), |
| 334 content_view_core_(NULL), | 336 content_view_core_(NULL), |
| 335 ime_adapter_android_(this), | 337 ime_adapter_android_(this), |
| 338 cursor_anchor_info_controller_( |
| 339 ui::CursorAnchorInfoController::Create(this)), |
| 336 cached_background_color_(SK_ColorWHITE), | 340 cached_background_color_(SK_ColorWHITE), |
| 337 last_output_surface_id_(kUndefinedOutputSurfaceId), | 341 last_output_surface_id_(kUndefinedOutputSurfaceId), |
| 338 gesture_provider_(CreateGestureProviderConfig(), this), | 342 gesture_provider_(CreateGestureProviderConfig(), this), |
| 339 stylus_text_selector_(this), | 343 stylus_text_selector_(this), |
| 340 accelerated_surface_route_id_(0), | 344 accelerated_surface_route_id_(0), |
| 341 using_browser_compositor_(CompositorImpl::IsInitialized()), | 345 using_browser_compositor_(CompositorImpl::IsInitialized()), |
| 342 frame_evictor_(new DelegatedFrameEvictor(this)), | 346 frame_evictor_(new DelegatedFrameEvictor(this)), |
| 343 locks_on_frame_count_(0), | 347 locks_on_frame_count_(0), |
| 344 observing_root_window_(false), | 348 observing_root_window_(false), |
| 345 weak_ptr_factory_(this) { | 349 weak_ptr_factory_(this) { |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 701 ui::TextInputMode input_mode, | 705 ui::TextInputMode input_mode, |
| 702 bool can_compose_inline, | 706 bool can_compose_inline, |
| 703 int flags) { | 707 int flags) { |
| 704 // Unused on Android, which uses OnTextInputChanged instead. | 708 // Unused on Android, which uses OnTextInputChanged instead. |
| 705 } | 709 } |
| 706 | 710 |
| 707 long RenderWidgetHostViewAndroid::GetNativeImeAdapter() { | 711 long RenderWidgetHostViewAndroid::GetNativeImeAdapter() { |
| 708 return reinterpret_cast<intptr_t>(&ime_adapter_android_); | 712 return reinterpret_cast<intptr_t>(&ime_adapter_android_); |
| 709 } | 713 } |
| 710 | 714 |
| 715 bool RenderWidgetHostViewAndroid::RequestCursorUpdates( |
| 716 uint32 cursor_update_mode) { |
| 717 if (!cursor_anchor_info_controller_) |
| 718 return false; |
| 719 |
| 720 return cursor_anchor_info_controller_->OnRequestCursorUpdates( |
| 721 cursor_update_mode); |
| 722 } |
| 723 |
| 711 void RenderWidgetHostViewAndroid::OnTextInputStateChanged( | 724 void RenderWidgetHostViewAndroid::OnTextInputStateChanged( |
| 712 const ViewHostMsg_TextInputState_Params& params) { | 725 const ViewHostMsg_TextInputState_Params& params) { |
| 713 if (selection_controller_) { | 726 if (selection_controller_) { |
| 714 // This call is semi-redundant with that in |OnFocusedNodeChanged|. The | 727 // This call is semi-redundant with that in |OnFocusedNodeChanged|. The |
| 715 // latter is guaranteed to be called before |OnSelectionBoundsChanged|, | 728 // latter is guaranteed to be called before |OnSelectionBoundsChanged|, |
| 716 // while this call is present to ensure consistency with IME after | 729 // while this call is present to ensure consistency with IME after |
| 717 // navigation and tab focus changes | 730 // navigation and tab focus changes |
| 718 const bool is_editable_node = params.type != ui::TEXT_INPUT_TYPE_NONE; | 731 const bool is_editable_node = params.type != ui::TEXT_INPUT_TYPE_NONE; |
| 719 selection_controller_->OnSelectionEditable(is_editable_node); | 732 selection_controller_->OnSelectionEditable(is_editable_node); |
| 720 } | 733 } |
| 721 | 734 |
| 722 // If the change is not originated from IME (e.g. Javascript, autofill), | 735 // If the change is not originated from IME (e.g. Javascript, autofill), |
| 723 // send back the renderer an acknowledgement, regardless of how we exit from | 736 // send back the renderer an acknowledgement, regardless of how we exit from |
| 724 // this method. | 737 // this method. |
| 725 base::ScopedClosureRunner ack_caller; | 738 base::ScopedClosureRunner ack_caller; |
| 726 if (params.is_non_ime_change) | 739 if (params.is_non_ime_change) |
| 727 ack_caller.Reset(base::Bind(&SendImeEventAck, host_)); | 740 ack_caller.Reset(base::Bind(&SendImeEventAck, host_)); |
| 728 | 741 |
| 729 if (!IsShowing()) | 742 if (!IsShowing()) |
| 730 return; | 743 return; |
| 731 | 744 |
| 732 content_view_core_->UpdateImeAdapter( | 745 content_view_core_->UpdateImeAdapter( |
| 733 GetNativeImeAdapter(), | 746 GetNativeImeAdapter(), |
| 734 static_cast<int>(params.type), params.flags, | 747 static_cast<int>(params.type), params.flags, |
| 735 params.value, params.selection_start, params.selection_end, | 748 params.value, params.selection_start, params.selection_end, |
| 736 params.composition_start, params.composition_end, | 749 params.composition_start, params.composition_end, |
| 737 params.show_ime_if_needed, params.is_non_ime_change); | 750 params.show_ime_if_needed, params.is_non_ime_change); |
| 751 |
| 752 if (cursor_anchor_info_controller_) { |
| 753 cursor_anchor_info_controller_->OnTextInputStateChanged( |
| 754 base::UTF8ToUTF16(params.value), |
| 755 gfx::Range(params.selection_start, params.selection_end), |
| 756 gfx::Range(params.composition_start, params.composition_end)); |
| 757 } |
| 738 } | 758 } |
| 739 | 759 |
| 740 void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor( | 760 void RenderWidgetHostViewAndroid::OnDidChangeBodyBackgroundColor( |
| 741 SkColor color) { | 761 SkColor color) { |
| 742 if (cached_background_color_ == color) | 762 if (cached_background_color_ == color) |
| 743 return; | 763 return; |
| 744 | 764 |
| 745 cached_background_color_ = color; | 765 cached_background_color_ = color; |
| 746 if (content_view_core_) | 766 if (content_view_core_) |
| 747 content_view_core_->OnBackgroundColorChanged(color); | 767 content_view_core_->OnBackgroundColorChanged(color); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); | 853 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); |
| 834 } | 854 } |
| 835 | 855 |
| 836 void RenderWidgetHostViewAndroid::ImeCancelComposition() { | 856 void RenderWidgetHostViewAndroid::ImeCancelComposition() { |
| 837 ime_adapter_android_.CancelComposition(); | 857 ime_adapter_android_.CancelComposition(); |
| 838 } | 858 } |
| 839 | 859 |
| 840 void RenderWidgetHostViewAndroid::ImeCompositionRangeChanged( | 860 void RenderWidgetHostViewAndroid::ImeCompositionRangeChanged( |
| 841 const gfx::Range& range, | 861 const gfx::Range& range, |
| 842 const std::vector<gfx::Rect>& character_bounds) { | 862 const std::vector<gfx::Rect>& character_bounds) { |
| 843 // TODO(yukawa): Implement this. | 863 if (cursor_anchor_info_controller_) { |
| 864 cursor_anchor_info_controller_->OnCompositionRangeChanged(range, |
| 865 character_bounds); |
| 866 } |
| 844 } | 867 } |
| 845 | 868 |
| 846 void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) { | 869 void RenderWidgetHostViewAndroid::FocusedNodeChanged(bool is_editable_node) { |
| 847 ime_adapter_android_.FocusedNodeChanged(is_editable_node); | 870 ime_adapter_android_.FocusedNodeChanged(is_editable_node); |
| 871 if (cursor_anchor_info_controller_) |
| 872 cursor_anchor_info_controller_->OnFocusedNodeChanged(is_editable_node); |
| 848 if (selection_controller_) | 873 if (selection_controller_) |
| 849 selection_controller_->OnSelectionEditable(is_editable_node); | 874 selection_controller_->OnSelectionEditable(is_editable_node); |
| 850 } | 875 } |
| 851 | 876 |
| 852 void RenderWidgetHostViewAndroid::RenderProcessGone( | 877 void RenderWidgetHostViewAndroid::RenderProcessGone( |
| 853 base::TerminationStatus status, int error_code) { | 878 base::TerminationStatus status, int error_code) { |
| 854 Destroy(); | 879 Destroy(); |
| 855 } | 880 } |
| 856 | 881 |
| 857 void RenderWidgetHostViewAndroid::Destroy() { | 882 void RenderWidgetHostViewAndroid::Destroy() { |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 host_->Send(new ViewMsg_ReclaimCompositorResources(host_->GetRoutingID(), | 1040 host_->Send(new ViewMsg_ReclaimCompositorResources(host_->GetRoutingID(), |
| 1016 output_surface_id, ack)); | 1041 output_surface_id, ack)); |
| 1017 } | 1042 } |
| 1018 | 1043 |
| 1019 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { | 1044 void RenderWidgetHostViewAndroid::UnusedResourcesAreAvailable() { |
| 1020 if (ack_callbacks_.size()) | 1045 if (ack_callbacks_.size()) |
| 1021 return; | 1046 return; |
| 1022 SendReturnedDelegatedResources(last_output_surface_id_); | 1047 SendReturnedDelegatedResources(last_output_surface_id_); |
| 1023 } | 1048 } |
| 1024 | 1049 |
| 1050 void RenderWidgetHostViewAndroid::SendCursorAnchorInfo( |
| 1051 ui::CursorAnchorInfoBuilder* builder) { |
| 1052 ime_adapter_android_.UpdateCursorAnchorInfo(builder->Build()); |
| 1053 } |
| 1054 |
| 1025 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { | 1055 void RenderWidgetHostViewAndroid::DestroyDelegatedContent() { |
| 1026 RemoveLayers(); | 1056 RemoveLayers(); |
| 1027 frame_provider_ = NULL; | 1057 frame_provider_ = NULL; |
| 1028 layer_ = NULL; | 1058 layer_ = NULL; |
| 1029 // This gets called when ever any eviction, loosing resources, swapping | 1059 // This gets called when ever any eviction, loosing resources, swapping |
| 1030 // problems are encountered and so we abort any pending readbacks here. | 1060 // problems are encountered and so we abort any pending readbacks here. |
| 1031 AbortPendingReadbackRequests(); | 1061 AbortPendingReadbackRequests(); |
| 1032 } | 1062 } |
| 1033 | 1063 |
| 1034 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( | 1064 void RenderWidgetHostViewAndroid::SwapDelegatedFrame( |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1339 #if defined(VIDEO_HOLE) | 1369 #if defined(VIDEO_HOLE) |
| 1340 if (host_ && host_->IsRenderView()) { | 1370 if (host_ && host_->IsRenderView()) { |
| 1341 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( | 1371 RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( |
| 1342 RenderViewHost::From(host_)); | 1372 RenderViewHost::From(host_)); |
| 1343 WebContentsImpl* web_contents_impl = | 1373 WebContentsImpl* web_contents_impl = |
| 1344 static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvhi)); | 1374 static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvhi)); |
| 1345 if (web_contents_impl) | 1375 if (web_contents_impl) |
| 1346 web_contents_impl->media_web_contents_observer()->OnFrameInfoUpdated(); | 1376 web_contents_impl->media_web_contents_observer()->OnFrameInfoUpdated(); |
| 1347 } | 1377 } |
| 1348 #endif // defined(VIDEO_HOLE) | 1378 #endif // defined(VIDEO_HOLE) |
| 1379 |
| 1380 if (cursor_anchor_info_controller_) { |
| 1381 cursor_anchor_info_controller_->OnFrameMetadataUpdated( |
| 1382 frame_metadata, content_view_core_->GetLocationOnScreen()); |
| 1383 } |
| 1349 } | 1384 } |
| 1350 | 1385 |
| 1351 void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int route_id) { | 1386 void RenderWidgetHostViewAndroid::AcceleratedSurfaceInitialized(int route_id) { |
| 1352 // TODO: remove need for the surface id here | 1387 // TODO: remove need for the surface id here |
| 1353 accelerated_surface_route_id_ = route_id; | 1388 accelerated_surface_route_id_ = route_id; |
| 1354 } | 1389 } |
| 1355 | 1390 |
| 1356 void RenderWidgetHostViewAndroid::AttachLayers() { | 1391 void RenderWidgetHostViewAndroid::AttachLayers() { |
| 1357 if (!content_view_core_) | 1392 if (!content_view_core_) |
| 1358 return; | 1393 return; |
| (...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1912 results->orientationAngle = display.RotationAsDegree(); | 1947 results->orientationAngle = display.RotationAsDegree(); |
| 1913 results->orientationType = | 1948 results->orientationType = |
| 1914 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); | 1949 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); |
| 1915 gfx::DeviceDisplayInfo info; | 1950 gfx::DeviceDisplayInfo info; |
| 1916 results->depth = info.GetBitsPerPixel(); | 1951 results->depth = info.GetBitsPerPixel(); |
| 1917 results->depthPerComponent = info.GetBitsPerComponent(); | 1952 results->depthPerComponent = info.GetBitsPerComponent(); |
| 1918 results->isMonochrome = (results->depthPerComponent == 0); | 1953 results->isMonochrome = (results->depthPerComponent == 0); |
| 1919 } | 1954 } |
| 1920 | 1955 |
| 1921 } // namespace content | 1956 } // namespace content |
| OLD | NEW |