15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file.
4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_COMPOSITOR_RESIZE_LOCK_AURA_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_COMPOSITOR_RESIZE_LOCK_AURA_H_
7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/memory/ref_counted.h"
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/memory/weak_ptr.h"
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/time/time.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/compositor/resize_lock.h"
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace aura {
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class WindowTreeHost;
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ui {
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CompositorLock;
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace content {
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Used to prevent further resizes while a resize is pending.
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class CompositorResizeLock : public ResizeLock {
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public:
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  CompositorResizeLock(aura::WindowTreeHost* host,
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const gfx::Size new_size,
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       bool defer_compositor_lock,
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       const base::TimeDelta& timeout);
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual ~CompositorResizeLock();
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual bool GrabDeferredLock() OVERRIDE;
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void UnlockCompositor() OVERRIDE;
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) protected:
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void LockCompositor() OVERRIDE;
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  void CancelLock();
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) private:
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  aura::WindowTreeHost* host_;
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  scoped_refptr<ui::CompositorLock> compositor_lock_;
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  base::WeakPtrFactory<CompositorResizeLock> weak_ptr_factory_;
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  bool cancelled_;
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CompositorResizeLock);
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)};
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace content
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CONTENT_BROWSER_RENDERER_HOST_COMPOSITOR_RESIZE_LOCK_AURA_H_
50