1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_OZONE_PLATFORM_DRI_DRI_WINDOW_DELEGATE_PROXY_H_
6#define UI_OZONE_PLATFORM_DRI_DRI_WINDOW_DELEGATE_PROXY_H_
7
8#include "ui/gfx/geometry/rect.h"
9#include "ui/ozone/platform/dri/channel_observer.h"
10#include "ui/ozone/platform/dri/dri_window_delegate.h"
11
12namespace ui {
13
14class GpuPlatformSupportHostGbm;
15
16// This is used when running with a GPU process (or with the in-process GPU) to
17// IPC the native window configuration from the browser to the GPU.
18class DriWindowDelegateProxy : public DriWindowDelegate,
19                               public ChannelObserver {
20 public:
21  DriWindowDelegateProxy(gfx::AcceleratedWidget widget,
22                         GpuPlatformSupportHostGbm* sender);
23  virtual ~DriWindowDelegateProxy();
24
25  // DriWindowDelegate:
26  virtual void Initialize() OVERRIDE;
27  virtual void Shutdown() OVERRIDE;
28  virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
29  virtual HardwareDisplayController* GetController() OVERRIDE;
30  virtual void OnBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
31
32  // ChannelObserver:
33  virtual void OnChannelEstablished() OVERRIDE;
34  virtual void OnChannelDestroyed() OVERRIDE;
35
36 private:
37  gfx::AcceleratedWidget widget_;
38  GpuPlatformSupportHostGbm* sender_;  // Not owned.
39
40  // Cached state for the window. If the GPU process crashes, this state is used
41  // to update the GPU side when it comes back.
42  gfx::Rect bounds_;
43
44  DISALLOW_COPY_AND_ASSIGN(DriWindowDelegateProxy);
45};
46
47}  // namespace ui
48
49#endif  // UI_OZONE_PLATFORM_DRI_DRI_WINDOW_DELEGATE_PROXY_H_
50