profile_manager_unittest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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/system_monitor/system_monitor.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/utf_string_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.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" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This global variable is used to check that value returned to different 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// observers is the same. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Profile* g_created_profile; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace testing { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileManager : public ::ProfileManagerWithoutInit { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit ProfileManager(const base::FilePath& user_data_dir) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ::ProfileManagerWithoutInit(user_data_dir) {} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Profile* CreateProfileHelper( 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& file_path) OVERRIDE { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!file_util::PathExists(file_path)) { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!file_util::CreateDirectory(file_path)) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new TestingProfile(file_path, NULL); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Profile* CreateProfileAsyncHelper(const base::FilePath& path, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate) OVERRIDE { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is safe while all file operations are done on the FILE thread. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::FILE, FROM_HERE, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(base::IgnoreResult(&file_util::CreateDirectory), path)); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new TestingProfile(path, this); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace testing 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileManagerTest : public testing::Test { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class MockObserver { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(OnProfileCreated, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(Profile* profile, Profile::CreateStatus status)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManagerTest() 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : local_state_(TestingBrowserProcess::GetGlobal()), 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_event_router_forwarder_(new extensions::EventRouterForwarder), 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_thread_(BrowserThread::UI, &message_loop_), 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) db_thread_(BrowserThread::DB, &message_loop_), 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file_thread_(BrowserThread::FILE, &message_loop_), 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) io_thread_(local_state_.Get(), g_browser_process->policy_service(), 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, extension_event_router_forwarder_) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SystemMonitor::AllocateSystemIOPorts(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_monitor_dummy_.reset(new base::SystemMonitor); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetIOThread(&io_thread_); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a new temporary directory, and store the path 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new testing::ProfileManager(temp_dir_.path())); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* cl = CommandLine::ForCurrentProcess(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cl->AppendSwitch(switches::kTestType); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() { 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message_loop_.RunUntilIdle(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not change order of stub_cros_enabler_, which needs to be constructed 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before io_thread_ which requires CrosLibrary to be initialized to construct 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // its data member pref_proxy_config_tracker_ on ChromeOS. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::ScopedStubCrosEnabler stub_cros_enabler_; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The path to temporary directory used to contain the test operations. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedTestingLocalState local_state_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::EventRouterForwarder> 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_event_router_forwarder_; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoopForUI message_loop_; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread ui_thread_; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread db_thread_; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::TestBrowserThread file_thread_; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IOThread is necessary for the creation of some services below. 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IOThread io_thread_; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::SystemMonitor> system_monitor_dummy_; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, GetProfile) { 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path = temp_dir_.path(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path = dest_path.Append(FILE_PATH_LITERAL("New Profile")); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create a profile. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = profile_manager->GetProfile(dest_path); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile already exists when we call GetProfile. Just load it. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile, profile_manager->GetProfile(dest_path)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, DefaultProfileDir) { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_default = 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(chrome::kInitialProfile); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ( 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_default.value(), 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) g_browser_process->profile_manager()->GetInitialProfileDir().value()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This functionality only exists on Chrome OS. 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LoggedInProfileDir) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine *cl = CommandLine::ForCurrentProcess(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string profile_dir("my_user"); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cl->AppendSwitchASCII(switches::kLoginProfile, profile_dir); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath expected_default = 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII(chrome::kInitialProfile); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_default.value(), 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetInitialProfileDir().value()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->Observe(chrome::NOTIFICATION_LOGIN_USER_CHANGED, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 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) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_ANDROID) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// There's no Browser object on Android. 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfiles) { 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1a( 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding more browsers doesn't change anything. 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1b( 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browsers. 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1a.reset(); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1b.reset(); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[0]); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2.reset(); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfilesAtShutdown) { 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path2)); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1( 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2( 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate a shutdown. 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_CLOSE_ALL_BROWSERS_REQUEST, 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources(), 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even if the browsers are destructed during shutdown, the profiles stay 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // open. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1.reset(); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2.reset(); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2U, last_opened_profiles.size()); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile2, last_opened_profiles[1]); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileManagerTest, LastOpenedProfilesDoesNotContainIncognito) { 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path1 = temp_dir_.path(); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path1 = dest_path1.Append(FILE_PATH_LITERAL("New Profile 1")); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dest_path2 = temp_dir_.path(); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dest_path2 = dest_path2.Append(FILE_PATH_LITERAL("New Profile 2")); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Successfully create the profiles. 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<TestingProfile*>(profile_manager->GetProfile(dest_path1)); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile1); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // incognito profiles should not be managed by the profile manager but by the 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // original profile. 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = new TestingProfile(); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile2); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile2->set_incognito(true); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->SetOffTheRecordProfile(profile2); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Profile*> last_opened_profiles = 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_manager->GetLastOpenedProfiles(); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a browser for profile1. 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile1_params(profile1, 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser1( 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile1_params)); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And for profile2. 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Browser::CreateParams profile2_params(profile2, 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::HOST_DESKTOP_TYPE_NATIVE); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2a( 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adding more browsers doesn't change anything. 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Browser> browser2b( 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::CreateBrowserWithTestWindowForParams(&profile2_params)); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the browsers. 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2a.reset(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser2b.reset(); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1U, last_opened_profiles.size()); 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile1, last_opened_profiles[0]); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser1.reset(); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_opened_profiles = profile_manager->GetLastOpenedProfiles(); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(0U, last_opened_profiles.size()); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_ANDROID) 612