103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file.
403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#ifndef UI_OZONE_PLATFORM_DRI_DRI_WINDOW_DELEGATE_PROXY_H_
603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#define UI_OZONE_PLATFORM_DRI_DRI_WINDOW_DELEGATE_PROXY_H_
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/geometry/rect.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/ozone/platform/dri/channel_observer.h"
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/ozone/platform/dri/dri_window_delegate.h"
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace ui {
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class GpuPlatformSupportHostGbm;
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// This is used when running with a GPU process (or with the in-process GPU) to
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// IPC the native window configuration from the browser to the GPU.
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DriWindowDelegateProxy : public DriWindowDelegate,
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                               public ChannelObserver {
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DriWindowDelegateProxy(gfx::AcceleratedWidget widget,
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                         GpuPlatformSupportHostGbm* sender);
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual ~DriWindowDelegateProxy();
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // DriWindowDelegate:
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void Initialize() OVERRIDE;
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void Shutdown() OVERRIDE;
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual gfx::AcceleratedWidget GetAcceleratedWidget() OVERRIDE;
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual HardwareDisplayController* GetController() OVERRIDE;
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void OnBoundsChanged(const gfx::Rect& bounds) OVERRIDE;
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ChannelObserver:
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnChannelEstablished() OVERRIDE;
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnChannelDestroyed() OVERRIDE;
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private:
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  gfx::AcceleratedWidget widget_;
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GpuPlatformSupportHostGbm* sender_;  // Not owned.
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Cached state for the window. If the GPU process crashes, this state is used
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // to update the GPU side when it comes back.
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  gfx::Rect bounds_;
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(DriWindowDelegateProxy);
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
4603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}  // namespace ui
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif  // UI_OZONE_PLATFORM_DRI_DRI_WINDOW_DELEGATE_PROXY_H_
50