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