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 CHROME_BROWSER_CHROMEOS_LOGIN_UI_LOCK_WINDOW_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_UI_LOCK_WINDOW_H_
7
8#include "base/basictypes.h"
9
10namespace views {
11class View;
12class Widget;
13}
14
15namespace chromeos {
16
17// This is the interface which lock windows used for the WebUI screen locker
18// implement.
19class LockWindow {
20 public:
21  // This class provides an interface for the lock window to notify an observer
22  // about its status.
23  class Observer {
24   public:
25    // This method will be called when the lock window has finished all
26    // initialization.
27    virtual void OnLockWindowReady() = 0;
28  };
29
30  LockWindow();
31
32  // Attempt to grab inputs on the webview, the actual view displaying the lock
33  // screen WebView.
34  virtual void Grab() = 0;
35
36  // Returns the actual widget for the lock window.
37  virtual views::Widget* GetWidget() = 0;
38
39  // Sets the observer class which is notified on lock window events.
40  void set_observer(Observer* observer) {
41    observer_ = observer;
42  }
43
44  // Sets the view which should be initially focused.
45  void set_initially_focused_view(views::View* view) {
46    initially_focused_view_ = view;
47  }
48
49  // Creates an instance of the platform specific lock window.
50  static LockWindow* Create();
51
52 protected:
53  // The observer's OnLockWindowReady method will be called when the lock
54  // window has finished all initialization.
55  Observer* observer_;
56
57  // The view which should be initially focused.
58  views::View* initially_focused_view_;
59
60 private:
61  DISALLOW_COPY_AND_ASSIGN(LockWindow);
62};
63
64}  // namespace chromeos
65
66#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_UI_LOCK_WINDOW_H_
67