1// Copyright 2013 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 ASH_WM_IMMERSIVE_REVEALED_LOCK_H_
6#define ASH_WM_IMMERSIVE_REVEALED_LOCK_H_
7
8#include "ash/ash_export.h"
9#include "base/basictypes.h"
10#include "base/memory/weak_ptr.h"
11
12namespace ash {
13
14// Class which keeps the top-of-window views revealed for the duration of its
15// lifetime. If acquiring the lock causes a reveal, the top-of-window views
16// will animate according to the |animate_reveal| parameter passed in the
17// constructor. See ImmersiveFullscreenController::GetRevealedLock() for more
18// details.
19class ASH_EXPORT ImmersiveRevealedLock {
20 public:
21  class ASH_EXPORT Delegate {
22   public:
23    enum AnimateReveal {
24      ANIMATE_REVEAL_YES,
25      ANIMATE_REVEAL_NO
26    };
27
28    virtual void LockRevealedState(AnimateReveal animate_reveal) = 0;
29    virtual void UnlockRevealedState() = 0;
30
31   protected:
32    virtual ~Delegate() {}
33  };
34
35  ImmersiveRevealedLock(const base::WeakPtr<Delegate>& delegate,
36                        Delegate::AnimateReveal animate_reveal);
37  ~ImmersiveRevealedLock();
38
39 private:
40  base::WeakPtr<Delegate> delegate_;
41
42  DISALLOW_COPY_AND_ASSIGN(ImmersiveRevealedLock);
43};
44
45}  // namespace ash
46
47#endif  // ASH_WM_IMMERSIVE_REVEALED_LOCK_H_
48