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 CHROME_BROWSER_NOTIFICATIONS_LOGIN_STATE_NOTIFICATION_BLOCKER_CHROMEOS_H_
6#define CHROME_BROWSER_NOTIFICATIONS_LOGIN_STATE_NOTIFICATION_BLOCKER_CHROMEOS_H_
7
8#include "ash/shell_observer.h"
9#include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
10#include "chromeos/login/login_state.h"
11#include "ui/message_center/notification_blocker.h"
12
13// A notification blocker which checks screen lock / login state for ChromeOS.
14// This is different from ScreenLockNotificationBlocker because:
15//  - ScreenLockNotificationBlocker only cares about lock status but ChromeOS
16//    needs to care about login-screen.
17//  - ScreenLockNotificationBlocker needs a timer to check the screen lock state
18//    periodically, but ash::ShellObserver gets the events directly in ChromeOS.
19//  - In ChromeOS, some system notifications are allowed to be shown as popups.
20class LoginStateNotificationBlockerChromeOS
21    : public message_center::NotificationBlocker,
22      public ash::ShellObserver,
23      public chromeos::LoginState::Observer,
24      public chromeos::UserAddingScreen::Observer {
25 public:
26  explicit LoginStateNotificationBlockerChromeOS(
27      message_center::MessageCenter* message_center);
28  virtual ~LoginStateNotificationBlockerChromeOS();
29
30 private:
31  // message_center::NotificationBlocker overrides:
32  virtual bool ShouldShowNotificationAsPopup(
33      const message_center::NotifierId& notifier_id) const OVERRIDE;
34
35  // ash::ShellObserver overrides:
36  virtual void OnLockStateChanged(bool locked) OVERRIDE;
37  virtual void OnAppTerminating() OVERRIDE;
38
39  // chromeos::LoginState::Observer overrides:
40  virtual void LoggedInStateChanged() OVERRIDE;
41
42  // chromeos::UserAddingScreen::Observer overrides:
43  virtual void OnUserAddingStarted() OVERRIDE;
44  virtual void OnUserAddingFinished() OVERRIDE;
45
46  bool locked_;
47  bool observing_;
48
49  DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerChromeOS);
50};
51
52#endif  // CHROME_BROWSER_NOTIFICATIONS_LOGIN_STATE_NOTIFICATION_BLOCKER_CHROMEOS_H_
53