// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/sync/credential_cache_service_factory_win.h" #include "base/command_line.h" #include "base/memory/singleton.h" #include "base/win/windows_version.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_dependency_manager.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/signin/token_service_factory.h" #include "chrome/browser/sync/credential_cache_service_win.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/common/chrome_paths_internal.h" #include "chrome/common/chrome_switches.h" namespace syncer { // static CredentialCacheServiceFactory* CredentialCacheServiceFactory::GetInstance() { return Singleton::get(); } // static syncer::CredentialCacheService* CredentialCacheServiceFactory::GetForProfile( Profile* profile) { return static_cast( GetInstance()->GetServiceForProfile(profile, true)); } CredentialCacheServiceFactory::CredentialCacheServiceFactory() : ProfileKeyedServiceFactory("CredentialCacheService", ProfileDependencyManager::GetInstance()) { // TODO(rsimha): Uncomment this once it exists. // DependsOn(PrefServiceFactory::GetInstance()); DependsOn(ProfileSyncServiceFactory::GetInstance()); DependsOn(SigninManagerFactory::GetInstance()); DependsOn(TokenServiceFactory::GetInstance()); } CredentialCacheServiceFactory::~CredentialCacheServiceFactory() { } // static bool CredentialCacheServiceFactory::IsDefaultProfile(Profile* profile) { DCHECK(profile); FilePath default_user_data_dir; chrome::GetDefaultUserDataDirectory(&default_user_data_dir); return profile->GetPath() == ProfileManager::GetDefaultProfileDir(default_user_data_dir); } // static // TODO(rsimha): This is a test-only hook. Remove before shipping. // See http://crbug.com/144280. bool CredentialCacheServiceFactory::IsDefaultAlternateProfileForTest( Profile* profile) { DCHECK(profile); const CommandLine* command_line = CommandLine::ForCurrentProcess(); FilePath alternate_user_data_dir; chrome::GetAlternateUserDataDirectory(&alternate_user_data_dir); return profile->GetPath() == ProfileManager::GetDefaultProfileDir(alternate_user_data_dir); } bool CredentialCacheServiceFactory::ServiceIsCreatedWithProfile() const { return true; } ProfileKeyedService* CredentialCacheServiceFactory::BuildServiceInstanceFor( Profile* profile) const { // Only instantiate a CredentialCacheService object if we are running in the // default profile on Windows 8, and if credential caching is enabled. // TODO(rsimha): To allow for testing, start CredentialCacheService if we are // either in the default profile or the default alternate profile, so that // an instance of desktop chrome using the default metro directory can be // used for testing. See http://crbug.com/144280. const CommandLine* command_line = CommandLine::ForCurrentProcess(); if (base::win::GetVersion() >= base::win::VERSION_WIN8 && (IsDefaultProfile(profile) || IsDefaultAlternateProfileForTest(profile)) && command_line->HasSwitch(switches::kEnableSyncCredentialCaching)) { return new syncer::CredentialCacheService(profile); } return NULL; } } // namespace syncer