Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / browser / notifications / login_state_notification_blocker_chromeos_unittest.cc
blob3060a583fbfee507d08eb2ed1a00006993fa9a51
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.
5 #include "ash/shell.h"
6 #include "ash/system/system_notifier.h"
7 #include "ash/test/ash_test_base.h"
8 #include "base/command_line.h"
9 #include "chrome/browser/notifications/login_state_notification_blocker_chromeos.h"
10 #include "chromeos/login/login_state.h"
11 #include "ui/message_center/message_center.h"
12 #include "ui/message_center/notification.h"
14 class LoginStateNotificationBlockerChromeOSTest
15 : public ash::test::AshTestBase,
16 public message_center::NotificationBlocker::Observer {
17 public:
18 LoginStateNotificationBlockerChromeOSTest()
19 : state_changed_count_(0) {}
20 ~LoginStateNotificationBlockerChromeOSTest() override {}
22 // ash::tests::AshTestBase overrides:
23 void SetUp() override {
24 chromeos::LoginState::Initialize();
25 chromeos::LoginState::Get()->set_always_logged_in(false);
26 ash::test::AshTestBase::SetUp();
27 blocker_.reset(new LoginStateNotificationBlockerChromeOS(
28 message_center::MessageCenter::Get()));
29 blocker_->AddObserver(this);
32 void TearDown() override {
33 blocker_->RemoveObserver(this);
34 blocker_.reset();
35 ash::test::AshTestBase::TearDown();
36 chromeos::LoginState::Shutdown();
39 // message_center::NotificationBlocker::Observer overrides:
40 void OnBlockingStateChanged(
41 message_center::NotificationBlocker* blocker) override {
42 state_changed_count_++;
45 int GetStateChangedCountAndReset() {
46 int result = state_changed_count_;
47 state_changed_count_ = 0;
48 return result;
51 bool ShouldShowNotificationAsPopup(
52 const message_center::NotifierId& notifier_id) {
53 return blocker_->ShouldShowNotificationAsPopup(notifier_id);
56 private:
57 int state_changed_count_;
58 scoped_ptr<message_center::NotificationBlocker> blocker_;
60 DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerChromeOSTest);
63 TEST_F(LoginStateNotificationBlockerChromeOSTest, BaseTest) {
64 // Default status: OOBE.
65 message_center::NotifierId notifier_id(
66 message_center::NotifierId::APPLICATION, "test-notifier");
67 EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id));
69 // Login screen.
70 chromeos::LoginState::Get()->SetLoggedInState(
71 chromeos::LoginState::LOGGED_IN_NONE,
72 chromeos::LoginState::LOGGED_IN_USER_NONE);
73 EXPECT_EQ(0, GetStateChangedCountAndReset());
74 EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id));
76 // Logged in as a normal user.
77 chromeos::LoginState::Get()->SetLoggedInState(
78 chromeos::LoginState::LOGGED_IN_ACTIVE,
79 chromeos::LoginState::LOGGED_IN_USER_REGULAR);
80 EXPECT_EQ(1, GetStateChangedCountAndReset());
81 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
83 // Lock.
84 ash::Shell::GetInstance()->OnLockStateChanged(true);
85 EXPECT_EQ(1, GetStateChangedCountAndReset());
86 EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id));
88 // Unlock.
89 ash::Shell::GetInstance()->OnLockStateChanged(false);
90 EXPECT_EQ(1, GetStateChangedCountAndReset());
91 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
94 TEST_F(LoginStateNotificationBlockerChromeOSTest, AlwaysAllowedNotifier) {
95 // NOTIFIER_DISPLAY is allowed to shown in the login screen.
96 message_center::NotifierId notifier_id(
97 message_center::NotifierId::SYSTEM_COMPONENT,
98 ash::system_notifier::kNotifierDisplay);
100 // Default status: OOBE.
101 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
103 // Login screen.
104 chromeos::LoginState::Get()->SetLoggedInState(
105 chromeos::LoginState::LOGGED_IN_NONE,
106 chromeos::LoginState::LOGGED_IN_USER_NONE);
107 EXPECT_EQ(0, GetStateChangedCountAndReset());
108 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
110 // Logged in as a normal user.
111 chromeos::LoginState::Get()->SetLoggedInState(
112 chromeos::LoginState::LOGGED_IN_ACTIVE,
113 chromeos::LoginState::LOGGED_IN_USER_REGULAR);
114 EXPECT_EQ(1, GetStateChangedCountAndReset());
115 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
117 // Lock.
118 ash::Shell::GetInstance()->OnLockStateChanged(true);
119 EXPECT_EQ(1, GetStateChangedCountAndReset());
120 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
122 // Unlock.
123 ash::Shell::GetInstance()->OnLockStateChanged(false);
124 EXPECT_EQ(1, GetStateChangedCountAndReset());
125 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));