| 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_aura.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, | 376 RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, |
| 377 bool is_guest_view_hack) | 377 bool is_guest_view_hack) |
| 378 : host_(RenderWidgetHostImpl::From(host)), | 378 : host_(RenderWidgetHostImpl::From(host)), |
| 379 window_(nullptr), | 379 window_(nullptr), |
| 380 in_shutdown_(false), | 380 in_shutdown_(false), |
| 381 in_bounds_changed_(false), | 381 in_bounds_changed_(false), |
| 382 popup_parent_host_view_(nullptr), | 382 popup_parent_host_view_(nullptr), |
| 383 popup_child_host_view_(nullptr), | 383 popup_child_host_view_(nullptr), |
| 384 is_loading_(false), | 384 is_loading_(false), |
| 385 has_composition_text_(false), | 385 has_composition_text_(false), |
| 386 begin_frame_source_(nullptr), | |
| 387 needs_begin_frames_(false), | 386 needs_begin_frames_(false), |
| 388 needs_flush_input_(false), | 387 needs_flush_input_(false), |
| 389 added_frame_observer_(false), | 388 added_frame_observer_(false), |
| 390 cursor_visibility_state_in_renderer_(UNKNOWN), | 389 cursor_visibility_state_in_renderer_(UNKNOWN), |
| 391 #if defined(OS_WIN) | 390 #if defined(OS_WIN) |
| 392 legacy_render_widget_host_HWND_(nullptr), | 391 legacy_render_widget_host_HWND_(nullptr), |
| 393 legacy_window_destroyed_(false), | 392 legacy_window_destroyed_(false), |
| 394 virtual_keyboard_requested_(false), | 393 virtual_keyboard_requested_(false), |
| 395 #endif | 394 #endif |
| 396 has_snapped_to_boundary_(false), | 395 has_snapped_to_boundary_(false), |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 void RenderWidgetHostViewAura::SetNeedsBeginFrames(bool needs_begin_frames) { | 641 void RenderWidgetHostViewAura::SetNeedsBeginFrames(bool needs_begin_frames) { |
| 643 needs_begin_frames_ = needs_begin_frames; | 642 needs_begin_frames_ = needs_begin_frames; |
| 644 UpdateNeedsBeginFramesInternal(); | 643 UpdateNeedsBeginFramesInternal(); |
| 645 } | 644 } |
| 646 | 645 |
| 647 void RenderWidgetHostViewAura::OnSetNeedsFlushInput() { | 646 void RenderWidgetHostViewAura::OnSetNeedsFlushInput() { |
| 648 needs_flush_input_ = true; | 647 needs_flush_input_ = true; |
| 649 UpdateNeedsBeginFramesInternal(); | 648 UpdateNeedsBeginFramesInternal(); |
| 650 } | 649 } |
| 651 | 650 |
| 652 void RenderWidgetHostViewAura::UpdateNeedsBeginFramesInternal() { | |
| 653 if (!begin_frame_source_) | |
| 654 return; | |
| 655 | |
| 656 bool needs_frame = needs_begin_frames_ || needs_flush_input_; | |
| 657 if (needs_frame == added_frame_observer_) | |
| 658 return; | |
| 659 | |
| 660 added_frame_observer_ = needs_frame; | |
| 661 if (needs_frame) | |
| 662 begin_frame_source_->AddObserver(this); | |
| 663 else | |
| 664 begin_frame_source_->RemoveObserver(this); | |
| 665 } | |
| 666 | |
| 667 void RenderWidgetHostViewAura::OnBeginFrame( | 651 void RenderWidgetHostViewAura::OnBeginFrame( |
| 668 const cc::BeginFrameArgs& args) { | 652 const cc::BeginFrameArgs& args) { |
| 669 needs_flush_input_ = false; | 653 needs_flush_input_ = false; |
| 670 host_->FlushInput(); | 654 host_->FlushInput(); |
| 671 UpdateNeedsBeginFramesInternal(); | 655 UpdateNeedsBeginFramesInternal(); |
| 672 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); | 656 host_->Send(new ViewMsg_BeginFrame(host_->GetRoutingID(), args)); |
| 673 last_begin_frame_args_ = args; | |
| 674 } | |
| 675 | |
| 676 const cc::BeginFrameArgs& RenderWidgetHostViewAura::LastUsedBeginFrameArgs() | |
| 677 const { | |
| 678 return last_begin_frame_args_; | |
| 679 } | |
| 680 | |
| 681 void RenderWidgetHostViewAura::OnBeginFrameSourcePausedChanged(bool paused) { | |
| 682 // Only used on Android WebView. | |
| 683 } | 657 } |
| 684 | 658 |
| 685 RenderFrameHostImpl* RenderWidgetHostViewAura::GetFocusedFrame() { | 659 RenderFrameHostImpl* RenderWidgetHostViewAura::GetFocusedFrame() { |
| 686 RenderViewHost* rvh = RenderViewHost::From(host_); | 660 RenderViewHost* rvh = RenderViewHost::From(host_); |
| 687 if (!rvh) | 661 if (!rvh) |
| 688 return nullptr; | 662 return nullptr; |
| 689 FrameTreeNode* focused_frame = | 663 FrameTreeNode* focused_frame = |
| 690 rvh->GetDelegate()->GetFrameTree()->GetFocusedFrame(); | 664 rvh->GetDelegate()->GetFrameTree()->GetFocusedFrame(); |
| 691 if (!focused_frame) | 665 if (!focused_frame) |
| 692 return nullptr; | 666 return nullptr; |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 | 899 |
| 926 start_edge_top.Scale(viewportToDIPScale); | 900 start_edge_top.Scale(viewportToDIPScale); |
| 927 start_edge_bottom.Scale(viewportToDIPScale); | 901 start_edge_bottom.Scale(viewportToDIPScale); |
| 928 end_edge_top.Scale(viewportToDIPScale); | 902 end_edge_top.Scale(viewportToDIPScale); |
| 929 end_edge_bottom.Scale(viewportToDIPScale); | 903 end_edge_bottom.Scale(viewportToDIPScale); |
| 930 | 904 |
| 931 selection.start.SetEdge(start_edge_top, start_edge_bottom); | 905 selection.start.SetEdge(start_edge_top, start_edge_bottom); |
| 932 selection.end.SetEdge(end_edge_top, end_edge_bottom); | 906 selection.end.SetEdge(end_edge_top, end_edge_bottom); |
| 933 } | 907 } |
| 934 | 908 |
| 935 cc::BeginFrameAck ack(frame.metadata.begin_frame_ack); | |
| 936 | |
| 937 if (delegated_frame_host_) { | 909 if (delegated_frame_host_) { |
| 938 delegated_frame_host_->SwapDelegatedFrame( | 910 delegated_frame_host_->SwapDelegatedFrame( |
| 939 compositor_frame_sink_id, local_surface_id, std::move(frame)); | 911 compositor_frame_sink_id, local_surface_id, std::move(frame)); |
| 940 } | 912 } |
| 941 selection_controller_->OnSelectionBoundsChanged(selection.start, | 913 selection_controller_->OnSelectionBoundsChanged(selection.start, |
| 942 selection.end); | 914 selection.end); |
| 943 | |
| 944 if (begin_frame_source_) | |
| 945 begin_frame_source_->DidFinishFrame(this, ack); | |
| 946 } | 915 } |
| 947 | 916 |
| 948 void RenderWidgetHostViewAura::OnBeginFrameDidNotSwap( | 917 void RenderWidgetHostViewAura::OnBeginFrameDidNotSwap( |
| 949 const cc::BeginFrameAck& ack) { | 918 const cc::BeginFrameAck& ack) { |
| 950 if (begin_frame_source_) | 919 delegated_frame_host_->BeginFrameDidNotSwap(ack); |
| 951 begin_frame_source_->DidFinishFrame(this, ack); | |
| 952 } | 920 } |
| 953 | 921 |
| 954 void RenderWidgetHostViewAura::ClearCompositorFrame() { | 922 void RenderWidgetHostViewAura::ClearCompositorFrame() { |
| 955 if (delegated_frame_host_) | 923 if (delegated_frame_host_) |
| 956 delegated_frame_host_->ClearDelegatedFrame(); | 924 delegated_frame_host_->ClearDelegatedFrame(); |
| 957 } | 925 } |
| 958 | 926 |
| 959 void RenderWidgetHostViewAura::DidStopFlinging() { | 927 void RenderWidgetHostViewAura::DidStopFlinging() { |
| 960 selection_controller_client_->OnScrollCompleted(); | 928 selection_controller_client_->OnScrollCompleted(); |
| 961 } | 929 } |
| (...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1937 cc::FrameSinkId frame_sink_id = | 1905 cc::FrameSinkId frame_sink_id = |
| 1938 host_->AllocateFrameSinkId(is_guest_view_hack_); | 1906 host_->AllocateFrameSinkId(is_guest_view_hack_); |
| 1939 | 1907 |
| 1940 // Tests may set |delegated_frame_host_client_|. | 1908 // Tests may set |delegated_frame_host_client_|. |
| 1941 if (!delegated_frame_host_client_) { | 1909 if (!delegated_frame_host_client_) { |
| 1942 delegated_frame_host_client_ = | 1910 delegated_frame_host_client_ = |
| 1943 base::MakeUnique<DelegatedFrameHostClientAura>(this); | 1911 base::MakeUnique<DelegatedFrameHostClientAura>(this); |
| 1944 } | 1912 } |
| 1945 delegated_frame_host_ = base::MakeUnique<DelegatedFrameHost>( | 1913 delegated_frame_host_ = base::MakeUnique<DelegatedFrameHost>( |
| 1946 frame_sink_id, delegated_frame_host_client_.get()); | 1914 frame_sink_id, delegated_frame_host_client_.get()); |
| 1915 UpdateNeedsBeginFramesInternal(); |
| 1947 | 1916 |
| 1948 // Let the page-level input event router know about our surface ID | 1917 // Let the page-level input event router know about our surface ID |
| 1949 // namespace for surface-based hit testing. | 1918 // namespace for surface-based hit testing. |
| 1950 if (host_->delegate() && host_->delegate()->GetInputEventRouter()) { | 1919 if (host_->delegate() && host_->delegate()->GetInputEventRouter()) { |
| 1951 host_->delegate()->GetInputEventRouter()->AddFrameSinkIdOwner( | 1920 host_->delegate()->GetInputEventRouter()->AddFrameSinkIdOwner( |
| 1952 GetFrameSinkId(), this); | 1921 GetFrameSinkId(), this); |
| 1953 } | 1922 } |
| 1954 } | 1923 } |
| 1955 | 1924 |
| 1956 void RenderWidgetHostViewAura::UpdateCursorIfOverSelf() { | 1925 void RenderWidgetHostViewAura::UpdateCursorIfOverSelf() { |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2366 } | 2335 } |
| 2367 | 2336 |
| 2368 void RenderWidgetHostViewAura::SetPopupChild( | 2337 void RenderWidgetHostViewAura::SetPopupChild( |
| 2369 RenderWidgetHostViewAura* popup_child_host_view) { | 2338 RenderWidgetHostViewAura* popup_child_host_view) { |
| 2370 popup_child_host_view_ = popup_child_host_view; | 2339 popup_child_host_view_ = popup_child_host_view; |
| 2371 event_handler_->SetPopupChild( | 2340 event_handler_->SetPopupChild( |
| 2372 popup_child_host_view, | 2341 popup_child_host_view, |
| 2373 popup_child_host_view ? popup_child_host_view->event_handler() : nullptr); | 2342 popup_child_host_view ? popup_child_host_view->event_handler() : nullptr); |
| 2374 } | 2343 } |
| 2375 | 2344 |
| 2345 void RenderWidgetHostViewAura::UpdateNeedsBeginFramesInternal() { |
| 2346 if (!delegated_frame_host_) |
| 2347 return; |
| 2348 delegated_frame_host_->SetNeedsBeginFrames(needs_begin_frames_ || |
| 2349 needs_flush_input_); |
| 2350 } |
| 2351 |
| 2376 } // namespace content | 2352 } // namespace content |
| OLD | NEW |