1bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch// found in the LICENSE file.
4bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
5bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include <string>
6bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/command_line.h"
8bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "base/strings/utf_string_conversions.h"
9bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "chrome/browser/notifications/message_center_settings_controller.h"
10bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "chrome/browser/prefs/pref_service_syncable.h"
11bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "chrome/browser/profiles/profile_info_cache.h"
12bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "chrome/browser/profiles/profile_manager.h"
13bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "chrome/test/base/testing_browser_process.h"
14bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "chrome/test/base/testing_profile_manager.h"
15bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h"
16bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
17bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch#include "ui/message_center/notifier_settings.h"
18bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_CHROMEOS)
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/fake_user_manager.h"
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
24bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdochclass MessageCenterSettingsControllerTest : public testing::Test {
25bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch protected:
26bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  MessageCenterSettingsControllerTest()
27bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch      : testing_profile_manager_(TestingBrowserProcess::GetGlobal()) {};
28bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  virtual ~MessageCenterSettingsControllerTest() {};
29bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
30bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  base::FilePath GetProfilePath(const std::string& base_name) {
31bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    return testing_profile_manager_.profile_manager()->user_data_dir()
32bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch        .AppendASCII(base_name);
33bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  }
34bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
35bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  virtual void SetUp() OVERRIDE {
36bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    ASSERT_TRUE(testing_profile_manager_.SetUp());
37bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  }
38bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void CreateProfile(const std::string& name) {
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    testing_profile_manager_.CreateTestingProfile(name);
41bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  }
42bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void CreateController() {
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    controller_.reset(new MessageCenterSettingsController(
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        testing_profile_manager_.profile_info_cache()));
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ResetController() {
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    controller_.reset();
50bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  }
51bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MessageCenterSettingsController* controller() { return controller_.get(); }
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
55bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  TestingProfileManager testing_profile_manager_;
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<MessageCenterSettingsController> controller_;
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content::TestBrowserThreadBundle thread_bundle_;
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MessageCenterSettingsControllerTest);
60bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch};
61bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_CHROMEOS)
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MessageCenterSettingsControllerChromeOSTest
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : public MessageCenterSettingsControllerTest {
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected:
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  MessageCenterSettingsControllerChromeOSTest() {}
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~MessageCenterSettingsControllerChromeOSTest() {}
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    MessageCenterSettingsControllerTest::SetUp();
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Initialize the UserManager singleton to a fresh FakeUserManager instance.
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    user_manager_enabler_.reset(
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        new chromeos::ScopedUserManagerEnabler(new chromeos::FakeUserManager));
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void TearDown() OVERRIDE {
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ResetController();
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    MessageCenterSettingsControllerTest::TearDown();
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void CreateProfile(const std::string& name) OVERRIDE {
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    MessageCenterSettingsControllerTest::CreateProfile(name);
85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    GetFakeUserManager()->AddUser(name);
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    GetFakeUserManager()->LoginUser(name);
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SwitchActiveUser(const std::string& name) {
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    GetFakeUserManager()->SwitchActiveUser(name);
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    controller()->ActiveUserChanged(GetFakeUserManager()->GetActiveUser());
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  chromeos::FakeUserManager* GetFakeUserManager() {
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return static_cast<chromeos::FakeUserManager*>(
986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        user_manager::UserManager::Get());
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_;
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MessageCenterSettingsControllerChromeOSTest);
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // OS_CHROMEOS
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_CHROMEOS)
108bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben MurdochTEST_F(MessageCenterSettingsControllerTest, NotifierGroups) {
109bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  CreateProfile("Profile-1");
110bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  CreateProfile("Profile-2");
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateController();
112bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupCount(), 2u);
114bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).name,
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-1"));
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 0u);
118bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(1).name,
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-2"));
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(1).index, 1u);
122bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetActiveNotifierGroup().name,
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-1"));
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetActiveNotifierGroup().index, 0u);
126bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  controller()->SwitchToNotifierGroup(1);
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetActiveNotifierGroup().name,
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-2"));
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetActiveNotifierGroup().index, 1u);
131bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  controller()->SwitchToNotifierGroup(0);
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetActiveNotifierGroup().name,
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-1"));
135bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch}
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(MessageCenterSettingsControllerChromeOSTest, NotifierGroups) {
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateProfile("Profile-1");
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateProfile("Profile-2");
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  CreateController();
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupCount(), 1u);
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).name,
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-1"));
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 0u);
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SwitchActiveUser("Profile-2");
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupCount(), 1u);
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).name,
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-2"));
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 1u);
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SwitchActiveUser("Profile-1");
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupCount(), 1u);
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).name,
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            base::UTF8ToUTF16("Profile-1"));
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(controller()->GetNotifierGroupAt(0).index, 0u);
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
1618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// TODO(mukai): write a test case to reproduce the actual guest session scenario
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// in ChromeOS -- no profiles in the profile_info_cache.
164