diff options
Diffstat (limited to 'chrome/browser')
46 files changed, 653 insertions, 366 deletions
diff --git a/chrome/browser/autofill/autofill_manager_unittest.cc b/chrome/browser/autofill/autofill_manager_unittest.cc index 3d1e400..522bc9d 100644 --- a/chrome/browser/autofill/autofill_manager_unittest.cc +++ b/chrome/browser/autofill/autofill_manager_unittest.cc @@ -67,7 +67,7 @@ class TestPersonalDataManager : public PersonalDataManager { } // Factory method for keyed service. PersonalDataManager is NULL for testing. - static ProfileKeyedService* Build(Profile* profile) { + static ProfileKeyedBase* Build(Profile* profile) { return NULL; } diff --git a/chrome/browser/autofill/autofill_metrics_unittest.cc b/chrome/browser/autofill/autofill_metrics_unittest.cc index b588c8c..ba2a6ae 100644 --- a/chrome/browser/autofill/autofill_metrics_unittest.cc +++ b/chrome/browser/autofill/autofill_metrics_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -85,11 +85,6 @@ class TestPersonalDataManager : public PersonalDataManager { CreateTestAutofillProfiles(&web_profiles_); } - // Factory method for keyed service. PersonalDataManager is NULL for testing. - static ProfileKeyedService* Build(Profile* profile) { - return NULL; - } - // Overridden to avoid a trip to the database. This should be a no-op except // for the side-effect of logging the profile count. virtual void LoadProfiles() OVERRIDE { @@ -297,7 +292,7 @@ void AutofillMetricsTest::SetUp() { Profile* profile = new TestingProfile(); browser_context_.reset(profile); PersonalDataManagerFactory::GetInstance()->SetTestingFactory( - profile, TestPersonalDataManager::Build); + profile, NULL); TabContentsWrapperTestHarness::SetUp(); autofill_manager_ = new TestAutofillManager(contents_wrapper(), diff --git a/chrome/browser/content_settings/content_settings_browsertest.cc b/chrome/browser/content_settings/content_settings_browsertest.cc index ff1e3a3a..12744ff 100644 --- a/chrome/browser/content_settings/content_settings_browsertest.cc +++ b/chrome/browser/content_settings/content_settings_browsertest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -21,7 +21,7 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, RedirectLoopCookies) { GURL test_url = test_server()->GetURL("files/redirect-loop.html"); - CookieSettings::GetForProfile(browser()->profile())-> + CookieSettings::Factory::GetForProfile(browser()->profile())-> SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), test_url); @@ -62,7 +62,7 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, RedirectCrossOrigin) { host_port.port())); GURL test_url = test_server()->GetURL("server-redirect?" + redirect); - CookieSettings::GetForProfile(browser()->profile())-> + CookieSettings::Factory::GetForProfile(browser()->profile())-> SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); ui_test_utils::NavigateToURL(browser(), test_url); diff --git a/chrome/browser/content_settings/cookie_settings.cc b/chrome/browser/content_settings/cookie_settings.cc index 6a18498..11aa2bc 100644 --- a/chrome/browser/content_settings/cookie_settings.cc +++ b/chrome/browser/content_settings/cookie_settings.cc @@ -43,47 +43,34 @@ bool IsAllowed(ContentSetting setting) { } // namespace -// |ProfileKeyedFactory| is the owner of the |ProfileKeyedService|s. This -// wrapper class allows others to hold shared pointers to CookieSettings. -class CookieSettingsWrapper : public ProfileKeyedService { - public: - explicit CookieSettingsWrapper(scoped_refptr<CookieSettings> cookie_settings) - : cookie_settings_(cookie_settings) {} - virtual ~CookieSettingsWrapper() {} - - CookieSettings* cookie_settings() { return cookie_settings_.get(); } - - private: - // ProfileKeyedService methods: - virtual void Shutdown() OVERRIDE { - cookie_settings_->ShutdownOnUIThread(); - } - - scoped_refptr<CookieSettings> cookie_settings_; -}; +// static +CookieSettings* CookieSettings::Factory::GetForProfile(Profile* profile) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + return static_cast<CookieSettings*>( + GetInstance()->GetBaseForProfile(profile, true)); +} // static CookieSettings::Factory* CookieSettings::Factory::GetInstance() { return Singleton<CookieSettings::Factory>::get(); } -CookieSettingsWrapper* CookieSettings::Factory::GetWrapperForProfile( - Profile* profile) { - return static_cast<CookieSettingsWrapper*>( - GetServiceForProfile(profile, true)); +CookieSettings::Factory::Factory() + : RefcountedProfileKeyedServiceFactory( + "CookieSettings", + ProfileDependencyManager::GetInstance()) { } -CookieSettings::Factory::Factory() - : ProfileKeyedServiceFactory("CookieSettings", - ProfileDependencyManager::GetInstance()) { +CookieSettings::Factory::~Factory() {} + +bool CookieSettings::Factory::ServiceRedirectedInIncognito() { + return true; } -ProfileKeyedService* CookieSettings::Factory::BuildServiceInstanceFor( - Profile* profile) const { - scoped_refptr<CookieSettings> cookie_settings = new CookieSettings( - profile->GetHostContentSettingsMap(), - profile->GetPrefs()); - return new CookieSettingsWrapper(cookie_settings); +RefcountedProfileKeyedService* +CookieSettings::Factory::BuildServiceInstanceFor(Profile* profile) const { + return new CookieSettings(profile->GetHostContentSettingsMap(), + profile->GetPrefs()); } CookieSettings::CookieSettings( @@ -107,15 +94,6 @@ CookieSettings::CookieSettings( CookieSettings::~CookieSettings() { } -// static -CookieSettings* CookieSettings::GetForProfile(Profile* profile) { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - CookieSettings* cookie_settings = - Factory::GetInstance()->GetWrapperForProfile(profile)->cookie_settings(); - DCHECK(cookie_settings); - return cookie_settings; -} - ContentSetting CookieSettings::GetDefaultCookieSetting(std::string* provider_id) const { return host_content_settings_map_->GetDefaultContentSetting( diff --git a/chrome/browser/content_settings/cookie_settings.h b/chrome/browser/content_settings/cookie_settings.h index 394d7b6..1c87c81 100644 --- a/chrome/browser/content_settings/cookie_settings.h +++ b/chrome/browser/content_settings/cookie_settings.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -9,12 +9,12 @@ #include <string> #include "base/compiler_specific.h" -#include "base/memory/ref_counted.h" #include "base/memory/singleton.h" #include "base/synchronization/lock.h" #include "chrome/browser/content_settings/host_content_settings_map.h" #include "chrome/browser/prefs/pref_change_registrar.h" -#include "chrome/browser/profiles/profile_keyed_service_factory.h" +#include "chrome/browser/profiles/refcounted_profile_keyed_service.h" +#include "chrome/browser/profiles/refcounted_profile_keyed_service_factory.h" #include "chrome/common/content_settings.h" #include "content/public/browser/notification_observer.h" @@ -30,7 +30,7 @@ class Profile; class CookieSettings : public content::NotificationObserver, - public base::RefCountedThreadSafe<CookieSettings> { + public RefcountedProfileKeyedService { public: CookieSettings( HostContentSettingsMap* host_content_settings_map, @@ -38,11 +38,6 @@ class CookieSettings virtual ~CookieSettings(); - // Returns the |CookieSettings| associated with the |profile|. - // - // This should only be called on the UI thread. - static CookieSettings* GetForProfile(Profile* profile); - // Returns the default content setting (CONTENT_SETTING_ALLOW, // CONTENT_SETTING_BLOCK, or CONTENT_SETTING_SESSION_ONLY) for cookies. If // |provider_id| is not NULL, the id of the provider which provided the @@ -106,7 +101,7 @@ class CookieSettings // Detaches the |CookieSettings| from all |Profile|-related objects like // |PrefService|. This methods needs to be called before destroying the // |Profile|. Afterwards, only const methods can be called. - void ShutdownOnUIThread(); + virtual void ShutdownOnUIThread() OVERRIDE; // A helper for applying third party cookie blocking rules. ContentSetting GetCookieSetting( @@ -117,21 +112,27 @@ class CookieSettings static void RegisterUserPrefs(PrefService* prefs); - class Factory : public ProfileKeyedServiceFactory { + class Factory : public RefcountedProfileKeyedServiceFactory { public: + // Returns the |CookieSettings| associated with the |profile|. + // + // This should only be called on the UI thread. + static CookieSettings* GetForProfile(Profile* profile); + static Factory* GetInstance(); - CookieSettingsWrapper* GetWrapperForProfile(Profile* profile); private: friend struct DefaultSingletonTraits<Factory>; Factory(); - virtual ~Factory() {} + virtual ~Factory(); // |ProfileKeyedServiceFactory| methods: - virtual ProfileKeyedService* BuildServiceInstanceFor( + virtual bool ServiceRedirectedInIncognito() OVERRIDE; + + // |RefcountedProfileKeyedServiceFactory| methods: + virtual RefcountedProfileKeyedService* BuildServiceInstanceFor( Profile* profile) const OVERRIDE; - virtual bool ServiceRedirectedInIncognito() OVERRIDE { return true; } }; private: diff --git a/chrome/browser/content_settings/cookie_settings_unittest.cc b/chrome/browser/content_settings/cookie_settings_unittest.cc index fe482d6..a7e6e30 100644 --- a/chrome/browser/content_settings/cookie_settings_unittest.cc +++ b/chrome/browser/content_settings/cookie_settings_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -42,7 +42,8 @@ class CookieSettingsTest : public testing::Test { TEST_F(CookieSettingsTest, CookiesBlockSingle) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kBlockedSite), ContentSettingsPattern::Wildcard(), @@ -53,7 +54,8 @@ TEST_F(CookieSettingsTest, CookiesBlockSingle) { TEST_F(CookieSettingsTest, CookiesBlockThirdParty) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); profile.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed( kBlockedSite, kFirstPartySite)); @@ -73,7 +75,8 @@ TEST_F(CookieSettingsTest, CookiesBlockThirdParty) { TEST_F(CookieSettingsTest, CookiesAllowThirdParty) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); EXPECT_TRUE(cookie_settings->IsReadingCookieAllowed( kBlockedSite, kFirstPartySite)); EXPECT_TRUE(cookie_settings->IsSettingCookieAllowed( @@ -83,7 +86,8 @@ TEST_F(CookieSettingsTest, CookiesAllowThirdParty) { TEST_F(CookieSettingsTest, CookiesExplicitBlockSingleThirdParty) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kBlockedSite), ContentSettingsPattern::Wildcard(), @@ -98,7 +102,8 @@ TEST_F(CookieSettingsTest, CookiesExplicitBlockSingleThirdParty) { TEST_F(CookieSettingsTest, CookiesExplicitSessionOnly) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kBlockedSite), ContentSettingsPattern::Wildcard(), @@ -119,7 +124,8 @@ TEST_F(CookieSettingsTest, CookiesExplicitSessionOnly) { TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedExplicitAllow) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kAllowedSite), ContentSettingsPattern::Wildcard(), @@ -146,7 +152,8 @@ TEST_F(CookieSettingsTest, CookiesThirdPartyBlockedExplicitAllow) { TEST_F(CookieSettingsTest, CookiesBlockEverything) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); EXPECT_FALSE(cookie_settings->IsReadingCookieAllowed( @@ -159,7 +166,8 @@ TEST_F(CookieSettingsTest, CookiesBlockEverything) { TEST_F(CookieSettingsTest, CookiesBlockEverythingExceptAllowed) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kAllowedSite), @@ -182,7 +190,8 @@ TEST_F(CookieSettingsTest, CookiesBlockEverythingExceptAllowed) { TEST_F(CookieSettingsTest, CookiesBlockSingleFirstParty) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kAllowedSite), ContentSettingsPattern::FromURL(kFirstPartySite), @@ -228,7 +237,8 @@ TEST_F(CookieSettingsTest, CookiesBlockSingleFirstParty) { TEST_F(CookieSettingsTest, ExtensionsRegularSettings) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetCookieSetting( ContentSettingsPattern::FromURL(kBlockedSite), ContentSettingsPattern::Wildcard(), @@ -241,7 +251,8 @@ TEST_F(CookieSettingsTest, ExtensionsRegularSettings) { TEST_F(CookieSettingsTest, ExtensionsOwnCookies) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); cookie_settings->SetDefaultCookieSetting(CONTENT_SETTING_BLOCK); // Extensions can always use cookies (and site data) in their own origin. @@ -251,7 +262,8 @@ TEST_F(CookieSettingsTest, ExtensionsOwnCookies) { TEST_F(CookieSettingsTest, ExtensionsThirdParty) { TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); profile.GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); // XHRs stemming from extensions are exempt from third-party cookie blocking diff --git a/chrome/browser/content_settings/host_content_settings_map_unittest.cc b/chrome/browser/content_settings/host_content_settings_map_unittest.cc index 51e923e..ac059af 100644 --- a/chrome/browser/content_settings/host_content_settings_map_unittest.cc +++ b/chrome/browser/content_settings/host_content_settings_map_unittest.cc @@ -399,7 +399,8 @@ TEST_F(HostContentSettingsMapTest, HostTrimEndingDotCheck) { TestingProfile profile; HostContentSettingsMap* host_content_settings_map = profile.GetHostContentSettingsMap(); - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); ContentSettingsPattern pattern = ContentSettingsPattern::FromString("[*.]example.com"); diff --git a/chrome/browser/cookies_tree_model_unittest.cc b/chrome/browser/cookies_tree_model_unittest.cc index 5d4dd6d..6dde8ea 100644 --- a/chrome/browser/cookies_tree_model_unittest.cc +++ b/chrome/browser/cookies_tree_model_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -952,7 +952,8 @@ TEST_F(CookiesTreeModelTest, ContentSettings) { TestingProfile profile; HostContentSettingsMap* content_settings = profile.GetHostContentSettingsMap(); - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); MockSettingsObserver observer; CookieTreeRootNode* root = diff --git a/chrome/browser/extensions/extension_content_settings_api.cc b/chrome/browser/extensions/extension_content_settings_api.cc index 730e8dd..d08b250 100644 --- a/chrome/browser/extensions/extension_content_settings_api.cc +++ b/chrome/browser/extensions/extension_content_settings_api.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -141,11 +141,11 @@ bool GetContentSettingFunction::RunImpl() { return false; } map = profile()->GetOffTheRecordProfile()->GetHostContentSettingsMap(); - cookie_settings = CookieSettings::GetForProfile( + cookie_settings = CookieSettings::Factory::GetForProfile( profile()->GetOffTheRecordProfile()); } else { map = profile()->GetHostContentSettingsMap(); - cookie_settings = CookieSettings::GetForProfile(profile()); + cookie_settings = CookieSettings::Factory::GetForProfile(profile()); } ContentSetting setting; diff --git a/chrome/browser/extensions/extension_content_settings_apitest.cc b/chrome/browser/extensions/extension_content_settings_apitest.cc index e0b7955..f7ad22b 100644 --- a/chrome/browser/extensions/extension_content_settings_apitest.cc +++ b/chrome/browser/extensions/extension_content_settings_apitest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -23,7 +23,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ContentSettings) { HostContentSettingsMap* map = browser()->profile()->GetHostContentSettingsMap(); CookieSettings* cookie_settings = - CookieSettings::GetForProfile(browser()->profile()); + CookieSettings::Factory::GetForProfile(browser()->profile()); // Check default content settings by using an unknown URL. GURL example_url("http://www.example.com"); diff --git a/chrome/browser/extensions/extension_special_storage_policy_unittest.cc b/chrome/browser/extensions/extension_special_storage_policy_unittest.cc index 5c62841..60ab2e3 100644 --- a/chrome/browser/extensions/extension_special_storage_policy_unittest.cc +++ b/chrome/browser/extensions/extension_special_storage_policy_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -224,7 +224,8 @@ TEST_F(ExtensionSpecialStoragePolicyTest, HasSessionOnlyOrigins) { content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop); TestingProfile profile; - CookieSettings* cookie_settings = CookieSettings::GetForProfile(&profile); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(&profile); scoped_refptr<ExtensionSpecialStoragePolicy> policy( new ExtensionSpecialStoragePolicy(cookie_settings)); diff --git a/chrome/browser/intents/register_intent_handler_infobar_delegate_unittest.cc b/chrome/browser/intents/register_intent_handler_infobar_delegate_unittest.cc index d308b73..15c2594 100644 --- a/chrome/browser/intents/register_intent_handler_infobar_delegate_unittest.cc +++ b/chrome/browser/intents/register_intent_handler_infobar_delegate_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -25,7 +25,7 @@ class MockWebIntentsRegistry : public WebIntentsRegistry { void(const webkit_glue::WebIntentServiceData&)); }; -ProfileKeyedService* BuildMockWebIntentsRegistry(Profile* profile) { +ProfileKeyedBase* BuildMockWebIntentsRegistry(Profile* profile) { return new MockWebIntentsRegistry; } diff --git a/chrome/browser/plugin_prefs.cc b/chrome/browser/plugin_prefs.cc index 51be80b..bd88413 100644 --- a/chrome/browser/plugin_prefs.cc +++ b/chrome/browser/plugin_prefs.cc @@ -62,7 +62,7 @@ PluginPrefs* PluginPrefs::GetForProfile(Profile* profile) { // static PluginPrefs* PluginPrefs::GetForTestingProfile(Profile* profile) { - ProfileKeyedService* wrapper = + ProfileKeyedBase* wrapper = PluginPrefsFactory::GetInstance()->SetTestingFactoryAndUse( profile, &PluginPrefsFactory::CreateWrapperForProfile); return static_cast<PluginPrefsWrapper*>(wrapper)->plugin_prefs(); diff --git a/chrome/browser/plugin_prefs_factory.cc b/chrome/browser/plugin_prefs_factory.cc index 588f974..8671a90 100644 --- a/chrome/browser/plugin_prefs_factory.cc +++ b/chrome/browser/plugin_prefs_factory.cc @@ -38,7 +38,7 @@ PluginPrefsWrapper* PluginPrefsFactory::GetWrapperForProfile( } // static -ProfileKeyedService* PluginPrefsFactory::CreateWrapperForProfile( +ProfileKeyedBase* PluginPrefsFactory::CreateWrapperForProfile( Profile* profile) { return GetInstance()->BuildServiceInstanceFor(profile); } diff --git a/chrome/browser/plugin_prefs_factory.h b/chrome/browser/plugin_prefs_factory.h index edb28a5..566f39b 100644 --- a/chrome/browser/plugin_prefs_factory.h +++ b/chrome/browser/plugin_prefs_factory.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -42,7 +42,7 @@ class PluginPrefsFactory : public ProfileKeyedServiceFactory { // Factory function for use with // ProfileKeyedServiceFactory::SetTestingFactory. - static ProfileKeyedService* CreateWrapperForProfile(Profile* profile); + static ProfileKeyedBase* CreateWrapperForProfile(Profile* profile); // Some unit tests that deal with PluginPrefs don't run with a Profile. Let // them still register their preferences. diff --git a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc index 7ba4efe..de1eb3c 100644 --- a/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc +++ b/chrome/browser/printing/cloud_print/cloud_print_proxy_service_unittest.cc @@ -421,7 +421,7 @@ TEST_F(CloudPrintProxyPolicyTest, prefs->GetString(prefs::kCloudPrintEmail)); } -ProfileKeyedService* TestCloudPrintProxyServiceFactory(Profile* profile) { +ProfileKeyedBase* TestCloudPrintProxyServiceFactory(Profile* profile) { TestCloudPrintProxyService* service = new TestCloudPrintProxyService(profile); service->GetMockServiceProcessControl()->SetConnectSuccessMockExpectations( diff --git a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc index a06c168..b567d76 100644 --- a/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc +++ b/chrome/browser/printing/cloud_print/test/cloud_print_proxy_process_browsertest.cc @@ -450,7 +450,7 @@ TEST_F(CloudPrintProxyPolicyStartupTest, StartAndShutdown) { ShutdownAndWaitForExitWithTimeout(handle); } -ProfileKeyedService* CloudPrintProxyServiceFactoryForPolicyTest( +ProfileKeyedBase* CloudPrintProxyServiceFactoryForPolicyTest( Profile* profile) { CloudPrintProxyService* service = new CloudPrintProxyService(profile); service->Initialize(); diff --git a/chrome/browser/profiles/profile_dependency_manager.cc b/chrome/browser/profiles/profile_dependency_manager.cc index 12344b7..00edb13 100644 --- a/chrome/browser/profiles/profile_dependency_manager.cc +++ b/chrome/browser/profiles/profile_dependency_manager.cc @@ -44,13 +44,13 @@ class Profile; void ProfileDependencyManager::AddComponent( - ProfileKeyedServiceFactory* component) { + ProfileKeyedBaseFactory* component) { all_components_.push_back(component); destruction_order_.clear(); } void ProfileDependencyManager::RemoveComponent( - ProfileKeyedServiceFactory* component) { + ProfileKeyedBaseFactory* component) { all_components_.erase(std::remove(all_components_.begin(), all_components_.end(), component), @@ -69,8 +69,8 @@ void ProfileDependencyManager::RemoveComponent( destruction_order_.clear(); } -void ProfileDependencyManager::AddEdge(ProfileKeyedServiceFactory* depended, - ProfileKeyedServiceFactory* dependee) { +void ProfileDependencyManager::AddEdge(ProfileKeyedBaseFactory* depended, + ProfileKeyedBaseFactory* dependee) { edges_.insert(std::make_pair(depended, dependee)); destruction_order_.clear(); } @@ -90,7 +90,7 @@ void ProfileDependencyManager::CreateProfileServices(Profile* profile, BuildDestructionOrder(profile); // Iterate in reverse destruction order for creation. - for (std::vector<ProfileKeyedServiceFactory*>::reverse_iterator rit = + for (std::vector<ProfileKeyedBaseFactory*>::reverse_iterator rit = destruction_order_.rbegin(); rit != destruction_order_.rend(); ++rit) { if (!profile->IsOffTheRecord()) { @@ -103,7 +103,7 @@ void ProfileDependencyManager::CreateProfileServices(Profile* profile, (*rit)->SetTestingFactory(profile, NULL); } else if ((*rit)->ServiceIsCreatedWithProfile()) { // Create the service. - (*rit)->GetServiceForProfile(profile, true); + (*rit)->GetBaseForProfile(profile, true); } } } @@ -112,7 +112,7 @@ void ProfileDependencyManager::DestroyProfileServices(Profile* profile) { if (destruction_order_.empty()) BuildDestructionOrder(profile); - for (std::vector<ProfileKeyedServiceFactory*>::const_iterator it = + for (std::vector<ProfileKeyedBaseFactory*>::const_iterator it = destruction_order_.begin(); it != destruction_order_.end(); ++it) { (*it)->ProfileShutdown(profile); } @@ -122,7 +122,7 @@ void ProfileDependencyManager::DestroyProfileServices(Profile* profile) { dead_profile_pointers_.insert(profile); #endif - for (std::vector<ProfileKeyedServiceFactory*>::const_iterator it = + for (std::vector<ProfileKeyedBaseFactory*>::const_iterator it = destruction_order_.begin(); it != destruction_order_.end(); ++it) { (*it)->ProfileDestroyed(profile); } @@ -204,12 +204,12 @@ void ProfileDependencyManager::BuildDestructionOrder(Profile* profile) { #endif // Step 1: Build a set of nodes with no incoming edges. - std::deque<ProfileKeyedServiceFactory*> queue; + std::deque<ProfileKeyedBaseFactory*> queue; std::copy(all_components_.begin(), all_components_.end(), std::back_inserter(queue)); - std::deque<ProfileKeyedServiceFactory*>::iterator queue_end = queue.end(); + std::deque<ProfileKeyedBaseFactory*>::iterator queue_end = queue.end(); for (EdgeMap::const_iterator it = edges_.begin(); it != edges_.end(); ++it) { queue_end = std::remove(queue.begin(), queue_end, it->second); @@ -217,10 +217,10 @@ void ProfileDependencyManager::BuildDestructionOrder(Profile* profile) { queue.erase(queue_end, queue.end()); // Step 2: Do the Kahn topological sort. - std::vector<ProfileKeyedServiceFactory*> output; + std::vector<ProfileKeyedBaseFactory*> output; EdgeMap edges(edges_); while (!queue.empty()) { - ProfileKeyedServiceFactory* node = queue.front(); + ProfileKeyedBaseFactory* node = queue.front(); queue.pop_front(); output.push_back(node); @@ -228,7 +228,7 @@ void ProfileDependencyManager::BuildDestructionOrder(Profile* profile) { edges.equal_range(node); EdgeMap::iterator it = range.first; while (it != range.second) { - ProfileKeyedServiceFactory* dest = it->second; + ProfileKeyedBaseFactory* dest = it->second; EdgeMap::iterator temp = it; it++; edges.erase(temp); @@ -260,14 +260,14 @@ std::string ProfileDependencyManager::DumpGraphvizDependency() { std::string result("digraph {\n"); // Make a copy of all components. - std::deque<ProfileKeyedServiceFactory*> components; + std::deque<ProfileKeyedBaseFactory*> components; std::copy(all_components_.begin(), all_components_.end(), std::back_inserter(components)); // State all dependencies and remove |second| so we don't generate an // implicit dependency on the Profile hard coded node. - std::deque<ProfileKeyedServiceFactory*>::iterator components_end = + std::deque<ProfileKeyedBaseFactory*>::iterator components_end = components.end(); result.append(" /* Dependencies */\n"); for (EdgeMap::const_iterator it = edges_.begin(); it != edges_.end(); ++it) { @@ -285,7 +285,7 @@ std::string ProfileDependencyManager::DumpGraphvizDependency() { // Every node that doesn't depend on anything else will implicitly depend on // the Profile. result.append("\n /* Toplevel attachments */\n"); - for (std::deque<ProfileKeyedServiceFactory*>::const_iterator it = + for (std::deque<ProfileKeyedBaseFactory*>::const_iterator it = components.begin(); it != components.end(); ++it) { result.append(" "); result.append((*it)->name()); diff --git a/chrome/browser/profiles/profile_dependency_manager.h b/chrome/browser/profiles/profile_dependency_manager.h index 3ad0634..56458367 100644 --- a/chrome/browser/profiles/profile_dependency_manager.h +++ b/chrome/browser/profiles/profile_dependency_manager.h @@ -16,26 +16,26 @@ #endif class Profile; -class ProfileKeyedServiceFactory; +class ProfileKeyedBaseFactory; // A singleton that listens for profile destruction notifications and -// rebroadcasts them to each ProfileKeyedServiceFactory in a safe order based +// rebroadcasts them to each ProfileKeyedBaseFactory in a safe order based // on the stated dependencies by each service. class ProfileDependencyManager { public: // Adds/Removes a component from our list of live components. Removing will // also remove live dependency links. - void AddComponent(ProfileKeyedServiceFactory* component); - void RemoveComponent(ProfileKeyedServiceFactory* component); + void AddComponent(ProfileKeyedBaseFactory* component); + void RemoveComponent(ProfileKeyedBaseFactory* component); // Adds a dependency between two factories. - void AddEdge(ProfileKeyedServiceFactory* depended, - ProfileKeyedServiceFactory* dependee); + void AddEdge(ProfileKeyedBaseFactory* depended, + ProfileKeyedBaseFactory* dependee); // Called by each Profile to alert us of its creation. Several services want // to be started when a profile is created. Testing configuration is also // done at this time. (If you want your ProfileKeyedService to be started - // with the Profile, override ProfileKeyedServiceFactory:: + // with the Profile, override ProfileKeyedBaseFactory:: // ServiceIsCreatedWithProfile() to return true.) void CreateProfileServices(Profile* profile, bool is_testing_profile); @@ -64,8 +64,8 @@ class ProfileDependencyManager { friend class ProfileDependencyManagerUnittests; friend struct DefaultSingletonTraits<ProfileDependencyManager>; - typedef std::multimap<ProfileKeyedServiceFactory*, - ProfileKeyedServiceFactory*> EdgeMap; + typedef std::multimap<ProfileKeyedBaseFactory*, + ProfileKeyedBaseFactory*> EdgeMap; ProfileDependencyManager(); virtual ~ProfileDependencyManager(); @@ -75,7 +75,7 @@ class ProfileDependencyManager { void AssertFactoriesBuilt(); // Using the dependency graph defined in |edges_|, fills |destruction_order_| - // so that Observe() can notify each ProfileKeyedServiceFactory in order. + // so that Observe() can notify each ProfileKeyedBaseFactory in order. void BuildDestructionOrder(Profile* profile); #ifndef NDEBUG @@ -83,11 +83,11 @@ class ProfileDependencyManager { std::string DumpGraphvizDependency(); #endif - std::vector<ProfileKeyedServiceFactory*> all_components_; + std::vector<ProfileKeyedBaseFactory*> all_components_; EdgeMap edges_; - std::vector<ProfileKeyedServiceFactory*> destruction_order_; + std::vector<ProfileKeyedBaseFactory*> destruction_order_; // Whether AssertFactoriesBuilt has been done. bool built_factories_; diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index ef54f1c..5900233 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc @@ -729,8 +729,8 @@ ExtensionEventRouter* ProfileImpl::GetExtensionEventRouter() { ExtensionSpecialStoragePolicy* ProfileImpl::GetExtensionSpecialStoragePolicy() { if (!extension_special_storage_policy_.get()) { - extension_special_storage_policy_ = - new ExtensionSpecialStoragePolicy(CookieSettings::GetForProfile(this)); + extension_special_storage_policy_ = new ExtensionSpecialStoragePolicy( + CookieSettings::Factory::GetForProfile(this)); } return extension_special_storage_policy_.get(); } diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc index 312f9d2..ea45c55 100644 --- a/chrome/browser/profiles/profile_io_data.cc +++ b/chrome/browser/profiles/profile_io_data.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -222,7 +222,7 @@ void ProfileIOData::InitializeOnUIThread(Profile* profile) { params->audio_manager = g_browser_process->audio_manager(); params->host_content_settings_map = profile->GetHostContentSettingsMap(); - params->cookie_settings = CookieSettings::GetForProfile(profile); + params->cookie_settings = CookieSettings::Factory::GetForProfile(profile); params->host_zoom_map = profile->GetHostZoomMap(); params->ssl_config_service = profile->GetSSLConfigService(); base::Callback<Profile*(void)> profile_getter = diff --git a/chrome/browser/profiles/profile_keyed_base.h b/chrome/browser/profiles/profile_keyed_base.h new file mode 100644 index 0000000..6a2f2d4 --- /dev/null +++ b/chrome/browser/profiles/profile_keyed_base.h @@ -0,0 +1,18 @@ +// 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. + +#ifndef CHROME_BROWSER_PROFILES_PROFILE_KEYED_BASE_H_ +#define CHROME_BROWSER_PROFILES_PROFILE_KEYED_BASE_H_ + +// A root class used by the ProfileKeyedBaseFactory. +// +// ProfileKeyedBaseFactory is a generalization of dependency and lifetime +// management, leaving the actual implementation of storage and what actually +// happens at lifetime events up to the factory type. +class ProfileKeyedBase { + public: + virtual ~ProfileKeyedBase() {} +}; + +#endif // CHROME_BROWSER_PROFILES_PROFILE_KEYED_BASE_H_ diff --git a/chrome/browser/profiles/profile_keyed_base_factory.cc b/chrome/browser/profiles/profile_keyed_base_factory.cc new file mode 100644 index 0000000..19a1383 --- /dev/null +++ b/chrome/browser/profiles/profile_keyed_base_factory.cc @@ -0,0 +1,154 @@ +// 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/profiles/profile_keyed_base_factory.h" + +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_dependency_manager.h" + +void ProfileKeyedBaseFactory::SetTestingFactory(Profile* profile, + FactoryFunction factory) { + // Destroying the profile may cause us to lose data about whether |profile| + // has our preferences registered on it (since the profile object itself + // isn't dead). See if we need to readd it once we've gone through normal + // destruction. + bool add_profile = registered_preferences_.find(profile) != + registered_preferences_.end(); + + // We have to go through the shutdown and destroy mechanisms because there + // are unit tests that create a service on a profile and then change the + // testing service mid-test. + ProfileShutdown(profile); + ProfileDestroyed(profile); + + if (add_profile) + registered_preferences_.insert(profile); + + factories_[profile] = factory; +} + +ProfileKeyedBaseFactory::ProfileKeyedBaseFactory( + const char* name, ProfileDependencyManager* manager) + : dependency_manager_(manager) +#ifndef NDEBUG + , service_name_(name) +#endif +{ + dependency_manager_->AddComponent(this); +} + +ProfileKeyedBaseFactory::~ProfileKeyedBaseFactory() { + dependency_manager_->RemoveComponent(this); +} + + +void ProfileKeyedBaseFactory::DependsOn(ProfileKeyedBaseFactory* rhs) { + dependency_manager_->AddEdge(rhs, this); +} + +void ProfileKeyedBaseFactory::RegisterUserPrefsOnProfile(Profile* profile) { + // Safe timing for pref registration is hard. Previously, we made Profile + // responsible for all pref registration on every service that used + // Profile. Now we don't and there are timing issues. + // + // With normal profiles, prefs can simply be registered at + // ProfileDependencyManager::CreateProfileServices time. With incognito + // profiles, we just never register since incognito profiles share the same + // pref services with their parent profiles. + // + // TestingProfiles throw a wrench into the mix, in that some tests will + // swap out the PrefService after we've registered user prefs on the original + // PrefService. Test code that does this is responsible for either manually + // invoking RegisterUserPrefs() on the appropriate ProfileKeyedServiceFactory + // associated with the prefs they need, or they can use SetTestingFactory() + // and create a service (since service creation with a factory method causes + // registration to happen at service creation time). + // + // Now that services are responsible for declaring their preferences, we have + // to enforce a uniquenes check here because some tests create one profile and + // multiple services of the same type attached to that profile (serially, not + // parallel) and we don't want to register multiple times on the same profile. + DCHECK(!profile->IsOffTheRecord()); + + std::set<Profile*>::iterator it = registered_preferences_.find(profile); + if (it == registered_preferences_.end()) { + RegisterUserPrefs(profile->GetPrefs()); + registered_preferences_.insert(profile); + } +} + +bool ProfileKeyedBaseFactory::ServiceRedirectedInIncognito() { + return false; +} + +bool ProfileKeyedBaseFactory::ServiceHasOwnInstanceInIncognito() { + return false; +} + +bool ProfileKeyedBaseFactory::ServiceIsCreatedWithProfile() { + return false; +} + +bool ProfileKeyedBaseFactory::ServiceIsNULLWhileTesting() { + return false; +} + +ProfileKeyedBase* ProfileKeyedBaseFactory::GetBaseForProfile( + Profile* profile, + bool create) { +#ifndef NDEBUG + dependency_manager_->AssertProfileWasntDestroyed(profile); +#endif + + // Possibly handle Incognito mode. + if (profile->IsOffTheRecord()) { + if (ServiceRedirectedInIncognito()) { + profile = profile->GetOriginalProfile(); + +#ifndef NDEBUG + dependency_manager_->AssertProfileWasntDestroyed(profile); +#endif + } else if (ServiceHasOwnInstanceInIncognito()) { + // No-op; the pointers are already set correctly. + } else { + return NULL; + } + } + + ProfileKeyedBase* service = NULL; + if (GetAssociation(profile, &service)) { + return service; + } else if (create) { + // not found but creation allowed + + // Check to see if we have a per-Profile factory + std::map<Profile*, FactoryFunction>::iterator jt = factories_.find(profile); + if (jt != factories_.end()) { + if (jt->second) { + if (!profile->IsOffTheRecord()) + RegisterUserPrefsOnProfile(profile); + service = jt->second(profile); + } else { + service = NULL; + } + } else { + service = BuildServiceInstanceFor(profile); + } + } else { + // not found, creation forbidden + return NULL; + } + + Associate(profile, service); + return service; +} + +void ProfileKeyedBaseFactory::ProfileDestroyed(Profile* profile) { + // For unit tests, we also remove the factory function both so we don't + // maintain a big map of dead pointers, but also since we may have a second + // object that lives at the same address (see other comments about unit tests + // in this file). + factories_.erase(profile); + registered_preferences_.erase(profile); +} diff --git a/chrome/browser/profiles/profile_keyed_base_factory.h b/chrome/browser/profiles/profile_keyed_base_factory.h new file mode 100644 index 0000000..3c4f092 --- /dev/null +++ b/chrome/browser/profiles/profile_keyed_base_factory.h @@ -0,0 +1,149 @@ +// 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. + +#ifndef CHROME_BROWSER_PROFILES_PROFILE_KEYED_BASE_FACTORY_H_ +#define CHROME_BROWSER_PROFILES_PROFILE_KEYED_BASE_FACTORY_H_ + +#include <map> +#include <set> + +class PrefService; +class Profile; +class ProfileKeyedBase; +class ProfileDependencyManager; + +// Base class for Factories that take a Profile object and return some service. +// +// Unless you're trying to make a new type of Factory, you probably don't want +// this class, but its subclasses: ProfileKeyedServiceFactory and +// RefcountedProfileKeyedServiceFactory. This object describes general profile +// dependency management; subclasses react to lifecycle events and implement +// memory management. +class ProfileKeyedBaseFactory { + public: + // A function that replaces the (possibly internal) object used by this + // factory. For the majority of cases, this is the object returned to users. + typedef ProfileKeyedBase* (*FactoryFunction)(Profile* profile); + + // Associates |factory| with |profile| so that |factory| is used to create + // the ProfileKeyedService when requested. + // + // |factory| can be NULL to signal that ProfileKeyedService should be NULL. A + // second call to SetTestingFactory() is allowed. If the FactoryFunction is + // changed AND an instance of the PKSF already exists for |profile|, that + // service is destroyed. + void SetTestingFactory(Profile* profile, FactoryFunction factory); + + // Registers preferences used in this service on the pref service of + // |profile|. This is the public interface and is safe to be called multiple + // times because testing code can have multiple services of the same type + // attached to a single |profile|. + void RegisterUserPrefsOnProfile(Profile* profile); + +#ifndef NDEBUG + // Returns our name. We don't keep track of this in release mode. + const char* name() const { return service_name_; } +#endif + + protected: + ProfileKeyedBaseFactory(const char* name, + ProfileDependencyManager* manager); + virtual ~ProfileKeyedBaseFactory(); + + // The main public interface for declaring dependencies between services + // created by factories. + void DependsOn(ProfileKeyedBaseFactory* rhs); + + // Interface for people building a concrete FooServiceFactory: -------------- + + // Register any user preferences on this service. This is called during + // CreateProfileService() since preferences are registered on a per Profile + // basis. + virtual void RegisterUserPrefs(PrefService* user_prefs) {} + + // Returns a new instance of the service, casted to our void* equivalent for + // our storage. + virtual ProfileKeyedBase* BuildServiceInstanceFor( + Profile* profile) const = 0; + + // By default, if we are asked for a service with an Incognito profile, we + // pass back NULL. To redirect to the Incognito's original profile or to + // create another instance, even for Incognito windows, override one of the + // following methods: + virtual bool ServiceRedirectedInIncognito(); + virtual bool ServiceHasOwnInstanceInIncognito(); + + // By default, we create instances of a service lazily and wait until + // GetForProfile() is called on our subclass. Some services need to be + // created as soon as the Profile has been brought up. + virtual bool ServiceIsCreatedWithProfile(); + + // By default, TestingProfiles will be treated like normal profiles. You can + // override this so that by default, the service associated with the + // TestingProfile is NULL. (This is just a shortcut around + // SetTestingFactory() to make sure our profiles don't directly refer to the + // services they use.) + virtual bool ServiceIsNULLWhileTesting(); + + // Interface for people building a type of ProfileKeyedFactory: ------------- + + // Common implementation that maps |profile| to some object. Deals with + // incognito profiles per subclass instructions with + // ServiceRedirectedInIncognito() and ServiceHasOwnInstanceInIncognito(). + // If |create| is true, the service will be created using + // BuildServiceInstanceFor() if it doesn't already exist. + virtual ProfileKeyedBase* GetBaseForProfile(Profile* profile, + bool create); + + // The base factory is not responsible for storage; the derived factory type + // maintains storage and reacts to lifecycle events. + virtual void Associate(Profile* profile, ProfileKeyedBase* base) = 0; + + // Returns whether there is an object associated with |profile|. If |out| is + // non-NULL, returns said object. + virtual bool GetAssociation(Profile* profile, + ProfileKeyedBase** out) const = 0; + + // A helper object actually listens for notifications about Profile + // destruction, calculates the order in which things are destroyed and then + // does a two pass shutdown. + // + // It is up to the individual factory types to determine what this two pass + // shutdown means. The general framework guarantees the following: + // + // - Each ProfileShutdown() is called in dependency order (and you may reach + // out to other services during this phase). + // + // - Each ProfileDestroyed() is called in dependency order. We will + // NOTREACHED() if you attempt to GetForProfile() any other service. You + // should delete/deref/do other final memory management things during this + // phase. You must also call the base class method as the last thing you + // do. + virtual void ProfileShutdown(Profile* profile) = 0; + virtual void ProfileDestroyed(Profile* profile); + + private: + friend class ProfileDependencyManager; + friend class ProfileDependencyManagerUnittests; + + // Which ProfileDependencyManager we should communicate with. In real code, + // this will always be ProfileDependencyManager::GetInstance(), but unit + // tests will want to use their own copy. + ProfileDependencyManager* dependency_manager_; + + // Profiles that have this service's preferences registered on them. + std::set<Profile*> registered_preferences_; + + // The mapping between a Profile and its overridden FactoryFunction. + std::map<Profile*, FactoryFunction> factories_; + +#if !defined(NDEBUG) + // A static string passed in to our constructor. Should be unique across all + // services. This is used only for debugging in debug mode. (We can print + // pretty graphs with GraphViz with this information.) + const char* service_name_; +#endif +}; + +#endif // CHROME_BROWSER_PROFILES_PROFILE_KEYED_BASE_FACTORY_H_ diff --git a/chrome/browser/profiles/profile_keyed_service.h b/chrome/browser/profiles/profile_keyed_service.h index f03e186..0a39612 100644 --- a/chrome/browser/profiles/profile_keyed_service.h +++ b/chrome/browser/profiles/profile_keyed_service.h @@ -1,10 +1,12 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. #ifndef CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_H_ #define CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_H_ +#include "chrome/browser/profiles/profile_keyed_base.h" + // Base class for all ProfileKeyedServices to allow for correct destruction // order. // @@ -13,7 +15,7 @@ // all services will need this, so there's a default implementation. Only once // every system has been given a chance to drop references do we start deleting // objects. -class ProfileKeyedService { +class ProfileKeyedService : public ProfileKeyedBase { public: // The first pass is to call Shutdown on a ProfileKeyedService. virtual void Shutdown() {} @@ -23,4 +25,3 @@ class ProfileKeyedService { }; #endif // CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_H_ - diff --git a/chrome/browser/profiles/profile_keyed_service_factory.cc b/chrome/browser/profiles/profile_keyed_service_factory.cc index 07a6d6d..e2e6fcf 100644 --- a/chrome/browser/profiles/profile_keyed_service_factory.cc +++ b/chrome/browser/profiles/profile_keyed_service_factory.cc @@ -11,27 +11,6 @@ #include "chrome/browser/profiles/profile_dependency_manager.h" #include "chrome/browser/profiles/profile_keyed_service.h" -void ProfileKeyedServiceFactory::SetTestingFactory(Profile* profile, - FactoryFunction factory) { - // Destroying the profile may cause us to lose data about whether |profile| - // has our preferences registered on it (since the profile object itself - // isn't dead). See if we need to readd it once we've gone through normal - // destruction. - bool add_profile = registered_preferences_.find(profile) != - registered_preferences_.end(); - - // We have to go through the shutdown and destroy mechanisms because there - // are unit tests that create a service on a profile and then change the - // testing service mid-test. - ProfileShutdown(profile); - ProfileDestroyed(profile); - - if (add_profile) - registered_preferences_.insert(profile); - - factories_[profile] = factory; -} - ProfileKeyedService* ProfileKeyedServiceFactory::SetTestingFactoryAndUse( Profile* profile, FactoryFunction factory) { @@ -40,129 +19,40 @@ ProfileKeyedService* ProfileKeyedServiceFactory::SetTestingFactoryAndUse( return GetServiceForProfile(profile, true); } -void ProfileKeyedServiceFactory::RegisterUserPrefsOnProfile(Profile* profile) { - // Safe timing for pref registration is hard. Previously, we made Profile - // responsible for all pref registration on every service that used - // Profile. Now we don't and there are timing issues. - // - // With normal profiles, prefs can simply be registered at - // ProfileDependencyManager::CreateProfileServices time. With incognito - // profiles, we just never register since incognito profiles share the same - // pref services with their parent profiles. - // - // TestingProfiles throw a wrench into the mix, in that some tests will - // swap out the PrefService after we've registered user prefs on the original - // PrefService. Test code that does this is responsible for either manually - // invoking RegisterUserPrefs() on the appropriate ProfileKeyedServiceFactory - // associated with the prefs they need, or they can use SetTestingFactory() - // and create a service (since service creation with a factory method causes - // registration to happen at service creation time). - // - // Now that services are responsible for declaring their preferences, we have - // to enforce a uniquenes check here because some tests create one profile and - // multiple services of the same type attached to that profile (serially, not - // parallel) and we don't want to register multiple times on the same profile. - DCHECK(!profile->IsOffTheRecord()); - - std::set<Profile*>::iterator it = registered_preferences_.find(profile); - if (it == registered_preferences_.end()) { - RegisterUserPrefs(profile->GetPrefs()); - registered_preferences_.insert(profile); - } -} - ProfileKeyedServiceFactory::ProfileKeyedServiceFactory( const char* name, ProfileDependencyManager* manager) - : dependency_manager_(manager) -#ifndef NDEBUG - , service_name_(name) -#endif -{ - dependency_manager_->AddComponent(this); + : ProfileKeyedBaseFactory(name, manager) { } ProfileKeyedServiceFactory::~ProfileKeyedServiceFactory() { - dependency_manager_->RemoveComponent(this); DCHECK(mapping_.empty()); } ProfileKeyedService* ProfileKeyedServiceFactory::GetServiceForProfile( Profile* profile, bool create) { -#ifndef NDEBUG - dependency_manager_->AssertProfileWasntDestroyed(profile); -#endif - - // Possibly handle Incognito mode. - if (profile->IsOffTheRecord()) { - if (ServiceRedirectedInIncognito()) { - profile = profile->GetOriginalProfile(); - -#ifndef NDEBUG - dependency_manager_->AssertProfileWasntDestroyed(profile); -#endif - } else if (ServiceHasOwnInstanceInIncognito()) { - // No-op; the pointers are already set correctly. - } else { - return NULL; - } - } - - ProfileKeyedService* service; - - std::map<Profile*, ProfileKeyedService*>::iterator it = - mapping_.find(profile); - if (it != mapping_.end()) { - return it->second; - } else if (create) { - // not found but creation allowed - - // Check to see if we have a per-Profile factory - std::map<Profile*, FactoryFunction>::iterator jt = factories_.find(profile); - if (jt != factories_.end()) { - if (jt->second) { - if (!profile->IsOffTheRecord()) - RegisterUserPrefsOnProfile(profile); - service = jt->second(profile); - } else { - service = NULL; - } - } else { - service = BuildServiceInstanceFor(profile); - } - } else { - // not found, creation forbidden - return NULL; - } - - Associate(profile, service); - return service; -} - -void ProfileKeyedServiceFactory::DependsOn(ProfileKeyedServiceFactory* rhs) { - dependency_manager_->AddEdge(rhs, this); + return static_cast<ProfileKeyedService*>(GetBaseForProfile(profile, create)); } void ProfileKeyedServiceFactory::Associate(Profile* profile, - ProfileKeyedService* service) { + ProfileKeyedBase* service) { DCHECK(mapping_.find(profile) == mapping_.end()); - mapping_.insert(std::make_pair(profile, service)); -} - -bool ProfileKeyedServiceFactory::ServiceRedirectedInIncognito() { - return false; + mapping_.insert(std::make_pair( + profile, static_cast<ProfileKeyedService*>(service))); } -bool ProfileKeyedServiceFactory::ServiceHasOwnInstanceInIncognito() { - return false; -} - -bool ProfileKeyedServiceFactory::ServiceIsCreatedWithProfile() { - return false; -} - -bool ProfileKeyedServiceFactory::ServiceIsNULLWhileTesting() { - return false; +bool ProfileKeyedServiceFactory::GetAssociation( + Profile* profile, + ProfileKeyedBase** out) const { + bool found = false; + std::map<Profile*, ProfileKeyedService*>::const_iterator it = + mapping_.find(profile); + if (it != mapping_.end()) { + found = true; + if (out) + *out = it->second; + } + return found; } void ProfileKeyedServiceFactory::ProfileShutdown(Profile* profile) { @@ -180,10 +70,5 @@ void ProfileKeyedServiceFactory::ProfileDestroyed(Profile* profile) { mapping_.erase(it); } - // For unit tests, we also remove the factory function both so we don't - // maintain a big map of dead pointers, but also since we may have a second - // object that lives at the same address (see other comments about unit tests - // in this file). - factories_.erase(profile); - registered_preferences_.erase(profile); + ProfileKeyedBaseFactory::ProfileDestroyed(profile); } diff --git a/chrome/browser/profiles/profile_keyed_service_factory.h b/chrome/browser/profiles/profile_keyed_service_factory.h index 30c99c1..3aa58ee 100644 --- a/chrome/browser/profiles/profile_keyed_service_factory.h +++ b/chrome/browser/profiles/profile_keyed_service_factory.h @@ -6,9 +6,11 @@ #define CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_FACTORY_H_ #include <map> -#include <set> -class PrefService; +#include "base/compiler_specific.h" +#include "chrome/browser/profiles/profile_keyed_base_factory.h" +#include "chrome/browser/profiles/profile_keyed_service.h" + class Profile; class ProfileDependencyManager; class ProfileKeyedService; @@ -21,36 +23,14 @@ class ProfileKeyedService; // We do this because services depend on each other and we need to control // shutdown/destruction order. In each derived classes' constructors, the // implementors must explicitly state which services are depended on. -class ProfileKeyedServiceFactory { +class ProfileKeyedServiceFactory : public ProfileKeyedBaseFactory { public: - typedef ProfileKeyedService* (*FactoryFunction)(Profile* profile); - - // Associates |factory| with |profile| so that |factory| is used to create - // the ProfileKeyedService when requested. - // - // |factory| can be NULL to signal that ProfileKeyedService should be NULL. A - // second call to SetTestingFactory() is allowed. If the FactoryFunction is - // changed AND an instance of the PKSF already exists for |profile|, that - // service is destroyed. - void SetTestingFactory(Profile* profile, FactoryFunction factory); - // Associates |factory| with |profile| and immediately returns the created // ProfileKeyedService. Since the factory will be used immediately, it may // not be NULL; ProfileKeyedService* SetTestingFactoryAndUse(Profile* profile, FactoryFunction factory); - // Registers preferences used in this service on the pref service of - // |profile|. This is the public interface and is safe to be called multiple - // times because testing code can have multiple services of the same type - // attached to a single |profile|. - void RegisterUserPrefsOnProfile(Profile* profile); - -#ifndef NDEBUG - // Returns our name. We don't keep track of this in release mode. - const char* name() const { return service_name_; } -#endif - protected: // ProfileKeyedServiceFactories must communicate with a // ProfileDependencyManager. For all non-test code, write your subclass @@ -61,8 +41,8 @@ class ProfileKeyedServiceFactory { // "MyService", // ProfileDependencyManager::GetInstance()) // {} - explicit ProfileKeyedServiceFactory(const char* name, - ProfileDependencyManager* manager); + ProfileKeyedServiceFactory(const char* name, + ProfileDependencyManager* manager); virtual ~ProfileKeyedServiceFactory(); // Common implementation that maps |profile| to some service object. Deals @@ -72,41 +52,17 @@ class ProfileKeyedServiceFactory { // BuildServiceInstanceFor() if it doesn't already exist. ProfileKeyedService* GetServiceForProfile(Profile* profile, bool create); - // The main public interface for declaring dependencies between services - // created by factories. - void DependsOn(ProfileKeyedServiceFactory* rhs); - - // Maps |profile| to |provider| with debug checks to prevent duplication. - void Associate(Profile* profile, ProfileKeyedService* service); - - // Returns a new instance of the service, casted to void* for our common - // storage. + // All subclasses of ProfileKeyedServiceFactory must return a + // ProfileKeyedService instead of just a ProfileKeyedBase. virtual ProfileKeyedService* BuildServiceInstanceFor( Profile* profile) const = 0; - // Register any user preferences on this service. This is called during - // CreateProfileService() since preferences are registered on a per Profile - // basis. - virtual void RegisterUserPrefs(PrefService* user_prefs) {} - - // By default, if we are asked for a service with an Incognito profile, we - // pass back NULL. To redirect to the Incognito's original profile or to - // create another instance, even for Incognito windows, override one of the - // following methods: - virtual bool ServiceRedirectedInIncognito(); - virtual bool ServiceHasOwnInstanceInIncognito(); - - // By default, we create instances of a service lazily and wait until - // GetForProfile() is called on our subclass. Some services need to be - // created as soon as the Profile has been brought up. - virtual bool ServiceIsCreatedWithProfile(); + // Maps |profile| to |provider| with debug checks to prevent duplication. + virtual void Associate(Profile* profile, ProfileKeyedBase* base) OVERRIDE; - // By default, TestingProfiles will be treated like normal profiles. You can - // override this so that by default, the service associated with the - // TestingProfile is NULL. (This is just a shortcut around - // SetTestingFactory() to make sure our profiles don't directly refer to the - // services they use.) - virtual bool ServiceIsNULLWhileTesting(); + // Returns the previously associated |base| for |profile|, or NULL. + virtual bool GetAssociation(Profile* profile, + ProfileKeyedBase** out) const OVERRIDE; // A helper object actually listens for notifications about Profile // destruction, calculates the order in which things are destroyed and then @@ -119,8 +75,8 @@ class ProfileKeyedServiceFactory { // // Secondly, ProfileDestroyed() is called on every ServiceFactory and the // default implementation removes it from |mapping_| and deletes the pointer. - virtual void ProfileShutdown(Profile* profile); - virtual void ProfileDestroyed(Profile* profile); + virtual void ProfileShutdown(Profile* profile) OVERRIDE; + virtual void ProfileDestroyed(Profile* profile) OVERRIDE; private: friend class ProfileDependencyManager; @@ -128,24 +84,6 @@ class ProfileKeyedServiceFactory { // The mapping between a Profile and its service. std::map<Profile*, ProfileKeyedService*> mapping_; - - // The mapping between a Profile and its overridden FactoryFunction. - std::map<Profile*, FactoryFunction> factories_; - - // Profiles that have this service's preferences registered on them. - std::set<Profile*> registered_preferences_; - - // Which ProfileDependencyManager we should communicate with. In real code, - // this will always be ProfileDependencyManager::GetInstance(), but unit - // tests will want to use their own copy. - ProfileDependencyManager* dependency_manager_; - -#if !defined(NDEBUG) - // A static string passed in to our constructor. Should be unique across all - // services. This is used only for debugging in debug mode. (We can print - // pretty graphs with GraphViz with this information.) - const char* service_name_; -#endif }; #endif // CHROME_BROWSER_PROFILES_PROFILE_KEYED_SERVICE_FACTORY_H_ diff --git a/chrome/browser/profiles/refcounted_profile_keyed_service.cc b/chrome/browser/profiles/refcounted_profile_keyed_service.cc new file mode 100644 index 0000000..b9e757c --- /dev/null +++ b/chrome/browser/profiles/refcounted_profile_keyed_service.cc @@ -0,0 +1,8 @@ +// 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/profiles/refcounted_profile_keyed_service.h" + +RefcountedProfileKeyedService::~RefcountedProfileKeyedService() {} + diff --git a/chrome/browser/profiles/refcounted_profile_keyed_service.h b/chrome/browser/profiles/refcounted_profile_keyed_service.h new file mode 100644 index 0000000..562e113 --- /dev/null +++ b/chrome/browser/profiles/refcounted_profile_keyed_service.h @@ -0,0 +1,33 @@ +// 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. + +#ifndef CHROME_BROWSER_PROFILES_REFCOUNTED_PROFILE_KEYED_SERVICE_H_ +#define CHROME_BROWSER_PROFILES_REFCOUNTED_PROFILE_KEYED_SERVICE_H_ + +#include "base/memory/ref_counted.h" +#include "chrome/browser/profiles/profile_keyed_base.h" + +// Base class for refcounted objects that hang off the Profile. +// +// The two pass shutdown described in ProfileKeyedService works a bit +// differently because there could be outstanding references on other +// threads. ShutdownOnUIThread() will be called on the UI thread, and then the +// destructor will run when the last reference is dropped, which may or may not +// be after the corresponding Profile has been destroyed. +class RefcountedProfileKeyedService + : public ProfileKeyedBase, + public base::RefCountedThreadSafe<RefcountedProfileKeyedService> { + public: + // Unlike ProfileKeyedService, ShutdownOnUI is not optional. You must do + // something to drop references during the first pass Shutdown() because this + // is the only point where you are guaranteed that something is running on + // the UI thread. The PKSF framework will ensure that this is only called on + // the UI thread; you do not need to check for that yourself. + virtual void ShutdownOnUIThread() = 0; + + // This second pass can happen anywhere. + virtual ~RefcountedProfileKeyedService(); +}; + +#endif // CHROME_BROWSER_PROFILES_REFCOUNTED_PROFILE_KEYED_SERVICE_H_ diff --git a/chrome/browser/profiles/refcounted_profile_keyed_service_factory.cc b/chrome/browser/profiles/refcounted_profile_keyed_service_factory.cc new file mode 100644 index 0000000..56a273a --- /dev/null +++ b/chrome/browser/profiles/refcounted_profile_keyed_service_factory.cc @@ -0,0 +1,60 @@ +// 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/profiles/refcounted_profile_keyed_service_factory.h" + +#include "chrome/browser/profiles/profile_keyed_service.h" +#include "chrome/browser/profiles/refcounted_profile_keyed_service.h" +#include "content/public/browser/browser_thread.h" + +using content::BrowserThread; + +RefcountedProfileKeyedServiceFactory::RefcountedProfileKeyedServiceFactory( + const char* name, + ProfileDependencyManager* manager) + : ProfileKeyedBaseFactory(name, manager) { +} + +RefcountedProfileKeyedServiceFactory::~RefcountedProfileKeyedServiceFactory() { + DCHECK(mapping_.empty()); +} + +void RefcountedProfileKeyedServiceFactory::Associate(Profile* profile, + ProfileKeyedBase* base) { + DCHECK(mapping_.find(profile) == mapping_.end()); + mapping_.insert(std::make_pair( + profile, make_scoped_refptr( + static_cast<RefcountedProfileKeyedService*>(base)))); +} + +bool RefcountedProfileKeyedServiceFactory::GetAssociation( + Profile* profile, + ProfileKeyedBase** out) const { + bool found = false; + RefCountedStorage::const_iterator it = mapping_.find(profile); + if (it != mapping_.end()) { + found = true; + + if (out) + *out = it->second.get(); + } + return found; +} + +void RefcountedProfileKeyedServiceFactory::ProfileShutdown(Profile* profile) { + RefCountedStorage::iterator it = mapping_.find(profile); + if (it != mapping_.end() && it->second) + it->second->ShutdownOnUIThread(); +} + +void RefcountedProfileKeyedServiceFactory::ProfileDestroyed(Profile* profile) { + RefCountedStorage::iterator it = mapping_.find(profile); + if (it != mapping_.end()) { + // We "merely" drop our reference to the service. Hopefully this will cause + // the service to be destroyed. If not, oh well. + mapping_.erase(it); + } + + ProfileKeyedBaseFactory::ProfileDestroyed(profile); +} diff --git a/chrome/browser/profiles/refcounted_profile_keyed_service_factory.h b/chrome/browser/profiles/refcounted_profile_keyed_service_factory.h new file mode 100644 index 0000000..93e1d47 --- /dev/null +++ b/chrome/browser/profiles/refcounted_profile_keyed_service_factory.h @@ -0,0 +1,51 @@ +// 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. + +#ifndef CHROME_BROWSER_PROFILES_REFCOUNTED_PROFILE_KEYED_SERVICE_FACTORY_H_ +#define CHROME_BROWSER_PROFILES_REFCOUNTED_PROFILE_KEYED_SERVICE_FACTORY_H_ + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "base/memory/ref_counted.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" +#include "chrome/browser/profiles/refcounted_profile_keyed_service.h" + +class Profile; +class RefcountedProfileKeyedService; + +// A specialized ProfileKeyedServiceFactory that manages a +// RefcountedThreadSafe<>. +// +// Implementers of RefcountedProfileKeyedService should note that we guarantee +// that ShutdownOnUIThread() is called on the UI thread, but actual object +// destruction can happen anywhere. +class RefcountedProfileKeyedServiceFactory : public ProfileKeyedBaseFactory { + protected: + RefcountedProfileKeyedServiceFactory(const char* name, + ProfileDependencyManager* manager); + virtual ~RefcountedProfileKeyedServiceFactory(); + + // All subclasses of RefcountedProfileKeyedServiceFactory must return a + // RefcountedProfileKeyedService instead of just a ProfileKeyedBase. + virtual RefcountedProfileKeyedService* BuildServiceInstanceFor( + Profile* profile) const = 0; + + virtual void Associate(Profile* profile, + ProfileKeyedBase* base) OVERRIDE; + virtual bool GetAssociation(Profile* profile, + ProfileKeyedBase** out) const OVERRIDE; + virtual void ProfileShutdown(Profile* profile) OVERRIDE; + virtual void ProfileDestroyed(Profile* profile) OVERRIDE; + + private: + typedef std::map<Profile*, scoped_refptr<RefcountedProfileKeyedService> > + RefCountedStorage; + + // The mapping between a Profile and its refcounted service. + RefCountedStorage mapping_; + + DISALLOW_COPY_AND_ASSIGN(RefcountedProfileKeyedServiceFactory); +}; + +#endif // CHROME_BROWSER_PROFILES_REFCOUNTED_PROFILE_KEYED_SERVICE_FACTORY_H_ diff --git a/chrome/browser/protector/mock_protector_service.cc b/chrome/browser/protector/mock_protector_service.cc index a8caacb..971ea28 100644 --- a/chrome/browser/protector/mock_protector_service.cc +++ b/chrome/browser/protector/mock_protector_service.cc @@ -11,7 +11,7 @@ namespace protector { namespace { -ProfileKeyedService* BuildMockProtectorService(Profile* profile) { +ProfileKeyedBase* BuildMockProtectorService(Profile* profile) { return new MockProtectorService(profile); } diff --git a/chrome/browser/renderer_host/chrome_render_message_filter.cc b/chrome/browser/renderer_host/chrome_render_message_filter.cc index 6e4ff09..5dff4e0 100644 --- a/chrome/browser/renderer_host/chrome_render_message_filter.cc +++ b/chrome/browser/renderer_host/chrome_render_message_filter.cc @@ -55,7 +55,7 @@ ChromeRenderMessageFilter::ChromeRenderMessageFilter( profile_(profile), request_context_(request_context), extension_info_map_(profile->GetExtensionInfoMap()), - cookie_settings_(CookieSettings::GetForProfile(profile)), + cookie_settings_(CookieSettings::Factory::GetForProfile(profile)), weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { } diff --git a/chrome/browser/search_engines/template_url_service_test_util.cc b/chrome/browser/search_engines/template_url_service_test_util.cc index 098e50c..732fdbc 100644 --- a/chrome/browser/search_engines/template_url_service_test_util.cc +++ b/chrome/browser/search_engines/template_url_service_test_util.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -75,7 +75,7 @@ class TemplateURLServiceTestingProfile : public TestingProfile { // SetKeywordSearchTermsForURL. class TestingTemplateURLService : public TemplateURLService { public: - static ProfileKeyedService* Build(Profile* profile) { + static ProfileKeyedBase* Build(Profile* profile) { return new TestingTemplateURLService(profile); } diff --git a/chrome/browser/signin/signin_manager_fake.cc b/chrome/browser/signin/signin_manager_fake.cc index 0eae17d..5ac6e1c 100644 --- a/chrome/browser/signin/signin_manager_fake.cc +++ b/chrome/browser/signin/signin_manager_fake.cc @@ -20,6 +20,6 @@ void FakeSigninManager::SignOut() { } // static -ProfileKeyedService* FakeSigninManager::Build(Profile* profile) { +ProfileKeyedBase* FakeSigninManager::Build(Profile* profile) { return new FakeSigninManager(); } diff --git a/chrome/browser/signin/signin_manager_fake.h b/chrome/browser/signin/signin_manager_fake.h index a1e1c42..f991d8f 100644 --- a/chrome/browser/signin/signin_manager_fake.h +++ b/chrome/browser/signin/signin_manager_fake.h @@ -28,7 +28,7 @@ class FakeSigninManager : public SigninManager { virtual void SignOut() OVERRIDE; // Helper function to be used with ProfileKeyedService::SetTestingFactory(). - static ProfileKeyedService* Build(Profile* profile); + static ProfileKeyedBase* Build(Profile* profile); }; #endif // CHROME_BROWSER_SIGNIN_SIGNIN_MANAGER_FAKE_H_ diff --git a/chrome/browser/spellchecker/spellcheck_profile_unittest.cc b/chrome/browser/spellchecker/spellcheck_profile_unittest.cc index e44d7cd..bf4e9b5 100644 --- a/chrome/browser/spellchecker/spellcheck_profile_unittest.cc +++ b/chrome/browser/spellchecker/spellcheck_profile_unittest.cc @@ -65,7 +65,7 @@ class TestingSpellCheckProfile : public SpellCheckProfile { scoped_ptr<SpellCheckHost> returning_from_create_; }; -ProfileKeyedService* BuildTestingSpellCheckProfile(Profile* profile) { +ProfileKeyedBase* BuildTestingSpellCheckProfile(Profile* profile) { return new TestingSpellCheckProfile(profile); } diff --git a/chrome/browser/sync/glue/theme_util_unittest.cc b/chrome/browser/sync/glue/theme_util_unittest.cc index b1dad81..e1a8222 100644 --- a/chrome/browser/sync/glue/theme_util_unittest.cc +++ b/chrome/browser/sync/glue/theme_util_unittest.cc @@ -30,7 +30,7 @@ class MockThemeService : public ThemeService { MOCK_CONST_METHOD0(GetThemeID, std::string()); }; -ProfileKeyedService* BuildMockThemeService(Profile* profile) { +ProfileKeyedBase* BuildMockThemeService(Profile* profile) { return new MockThemeService; } diff --git a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc index 31eaecc..2390313 100644 --- a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc @@ -328,7 +328,7 @@ class AutofillProfileFactory : public AbstractAutofillFactory { class PersonalDataManagerMock: public PersonalDataManager { public: - static ProfileKeyedService* Build(Profile* profile) { + static ProfileKeyedBase* Build(Profile* profile) { return new PersonalDataManagerMock; } diff --git a/chrome/browser/sync/sync_setup_wizard_unittest.cc b/chrome/browser/sync/sync_setup_wizard_unittest.cc index 5f0f98f..2c2b859 100644 --- a/chrome/browser/sync/sync_setup_wizard_unittest.cc +++ b/chrome/browser/sync/sync_setup_wizard_unittest.cc @@ -93,12 +93,12 @@ class ProfileSyncServiceForWizardTest : public ProfileSyncService { public: virtual ~ProfileSyncServiceForWizardTest() {} - static ProfileKeyedService* BuildManual(Profile* profile) { + static ProfileKeyedBase* BuildManual(Profile* profile) { return new ProfileSyncServiceForWizardTest(profile, ProfileSyncService::MANUAL_START); } - static ProfileKeyedService* BuildAuto(Profile* profile) { + static ProfileKeyedBase* BuildAuto(Profile* profile) { return new ProfileSyncServiceForWizardTest(profile, ProfileSyncService::AUTO_START); } diff --git a/chrome/browser/tabs/pinned_tab_service_unittest.cc b/chrome/browser/tabs/pinned_tab_service_unittest.cc index 6f00338..0296c40 100644 --- a/chrome/browser/tabs/pinned_tab_service_unittest.cc +++ b/chrome/browser/tabs/pinned_tab_service_unittest.cc @@ -17,7 +17,7 @@ namespace { -ProfileKeyedService* BuildPinnedTabService(Profile* profile) { +ProfileKeyedBase* BuildPinnedTabService(Profile* profile) { return new PinnedTabService(profile); } diff --git a/chrome/browser/ui/cocoa/content_settings/collected_cookies_mac.mm b/chrome/browser/ui/cocoa/content_settings/collected_cookies_mac.mm index 582ab9b..8b514fd 100644 --- a/chrome/browser/ui/cocoa/content_settings/collected_cookies_mac.mm +++ b/chrome/browser/ui/cocoa/content_settings/collected_cookies_mac.mm @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -246,8 +246,8 @@ void CollectedCookiesMac::OnSheetDidEnd(NSWindow* sheet) { Profile* profile = wrapper_->profile(); CookieTreeOriginNode* origin_node = static_cast<CookieTreeOriginNode*>(cookie); - origin_node->CreateContentException(CookieSettings::GetForProfile(profile), - setting); + origin_node->CreateContentException( + CookieSettings::Factory::GetForProfile(profile), setting); if (!lastDomain.empty()) multipleDomainsChanged = YES; lastDomain = origin_node->GetTitle(); diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc index fb07eb2..4a0a639 100644 --- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc +++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -261,7 +261,8 @@ class ContentSettingSingleRadioGroup radio_group.radio_items.push_back(radio_allow_label); radio_group.radio_items.push_back(radio_block_label); HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); - CookieSettings* cookie_settings = CookieSettings::GetForProfile(profile()); + CookieSettings* cookie_settings = + CookieSettings::Factory::GetForProfile(profile()); ContentSetting most_restrictive_setting; SettingSource most_restrictive_setting_source = SETTING_SOURCE_NONE; diff --git a/chrome/browser/ui/gtk/collected_cookies_gtk.cc b/chrome/browser/ui/gtk/collected_cookies_gtk.cc index a2fa8c7..43bc94e 100644 --- a/chrome/browser/ui/gtk/collected_cookies_gtk.cc +++ b/chrome/browser/ui/gtk/collected_cookies_gtk.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// 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. @@ -461,7 +461,7 @@ void CollectedCookiesGtk::AddExceptions(GtkTreeSelection* selection, last_domain_name = origin_node->GetTitle(); Profile* profile = wrapper_->profile(); origin_node->CreateContentException( - CookieSettings::GetForProfile(profile), setting); + CookieSettings::Factory::GetForProfile(profile), setting); } } g_list_foreach(paths, reinterpret_cast<GFunc>(gtk_tree_path_free), NULL); diff --git a/chrome/browser/ui/views/collected_cookies_views.cc b/chrome/browser/ui/views/collected_cookies_views.cc index 95c2b2d..ab1ab8c 100644 --- a/chrome/browser/ui/views/collected_cookies_views.cc +++ b/chrome/browser/ui/views/collected_cookies_views.cc @@ -481,8 +481,8 @@ void CollectedCookiesViews::AddContentException(views::TreeView* tree_view, CookieTreeOriginNode* origin_node = static_cast<CookieTreeOriginNode*>(tree_view->GetSelectedNode()); Profile* profile = wrapper_->profile(); - origin_node->CreateContentException(CookieSettings::GetForProfile(profile), - setting); + origin_node->CreateContentException( + CookieSettings::Factory::GetForProfile(profile), setting); infobar_->UpdateVisibility(true, setting, origin_node->GetTitle()); status_changed_ = true; } diff --git a/chrome/browser/ui/webui/collected_cookies_ui_delegate.cc b/chrome/browser/ui/webui/collected_cookies_ui_delegate.cc index fa3c2f1..dc9a858 100644 --- a/chrome/browser/ui/webui/collected_cookies_ui_delegate.cc +++ b/chrome/browser/ui/webui/collected_cookies_ui_delegate.cc @@ -244,8 +244,8 @@ void CollectedCookiesUIDelegate::AddContentException( CookieTreeOriginNode* origin_node, ContentSetting setting) { if (origin_node->CanCreateContentException()) { Profile* profile = wrapper_->profile(); - origin_node->CreateContentException(CookieSettings::GetForProfile(profile), - setting); + origin_node->CreateContentException( + CookieSettings::Factory::GetForProfile(profile), setting); SetInfobarLabel(GetInfobarLabel(setting, origin_node->GetTitle())); } |