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 <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
46 #include "content/browser/compositor/surface_utils.h" | 46 #include "content/browser/compositor/surface_utils.h" |
47 #include "content/browser/devtools/render_frame_devtools_agent_host.h" | 47 #include "content/browser/devtools/render_frame_devtools_agent_host.h" |
48 #include "content/browser/gpu/browser_gpu_channel_host_factory.h" | 48 #include "content/browser/gpu/browser_gpu_channel_host_factory.h" |
49 #include "content/browser/gpu/compositor_util.h" | 49 #include "content/browser/gpu/compositor_util.h" |
50 #include "content/browser/gpu/gpu_data_manager_impl.h" | 50 #include "content/browser/gpu/gpu_data_manager_impl.h" |
51 #include "content/browser/gpu/gpu_process_host.h" | 51 #include "content/browser/gpu/gpu_process_host.h" |
52 #include "content/browser/media/android/media_web_contents_observer_android.h" | 52 #include "content/browser/media/android/media_web_contents_observer_android.h" |
53 #include "content/browser/renderer_host/compositor_impl_android.h" | 53 #include "content/browser/renderer_host/compositor_impl_android.h" |
54 #include "content/browser/renderer_host/dip_util.h" | 54 #include "content/browser/renderer_host/dip_util.h" |
55 #include "content/browser/renderer_host/frame_metadata_util.h" | 55 #include "content/browser/renderer_host/frame_metadata_util.h" |
56 #include "content/browser/renderer_host/ime_adapter_android.h" | |
56 #include "content/browser/renderer_host/input/input_router_impl.h" | 57 #include "content/browser/renderer_host/input/input_router_impl.h" |
57 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h " | 58 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h " |
58 #include "content/browser/renderer_host/input/web_input_event_builders_android.h " | 59 #include "content/browser/renderer_host/input/web_input_event_builders_android.h " |
59 #include "content/browser/renderer_host/render_process_host_impl.h" | 60 #include "content/browser/renderer_host/render_process_host_impl.h" |
60 #include "content/browser/renderer_host/render_view_host_delegate_view.h" | 61 #include "content/browser/renderer_host/render_view_host_delegate_view.h" |
61 #include "content/browser/renderer_host/render_view_host_impl.h" | 62 #include "content/browser/renderer_host/render_view_host_impl.h" |
62 #include "content/browser/renderer_host/render_widget_host_impl.h" | 63 #include "content/browser/renderer_host/render_widget_host_impl.h" |
63 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" | 64 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" |
64 #include "content/common/gpu_host_messages.h" | 65 #include "content/common/gpu_host_messages.h" |
65 #include "content/common/input_messages.h" | 66 #include "content/common/input_messages.h" |
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
442 RenderWidgetHostImpl* widget_host, | 443 RenderWidgetHostImpl* widget_host, |
443 ContentViewCoreImpl* content_view_core) | 444 ContentViewCoreImpl* content_view_core) |
444 : host_(widget_host), | 445 : host_(widget_host), |
445 begin_frame_source_(nullptr), | 446 begin_frame_source_(nullptr), |
446 outstanding_begin_frame_requests_(0), | 447 outstanding_begin_frame_requests_(0), |
447 is_showing_(!widget_host->is_hidden()), | 448 is_showing_(!widget_host->is_hidden()), |
448 is_window_visible_(true), | 449 is_window_visible_(true), |
449 is_window_activity_started_(true), | 450 is_window_activity_started_(true), |
450 is_in_vr_(false), | 451 is_in_vr_(false), |
451 content_view_core_(nullptr), | 452 content_view_core_(nullptr), |
452 ime_adapter_android_(this), | 453 ime_adapter_android_(nullptr), |
453 cached_background_color_(SK_ColorWHITE), | 454 cached_background_color_(SK_ColorWHITE), |
454 view_(this), | 455 view_(this), |
455 last_compositor_frame_sink_id_(kUndefinedCompositorFrameSinkId), | 456 last_compositor_frame_sink_id_(kUndefinedCompositorFrameSinkId), |
456 gesture_provider_(ui::GetGestureProviderConfig( | 457 gesture_provider_(ui::GetGestureProviderConfig( |
457 ui::GestureProviderConfigType::CURRENT_PLATFORM), | 458 ui::GestureProviderConfigType::CURRENT_PLATFORM), |
458 this), | 459 this), |
459 stylus_text_selector_(this), | 460 stylus_text_selector_(this), |
460 using_browser_compositor_(CompositorImpl::IsInitialized()), | 461 using_browser_compositor_(CompositorImpl::IsInitialized()), |
461 synchronous_compositor_client_(nullptr), | 462 synchronous_compositor_client_(nullptr), |
462 frame_evictor_(new DelegatedFrameEvictor(this)), | 463 frame_evictor_(new DelegatedFrameEvictor(this)), |
(...skipping 26 matching lines...) Expand all Loading... | |
489 CreateOverscrollControllerIfPossible(); | 490 CreateOverscrollControllerIfPossible(); |
490 | 491 |
491 if (GetTextInputManager()) | 492 if (GetTextInputManager()) |
492 GetTextInputManager()->AddObserver(this); | 493 GetTextInputManager()->AddObserver(this); |
493 } | 494 } |
494 | 495 |
495 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { | 496 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { |
496 if (content_view_core_) | 497 if (content_view_core_) |
497 content_view_core_->RemoveObserver(this); | 498 content_view_core_->RemoveObserver(this); |
498 SetContentViewCore(NULL); | 499 SetContentViewCore(NULL); |
500 ime_adapter_android_ = nullptr; | |
499 DCHECK(ack_callbacks_.empty()); | 501 DCHECK(ack_callbacks_.empty()); |
500 DCHECK(!delegated_frame_host_); | 502 DCHECK(!delegated_frame_host_); |
501 } | 503 } |
502 | 504 |
503 void RenderWidgetHostViewAndroid::Blur() { | 505 void RenderWidgetHostViewAndroid::Blur() { |
504 host_->Blur(); | 506 host_->Blur(); |
505 if (overscroll_controller_) | 507 if (overscroll_controller_) |
506 overscroll_controller_->Disable(); | 508 overscroll_controller_->Disable(); |
507 } | 509 } |
508 | 510 |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
696 | 698 |
697 void RenderWidgetHostViewAndroid::UpdateCursor(const WebCursor& cursor) { | 699 void RenderWidgetHostViewAndroid::UpdateCursor(const WebCursor& cursor) { |
698 // There are no cursors on Android. | 700 // There are no cursors on Android. |
699 } | 701 } |
700 | 702 |
701 void RenderWidgetHostViewAndroid::SetIsLoading(bool is_loading) { | 703 void RenderWidgetHostViewAndroid::SetIsLoading(bool is_loading) { |
702 // Do nothing. The UI notification is handled through ContentViewClient which | 704 // Do nothing. The UI notification is handled through ContentViewClient which |
703 // is TabContentsDelegate. | 705 // is TabContentsDelegate. |
704 } | 706 } |
705 | 707 |
706 long RenderWidgetHostViewAndroid::GetNativeImeAdapter() { | 708 void RenderWidgetHostViewAndroid::ConnectImeAdapter( |
707 return reinterpret_cast<intptr_t>(&ime_adapter_android_); | 709 ImeAdapterAndroid* ime_adapter) { |
710 ime_adapter_android_ = ime_adapter; | |
711 if (ime_adapter) | |
712 ime_adapter->SetRenderWidgetHostViewAndroid(weak_ptr_factory_.GetWeakPtr()); | |
708 } | 713 } |
709 | 714 |
710 // ----------------------------------------------------------------------------- | 715 // ----------------------------------------------------------------------------- |
711 // TextInputManager::Observer implementations. | 716 // TextInputManager::Observer implementations. |
712 void RenderWidgetHostViewAndroid::OnUpdateTextInputStateCalled( | 717 void RenderWidgetHostViewAndroid::OnUpdateTextInputStateCalled( |
713 TextInputManager* text_input_manager, | 718 TextInputManager* text_input_manager, |
714 RenderWidgetHostViewBase* updated_view, | 719 RenderWidgetHostViewBase* updated_view, |
715 bool did_change_state) { | 720 bool did_change_state) { |
716 DCHECK_EQ(text_input_manager_, text_input_manager); | 721 DCHECK_EQ(text_input_manager_, text_input_manager); |
717 // If there are no active widgets, the TextInputState.type should be reported | 722 // If there are no active widgets, the TextInputState.type should be reported |
718 // as none. | 723 // as none. |
719 const TextInputState& state = | 724 const TextInputState& state = |
720 GetTextInputManager()->GetActiveWidget() | 725 GetTextInputManager()->GetActiveWidget() |
721 ? *GetTextInputManager()->GetTextInputState() | 726 ? *GetTextInputManager()->GetTextInputState() |
722 : TextInputState(); | 727 : TextInputState(); |
723 | 728 |
724 if (!content_view_core_ || is_in_vr_) | 729 if (!content_view_core_ || is_in_vr_) |
725 return; | 730 return; |
726 | 731 |
727 content_view_core_->UpdateImeAdapter( | 732 content_view_core_->UpdateImeAdapter( |
728 GetNativeImeAdapter(), static_cast<int>(state.type), state.flags, | 733 static_cast<int>(state.type), state.flags, state.mode, state.value, |
729 state.mode, state.value, state.selection_start, state.selection_end, | 734 state.selection_start, state.selection_end, state.composition_start, |
730 state.composition_start, state.composition_end, state.show_ime_if_needed, | 735 state.composition_end, state.show_ime_if_needed, state.reply_to_request); |
731 state.reply_to_request); | |
732 } | 736 } |
733 | 737 |
734 void RenderWidgetHostViewAndroid::OnImeCompositionRangeChanged( | 738 void RenderWidgetHostViewAndroid::OnImeCompositionRangeChanged( |
735 TextInputManager* text_input_manager, | 739 TextInputManager* text_input_manager, |
736 RenderWidgetHostViewBase* updated_view) { | 740 RenderWidgetHostViewBase* updated_view) { |
737 DCHECK_EQ(text_input_manager_, text_input_manager); | 741 DCHECK_EQ(text_input_manager_, text_input_manager); |
738 const TextInputManager::CompositionRangeInfo* info = | 742 const TextInputManager::CompositionRangeInfo* info = |
739 text_input_manager_->GetCompositionRangeInfo(); | 743 text_input_manager_->GetCompositionRangeInfo(); |
740 if (!info) | 744 if (!info) |
741 return; | 745 return; |
742 | 746 |
743 std::vector<gfx::RectF> character_bounds; | 747 std::vector<gfx::RectF> character_bounds; |
744 for (const gfx::Rect& rect : info->character_bounds) | 748 for (const gfx::Rect& rect : info->character_bounds) |
745 character_bounds.emplace_back(rect); | 749 character_bounds.emplace_back(rect); |
746 | 750 |
747 ime_adapter_android_.SetCharacterBounds(character_bounds); | 751 DCHECK(ime_adapter_android_); |
752 ime_adapter_android_->SetCharacterBounds(character_bounds); | |
748 } | 753 } |
749 | 754 |
750 void RenderWidgetHostViewAndroid::OnImeCancelComposition( | 755 void RenderWidgetHostViewAndroid::OnImeCancelComposition( |
751 TextInputManager* text_input_manager, | 756 TextInputManager* text_input_manager, |
752 RenderWidgetHostViewBase* updated_view) { | 757 RenderWidgetHostViewBase* updated_view) { |
753 DCHECK_EQ(text_input_manager_, text_input_manager); | 758 DCHECK_EQ(text_input_manager_, text_input_manager); |
754 ime_adapter_android_.CancelComposition(); | 759 DCHECK(ime_adapter_android_); |
760 ime_adapter_android_->CancelComposition(); | |
755 } | 761 } |
756 | 762 |
757 void RenderWidgetHostViewAndroid::OnTextSelectionChanged( | 763 void RenderWidgetHostViewAndroid::OnTextSelectionChanged( |
758 TextInputManager* text_input_manager, | 764 TextInputManager* text_input_manager, |
759 RenderWidgetHostViewBase* updated_view) { | 765 RenderWidgetHostViewBase* updated_view) { |
760 DCHECK_EQ(text_input_manager_, text_input_manager); | 766 DCHECK_EQ(text_input_manager_, text_input_manager); |
761 | 767 |
762 // TODO(asimjour): remove the flag and fix text selection popup for | 768 // TODO(asimjour): remove the flag and fix text selection popup for |
763 // virtual reality mode. | 769 // virtual reality mode. |
764 if (is_in_vr_) | 770 if (is_in_vr_) |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
997 } | 1003 } |
998 | 1004 |
999 void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled( | 1005 void RenderWidgetHostViewAndroid::SetMultiTouchZoomSupportEnabled( |
1000 bool enabled) { | 1006 bool enabled) { |
1001 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); | 1007 gesture_provider_.SetMultiTouchZoomSupportEnabled(enabled); |
1002 } | 1008 } |
1003 | 1009 |
1004 void RenderWidgetHostViewAndroid::FocusedNodeChanged( | 1010 void RenderWidgetHostViewAndroid::FocusedNodeChanged( |
1005 bool is_editable_node, | 1011 bool is_editable_node, |
1006 const gfx::Rect& node_bounds_in_screen) { | 1012 const gfx::Rect& node_bounds_in_screen) { |
1007 ime_adapter_android_.FocusedNodeChanged(is_editable_node); | 1013 DCHECK(ime_adapter_android_); |
1014 ime_adapter_android_->FocusedNodeChanged(is_editable_node); | |
1008 } | 1015 } |
1009 | 1016 |
1010 void RenderWidgetHostViewAndroid::RenderProcessGone( | 1017 void RenderWidgetHostViewAndroid::RenderProcessGone( |
1011 base::TerminationStatus status, int error_code) { | 1018 base::TerminationStatus status, int error_code) { |
1012 Destroy(); | 1019 Destroy(); |
1013 } | 1020 } |
1014 | 1021 |
1015 void RenderWidgetHostViewAndroid::Destroy() { | 1022 void RenderWidgetHostViewAndroid::Destroy() { |
1016 host_->ViewDestroyed(); | 1023 host_->ViewDestroyed(); |
1017 SetContentViewCore(NULL); | 1024 SetContentViewCore(NULL); |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1855 view_.RemoveFromParent(); | 1862 view_.RemoveFromParent(); |
1856 view_.GetLayer()->RemoveFromParent(); | 1863 view_.GetLayer()->RemoveFromParent(); |
1857 } | 1864 } |
1858 if (content_view_core) { | 1865 if (content_view_core) { |
1859 content_view_core->AddObserver(this); | 1866 content_view_core->AddObserver(this); |
1860 ui::ViewAndroid* parent_view = content_view_core->GetViewAndroid(); | 1867 ui::ViewAndroid* parent_view = content_view_core->GetViewAndroid(); |
1861 parent_view->AddChild(&view_); | 1868 parent_view->AddChild(&view_); |
1862 parent_view->GetLayer()->AddChild(view_.GetLayer()); | 1869 parent_view->GetLayer()->AddChild(view_.GetLayer()); |
1863 } | 1870 } |
1864 content_view_core_ = content_view_core; | 1871 content_view_core_ = content_view_core; |
1872 ConnectImeAdapter(content_view_core ? content_view_core->ime_adapter() | |
boliu
2017/03/23 04:17:01
I think non-active RWHVA can still have non null I
Jinsuk Kim
2017/03/23 07:25:10
When RenderViewHost is swapped out, SetContentView
boliu
2017/03/23 14:18:50
Oh I missed ContentViewCoreImpl::RenderViewHostCha
Jinsuk Kim
2017/03/23 23:10:24
Right I didn't handle non-active ones (by nulling
Jinsuk Kim
2017/03/23 23:16:22
Oh by 'the previous code' you mean the code before
boliu
2017/03/23 23:17:40
Well, what about the page in the back while the in
boliu
2017/03/23 23:22:56
Yes
Jinsuk Kim
2017/03/24 00:01:45
Previously the attaching/detaching piggypacked on
Jinsuk Kim
2017/03/24 00:01:45
This may not be always true but interstitial page
Jinsuk Kim
2017/03/24 00:15:05
Sorry I was wrong (completely mistaken). This is n
Jinsuk Kim
2017/03/24 02:34:23
I should have said "it piggybacked on RWHVA::OnUpd
| |
1873 : nullptr); | |
1865 } | 1874 } |
1866 | 1875 |
1867 BrowserAccessibilityManager* manager = NULL; | 1876 BrowserAccessibilityManager* manager = NULL; |
1868 if (host_) | 1877 if (host_) |
1869 manager = host_->GetRootBrowserAccessibilityManager(); | 1878 manager = host_->GetRootBrowserAccessibilityManager(); |
1870 if (manager) { | 1879 if (manager) { |
1871 base::android::ScopedJavaLocalRef<jobject> obj; | 1880 base::android::ScopedJavaLocalRef<jobject> obj; |
1872 if (content_view_core_) | 1881 if (content_view_core_) |
1873 obj = content_view_core_->GetJavaObject(); | 1882 obj = content_view_core_->GetJavaObject(); |
1874 manager->ToBrowserAccessibilityManagerAndroid()->SetContentViewCore(obj); | 1883 manager->ToBrowserAccessibilityManagerAndroid()->SetContentViewCore(obj); |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2130 | 2139 |
2131 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); | 2140 ui::WindowAndroidCompositor* compositor = window_android->GetCompositor(); |
2132 if (!compositor) | 2141 if (!compositor) |
2133 return; | 2142 return; |
2134 | 2143 |
2135 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( | 2144 overscroll_controller_ = base::MakeUnique<OverscrollControllerAndroid>( |
2136 overscroll_refresh_handler, compositor, view_.GetDipScale()); | 2145 overscroll_refresh_handler, compositor, view_.GetDipScale()); |
2137 } | 2146 } |
2138 | 2147 |
2139 } // namespace content | 2148 } // namespace content |
OLD | NEW |