profile_manager_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/event_router_forwarder.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/io_thread.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/browser_prefs.h" 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/test_browser_window.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/mock_user_manager.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This global variable is used to check that value returned to different 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// observers is the same. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* g_created_profile; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace testing { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileManager : public ::ProfileManagerWithoutInit { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit ProfileManager(const base::FilePath& user_data_dir) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ::ProfileManagerWithoutInit(user_data_dir) {} 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Profile* CreateProfileHelper( 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& file_path) OVERRIDE { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!file_util::PathExists(file_path)) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!file_util::CreateDirectory(file_path)) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new TestingProfile(file_path, NULL); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Profile* CreateProfileAsyncHelper(const base::FilePath& path, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate) OVERRIDE { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is safe while all file operations are done on the FILE thread. 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::FILE, FROM_HERE, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(base::IgnoreResult(&file_util::CreateDirectory), path)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new TestingProfile(path, this); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace testing 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileManagerTest : public testing::Test { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MockObserver { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(OnProfileCreated, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(Profile* profile, Profile::CreateStatus status)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManagerTest() 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : local_state_(TestingBrowserProcess::GetGlobal()), 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_event_router_forwarder_(new extensions::EventRouterForwarder), 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_thread_(BrowserThread::UI, &message_loop_), 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_thread_(BrowserThread::DB, &message_loop_), 103868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new temporary directory, and store the path 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new testing::ProfileManager(temp_dir_.path())); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* cl = CommandLine::ForCurrentProcess(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cl->AppendSwitch(switches::kTestType); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The path to temporary directory used to contain the test operations. 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedTestingLocalState local_state_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::EventRouterForwarder> 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_event_router_forwarder_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoopForUI message_loop_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread db_thread_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, GetProfile) { 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create a profile. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = profile_manager->GetProfile(dest_path); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile already exists when we call GetProfile. Just load it. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile, profile_manager->GetProfile(dest_path)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, DefaultProfileDir) { 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_default = 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(chrome::kInitialProfile); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_default.value(), 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->profile_manager()->GetInitialProfileDir().value()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This functionality only exists on Chrome OS. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LoggedInProfileDir) { 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine *cl = CommandLine::ForCurrentProcess(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_dir("my_user"); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cl->AppendSwitchASCII(chromeos::switches::kLoginProfile, profile_dir); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_default = 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(chrome::kInitialProfile); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_default.value(), 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir().value()); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<chromeos::MockUserManager> mock_user_manager; 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager.reset(new chromeos::MockUserManager()); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager->SetActiveUser("user@gmail.com"); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::User* active_user = mock_user_manager->GetActiveUser(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::Details<const chromeos::User>(active_user)); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_logged_in(profile_dir); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_logged_in.value(), 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir().value()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << temp_dir_.path().Append( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir()).value(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, CreateAndUseTwoProfiles) { 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force lazy-init of some profile services to simulate use. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->CreateHistoryService(true, false); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(HistoryServiceFactory::GetForProfile(profile1, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS)); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->CreateBookmarkModel(true); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(BookmarkModelFactory::GetForProfile(profile1)); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->CreateBookmarkModel(true); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(BookmarkModelFactory::GetForProfile(profile2)); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->CreateHistoryService(true, false); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(HistoryServiceFactory::GetForProfile(profile2, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure any pending tasks run before we destroy the profiles. 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure history cleans up correctly. 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER(NotFail, "Profile creation failure status is not reported.") { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arg == Profile::CREATE_STATUS_CREATED || 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg == Profile::CREATE_STATUS_INITIALIZED; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests asynchronous profile creation mechanism. 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Crashes: http://crbug.com/89421 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, DISABLED_CreateProfileAsync) { 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile")); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer, OnProfileCreated( 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::NotNull(), NotFail())).Times(testing::AtLeast(1)); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->profile_manager()->CreateProfileAsync(dest_path, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&mock_observer)), 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER(SameNotNull, "The same non-NULL value for all calls.") { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!g_created_profile) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_created_profile = arg; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arg != NULL && arg == g_created_profile; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, CreateProfileAsyncMultipleRequests) { 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile")); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_created_profile = NULL; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer1; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer1, OnProfileCreated( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SameNotNull(), NotFail())).Times(testing::AtLeast(1)); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer2; 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer2, OnProfileCreated( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SameNotNull(), NotFail())).Times(testing::AtLeast(1)); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer3; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer3, OnProfileCreated( 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SameNotNull(), NotFail())).Times(testing::AtLeast(1)); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&mock_observer1)), 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&mock_observer2)), 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&mock_observer3)), 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, CreateProfilesAsync) { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile 1")); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile 2")); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer, OnProfileCreated( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::NotNull(), NotFail())).Times(testing::AtLeast(3)); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path1, 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&mock_observer)), 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path2, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&mock_observer)), 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, AutoloadProfilesWithBackgroundApps) { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.Get()->SetUserPref(prefs::kBackgroundModeEnabled, 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Value::CreateBooleanValue(true)); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Setting a pref which is not applicable to a system (i.e., Android in this 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // case) does not necessarily create it. Don't bother continuing with the 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // test if this pref doesn't exist because it will not load the profiles if 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it cannot verify that the pref for background mode is enabled. 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!local_state_.Get()->HasPrefPath(prefs::kBackgroundModeEnabled)) 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, cache.GetNumberOfProfiles()); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_1"), 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_1"), string16(), 0, false); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_2"), 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_2"), string16(), 0, false); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_3"), 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_3"), string16(), 0, false); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(0, true); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(2, true); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3u, cache.GetNumberOfProfiles()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->AutoloadProfiles(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, profile_manager->GetLoadedProfiles().size()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ProfileManagerTest, DoNotAutoloadProfilesIfBackgroundModeOff) { 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.Get()->SetUserPref(prefs::kBackgroundModeEnabled, 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Value::CreateBooleanValue(false)); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, cache.GetNumberOfProfiles()); 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_1"), 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_1"), string16(), 0, false); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_2"), 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_2"), string16(), 0, false); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(0, false); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(1, true); 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, cache.GetNumberOfProfiles()); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_manager->AutoloadProfiles(); 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, profile_manager->GetLoadedProfiles().size()); 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, InitProfileUserPrefs) { 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profile 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = profile_manager->GetProfile(dest_path); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the profile name is non empty 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_name = 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetString(prefs::kProfileName); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile_name.empty()); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the profile avatar index is valid 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t avatar_index = 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_manager->GetProfileInfoCache().IsDefaultAvatarIconIndex( 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) avatar_index)); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that a new profile's entry in the profile info cache is setup with the 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// same values that are in the profile prefs. 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, InitProfileInfoCacheForAProfile) { 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profile 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = profile_manager->GetProfile(dest_path); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_name = 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetString(prefs::kProfileName); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t avatar_index = 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t profile_index = cache.GetIndexOfProfileWithPath(dest_path); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if the profile prefs are the same as the cache prefs 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_name, 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF16ToUTF8(cache.GetNameOfProfileAtIndex(profile_index))); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(avatar_index, 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.GetAvatarIconIndexOfProfileAtIndex(profile_index)); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)TEST_F(ProfileManagerTest, GetLastUsedProfileAllowedByPolicy) { 423868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 424868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(profile_manager); 425868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 426868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Profile* profile = profile_manager->GetLastUsedProfileAllowedByPolicy(); 427868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(profile); 428868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(profile->IsOffTheRecord()); 429868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) PrefService* prefs = profile->GetPrefs(); 430868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_EQ(IncognitoModePrefs::ENABLED, 431868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IncognitoModePrefs::GetAvailability(prefs)); 432868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 433868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Attach an incognito Profile to the TestingProfile. 434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_FALSE(profile->GetOffTheRecordProfile()); 435868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestingProfile* incognito_profile = new TestingProfile(); 436868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) incognito_profile->set_incognito(true); 437868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(incognito_profile->IsOffTheRecord()); 438868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) TestingProfile* testing_profile = static_cast<TestingProfile*>(profile); 439868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) testing_profile->SetOffTheRecordProfile(incognito_profile); 440868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ASSERT_TRUE(profile->GetOffTheRecordProfile()); 441868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 442868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IncognitoModePrefs::SetAvailability(prefs, IncognitoModePrefs::DISABLED); 443868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE( 444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) profile_manager->GetLastUsedProfileAllowedByPolicy()->IsOffTheRecord()); 445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // GetLastUsedProfileAllowedByPolicy() returns the incognito Profile when 447868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // incognito mode is forced. 448868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IncognitoModePrefs::SetAvailability(prefs, IncognitoModePrefs::FORCED); 449868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE( 450868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) profile_manager->GetLastUsedProfileAllowedByPolicy()->IsOffTheRecord()); 451868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 452868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// There's no Browser object on Android. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfiles) { 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1a( 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding more browsers doesn't change anything. 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1b( 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browsers. 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1a.reset(); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1b.reset(); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[0]); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2.reset(); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfilesAtShutdown) { 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1( 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a shutdown. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST, 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even if the browsers are destructed during shutdown, the profiles stay 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open. 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1.reset(); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2.reset(); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfilesDoesNotContainIncognito) { 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incognito profiles should not be managed by the profile manager but by the 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // original profile. 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = new TestingProfile(); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->set_incognito(true); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->SetOffTheRecordProfile(profile2); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1( 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2a( 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding more browsers doesn't change anything. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2b( 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browsers. 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2a.reset(); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2b.reset(); 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1.reset(); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_ANDROID) 643