| Index: content/browser/renderer_host/delegated_frame_host_client_aura.cc
|
| diff --git a/content/browser/renderer_host/delegated_frame_host_client_aura.cc b/content/browser/renderer_host/delegated_frame_host_client_aura.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cedbe02732232309aac9a0a9019533cec3fe6d89
|
| --- /dev/null
|
| +++ b/content/browser/renderer_host/delegated_frame_host_client_aura.cc
|
| @@ -0,0 +1,112 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/browser/renderer_host/delegated_frame_host_client_aura.h"
|
| +
|
| +#include "content/browser/renderer_host/compositor_resize_lock_aura.h"
|
| +#include "content/browser/renderer_host/render_widget_host_impl.h"
|
| +#include "content/browser/renderer_host/render_widget_host_view_aura.h"
|
| +#include "content/common/view_messages.h"
|
| +#include "ui/aura/window.h"
|
| +#include "ui/compositor/layer.h"
|
| +
|
| +namespace content {
|
| +namespace {
|
| +
|
| +// When accelerated compositing is enabled and a widget resize is pending,
|
| +// we delay further resizes of the UI. The following constant is the maximum
|
| +// length of time that we should delay further UI resizes while waiting for a
|
| +// resized frame from a renderer.
|
| +const int kResizeLockTimeoutMs = 67;
|
| +
|
| +} // namespace
|
| +
|
| +DelegatedFrameHostClientAura::DelegatedFrameHostClientAura(
|
| + RenderWidgetHostViewAura* render_widget_host_view)
|
| + : render_widget_host_view_(render_widget_host_view) {}
|
| +
|
| +DelegatedFrameHostClientAura::~DelegatedFrameHostClientAura() {}
|
| +
|
| +ui::Layer* DelegatedFrameHostClientAura::DelegatedFrameHostGetLayer() const {
|
| + return render_widget_host_view_->window_->layer();
|
| +}
|
| +
|
| +bool DelegatedFrameHostClientAura::DelegatedFrameHostIsVisible() const {
|
| + return !render_widget_host_view_->host_->is_hidden();
|
| +}
|
| +
|
| +SkColor DelegatedFrameHostClientAura::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 (render_widget_host_view_->host_->delegate() &&
|
| + render_widget_host_view_->host_->delegate()
|
| + ->IsFullscreenForCurrentTab()) {
|
| + return SK_ColorBLACK;
|
| + }
|
| + return color;
|
| +}
|
| +
|
| +gfx::Size DelegatedFrameHostClientAura::DelegatedFrameHostDesiredSizeInDIP()
|
| + const {
|
| + return render_widget_host_view_->window_->bounds().size();
|
| +}
|
| +
|
| +bool DelegatedFrameHostClientAura::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 (render_widget_host_view_->host_->auto_resize_enabled())
|
| + return false;
|
| + return true;
|
| +#endif
|
| +}
|
| +
|
| +std::unique_ptr<ResizeLock>
|
| +DelegatedFrameHostClientAura::DelegatedFrameHostCreateResizeLock(
|
| + bool defer_compositor_lock) {
|
| + 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 DelegatedFrameHostClientAura::DelegatedFrameHostResizeLockWasReleased() {
|
| + render_widget_host_view_->host_->WasResized();
|
| +}
|
| +
|
| +void DelegatedFrameHostClientAura::
|
| + DelegatedFrameHostSendReclaimCompositorResources(
|
| + int compositor_frame_sink_id,
|
| + bool is_swap_ack,
|
| + const cc::ReturnedResourceArray& resources) {
|
| + render_widget_host_view_->host_->Send(new ViewMsg_ReclaimCompositorResources(
|
| + render_widget_host_view_->host_->GetRoutingID(), compositor_frame_sink_id,
|
| + is_swap_ack, resources));
|
| +}
|
| +
|
| +void DelegatedFrameHostClientAura::SetBeginFrameSource(
|
| + cc::BeginFrameSource* source) {
|
| + 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 DelegatedFrameHostClientAura::IsAutoResizeEnabled() const {
|
| + return render_widget_host_view_->host_->auto_resize_enabled();
|
| +}
|
| +
|
| +} // namespace content
|
|
|