Update mojo surfaces bindings and mojo/cc/ glue
[chromium-blink-merge.git] / chrome / browser / notifications / login_state_notification_blocker_chromeos_browsertest.cc
blob2f83bc1b36efeb6256e1bb29929eeb2c83f69091
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 "base/command_line.h"
8 #include "chrome/browser/chromeos/login/login_manager_test.h"
9 #include "chrome/browser/chromeos/login/startup_utils.h"
10 #include "chrome/browser/chromeos/login/ui/user_adding_screen.h"
11 #include "chrome/browser/notifications/login_state_notification_blocker_chromeos.h"
12 #include "content/public/test/test_utils.h"
13 #include "ui/message_center/message_center.h"
15 using namespace testing;
17 namespace {
19 const char* kTestUsers[] = {"test-user@gmail.com",
20 "test-user1@gmail.com"};
22 } // anonymous namespace
24 class LoginStateNotificationBlockerChromeOSBrowserTest
25 : public chromeos::LoginManagerTest,
26 public message_center::NotificationBlocker::Observer {
27 public:
28 LoginStateNotificationBlockerChromeOSBrowserTest()
29 : chromeos::LoginManagerTest(false),
30 state_changed_count_(0) {}
31 virtual ~LoginStateNotificationBlockerChromeOSBrowserTest() {}
33 virtual void SetUpOnMainThread() OVERRIDE {
34 chromeos::LoginState::Get()->set_always_logged_in(false);
35 chromeos::LoginManagerTest::SetUpOnMainThread();
38 virtual void TearDownOnMainThread() OVERRIDE {
39 if (blocker_)
40 blocker_->RemoveObserver(this);
41 blocker_.reset();
42 chromeos::LoginManagerTest::TearDownOnMainThread();
45 protected:
46 void CreateBlocker() {
47 blocker_.reset(new LoginStateNotificationBlockerChromeOS(
48 message_center::MessageCenter::Get()));
49 blocker_->AddObserver(this);
52 // message_center::NotificationBlocker::Observer ovverrides:
53 virtual void OnBlockingStateChanged(
54 message_center::NotificationBlocker* blocker) OVERRIDE {
55 state_changed_count_++;
58 int GetStateChangedCountAndReset() {
59 int result = state_changed_count_;
60 state_changed_count_ = 0;
61 return result;
64 bool ShouldShowNotificationAsPopup(
65 const message_center::NotifierId& notifier_id) {
66 return blocker_->ShouldShowNotificationAsPopup(notifier_id);
69 private:
70 int state_changed_count_;
71 scoped_ptr<message_center::NotificationBlocker> blocker_;
73 DISALLOW_COPY_AND_ASSIGN(LoginStateNotificationBlockerChromeOSBrowserTest);
76 IN_PROC_BROWSER_TEST_F(LoginStateNotificationBlockerChromeOSBrowserTest,
77 PRE_BaseTest) {
78 RegisterUser(kTestUsers[0]);
79 RegisterUser(kTestUsers[1]);
80 chromeos::StartupUtils::MarkOobeCompleted();
83 IN_PROC_BROWSER_TEST_F(LoginStateNotificationBlockerChromeOSBrowserTest,
84 BaseTest) {
85 CreateBlocker();
86 message_center::NotifierId notifier_id(
87 message_center::NotifierId::APPLICATION, "test-notifier");
89 // Logged in as a normal user.
90 EXPECT_CALL(login_utils(), DoBrowserLaunch(_, _)).Times(1);
91 LoginUser(kTestUsers[0]);
92 EXPECT_EQ(1, GetStateChangedCountAndReset());
93 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
95 // Multi-login user switch.
96 chromeos::UserAddingScreen::Get()->Start();
97 content::RunAllPendingInMessageLoop();
98 EXPECT_EQ(1, GetStateChangedCountAndReset());
99 EXPECT_FALSE(ShouldShowNotificationAsPopup(notifier_id));
101 // Multi-login user switch off.
102 chromeos::UserAddingScreen::Get()->Cancel();
103 content::RunAllPendingInMessageLoop();
104 EXPECT_EQ(1, GetStateChangedCountAndReset());
105 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
108 IN_PROC_BROWSER_TEST_F(LoginStateNotificationBlockerChromeOSBrowserTest,
109 PRE_AlwaysAllowedNotifier) {
110 RegisterUser(kTestUsers[0]);
111 RegisterUser(kTestUsers[1]);
112 chromeos::StartupUtils::MarkOobeCompleted();
115 IN_PROC_BROWSER_TEST_F(LoginStateNotificationBlockerChromeOSBrowserTest,
116 AlwaysAllowedNotifier) {
117 CreateBlocker();
119 // NOTIFIER_DISPLAY is allowed to shown in the login screen.
120 message_center::NotifierId notifier_id(
121 message_center::NotifierId::SYSTEM_COMPONENT,
122 ash::system_notifier::kNotifierDisplay);
124 // Logged in as a normal user.
125 EXPECT_CALL(login_utils(), DoBrowserLaunch(_, _)).Times(1);
126 LoginUser(kTestUsers[0]);
127 EXPECT_EQ(1, GetStateChangedCountAndReset());
128 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
130 // Multi-login user switch.
131 chromeos::UserAddingScreen::Get()->Start();
132 content::RunAllPendingInMessageLoop();
133 EXPECT_EQ(1, GetStateChangedCountAndReset());
134 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));
136 // Multi-login user switch off.
137 chromeos::UserAddingScreen::Get()->Cancel();
138 content::RunAllPendingInMessageLoop();
139 EXPECT_EQ(1, GetStateChangedCountAndReset());
140 EXPECT_TRUE(ShouldShowNotificationAsPopup(notifier_id));