Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
| diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc |
| index f928a0e9e749e76e9ceddd54174667c3475d7020..6cd1283845549c5f9daafeec670c7700d2be4c23 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
| @@ -31,6 +31,7 @@ |
| #include "content/browser/frame_host/render_frame_host_impl.h" |
| #include "content/browser/gpu/compositor_util.h" |
| #include "content/browser/renderer_host/compositor_resize_lock_aura.h" |
| +#include "content/browser/renderer_host/delegated_frame_host.h" |
| #include "content/browser/renderer_host/dip_util.h" |
| #include "content/browser/renderer_host/input/synthetic_gesture_target_aura.h" |
| #include "content/browser/renderer_host/input/touch_selection_controller_client_aura.h" |
| @@ -45,6 +46,7 @@ |
| #include "content/browser/renderer_host/ui_events_helper.h" |
| #include "content/common/content_switches_internal.h" |
| #include "content/common/input_messages.h" |
| +#include "content/common/render_widget_window_tree_client_factory.mojom.h" |
| #include "content/common/site_isolation_policy.h" |
| #include "content/common/text_input_state.h" |
| #include "content/common/view_messages.h" |
| @@ -56,6 +58,8 @@ |
| #include "content/public/common/child_process_host.h" |
| #include "content/public/common/content_switches.h" |
| #include "gpu/ipc/common/gpu_messages.h" |
| +#include "services/service_manager/public/cpp/interface_provider.h" |
| +#include "services/ui/public/interfaces/window_manager_constants.mojom.h" |
| #include "third_party/WebKit/public/platform/WebInputEvent.h" |
| #include "third_party/WebKit/public/web/WebCompositionUnderline.h" |
| #include "ui/aura/client/aura_constants.h" |
| @@ -66,6 +70,7 @@ |
| #include "ui/aura/client/transient_window_client.h" |
| #include "ui/aura/client/window_parenting_client.h" |
| #include "ui/aura/env.h" |
| +#include "ui/aura/mus/window_port_mus.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_event_dispatcher.h" |
| #include "ui/aura/window_observer.h" |
| @@ -93,7 +98,6 @@ |
| #include "ui/wm/public/activation_client.h" |
| #include "ui/wm/public/scoped_tooltip_disabler.h" |
| #include "ui/wm/public/tooltip_client.h" |
| -#include "ui/wm/public/window_types.h" |
| #if defined(OS_WIN) |
| #include "base/time/time.h" |
| @@ -211,6 +215,12 @@ class WinScreenKeyboardObserver : public ui::OnScreenKeyboardObserver { |
| }; |
| #endif // defined(OS_WIN) |
| +// Callback from embedding the renderer. |
| +void EmbedCallback(bool result) { |
| + if (!result) |
| + DVLOG(1) << "embed failed"; |
| +} |
| + |
| } // namespace |
| // We need to watch for mouse events outside a Web Popup or its parent |
| @@ -356,6 +366,96 @@ class RenderWidgetHostViewAura::WindowAncestorObserver |
| DISALLOW_COPY_AND_ASSIGN(WindowAncestorObserver); |
| }; |
| +// DelegatedFrameHostClient implementation, not used in mus. |
| +class RenderWidgetHostViewAura::DelegatedFrameHostClientImpl |
| + : public DelegatedFrameHostClient { |
| + public: |
| + DelegatedFrameHostClientImpl( |
|
sadrul
2016/12/16 01:56:20
explicit
sky
2016/12/16 22:30:52
Done.
|
| + RenderWidgetHostViewAura* render_widget_host_view) |
| + : render_widget_host_view_(render_widget_host_view) {} |
| + ~DelegatedFrameHostClientImpl() {} |
| + |
| + private: |
| + // DelegatedFrameHostClient implementation. |
| + ui::Layer* DelegatedFrameHostGetLayer() const override { |
| + return render_widget_host_view_->window_->layer(); |
| + } |
| + bool DelegatedFrameHostIsVisible() const override { |
| + return !render_widget_host_view_->host_->is_hidden(); |
| + } |
| + SkColor DelegatedFrameHostGetGutterColor(SkColor color) const override { |
| + // When making an element on the page fullscreen the element's background |
| + // may not match the page's, so use black as the gutter color to avoid |
| + // flashes of brighter colors during the transition. |
| + if (render_widget_host_view_->host_->delegate() && |
| + render_widget_host_view_->host_->delegate() |
| + ->IsFullscreenForCurrentTab()) { |
| + return SK_ColorBLACK; |
| + } |
| + return color; |
| + } |
| + gfx::Size DelegatedFrameHostDesiredSizeInDIP() const override { |
| + return render_widget_host_view_->window_->bounds().size(); |
| + } |
| + bool DelegatedFrameCanCreateResizeLock() const override { |
| +#if !defined(OS_CHROMEOS) |
| + // On Windows and Linux, holding pointer moves will not help throttling |
| + // resizes. |
| + // TODO(piman): on Windows we need to block (nested message loop?) the |
| + // WM_SIZE event. On Linux we need to throttle at the WM level using |
| + // _NET_WM_SYNC_REQUEST. |
| + return false; |
| +#else |
| + if (render_widget_host_view_->host_->auto_resize_enabled()) |
| + return false; |
| + return true; |
| +#endif |
| + } |
| + std::unique_ptr<ResizeLock> DelegatedFrameHostCreateResizeLock( |
| + bool defer_compositor_lock) override { |
| + gfx::Size desired_size = render_widget_host_view_->window_->bounds().size(); |
| + return std::unique_ptr<ResizeLock>(new CompositorResizeLock( |
| + render_widget_host_view_->window_->GetHost(), desired_size, |
| + defer_compositor_lock, |
| + base::TimeDelta::FromMilliseconds(kResizeLockTimeoutMs))); |
| + } |
| + void DelegatedFrameHostResizeLockWasReleased() override { |
| + render_widget_host_view_->host_->WasResized(); |
| + } |
| + void DelegatedFrameHostSendReclaimCompositorResources( |
| + int compositor_frame_sink_id, |
| + bool is_swap_ack, |
| + const cc::ReturnedResourceArray& resources) override { |
| + render_widget_host_view_->host_->Send( |
| + new ViewMsg_ReclaimCompositorResources( |
| + render_widget_host_view_->host_->GetRoutingID(), |
| + compositor_frame_sink_id, is_swap_ack, resources)); |
| + } |
| + void SetBeginFrameSource(cc::BeginFrameSource* source) override { |
| + if (render_widget_host_view_->begin_frame_source_ && |
| + render_widget_host_view_->added_frame_observer_) { |
| + render_widget_host_view_->begin_frame_source_->RemoveObserver( |
| + render_widget_host_view_); |
| + render_widget_host_view_->added_frame_observer_ = false; |
| + } |
| + render_widget_host_view_->begin_frame_source_ = source; |
| + render_widget_host_view_->UpdateNeedsBeginFramesInternal(); |
| + } |
| + bool IsAutoResizeEnabled() const override { |
| + return render_widget_host_view_->host_->auto_resize_enabled(); |
| + } |
| + |
| + RenderWidgetHostViewAura* render_widget_host_view_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DelegatedFrameHostClientImpl); |
| +}; |
| + |
| +bool IsMus() { |
| + return aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS && |
| + base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kUseMusInRenderer); |
| +} |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| // RenderWidgetHostViewAura, public: |
| @@ -386,26 +486,30 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, |
| last_active_widget_routing_id_(MSG_ROUTING_NONE), |
| event_handler_(new RenderWidgetHostViewEventHandler(host_, this, this)), |
| weak_ptr_factory_(this) { |
| - // GuestViews have two RenderWidgetHostViews and so we need to make sure |
| - // we don't have FrameSinkId collisions. |
| - ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
| - cc::FrameSinkId frame_sink_id = |
| - is_guest_view_hack_ |
| - ? factory->GetContextFactoryPrivate()->AllocateFrameSinkId() |
| - : cc::FrameSinkId( |
| - base::checked_cast<uint32_t>(host_->GetProcess()->GetID()), |
| - base::checked_cast<uint32_t>(host_->GetRoutingID())); |
| - delegated_frame_host_ = |
| - base::MakeUnique<DelegatedFrameHost>(frame_sink_id, this); |
| - |
| if (!is_guest_view_hack_) |
| host_->SetView(this); |
| - // Let the page-level input event router know about our surface ID |
| - // namespace for surface-based hit testing. |
| - if (host_->delegate() && host_->delegate()->GetInputEventRouter()) { |
| - host_->delegate()->GetInputEventRouter()->AddFrameSinkIdOwner( |
| - GetFrameSinkId(), this); |
| + if (!IsMus()) { |
| + // GuestViews have two RenderWidgetHostViews and so we need to make sure |
| + // we don't have FrameSinkId collisions. |
| + ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
| + cc::FrameSinkId frame_sink_id = |
| + is_guest_view_hack_ |
| + ? factory->GetContextFactoryPrivate()->AllocateFrameSinkId() |
| + : cc::FrameSinkId( |
| + base::checked_cast<uint32_t>(host_->GetProcess()->GetID()), |
| + base::checked_cast<uint32_t>(host_->GetRoutingID())); |
| + delegated_frame_host_client_ = |
| + base::MakeUnique<DelegatedFrameHostClientImpl>(this); |
| + delegated_frame_host_ = base::MakeUnique<DelegatedFrameHost>( |
| + frame_sink_id, delegated_frame_host_client_.get()); |
| + |
| + // Let the page-level input event router know about our surface ID |
| + // namespace for surface-based hit testing. |
| + if (host_->delegate() && host_->delegate()->GetInputEventRouter()) { |
| + host_->delegate()->GetInputEventRouter()->AddFrameSinkIdOwner( |
| + GetFrameSinkId(), this); |
| + } |
| } |
| // We should start observing the TextInputManager for IME-related events as |
| @@ -434,11 +538,7 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host, |
| void RenderWidgetHostViewAura::InitAsChild( |
| gfx::NativeView parent_view) { |
| - CreateAuraWindow(); |
| - window_->SetType(ui::wm::WINDOW_TYPE_CONTROL); |
| - window_->Init(ui::LAYER_SOLID_COLOR); |
| - window_->SetName("RenderWidgetHostViewAura"); |
| - window_->layer()->SetColor(background_color_); |
| + CreateAuraWindow(ui::wm::WINDOW_TYPE_CONTROL); |
| if (parent_view) |
| parent_view->AddChild(GetNativeView()); |
| @@ -451,7 +551,6 @@ void RenderWidgetHostViewAura::InitAsChild( |
| void RenderWidgetHostViewAura::InitAsPopup( |
| RenderWidgetHostView* parent_host_view, |
| const gfx::Rect& bounds_in_screen) { |
| - CreateAuraWindow(); |
| popup_parent_host_view_ = |
| static_cast<RenderWidgetHostViewAura*>(parent_host_view); |
| @@ -472,10 +571,7 @@ void RenderWidgetHostViewAura::InitAsPopup( |
| old_child->popup_parent_host_view_ = NULL; |
| } |
| popup_parent_host_view_->SetPopupChild(this); |
| - window_->SetType(ui::wm::WINDOW_TYPE_MENU); |
| - window_->Init(ui::LAYER_SOLID_COLOR); |
| - window_->SetName("RenderWidgetHostViewAura"); |
| - window_->layer()->SetColor(background_color_); |
| + CreateAuraWindow(ui::wm::WINDOW_TYPE_MENU); |
| // Setting the transient child allows for the popup to get mouse events when |
| // in a system modal dialog. Do this before calling ParentWindowWithContext |
| @@ -503,13 +599,9 @@ void RenderWidgetHostViewAura::InitAsPopup( |
| void RenderWidgetHostViewAura::InitAsFullscreen( |
| RenderWidgetHostView* reference_host_view) { |
| - CreateAuraWindow(); |
| is_fullscreen_ = true; |
| - window_->SetType(ui::wm::WINDOW_TYPE_NORMAL); |
| - window_->Init(ui::LAYER_SOLID_COLOR); |
| - window_->SetName("RenderWidgetHostViewAura"); |
| + CreateAuraWindow(ui::wm::WINDOW_TYPE_NORMAL); |
| window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
| - window_->layer()->SetColor(background_color_); |
| aura::Window* parent = NULL; |
| gfx::Rect bounds; |
| @@ -541,7 +633,8 @@ void RenderWidgetHostViewAura::Show() { |
| if (!host_->is_hidden()) |
| return; |
| - bool has_saved_frame = delegated_frame_host_->HasSavedFrame(); |
| + bool has_saved_frame = |
| + delegated_frame_host_ ? delegated_frame_host_->HasSavedFrame() : false; |
| ui::LatencyInfo renderer_latency_info, browser_latency_info; |
| if (has_saved_frame) { |
| browser_latency_info.AddLatencyNumber( |
| @@ -560,7 +653,8 @@ void RenderWidgetHostViewAura::Show() { |
| NotifyRendererOfCursorVisibilityState(cursor_client->IsCursorVisible()); |
| } |
| - delegated_frame_host_->WasShown(browser_latency_info); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->WasShown(browser_latency_info); |
| #if defined(OS_WIN) |
| UpdateLegacyWin(); |
| @@ -573,7 +667,8 @@ void RenderWidgetHostViewAura::Hide() { |
| // TODO(wjmaclean): can host_ ever be null? |
| if (host_ && !host_->is_hidden()) { |
| host_->WasHidden(); |
| - delegated_frame_host_->WasHidden(); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->WasHidden(); |
| #if defined(OS_WIN) |
| aura::WindowTreeHost* host = window_->GetHost(); |
| @@ -744,7 +839,8 @@ bool RenderWidgetHostViewAura::HasFocus() const { |
| } |
| bool RenderWidgetHostViewAura::IsSurfaceAvailableForCopy() const { |
| - return delegated_frame_host_->CanCopyToBitmap(); |
| + return delegated_frame_host_ ? delegated_frame_host_->CanCopyToBitmap() |
| + : false; |
| } |
| bool RenderWidgetHostViewAura::IsShowing() { |
| @@ -851,7 +947,9 @@ void RenderWidgetHostViewAura::SetTooltipText( |
| } |
| gfx::Size RenderWidgetHostViewAura::GetRequestedRendererSize() const { |
| - return delegated_frame_host_->GetRequestedRendererSize(); |
| + return delegated_frame_host_ |
| + ? delegated_frame_host_->GetRequestedRendererSize() |
| + : RenderWidgetHostViewBase::GetRequestedRendererSize(); |
| } |
| void RenderWidgetHostViewAura::CopyFromCompositingSurface( |
| @@ -859,6 +957,8 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurface( |
| const gfx::Size& dst_size, |
| const ReadbackRequestCallback& callback, |
| const SkColorType preferred_color_type) { |
| + if (!delegated_frame_host_) |
| + return; |
| delegated_frame_host_->CopyFromCompositingSurface( |
| src_subrect, dst_size, callback, preferred_color_type); |
| } |
| @@ -867,21 +967,26 @@ void RenderWidgetHostViewAura::CopyFromCompositingSurfaceToVideoFrame( |
| const gfx::Rect& src_subrect, |
| const scoped_refptr<media::VideoFrame>& target, |
| const base::Callback<void(const gfx::Rect&, bool)>& callback) { |
| + if (!delegated_frame_host_) |
| + return; |
| delegated_frame_host_->CopyFromCompositingSurfaceToVideoFrame( |
| src_subrect, target, callback); |
| } |
| bool RenderWidgetHostViewAura::CanCopyToVideoFrame() const { |
| - return delegated_frame_host_->CanCopyToVideoFrame(); |
| + return delegated_frame_host_ ? delegated_frame_host_->CanCopyToVideoFrame() |
| + : false; |
| } |
| void RenderWidgetHostViewAura::BeginFrameSubscription( |
| std::unique_ptr<RenderWidgetHostViewFrameSubscriber> subscriber) { |
| - delegated_frame_host_->BeginFrameSubscription(std::move(subscriber)); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->BeginFrameSubscription(std::move(subscriber)); |
| } |
| void RenderWidgetHostViewAura::EndFrameSubscription() { |
| - delegated_frame_host_->EndFrameSubscription(); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->EndFrameSubscription(); |
| } |
| #if defined(OS_WIN) |
| @@ -935,14 +1040,17 @@ void RenderWidgetHostViewAura::OnSwapCompositorFrame( |
| selection.end.SetEdge(end_edge_top, end_edge_bottom); |
| } |
| - delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, |
| - std::move(frame)); |
| + if (delegated_frame_host_) { |
| + delegated_frame_host_->SwapDelegatedFrame(compositor_frame_sink_id, |
| + std::move(frame)); |
| + } |
| SelectionUpdated(selection.is_editable, selection.is_empty_text_form_control, |
| selection.start, selection.end); |
| } |
| void RenderWidgetHostViewAura::ClearCompositorFrame() { |
| - delegated_frame_host_->ClearDelegatedFrame(); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->ClearDelegatedFrame(); |
| } |
| void RenderWidgetHostViewAura::DidStopFlinging() { |
| @@ -1601,8 +1709,10 @@ cc::FrameSinkId RenderWidgetHostViewAura::FrameSinkIdAtPoint( |
| // |point| from DIPs to pixels before hittesting. |
| gfx::Point point_in_pixels = |
| gfx::ConvertPointToPixel(device_scale_factor_, point); |
| - cc::SurfaceId id = delegated_frame_host_->SurfaceIdAtPoint( |
| - delegate, point_in_pixels, transformed_point); |
| + cc::SurfaceId id = delegated_frame_host_ |
| + ? delegated_frame_host_->SurfaceIdAtPoint( |
| + delegate, point_in_pixels, transformed_point) |
| + : cc::SurfaceId(); |
| *transformed_point = |
|
sadrul
2016/12/16 01:56:20
We should ideally not even reach here in mus (sinc
sky
2016/12/16 22:30:52
I added a TODO.
|
| gfx::ConvertPointToDIP(device_scale_factor_, *transformed_point); |
| @@ -1645,7 +1755,8 @@ bool RenderWidgetHostViewAura::TransformPointToLocalCoordSpace( |
| // is necessary. |
| gfx::Point point_in_pixels = |
| gfx::ConvertPointToPixel(device_scale_factor_, point); |
| - if (!delegated_frame_host_->TransformPointToLocalCoordSpace( |
| + if (delegated_frame_host_ && |
|
sadrul
2016/12/16 01:56:20
ditto
sky
2016/12/16 22:30:52
TODO here too.
|
| + !delegated_frame_host_->TransformPointToLocalCoordSpace( |
| point_in_pixels, original_surface, transformed_point)) |
| return false; |
| *transformed_point = |
| @@ -1657,7 +1768,7 @@ bool RenderWidgetHostViewAura::TransformPointToCoordSpaceForView( |
| const gfx::Point& point, |
| RenderWidgetHostViewBase* target_view, |
| gfx::Point* transformed_point) { |
| - if (target_view == this) { |
| + if (target_view == this || !delegated_frame_host_) { |
| *transformed_point = point; |
| return true; |
| } |
| @@ -1865,9 +1976,10 @@ RenderWidgetHostViewAura::~RenderWidgetHostViewAura() { |
| text_input_manager_->RemoveObserver(this); |
| } |
| -void RenderWidgetHostViewAura::CreateAuraWindow() { |
| +void RenderWidgetHostViewAura::CreateAuraWindow(ui::wm::WindowType type) { |
| DCHECK(!window_); |
| window_ = new aura::Window(this); |
| + window_->SetName("RenderWidgetHostViewAura"); |
| event_handler_->set_window(window_); |
| window_observer_.reset(new WindowObserver(this)); |
| @@ -1875,6 +1987,26 @@ void RenderWidgetHostViewAura::CreateAuraWindow() { |
| aura::client::SetActivationDelegate(window_, this); |
| aura::client::SetFocusChangeObserver(window_, this); |
| display::Screen::GetScreen()->AddObserver(this); |
| + |
| + window_->SetType(type); |
| + window_->Init(ui::LAYER_SOLID_COLOR); |
| + window_->layer()->SetColor(background_color_); |
| + |
| + if (!IsMus()) |
| + return; |
| + |
| + // Connect to the renderer, pass it a WindowTreeClient interface request |
| + // and embed that client inside our mus window. |
| + mojom::RenderWidgetWindowTreeClientFactoryPtr factory; |
| + host_->GetProcess()->GetRemoteInterfaces()->GetInterface(&factory); |
| + |
| + ui::mojom::WindowTreeClientPtr window_tree_client; |
| + factory->CreateWindowTreeClientForRenderWidget( |
| + host_->GetRoutingID(), mojo::GetProxy(&window_tree_client)); |
| + aura::WindowPortMus::Get(window_)->Embed( |
| + std::move(window_tree_client), |
| + ui::mojom::kEmbedFlagEmbedderInterceptsEvents, |
| + base::Bind(&EmbedCallback)); |
| } |
| void RenderWidgetHostViewAura::UpdateCursorIfOverSelf() { |
| @@ -2053,7 +2185,8 @@ void RenderWidgetHostViewAura::InternalSetBounds(const gfx::Rect& rect) { |
| if (!in_bounds_changed_) |
| window_->SetBounds(rect); |
| host_->WasResized(); |
| - delegated_frame_host_->WasResized(); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->WasResized(); |
| #if defined(OS_WIN) |
| UpdateLegacyWin(); |
| @@ -2119,7 +2252,8 @@ void RenderWidgetHostViewAura::AddedToRootWindow() { |
| UpdateLegacyWin(); |
| #endif |
| - delegated_frame_host_->SetCompositor(window_->GetHost()->compositor()); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->SetCompositor(window_->GetHost()->compositor()); |
| } |
| void RenderWidgetHostViewAura::RemovingFromRootWindow() { |
| @@ -2131,7 +2265,8 @@ void RenderWidgetHostViewAura::RemovingFromRootWindow() { |
| DetachFromInputMethod(); |
| window_->GetHost()->RemoveObserver(this); |
| - delegated_frame_host_->ResetCompositor(); |
| + if (delegated_frame_host_) |
| + delegated_frame_host_->ResetCompositor(); |
| #if defined(OS_WIN) |
| // Update the legacy window's parent temporarily to the hidden window. It |
| @@ -2205,81 +2340,6 @@ void RenderWidgetHostViewAura::CreateSelectionController() { |
| selection_controller_client_.get(), tsc_config)); |
| } |
| -//////////////////////////////////////////////////////////////////////////////// |
| -// DelegatedFrameHost, public: |
| - |
| -ui::Layer* RenderWidgetHostViewAura::DelegatedFrameHostGetLayer() const { |
| - return window_->layer(); |
| -} |
| - |
| -bool RenderWidgetHostViewAura::DelegatedFrameHostIsVisible() const { |
| - return !host_->is_hidden(); |
| -} |
| - |
| -SkColor RenderWidgetHostViewAura::DelegatedFrameHostGetGutterColor( |
| - SkColor color) const { |
| - // When making an element on the page fullscreen the element's background |
| - // may not match the page's, so use black as the gutter color to avoid |
| - // flashes of brighter colors during the transition. |
| - if (host_->delegate() && host_->delegate()->IsFullscreenForCurrentTab()) |
| - return SK_ColorBLACK; |
| - return color; |
| -} |
| - |
| -gfx::Size RenderWidgetHostViewAura::DelegatedFrameHostDesiredSizeInDIP() const { |
| - return window_->bounds().size(); |
| -} |
| - |
| -bool RenderWidgetHostViewAura::DelegatedFrameCanCreateResizeLock() const { |
| -#if !defined(OS_CHROMEOS) |
| - // On Windows and Linux, holding pointer moves will not help throttling |
| - // resizes. |
| - // TODO(piman): on Windows we need to block (nested message loop?) the |
| - // WM_SIZE event. On Linux we need to throttle at the WM level using |
| - // _NET_WM_SYNC_REQUEST. |
| - return false; |
| -#else |
| - if (host_->auto_resize_enabled()) |
| - return false; |
| - return true; |
| -#endif |
| -} |
| - |
| -std::unique_ptr<ResizeLock> |
| -RenderWidgetHostViewAura::DelegatedFrameHostCreateResizeLock( |
| - bool defer_compositor_lock) { |
| - gfx::Size desired_size = window_->bounds().size(); |
| - return std::unique_ptr<ResizeLock>(new CompositorResizeLock( |
| - window_->GetHost(), desired_size, defer_compositor_lock, |
| - base::TimeDelta::FromMilliseconds(kResizeLockTimeoutMs))); |
| -} |
| - |
| -void RenderWidgetHostViewAura::DelegatedFrameHostResizeLockWasReleased() { |
| - host_->WasResized(); |
| -} |
| - |
| -void RenderWidgetHostViewAura::DelegatedFrameHostSendReclaimCompositorResources( |
| - int compositor_frame_sink_id, |
| - bool is_swap_ack, |
| - const cc::ReturnedResourceArray& resources) { |
| - host_->Send(new ViewMsg_ReclaimCompositorResources( |
| - host_->GetRoutingID(), compositor_frame_sink_id, is_swap_ack, resources)); |
| -} |
| - |
| -void RenderWidgetHostViewAura::SetBeginFrameSource( |
| - cc::BeginFrameSource* source) { |
| - if (begin_frame_source_ && added_frame_observer_) { |
| - begin_frame_source_->RemoveObserver(this); |
| - added_frame_observer_ = false; |
| - } |
| - begin_frame_source_ = source; |
| - UpdateNeedsBeginFramesInternal(); |
| -} |
| - |
| -bool RenderWidgetHostViewAura::IsAutoResizeEnabled() const { |
| - return host_->auto_resize_enabled(); |
| -} |
| - |
| void RenderWidgetHostViewAura::OnDidNavigateMainFrameToNewPage() { |
| ui::GestureRecognizer::Get()->CancelActiveTouches(window_); |
| } |
| @@ -2293,11 +2353,13 @@ void RenderWidgetHostViewAura::UnlockCompositingSurface() { |
| } |
| cc::FrameSinkId RenderWidgetHostViewAura::GetFrameSinkId() { |
| - return delegated_frame_host_->GetFrameSinkId(); |
| + return delegated_frame_host_ ? delegated_frame_host_->GetFrameSinkId() |
| + : cc::FrameSinkId(); |
| } |
| cc::SurfaceId RenderWidgetHostViewAura::SurfaceIdForTesting() const { |
| - return delegated_frame_host_->SurfaceIdForTesting(); |
| + return delegated_frame_host_ ? delegated_frame_host_->SurfaceIdForTesting() |
| + : cc::SurfaceId(); |
| } |
| void RenderWidgetHostViewAura::OnUpdateTextInputStateCalled( |