profile_manager_unittest.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/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" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_constants.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_notification_types.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/test_browser_window.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_browser_thread.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/cros/cros_library.h" 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_), 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_), 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) io_thread_(local_state_.Get(), g_browser_process->policy_service(), 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, extension_event_router_forwarder_) { 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetIOThread(&io_thread_); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new temporary directory, and store the path 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new testing::ProfileManager(temp_dir_.path())); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* cl = CommandLine::ForCurrentProcess(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cl->AppendSwitch(switches::kTestType); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not change order of stub_cros_enabler_, which needs to be constructed 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before io_thread_ which requires CrosLibrary to be initialized to construct 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its data member pref_proxy_config_tracker_ on ChromeOS. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::ScopedStubCrosEnabler stub_cros_enabler_; 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The path to temporary directory used to contain the test operations. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedTestingLocalState local_state_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::EventRouterForwarder> 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_event_router_forwarder_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoopForUI message_loop_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread db_thread_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IOThread is necessary for the creation of some services below. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IOThread io_thread_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, GetProfile) { 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create a profile. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = profile_manager->GetProfile(dest_path); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile already exists when we call GetProfile. Just load it. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile, profile_manager->GetProfile(dest_path)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, DefaultProfileDir) { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_default = 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(chrome::kInitialProfile); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_default.value(), 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->profile_manager()->GetInitialProfileDir().value()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This functionality only exists on Chrome OS. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LoggedInProfileDir) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine *cl = CommandLine::ForCurrentProcess(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_dir("my_user"); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cl->AppendSwitchASCII(chromeos::switches::kLoginProfile, profile_dir); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_default = 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(chrome::kInitialProfile); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_default.value(), 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir().value()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<chromeos::MockUserManager> mock_user_manager; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager.reset(new chromeos::MockUserManager()); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mock_user_manager->SetActiveUser("user@gmail.com"); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::User* active_user = mock_user_manager->GetActiveUser(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::Details<const chromeos::User>(active_user)); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_logged_in(profile_dir); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_logged_in.value(), 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir().value()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << temp_dir_.path().Append( 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir()).value(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, CreateAndUseTwoProfiles) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force lazy-init of some profile services to simulate use. 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->CreateHistoryService(true, false); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(HistoryServiceFactory::GetForProfile(profile1, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS)); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->CreateBookmarkModel(true); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(BookmarkModelFactory::GetForProfile(profile1)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->CreateBookmarkModel(true); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(BookmarkModelFactory::GetForProfile(profile2)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->CreateHistoryService(true, false); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(HistoryServiceFactory::GetForProfile(profile2, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::EXPLICIT_ACCESS)); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure any pending tasks run before we destroy the profiles. 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure history cleans up correctly. 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER(NotFail, "Profile creation failure status is not reported.") { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arg == Profile::CREATE_STATUS_CREATED || 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) arg == Profile::CREATE_STATUS_INITIALIZED; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests asynchronous profile creation mechanism. 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Crashes: http://crbug.com/89421 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, DISABLED_CreateProfileAsync) { 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile")); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer, OnProfileCreated( 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::NotNull(), NotFail())).Times(testing::AtLeast(1)); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->profile_manager()->CreateProfileAsync(dest_path, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&mock_observer)), 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MATCHER(SameNotNull, "The same non-NULL value for all calls.") { 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!g_created_profile) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_created_profile = arg; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arg != NULL && arg == g_created_profile; 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, CreateProfileAsyncMultipleRequests) { 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile")); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_created_profile = NULL; 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer1; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer1, OnProfileCreated( 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SameNotNull(), NotFail())).Times(testing::AtLeast(1)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer2; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer2, OnProfileCreated( 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SameNotNull(), NotFail())).Times(testing::AtLeast(1)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer3; 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer3, OnProfileCreated( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SameNotNull(), NotFail())).Times(testing::AtLeast(1)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&mock_observer1)), 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&mock_observer2)), 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(&mock_observer3)), 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, CreateProfilesAsync) { 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile 1")); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_dir_.path().Append(FILE_PATH_LITERAL("New Profile 2")); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockObserver mock_observer; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(mock_observer, OnProfileCreated( 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::NotNull(), NotFail())).Times(testing::AtLeast(3)); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path1, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&mock_observer)), 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->CreateProfileAsync(dest_path2, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&MockObserver::OnProfileCreated, 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(&mock_observer)), 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), string16(), false); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, AutoloadProfilesWithBackgroundApps) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.Get()->SetUserPref(prefs::kBackgroundModeEnabled, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Value::CreateBooleanValue(true)); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Setting a pref which is not applicable to a system (i.e., Android in this 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // case) does not necessarily create it. Don't bother continuing with the 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // test if this pref doesn't exist because it will not load the profiles if 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it cannot verify that the pref for background mode is enabled. 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!local_state_.Get()->HasPrefPath(prefs::kBackgroundModeEnabled)) 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, cache.GetNumberOfProfiles()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_1"), 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_1"), string16(), 0, false); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_2"), 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_2"), string16(), 0, false); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_3"), 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_3"), string16(), 0, false); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(0, true); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(2, true); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3u, cache.GetNumberOfProfiles()); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->AutoloadProfiles(); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, profile_manager->GetLoadedProfiles().size()); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ProfileManagerTest, DoNotAutoloadProfilesIfBackgroundModeOff) { 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) local_state_.Get()->SetUserPref(prefs::kBackgroundModeEnabled, 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Value::CreateBooleanValue(false)); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, cache.GetNumberOfProfiles()); 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_1"), 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_1"), string16(), 0, false); 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.AddProfileToCache(cache.GetUserDataDir().AppendASCII("path_2"), 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASCIIToUTF16("name_2"), string16(), 0, false); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(0, false); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cache.SetBackgroundStatusOfProfileAtIndex(1, true); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, cache.GetNumberOfProfiles()); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_manager->AutoloadProfiles(); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, profile_manager->GetLoadedProfiles().size()); 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, InitProfileUserPrefs) { 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profile 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = profile_manager->GetProfile(dest_path); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the profile name is non empty 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_name = 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetString(prefs::kProfileName); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(profile_name.empty()); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the profile avatar index is valid 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t avatar_index = 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_manager->GetProfileInfoCache().IsDefaultAvatarIconIndex( 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) avatar_index)); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that a new profile's entry in the profile info cache is setup with the 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// same values that are in the profile prefs. 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, InitProfileInfoCacheForAProfile) { 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileInfoCache& cache = profile_manager->GetProfileInfoCache(); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profile 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = profile_manager->GetProfile(dest_path); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_name = 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetString(prefs::kProfileName); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t avatar_index = 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->GetPrefs()->GetInteger(prefs::kProfileAvatarIndex); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t profile_index = cache.GetIndexOfProfileWithPath(dest_path); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check if the profile prefs are the same as the cache prefs 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_name, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UTF16ToUTF8(cache.GetNameOfProfileAtIndex(profile_index))); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(avatar_index, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cache.GetAvatarIconIndexOfProfileAtIndex(profile_index)); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// There's no Browser object on Android. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfiles) { 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1a( 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding more browsers doesn't change anything. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1b( 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browsers. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1a.reset(); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1b.reset(); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[0]); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2.reset(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfilesAtShutdown) { 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1( 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a shutdown. 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even if the browsers are destructed during shutdown, the profiles stay 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1.reset(); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2.reset(); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfilesDoesNotContainIncognito) { 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incognito profiles should not be managed by the profile manager but by the 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // original profile. 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = new TestingProfile(); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->set_incognito(true); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->SetOffTheRecordProfile(profile2); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1( 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2a( 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding more browsers doesn't change anything. 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2b( 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browsers. 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2a.reset(); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2b.reset(); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1.reset(); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_ANDROID) 621