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 "chrome/browser/profiles/profile_info_cache_unittest.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <vector> 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/command_line.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/time/time.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/prefs/pref_service_syncable.h" 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_avatar_downloader.h" 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/common/chrome_switches.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/signin/core/common/profile_management_switches.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/test_utils.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_unittest_util.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16; 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UTF8ToUTF16; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileNameVerifierObserver::ProfileNameVerifierObserver( 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfileManager* testing_profile_manager) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : testing_profile_manager_(testing_profile_manager) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(testing_profile_manager_); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileNameVerifierObserver::~ProfileNameVerifierObserver() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileNameVerifierObserver::OnProfileAdded( 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& profile_path) { 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = GetCache()->GetNameOfProfileAtIndex( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->GetIndexOfProfileWithPath(profile_path)); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_names_.find(profile_name) == profile_names_.end()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_names_.insert(profile_name); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileNameVerifierObserver::OnProfileWillBeRemoved( 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& profile_path) { 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = GetCache()->GetNameOfProfileAtIndex( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->GetIndexOfProfileWithPath(profile_path)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_names_.find(profile_name) != profile_names_.end()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_names_.erase(profile_name); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileNameVerifierObserver::OnProfileWasRemoved( 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& profile_path, 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& profile_name) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_names_.find(profile_name) == profile_names_.end()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileNameVerifierObserver::OnProfileNameChanged( 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& profile_path, 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& old_profile_name) { 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 new_profile_name = GetCache()->GetNameOfProfileAtIndex( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->GetIndexOfProfileWithPath(profile_path)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_names_.find(old_profile_name) != profile_names_.end()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_names_.find(new_profile_name) == profile_names_.end()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_names_.erase(old_profile_name); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_names_.insert(new_profile_name); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileNameVerifierObserver::OnProfileAvatarChanged( 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& profile_path) { 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = GetCache()->GetNameOfProfileAtIndex( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->GetIndexOfProfileWithPath(profile_path)); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(profile_names_.find(profile_name) != profile_names_.end()); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileInfoCache* ProfileNameVerifierObserver::GetCache() { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing_profile_manager_->profile_info_cache(); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileInfoCacheTest::ProfileInfoCacheTest() 93a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : testing_profile_manager_(TestingBrowserProcess::GetGlobal()), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_observer_(&testing_profile_manager_) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileInfoCacheTest::~ProfileInfoCacheTest() { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileInfoCacheTest::SetUp() { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(testing_profile_manager_.SetUp()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_manager_.profile_info_cache()->AddObserver(&name_observer_); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileInfoCacheTest::TearDown() { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drain the UI thread to make sure all tasks are completed. This prevents 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // memory leaks. 108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ProfileInfoCache* ProfileInfoCacheTest::GetCache() { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing_profile_manager_.profile_info_cache(); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::FilePath ProfileInfoCacheTest::GetProfilePath( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& base_name) { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return testing_profile_manager_.profile_manager()->user_data_dir(). 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppendASCII(base_name); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ProfileInfoCacheTest::ResetCache() { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing_profile_manager_.DeleteProfileInfoCache(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, AddProfiles) { 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, GetCache()->GetNumberOfProfiles()); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (uint32 i = 0; i < 4; ++i) { 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path = 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetProfilePath(base::StringPrintf("path_%ud", i)); 132a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = 133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16(base::StringPrintf("name_%ud", i)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap* icon = rb.GetImageNamed( 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch profiles::GetDefaultAvatarIconResourceIDAtIndex( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i)).ToSkBitmap(); 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string supervised_user_id = i == 3 ? "TEST_ID" : ""; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetCache()->AddProfileToCache(profile_path, profile_name, base::string16(), 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) i, supervised_user_id); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetBackgroundStatusOfProfileAtIndex(i, true); 142a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 gaia_name = ASCIIToUTF16(base::StringPrintf("gaia_%ud", i)); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetGAIANameOfProfileAtIndex(i, gaia_name); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(i + 1, GetCache()->GetNumberOfProfiles()); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_name, GetCache()->GetNameOfProfileAtIndex(i)); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_path, GetCache()->GetPathOfProfileAtIndex(i)); 148a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const SkBitmap* actual_icon = 149a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetCache()->GetAvatarIconOfProfileAtIndex(i).ToSkBitmap(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(icon->width(), actual_icon->width()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(icon->height(), actual_icon->height()); 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(i == 3, GetCache()->ProfileIsSupervisedAtIndex(i)); 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(i == 3, GetCache()->IsOmittedProfileAtIndex(i)); 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(supervised_user_id, 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetCache()->GetSupervisedUserIdOfProfileAtIndex(i)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset the cache and test the it reloads correctly. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetCache(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4u, GetCache()->GetNumberOfProfiles()); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (uint32 i = 0; i < 4; ++i) { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path = 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetProfilePath(base::StringPrintf("path_%ud", i)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(i, GetCache()->GetIndexOfProfileWithPath(profile_path)); 166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = 167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASCIIToUTF16(base::StringPrintf("name_%ud", i)); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_name, GetCache()->GetNameOfProfileAtIndex(i)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(i, GetCache()->GetAvatarIconIndexOfProfileAtIndex(i)); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(true, GetCache()->GetBackgroundStatusOfProfileAtIndex(i)); 171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 gaia_name = ASCIIToUTF16(base::StringPrintf("gaia_%ud", i)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gaia_name, GetCache()->GetGAIANameOfProfileAtIndex(i)); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, DeleteProfile) { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, GetCache()->GetNumberOfProfiles()); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path_1 = GetProfilePath("path_1"); 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetCache()->AddProfileToCache(path_1, ASCIIToUTF16("name_1"), 181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, GetCache()->GetNumberOfProfiles()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path_2 = GetProfilePath("path_2"); 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name_2 = ASCIIToUTF16("name_2"); 186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetCache()->AddProfileToCache(path_2, name_2, base::string16(), 0, 187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, GetCache()->GetNumberOfProfiles()); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->DeleteProfileFromCache(path_1); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1u, GetCache()->GetNumberOfProfiles()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_2, GetCache()->GetNameOfProfileAtIndex(0)); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->DeleteProfileFromCache(path_2); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0u, GetCache()->GetNumberOfProfiles()); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, MutateProfile) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 2002385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_1"), ASCIIToUTF16("name_1"), 201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 2032385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_2"), ASCIIToUTF16("name_2"), 204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 new_name = ASCIIToUTF16("new_name"); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetNameOfProfileAtIndex(1, new_name); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(new_name, GetCache()->GetNameOfProfileAtIndex(1)); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(new_name, GetCache()->GetNameOfProfileAtIndex(0)); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 new_user_name = ASCIIToUTF16("user_name"); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetUserNameOfProfileAtIndex(1, new_user_name); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(new_user_name, GetCache()->GetUserNameOfProfileAtIndex(1)); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(new_user_name, GetCache()->GetUserNameOfProfileAtIndex(0)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t new_icon_index = 3; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetAvatarIconOfProfileAtIndex(1, new_icon_index); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not much to test. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->GetAvatarIconOfProfileAtIndex(1); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, Sort) { 223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name_a = ASCIIToUTF16("apple"); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetProfilePath("path_a"), name_a, base::string16(), 0, std::string()); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name_c = ASCIIToUTF16("cat"); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetProfilePath("path_c"), name_c, base::string16(), 0, std::string()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sanity check the initial order. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_a, GetCache()->GetNameOfProfileAtIndex(0)); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_c, GetCache()->GetNameOfProfileAtIndex(1)); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a new profile (start with a capital to test case insensitive sorting. 236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 name_b = ASCIIToUTF16("Banana"); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetProfilePath("path_b"), name_b, base::string16(), 0, std::string()); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the new order. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_a, GetCache()->GetNameOfProfileAtIndex(0)); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_b, GetCache()->GetNameOfProfileAtIndex(1)); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_c, GetCache()->GetNameOfProfileAtIndex(2)); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change the name of an existing profile. 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_a = UTF8ToUTF16("dog"); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetNameOfProfileAtIndex(0, name_a); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the new order. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_b, GetCache()->GetNameOfProfileAtIndex(0)); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_c, GetCache()->GetNameOfProfileAtIndex(1)); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_a, GetCache()->GetNameOfProfileAtIndex(2)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Delete a profile. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->DeleteProfileFromCache(GetProfilePath("path_c")); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify the new order. 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_b, GetCache()->GetNameOfProfileAtIndex(0)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(name_a, GetCache()->GetNameOfProfileAtIndex(1)); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, BackgroundModeStatus) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 2642385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_1"), ASCIIToUTF16("name_1"), 265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 2672385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_2"), ASCIIToUTF16("name_2"), 268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetCache()->GetBackgroundStatusOfProfileAtIndex(0)); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetCache()->GetBackgroundStatusOfProfileAtIndex(1)); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetBackgroundStatusOfProfileAtIndex(1, true); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetCache()->GetBackgroundStatusOfProfileAtIndex(0)); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetCache()->GetBackgroundStatusOfProfileAtIndex(1)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetBackgroundStatusOfProfileAtIndex(0, true); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetCache()->GetBackgroundStatusOfProfileAtIndex(0)); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetCache()->GetBackgroundStatusOfProfileAtIndex(1)); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetBackgroundStatusOfProfileAtIndex(1, false); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetCache()->GetBackgroundStatusOfProfileAtIndex(0)); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetCache()->GetBackgroundStatusOfProfileAtIndex(1)); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, ProfileActiveTime) { 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetCache()->AddProfileToCache( 2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetProfilePath("path_1"), ASCIIToUTF16("name_1"), 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16(), 0, std::string()); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::Time(), GetCache()->GetProfileActiveTimeAtIndex(0)); 294a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Before & After times are artificially shifted because just relying upon 295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // the system time can yield problems due to inaccuracies in the 296a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // underlying storage system (which uses a double with only 52 bits of 297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // precision to store the 64-bit "time" number). http://crbug.com/346827 2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time before = base::Time::Now(); 299a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) before -= base::TimeDelta::FromSeconds(1); 3005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GetCache()->SetProfileActiveTimeAtIndex(0); 3015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Time after = base::Time::Now(); 302a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) after += base::TimeDelta::FromSeconds(1); 3035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_LE(before, GetCache()->GetProfileActiveTimeAtIndex(0)); 3045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_GE(after, GetCache()->GetProfileActiveTimeAtIndex(0)); 3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, GAIAName) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 309a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetProfilePath("path_1"), ASCIIToUTF16("Person 1"), 310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 311a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::string16 profile_name(ASCIIToUTF16("Person 2")); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 313a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetProfilePath("path_2"), profile_name, base::string16(), 0, 314a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string()); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 316a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int index1 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_1")); 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int index2 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_2")); 318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sanity check. 320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GetCache()->GetGAIANameOfProfileAtIndex(index1).empty()); 321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(GetCache()->GetGAIANameOfProfileAtIndex(index2).empty()); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 323effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Set GAIA name. This re-sorts the cache. 324a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 gaia_name(ASCIIToUTF16("Pat Smith")); 325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) GetCache()->SetGAIANameOfProfileAtIndex(index2, gaia_name); 326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) index1 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_1")); 327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) index2 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_2")); 328a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Since there is a GAIA name, we use that as a display name. 330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_TRUE(GetCache()->GetGAIANameOfProfileAtIndex(index1).empty()); 331a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(gaia_name, GetCache()->GetGAIANameOfProfileAtIndex(index2)); 332effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(gaia_name, GetCache()->GetNameOfProfileAtIndex(index2)); 333a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 334a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Don't use GAIA name as profile name. This re-sorts the cache. 335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::string16 custom_name(ASCIIToUTF16("Custom name")); 336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GetCache()->SetNameOfProfileAtIndex(index2, custom_name); 33703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetCache()->SetProfileIsUsingDefaultNameAtIndex(index2, false); 33803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) index1 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_1")); 340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) index2 = GetCache()->GetIndexOfProfileWithPath(GetProfilePath("path_2")); 341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 342effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EXPECT_EQ(custom_name, GetCache()->GetNameOfProfileAtIndex(index2)); 343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(gaia_name, GetCache()->GetGAIANameOfProfileAtIndex(index2)); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, GAIAPicture) { 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int kDefaultAvatarIndex = 0; 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int kOtherAvatarIndex = 1; 3496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const int kGaiaPictureSize = 256; // Standard size of a Gaia account picture. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 3512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_1"), ASCIIToUTF16("name_1"), 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::string16(), kDefaultAvatarIndex, std::string()); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 3542385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_2"), ASCIIToUTF16("name_2"), 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::string16(), kDefaultAvatarIndex, std::string()); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sanity check. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, GetCache()->GetGAIAPictureOfProfileAtIndex(0)); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, GetCache()->GetGAIAPictureOfProfileAtIndex(1)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetCache()->IsUsingGAIAPictureOfProfileAtIndex(0)); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetCache()->IsUsingGAIAPictureOfProfileAtIndex(1)); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The profile icon should be the default one. 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(GetCache()->ProfileIsUsingDefaultAvatarAtIndex(0)); 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(GetCache()->ProfileIsUsingDefaultAvatarAtIndex(1)); 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int default_avatar_id = 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::GetDefaultAvatarIconResourceIDAtIndex(kDefaultAvatarIndex); 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Image& default_avatar_image( 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(default_avatar_id)); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) default_avatar_image, GetCache()->GetAvatarIconOfProfileAtIndex(1))); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set GAIA picture. 3746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gfx::Image gaia_image(gfx::test::CreateImage( 3756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) kGaiaPictureSize, kGaiaPictureSize)); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetGAIAPictureOfProfileAtIndex(1, &gaia_image); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, GetCache()->GetGAIAPictureOfProfileAtIndex(0)); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_image, *GetCache()->GetGAIAPictureOfProfileAtIndex(1))); 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Since we're still using the default avatar, the GAIA image should be 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // preferred over the generic avatar image. 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(GetCache()->ProfileIsUsingDefaultAvatarAtIndex(1)); 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(GetCache()->IsUsingGAIAPictureOfProfileAtIndex(1)); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gaia_image, GetCache()->GetAvatarIconOfProfileAtIndex(1))); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 38703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Set a non-default avatar. This should be preferred over the GAIA image. 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) GetCache()->SetAvatarIconOfProfileAtIndex(1, kOtherAvatarIndex); 38903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetCache()->SetProfileIsUsingDefaultAvatarAtIndex(1, false); 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(GetCache()->ProfileIsUsingDefaultAvatarAtIndex(1)); 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(GetCache()->IsUsingGAIAPictureOfProfileAtIndex(1)); 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int other_avatar_id = 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::GetDefaultAvatarIconResourceIDAtIndex(kOtherAvatarIndex); 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::Image& other_avatar_image( 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(other_avatar_id)); 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) other_avatar_image, GetCache()->GetAvatarIconOfProfileAtIndex(1))); 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Explicitly setting the GAIA picture should make it preferred again. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetIsUsingGAIAPictureOfProfileAtIndex(1, true); 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(GetCache()->IsUsingGAIAPictureOfProfileAtIndex(1)); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_image, *GetCache()->GetGAIAPictureOfProfileAtIndex(1))); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_image, GetCache()->GetAvatarIconOfProfileAtIndex(1))); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Clearing the IsUsingGAIAPicture flag should result in the generic image 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // being used again. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetIsUsingGAIAPictureOfProfileAtIndex(1, false); 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(GetCache()->IsUsingGAIAPictureOfProfileAtIndex(1)); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_image, *GetCache()->GetGAIAPictureOfProfileAtIndex(1))); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) other_avatar_image, GetCache()->GetAvatarIconOfProfileAtIndex(1))); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, PersistGAIAPicture) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 4192385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("path_1"), ASCIIToUTF16("name_1"), 420a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Image gaia_image(gfx::test::CreateImage()); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver save_observer( 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_PROFILE_CACHE_PICTURE_SAVED, 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetGAIAPictureOfProfileAtIndex(0, &gaia_image); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_image, *GetCache()->GetGAIAPictureOfProfileAtIndex(0))); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the file to be written to disk then reset the cache. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) save_observer.Wait(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResetCache(); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to get the GAIA picture. This should return NULL until the read from 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // disk is done. 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WindowedNotificationObserver read_observer( 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, GetCache()->GetGAIAPictureOfProfileAtIndex(0)); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) read_observer.Wait(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gaia_image, *GetCache()->GetGAIAPictureOfProfileAtIndex(0))); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, SetSupervisedUserId) { 446a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) GetCache()->AddProfileToCache( 4472385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch GetProfilePath("test"), ASCIIToUTF16("Test"), 448a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), 0, std::string()); 449f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(GetCache()->ProfileIsSupervisedAtIndex(0)); 450a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetCache()->SetSupervisedUserIdOfProfileAtIndex(0, "TEST_ID"); 452f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(GetCache()->ProfileIsSupervisedAtIndex(0)); 453f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("TEST_ID", GetCache()->GetSupervisedUserIdOfProfileAtIndex(0)); 454a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 455a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ResetCache(); 456f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(GetCache()->ProfileIsSupervisedAtIndex(0)); 457a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetCache()->SetSupervisedUserIdOfProfileAtIndex(0, std::string()); 459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_FALSE(GetCache()->ProfileIsSupervisedAtIndex(0)); 460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ("", GetCache()->GetSupervisedUserIdOfProfileAtIndex(0)); 461a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 462a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, EmptyGAIAInfo) { 464a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = ASCIIToUTF16("name_1"); 465c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int id = profiles::GetDefaultAvatarIconResourceIDAtIndex(0); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Image& profile_image( 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageNamed(id)); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->AddProfileToCache( 470a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetProfilePath("path_1"), profile_name, base::string16(), 0, 471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set empty GAIA info. 474a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetCache()->SetGAIANameOfProfileAtIndex(0, base::string16()); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetGAIAPictureOfProfileAtIndex(0, NULL); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCache()->SetIsUsingGAIAPictureOfProfileAtIndex(0, true); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the profile name and picture are not empty. 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(profile_name, GetCache()->GetNameOfProfileAtIndex(0)); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(gfx::test::IsEqual( 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_image, GetCache()->GetAvatarIconOfProfileAtIndex(0))); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 484f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(ProfileInfoCacheTest, CreateSupervisedTestingProfile) { 485a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) testing_profile_manager_.CreateTestingProfile("default"); 486f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) base::string16 supervised_user_name = ASCIIToUTF16("Supervised User"); 487a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) testing_profile_manager_.CreateTestingProfile( 4882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch "test1", scoped_ptr<PrefServiceSyncable>(), 489f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) supervised_user_name, 0, "TEST_ID", TestingProfile::TestingFactories()); 490a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) for (size_t i = 0; i < GetCache()->GetNumberOfProfiles(); i++) { 491f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool is_supervised = 492f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetCache()->GetNameOfProfileAtIndex(i) == supervised_user_name; 493f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(is_supervised, GetCache()->ProfileIsSupervisedAtIndex(i)); 494f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string supervised_user_id = is_supervised ? "TEST_ID" : ""; 495f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(supervised_user_id, 496f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) GetCache()->GetSupervisedUserIdOfProfileAtIndex(i)); 497a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 4988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 499f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Supervised profiles have a custom theme, which needs to be deleted on the 500f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // FILE thread. Reset the profile manager now so everything is deleted while 501f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // we still have a FILE thread. 5028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL); 503a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 504a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 505d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)TEST_F(ProfileInfoCacheTest, AddStubProfile) { 506d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(0u, GetCache()->GetNumberOfProfiles()); 507d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 508d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Add some profiles with and without a '.' in their paths. 509d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const struct { 510d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const char* profile_path; 511d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const char* profile_name; 512d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } kTestCases[] = { 513d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "path.test0", "name_0" }, 514d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "path_test1", "name_1" }, 515d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "path.test2", "name_2" }, 516d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) { "path_test3", "name_3" }, 517d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) }; 518d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 519d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTestCases); ++i) { 520d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath profile_path = GetProfilePath(kTestCases[i].profile_path); 521a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 profile_name = ASCIIToUTF16(kTestCases[i].profile_name); 522d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 523a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetCache()->AddProfileToCache(profile_path, profile_name, base::string16(), 524a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) i, ""); 525d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 526d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(profile_path, GetCache()->GetPathOfProfileAtIndex(i)); 527d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(profile_name, GetCache()->GetNameOfProfileAtIndex(i)); 528d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 529d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 530d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_EQ(4U, GetCache()->GetNumberOfProfiles()); 531d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 532d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Check that the profiles can be extracted from the local state. 5335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<base::string16> names = ProfileInfoCache::GetProfileNames(); 534d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) for (size_t i = 0; i < 4; i++) 535d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_FALSE(names[i].empty()); 536d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 537d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// High res avatar downloading is only supported on desktop. 5396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if !defined(OS_ANDROID) && !defined(OS_IOS) && !defined(OS_CHROMEOS) 540010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)TEST_F(ProfileInfoCacheTest, DownloadHighResAvatarTest) { 5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess()); 542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 543010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(0U, GetCache()->GetNumberOfProfiles()); 544010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath path_1 = GetProfilePath("path_1"); 545010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetCache()->AddProfileToCache(path_1, ASCIIToUTF16("name_1"), 546010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::string16(), 0, std::string()); 547010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(1U, GetCache()->GetNumberOfProfiles()); 548010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 549010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // We haven't downloaded any high-res avatars yet. 550010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(0U, GetCache()->cached_avatar_images_.size()); 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // After adding a new profile, the download of high-res avatar will be 553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // triggered if the flag kNewAvatarMenu has been set. But the downloader 554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // won't ever call OnFetchComplete in the test. 555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1U, GetCache()->avatar_images_downloads_in_progress_.size()); 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 557010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(GetCache()->GetHighResAvatarOfProfileAtIndex(0)); 558010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 559010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Simulate downloading a high-res avatar. 560010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const size_t kIconIndex = 0; 561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ProfileAvatarDownloader avatar_downloader( 562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) kIconIndex, GetCache()->GetPathOfProfileAtIndex(0), GetCache()); 563010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 564010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels. 565010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SkBitmap bitmap; 566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bitmap.allocN32Pixels(2, 2); 567010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bitmap.eraseColor(SK_ColorGREEN); 568010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 569010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) avatar_downloader.OnFetchComplete( 570010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GURL("http://www.google.com/avatar.png"), &bitmap); 571010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 572010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::string file_name = 573010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) profiles::GetDefaultAvatarIconFileNameAtIndex(kIconIndex); 574010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 575010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The file should have been cached and saved. 576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1U, GetCache()->avatar_images_downloads_in_progress_.size()); 577010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(1U, GetCache()->cached_avatar_images_.size()); 578010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(GetCache()->GetHighResAvatarOfProfileAtIndex(0)); 579010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_EQ(GetCache()->cached_avatar_images_[file_name], 580010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetCache()->GetHighResAvatarOfProfileAtIndex(0)); 581010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 582010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Make sure everything has completed, and the file has been written to disk. 583010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 584010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 585010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Clean up. 586010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::FilePath icon_path = 587010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) profiles::GetPathOfHighResAvatarAtIndex(kIconIndex); 588010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_NE(std::string::npos, icon_path.MaybeAsASCII().find(file_name)); 589010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(base::PathExists(icon_path)); 590010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_TRUE(base::DeleteFile(icon_path, true)); 591010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) EXPECT_FALSE(base::PathExists(icon_path)); 592010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ProfileInfoCacheTest, MigrateLegacyProfileNamesWithNewAvatarMenu) { 5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switches::EnableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess()); 5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, GetCache()->GetNumberOfProfiles()); 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_1 = GetProfilePath("path_1"); 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_1, ASCIIToUTF16("Default Profile"), 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 0, std::string()); 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_2 = GetProfilePath("path_2"); 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_2, ASCIIToUTF16("First user"), 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 1, std::string()); 6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_3 = ASCIIToUTF16("Lemonade"); 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_3 = GetProfilePath("path_3"); 6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_3, name_3, 6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 2, std::string()); 6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_4 = ASCIIToUTF16("Batman"); 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_4 = GetProfilePath("path_4"); 6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_4, name_4, 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 3, std::string()); 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_5 = ASCIIToUTF16("Person 2"); 6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_5 = GetProfilePath("path_5"); 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_5, name_5, 6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 2, std::string()); 6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(5U, GetCache()->GetNumberOfProfiles()); 6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetCache(); 6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Legacy profile names like "Default Profile" and "First user" should be 6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // migrated to "Person %n" type names. 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ASCIIToUTF16("Person 1"), GetCache()->GetNameOfProfileAtIndex( 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_1))); 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ASCIIToUTF16("Person 3"), GetCache()->GetNameOfProfileAtIndex( 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_2))); 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Other profile names should not be migrated even if they're the old 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // default cartoon profile names. 6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_3, GetCache()->GetNameOfProfileAtIndex( 6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_3))); 6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_4, GetCache()->GetNameOfProfileAtIndex( 6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_4))); 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_5, GetCache()->GetNameOfProfileAtIndex( 6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_5))); 6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif 6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ProfileInfoCacheTest, 6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DontMigrateLegacyProfileNamesWithoutNewAvatarMenu) { 6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switches::DisableNewAvatarMenuForTesting(CommandLine::ForCurrentProcess()); 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, GetCache()->GetNumberOfProfiles()); 6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_1 = ASCIIToUTF16("Default Profile"); 6471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_1 = GetProfilePath("path_1"); 6481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_1, name_1, 6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 0, std::string()); 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_2 = ASCIIToUTF16("First user"); 6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_2 = GetProfilePath("path_2"); 6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_2, name_2, 6531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 1, std::string()); 6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_3 = ASCIIToUTF16("Lemonade"); 6551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_3 = GetProfilePath("path_3"); 6561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_3, name_3, 6571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 2, std::string()); 6581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16 name_4 = ASCIIToUTF16("Batman"); 6591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath path_4 = GetProfilePath("path_4"); 6601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->AddProfileToCache(path_4, name_4, 6611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::string16(), 3, std::string()); 6621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(4U, GetCache()->GetNumberOfProfiles()); 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ResetCache(); 6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Profile names should have been preserved. 6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_1, GetCache()->GetNameOfProfileAtIndex( 6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_1))); 6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_2, GetCache()->GetNameOfProfileAtIndex( 6701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_2))); 6711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_3, GetCache()->GetNameOfProfileAtIndex( 6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_3))); 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(name_4, GetCache()->GetNameOfProfileAtIndex( 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetCache()->GetIndexOfProfileWithPath(path_4))); 6751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 677