diff options
author | bartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-12 16:55:35 +0000 |
---|---|---|
committer | bartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-12 16:55:35 +0000 |
commit | d03d2e1c530c0329de57e31e76390defe6cad676 (patch) | |
tree | dabe4be9eeb91d810ba2e8daea1995c88acee42d | |
parent | 9ba666117ed56d6ff4b1e058f9027798faa31b22 (diff) | |
download | chromium_src-d03d2e1c530c0329de57e31e76390defe6cad676.zip chromium_src-d03d2e1c530c0329de57e31e76390defe6cad676.tar.gz chromium_src-d03d2e1c530c0329de57e31e76390defe6cad676.tar.bz2 |
Introduce ProfileInvalidationProvider wrapper for InvalidationService
TiclInvalidationService was refactored to no longer depend on Profile.
However, it still is a KeyedService. While this does actually pull in
Profile as a dependency, it implies that TiclInvalidationService should
be considered a per-Profile service, like the other KeyedServices in
Chrome's code base.
This CL introduces ProfileInvalidationProvider, a KeyedService that is a
tiny wrapper around an InvalidationService. Given this wrapper,
InvalidationService (and with it, TiclInvalidationService) no longer have
to be KeyedServices.
BUG=362083
TEST=Updated unit and browser tests
TBR=dcheng (chrome/browser/extensions/api/push_messaging/*)
TBR=davemoore (chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc)
TBR=arv (chrome/browser/ui/webui/invalidations_message_handler.cc)
Review URL: https://codereview.chromium.org/327243003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276715 0039d316-1c4b-4281-b951-d872f2087c98
39 files changed, 498 insertions, 388 deletions
diff --git a/chrome/browser/drive/DEPS b/chrome/browser/drive/DEPS index 3544835..5d3d822 100644 --- a/chrome/browser/drive/DEPS +++ b/chrome/browser/drive/DEPS @@ -11,13 +11,9 @@ include_rules = [ # directory. crbug.com/257943 specific_include_rules = { "drive_notification_manager_factory\.cc": [ - "!chrome/browser/invalidation/invalidation_service_factory.h", + "!chrome/browser/invalidation/profile_invalidation_provider_factory.h", "!chrome/browser/profiles/profile.h", "!chrome/browser/sync/profile_sync_service.h", "!chrome/browser/sync/profile_sync_service_factory.h", ], - "drive_notification_manager\.cc": [ - "!chrome/browser/invalidation/invalidation_service_factory.h", - "!chrome/browser/profiles/profile.h", - ], } diff --git a/chrome/browser/drive/drive_notification_manager.cc b/chrome/browser/drive/drive_notification_manager.cc index 9b38a3d..3deda59 100644 --- a/chrome/browser/drive/drive_notification_manager.cc +++ b/chrome/browser/drive/drive_notification_manager.cc @@ -6,7 +6,6 @@ #include "base/metrics/histogram.h" #include "chrome/browser/drive/drive_notification_observer.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" #include "components/invalidation/invalidation_service.h" #include "google/cacheinvalidation/types.pb.h" #include "sync/notifier/object_id_invalidation_map.h" diff --git a/chrome/browser/drive/drive_notification_manager_factory.cc b/chrome/browser/drive/drive_notification_manager_factory.cc index bec2c9c..ae63f36 100644 --- a/chrome/browser/drive/drive_notification_manager_factory.cc +++ b/chrome/browser/drive/drive_notification_manager_factory.cc @@ -6,10 +6,11 @@ #include "base/logging.h" #include "chrome/browser/drive/drive_notification_manager.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/profile_sync_service.h" #include "chrome/browser/sync/profile_sync_service_factory.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" namespace drive { @@ -28,7 +29,7 @@ DriveNotificationManagerFactory::GetForBrowserContext( content::BrowserContext* context) { if (!ProfileSyncService::IsSyncEnabled()) return NULL; - if (!invalidation::InvalidationServiceFactory::GetForProfile( + if (!invalidation::ProfileInvalidationProviderFactory::GetForProfile( Profile::FromBrowserContext(context))) { // Do not create a DriveNotificationManager for |context|s that do not // support invalidation. @@ -50,18 +51,20 @@ DriveNotificationManagerFactory::DriveNotificationManagerFactory() "DriveNotificationManager", BrowserContextDependencyManager::GetInstance()) { DependsOn(ProfileSyncServiceFactory::GetInstance()); - DependsOn(invalidation::InvalidationServiceFactory::GetInstance()); + DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance()); } DriveNotificationManagerFactory::~DriveNotificationManagerFactory() {} KeyedService* DriveNotificationManagerFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile( + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( Profile::FromBrowserContext(context)); - DCHECK(invalidation_service); - return new DriveNotificationManager(invalidation_service); + DCHECK(invalidation_provider); + DCHECK(invalidation_provider->GetInvalidationService()); + return new DriveNotificationManager( + invalidation_provider->GetInvalidationService()); } } // namespace drive diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc index bd725c6..d9faa80 100644 --- a/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc +++ b/chrome/browser/extensions/api/push_messaging/push_messaging_api.cc @@ -16,12 +16,13 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/token_cache/token_cache_service.h" #include "chrome/browser/extensions/token_cache/token_cache_service_factory.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/common/extensions/api/push_messaging.h" #include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" #include "components/signin/core/browser/signin_manager.h" #include "content/public/browser/browser_thread.h" @@ -104,16 +105,17 @@ bool PushMessagingGetChannelIdFunction::RunAsync() { // Balanced in ReportResult() AddRef(); - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile(GetProfile()); - if (!invalidation_service) { + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + GetProfile()); + if (!invalidation_provider) { error_ = kAPINotAvailableForUser; ReportResult(std::string(), error_); return false; } IdentityProvider* identity_provider = - invalidation_service->GetIdentityProvider(); + invalidation_provider->GetInvalidationService()->GetIdentityProvider(); if (!identity_provider->GetTokenService()->RefreshTokenIsAvailable( identity_provider->GetActiveAccountId())) { if (interactive_ && identity_provider->RequestLogin()) { @@ -133,11 +135,12 @@ bool PushMessagingGetChannelIdFunction::RunAsync() { } void PushMessagingGetChannelIdFunction::StartAccessTokenFetch() { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile(GetProfile()); - CHECK(invalidation_service); + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + GetProfile()); + CHECK(invalidation_provider); IdentityProvider* identity_provider = - invalidation_service->GetIdentityProvider(); + invalidation_provider->GetInvalidationService()->GetIdentityProvider(); std::vector<std::string> scope_vector = extensions::ObfuscatedGaiaIdFetcher::GetScopes(); @@ -149,10 +152,11 @@ void PushMessagingGetChannelIdFunction::StartAccessTokenFetch() { void PushMessagingGetChannelIdFunction::OnRefreshTokenAvailable( const std::string& account_id) { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile(GetProfile()); - CHECK(invalidation_service); - invalidation_service->GetIdentityProvider()-> + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + GetProfile()); + CHECK(invalidation_provider); + invalidation_provider->GetInvalidationService()->GetIdentityProvider()-> RemoveActiveAccountRefreshTokenObserver(this); DVLOG(2) << "Newly logged in: " << GetProfile()->GetProfileName(); StartAccessTokenFetch(); @@ -271,11 +275,12 @@ void PushMessagingGetChannelIdFunction::OnObfuscatedGaiaIdFetchFailure( case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS: case GoogleServiceAuthError::ACCOUNT_DELETED: case GoogleServiceAuthError::ACCOUNT_DISABLED: { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile(GetProfile()); - CHECK(invalidation_service); - if (!interactive_ || - !invalidation_service->GetIdentityProvider()->RequestLogin()) { + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + GetProfile()); + CHECK(invalidation_provider); + if (!interactive_ || !invalidation_provider->GetInvalidationService()-> + GetIdentityProvider()->RequestLogin()) { ReportResult(std::string(), error_text); } return; @@ -319,16 +324,17 @@ PushMessagingAPI::GetFactoryInstance() { } bool PushMessagingAPI::InitEventRouterAndHandler() { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile(profile_); - if (!invalidation_service) + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile(profile_); + if (!invalidation_provider) return false; if (!event_router_) event_router_.reset(new PushMessagingEventRouter(profile_)); if (!handler_) { - handler_.reset(new PushMessagingInvalidationHandler(invalidation_service, - event_router_.get())); + handler_.reset(new PushMessagingInvalidationHandler( + invalidation_provider->GetInvalidationService(), + event_router_.get())); } return true; @@ -383,7 +389,7 @@ template <> void BrowserContextKeyedAPIFactory<PushMessagingAPI>::DeclareFactoryDependencies() { DependsOn(ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); - DependsOn(invalidation::InvalidationServiceFactory::GetInstance()); + DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance()); } } // namespace extensions diff --git a/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc b/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc index d974484..3e62fd4 100644 --- a/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc +++ b/chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc @@ -11,13 +11,15 @@ #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/extensions/extension_test_message_listener.h" #include "chrome/browser/invalidation/fake_invalidation_service.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_switches.h" #include "chrome/test/base/ui_test_utils.h" #include "components/invalidation/fake_invalidator.h" #include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" +#include "components/keyed_service/core/keyed_service.h" #include "google/cacheinvalidation/types.pb.h" #include "sync/internal_api/public/base/invalidation.h" #include "testing/gmock/include/gmock/gmock.h" @@ -26,7 +28,9 @@ using ::testing::SaveArg; using ::testing::StrictMock; using ::testing::_; -using invalidation::InvalidationServiceFactory; +namespace content { +class BrowserContext; +} namespace extensions { @@ -39,6 +43,13 @@ invalidation::ObjectId ExtensionAndSubchannelToObjectId( base::StringPrintf("U/%s/%d", extension_id.c_str(), subchannel_id)); } +KeyedService* BuildFakeProfileInvalidationProvider( + content::BrowserContext* context) { + return new invalidation::ProfileInvalidationProvider( + scoped_ptr<invalidation::InvalidationService>( + new invalidation::FakeInvalidationService)); +} + class MockInvalidationMapper : public PushMessagingInvalidationMapper { public: MockInvalidationMapper(); @@ -66,8 +77,8 @@ class PushMessagingApiTest : public ExtensionApiTest { } virtual void SetUp() OVERRIDE { - InvalidationServiceFactory::GetInstance()->RegisterTestingFactory( - invalidation::FakeInvalidationService::Build); + invalidation::ProfileInvalidationProviderFactory::GetInstance()-> + RegisterTestingFactory(BuildFakeProfileInvalidationProvider); ExtensionApiTest::SetUp(); } @@ -75,8 +86,10 @@ class PushMessagingApiTest : public ExtensionApiTest { ExtensionApiTest::SetUpOnMainThread(); fake_invalidation_service_ = static_cast<invalidation::FakeInvalidationService*>( - InvalidationServiceFactory::GetInstance()->GetForProfile( - profile())); + static_cast<invalidation::ProfileInvalidationProvider*>( + invalidation::ProfileInvalidationProviderFactory:: + GetInstance()->GetForProfile(profile()))-> + GetInvalidationService()); } void EmitInvalidation( diff --git a/chrome/browser/invalidation/fake_invalidation_service.cc b/chrome/browser/invalidation/fake_invalidation_service.cc index d9c6585..fdf115a 100644 --- a/chrome/browser/invalidation/fake_invalidation_service.cc +++ b/chrome/browser/invalidation/fake_invalidation_service.cc @@ -20,11 +20,6 @@ FakeInvalidationService::FakeInvalidationService() FakeInvalidationService::~FakeInvalidationService() { } -// static -KeyedService* FakeInvalidationService::Build(content::BrowserContext* context) { - return new FakeInvalidationService(); -} - void FakeInvalidationService::RegisterInvalidationHandler( syncer::InvalidationHandler* handler) { invalidator_registrar_.RegisterHandler(handler); diff --git a/chrome/browser/invalidation/fake_invalidation_service.h b/chrome/browser/invalidation/fake_invalidation_service.h index cc59b1c..8a6b881 100644 --- a/chrome/browser/invalidation/fake_invalidation_service.h +++ b/chrome/browser/invalidation/fake_invalidation_service.h @@ -16,10 +16,6 @@ #include "google_apis/gaia/fake_identity_provider.h" #include "sync/notifier/mock_ack_handler.h" -namespace content { -class BrowserContext; -} - namespace syncer { class Invalidation; } @@ -35,8 +31,6 @@ class FakeInvalidationService : public InvalidationService { FakeInvalidationService(); virtual ~FakeInvalidationService(); - static KeyedService* Build(content::BrowserContext* context); - virtual void RegisterInvalidationHandler( syncer::InvalidationHandler* handler) OVERRIDE; virtual void UpdateRegisteredInvalidationIds( diff --git a/chrome/browser/invalidation/invalidation_service_android_unittest.cc b/chrome/browser/invalidation/invalidation_service_android_unittest.cc index 1aaf981..ab5e75c 100644 --- a/chrome/browser/invalidation/invalidation_service_android_unittest.cc +++ b/chrome/browser/invalidation/invalidation_service_android_unittest.cc @@ -6,7 +6,6 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/invalidation/invalidation_controller_android.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" #include "chrome/browser/invalidation/invalidation_service_test_template.h" #include "chrome/test/base/testing_profile.h" #include "components/invalidation/fake_invalidation_handler.h" @@ -29,11 +28,9 @@ class MockInvalidationControllerAndroid : public InvalidationControllerAndroid { class InvalidationServiceAndroidTestDelegate { public: - InvalidationServiceAndroidTestDelegate() { } + InvalidationServiceAndroidTestDelegate() {} - ~InvalidationServiceAndroidTestDelegate() { - DestroyInvalidationService(); - } + ~InvalidationServiceAndroidTestDelegate() {} void CreateInvalidationService() { profile_.reset(new TestingProfile()); @@ -48,7 +45,7 @@ class InvalidationServiceAndroidTestDelegate { } void DestroyInvalidationService() { - invalidation_service_android_->Shutdown(); + invalidation_service_android_.reset(); } void TriggerOnInvalidatorStateChange(syncer::InvalidatorState state) { @@ -78,9 +75,7 @@ class InvalidationServiceAndroidRegistrationTest : public testing::Test { : invalidation_controller_(new MockInvalidationControllerAndroid()), invalidation_service_(&profile_, invalidation_controller_) {} - virtual ~InvalidationServiceAndroidRegistrationTest() { - invalidation_service_.Shutdown(); - } + virtual ~InvalidationServiceAndroidRegistrationTest() {} // Get the invalidation service being tested. InvalidationService& invalidation_service() { diff --git a/chrome/browser/invalidation/invalidation_service_factory.h b/chrome/browser/invalidation/invalidation_service_factory.h deleted file mode 100644 index a82ed4c..0000000 --- a/chrome/browser/invalidation/invalidation_service_factory.h +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (c) 2013 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_INVALIDATION_INVALIDATION_SERVICE_FACTORY_H_ -#define CHROME_BROWSER_INVALIDATION_INVALIDATION_SERVICE_FACTORY_H_ - -#include "base/basictypes.h" -#include "base/memory/singleton.h" -#include "components/keyed_service/content/browser_context_keyed_service_factory.h" - -namespace user_prefs { -class PrefRegistrySyncable; -} - -namespace syncer { -class Invalidator; -} - -class Profile; - -namespace invalidation { - -class FakeInvalidationService; -class InvalidationService; -class P2PInvalidationService; - -// A BrowserContextKeyedServiceFactory to construct InvalidationServices. The -// implementation of the InvalidationService may be completely different on -// different platforms; this class should help to hide this complexity. It also -// exposes some factory methods that are useful for setting up tests that rely -// on invalidations. -class InvalidationServiceFactory : public BrowserContextKeyedServiceFactory { - public: - // Returns the InvalidationService for the given |profile|, lazily creating - // one first if required. If |profile| does not support invalidation - // (Chrome OS login profile, Chrome OS guest), returns NULL instead. - static InvalidationService* GetForProfile(Profile* profile); - - static InvalidationServiceFactory* GetInstance(); - - // Switches service creation to go through |testing_factory| for all browser - // contexts. - void RegisterTestingFactory(TestingFactoryFunction testing_factory); - - private: - friend class InvalidationServiceFactoryTestBase; - friend struct DefaultSingletonTraits<InvalidationServiceFactory>; - - InvalidationServiceFactory(); - virtual ~InvalidationServiceFactory(); - - // BrowserContextKeyedServiceFactory: - virtual KeyedService* BuildServiceInstanceFor( - content::BrowserContext* context) const OVERRIDE; - virtual void RegisterProfilePrefs( - user_prefs::PrefRegistrySyncable* registry) OVERRIDE; - - TestingFactoryFunction testing_factory_; - - DISALLOW_COPY_AND_ASSIGN(InvalidationServiceFactory); -}; - -} // namespace invalidation - -#endif // CHROME_BROWSER_INVALIDATION_INVALIDATION_SERVICE_FACTORY_H_ diff --git a/chrome/browser/invalidation/invalidation_service_factory_browsertest.cc b/chrome/browser/invalidation/invalidation_service_factory_browsertest.cc deleted file mode 100644 index e2370c1..0000000 --- a/chrome/browser/invalidation/invalidation_service_factory_browsertest.cc +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright 2014 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 "base/basictypes.h" -#include "base/command_line.h" -#include "base/compiler_specific.h" -#include "chrome/browser/chromeos/login/users/user_manager.h" -#include "chrome/browser/chromeos/profiles/profile_helper.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/common/chrome_switches.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chromeos/chromeos_switches.h" -#include "components/invalidation/invalidation_service.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace invalidation { - -class InvalidationServiceFactoryTestBase : public InProcessBrowserTest { - protected: - InvalidationServiceFactoryTestBase(); - virtual ~InvalidationServiceFactoryTestBase(); - - InvalidationService* FindInvalidationServiceForProfile(Profile* profile); - - private: - DISALLOW_COPY_AND_ASSIGN(InvalidationServiceFactoryTestBase); -}; - -InvalidationServiceFactoryTestBase::InvalidationServiceFactoryTestBase() { -} - -InvalidationServiceFactoryTestBase::~InvalidationServiceFactoryTestBase() { -} - -InvalidationService* -InvalidationServiceFactoryTestBase::FindInvalidationServiceForProfile( - Profile* profile) { - return static_cast<InvalidationService*>( - InvalidationServiceFactory::GetInstance()->GetServiceForBrowserContext( - profile, false)); -} - -class InvalidationServiceFactoryLoginScreenBrowserTest - : public InvalidationServiceFactoryTestBase { - protected: - InvalidationServiceFactoryLoginScreenBrowserTest(); - virtual ~InvalidationServiceFactoryLoginScreenBrowserTest(); - - virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; - - private: - DISALLOW_COPY_AND_ASSIGN(InvalidationServiceFactoryLoginScreenBrowserTest); -}; - -InvalidationServiceFactoryLoginScreenBrowserTest:: - InvalidationServiceFactoryLoginScreenBrowserTest() { -} - -InvalidationServiceFactoryLoginScreenBrowserTest:: - ~InvalidationServiceFactoryLoginScreenBrowserTest() { -} - -void InvalidationServiceFactoryLoginScreenBrowserTest::SetUpCommandLine( - CommandLine* command_line) { - command_line->AppendSwitch(chromeos::switches::kLoginManager); - command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user"); -} - -// Verify that no InvalidationService is instantiated for the login profile on -// the login screen. -IN_PROC_BROWSER_TEST_F(InvalidationServiceFactoryLoginScreenBrowserTest, - NoInvalidationService) { - Profile* login_profile = - chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile(); - EXPECT_FALSE(FindInvalidationServiceForProfile(login_profile)); -} - -class InvalidationServiceFactoryGuestBrowserTest - : public InvalidationServiceFactoryTestBase { - protected: - InvalidationServiceFactoryGuestBrowserTest(); - virtual ~InvalidationServiceFactoryGuestBrowserTest(); - - virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; - - private: - DISALLOW_COPY_AND_ASSIGN(InvalidationServiceFactoryGuestBrowserTest); -}; - -InvalidationServiceFactoryGuestBrowserTest:: - InvalidationServiceFactoryGuestBrowserTest() { -} - -InvalidationServiceFactoryGuestBrowserTest:: - ~InvalidationServiceFactoryGuestBrowserTest() { -} - -void InvalidationServiceFactoryGuestBrowserTest::SetUpCommandLine( - CommandLine* command_line) { - command_line->AppendSwitch(chromeos::switches::kGuestSession); - command_line->AppendSwitch(::switches::kIncognito); - command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user"); - command_line->AppendSwitchASCII(chromeos::switches::kLoginUser, - chromeos::UserManager::kGuestUserName); -} - -// Verify that no InvalidationService is instantiated for the login profile or -// the guest profile while a guest session is in progress. -IN_PROC_BROWSER_TEST_F(InvalidationServiceFactoryGuestBrowserTest, - NoInvalidationService) { - chromeos::UserManager* user_manager = chromeos::UserManager::Get(); - EXPECT_TRUE(user_manager->IsLoggedInAsGuest()); - Profile* guest_profile = user_manager->GetProfileByUser( - user_manager->GetActiveUser())->GetOriginalProfile(); - Profile* login_profile = - chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile(); - EXPECT_FALSE(FindInvalidationServiceForProfile(guest_profile)); - EXPECT_FALSE(FindInvalidationServiceForProfile(login_profile)); -} - -} // namespace invalidation diff --git a/chrome/browser/invalidation/invalidation_service_factory.cc b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc index 76797b2..0606f608 100644 --- a/chrome/browser/invalidation/invalidation_service_factory.cc +++ b/chrome/browser/invalidation/profile_invalidation_provider_factory.cc @@ -1,14 +1,12 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 2014 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/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "base/memory/scoped_ptr.h" #include "base/prefs/pref_registry.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/invalidation/fake_invalidation_service.h" -#include "chrome/browser/invalidation/invalidation_service_android.h" #include "chrome/browser/invalidation/ticl_invalidation_service.h" #include "chrome/browser/invalidation/ticl_profile_settings_provider.h" #include "chrome/browser/profiles/profile.h" @@ -21,6 +19,7 @@ #include "chrome/common/pref_names.h" #include "components/invalidation/invalidation_service.h" #include "components/invalidation/invalidator_storage.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/invalidation/ticl_settings_provider.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -31,6 +30,7 @@ #if defined(OS_ANDROID) #include "chrome/browser/invalidation/invalidation_controller_android.h" +#include "chrome/browser/invalidation/invalidation_service_android.h" #endif // defined(OS_ANDROID) #if defined(OS_CHROMEOS) @@ -45,7 +45,7 @@ namespace invalidation { // static -InvalidationService* InvalidationServiceFactory::GetForProfile( +ProfileInvalidationProvider* ProfileInvalidationProviderFactory::GetForProfile( Profile* profile) { #if defined(OS_CHROMEOS) // Using ProfileHelper::GetSigninProfile() here would lead to an infinite loop @@ -60,16 +60,17 @@ InvalidationService* InvalidationServiceFactory::GetForProfile( return NULL; } #endif - return static_cast<InvalidationService*>( + return static_cast<ProfileInvalidationProvider*>( GetInstance()->GetServiceForBrowserContext(profile, true)); } // static -InvalidationServiceFactory* InvalidationServiceFactory::GetInstance() { - return Singleton<InvalidationServiceFactory>::get(); +ProfileInvalidationProviderFactory* +ProfileInvalidationProviderFactory::GetInstance() { + return Singleton<ProfileInvalidationProviderFactory>::get(); } -InvalidationServiceFactory::InvalidationServiceFactory() +ProfileInvalidationProviderFactory::ProfileInvalidationProviderFactory() : BrowserContextKeyedServiceFactory( "InvalidationService", BrowserContextDependencyManager::GetInstance()), @@ -82,14 +83,15 @@ InvalidationServiceFactory::InvalidationServiceFactory() #endif } -InvalidationServiceFactory::~InvalidationServiceFactory() {} +ProfileInvalidationProviderFactory::~ProfileInvalidationProviderFactory() { +} -void InvalidationServiceFactory::RegisterTestingFactory( +void ProfileInvalidationProviderFactory::RegisterTestingFactory( TestingFactoryFunction testing_factory) { testing_factory_ = testing_factory; } -KeyedService* InvalidationServiceFactory::BuildServiceInstanceFor( +KeyedService* ProfileInvalidationProviderFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { Profile* profile = static_cast<Profile*>(context); @@ -97,8 +99,9 @@ KeyedService* InvalidationServiceFactory::BuildServiceInstanceFor( return testing_factory_(context); #if defined(OS_ANDROID) - return new InvalidationServiceAndroid(profile, - new InvalidationControllerAndroid()); + return new ProfileInvalidationProvider(scoped_ptr<InvalidationService>( + new InvalidationServiceAndroid(profile, + new InvalidationControllerAndroid()))); #else scoped_ptr<IdentityProvider> identity_provider; @@ -121,19 +124,20 @@ KeyedService* InvalidationServiceFactory::BuildServiceInstanceFor( LoginUIServiceFactory::GetForProfile(profile))); } - TiclInvalidationService* service = new TiclInvalidationService( + scoped_ptr<TiclInvalidationService> service(new TiclInvalidationService( identity_provider.Pass(), scoped_ptr<TiclSettingsProvider>( new TiclProfileSettingsProvider(profile)), gcm::GCMProfileServiceFactory::GetForProfile(profile)->driver(), - profile->GetRequestContext()); + profile->GetRequestContext())); service->Init(scoped_ptr<syncer::InvalidationStateTracker>( new InvalidatorStorage(profile->GetPrefs()))); - return service; + + return new ProfileInvalidationProvider(service.PassAs<InvalidationService>()); #endif } -void InvalidationServiceFactory::RegisterProfilePrefs( +void ProfileInvalidationProviderFactory::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref( prefs::kInvalidationServiceUseGCMChannel, diff --git a/chrome/browser/invalidation/profile_invalidation_provider_factory.h b/chrome/browser/invalidation/profile_invalidation_provider_factory.h new file mode 100644 index 0000000..5d2d160 --- /dev/null +++ b/chrome/browser/invalidation/profile_invalidation_provider_factory.h @@ -0,0 +1,65 @@ +// Copyright 2014 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_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_ +#define CHROME_BROWSER_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_ + +#include "base/basictypes.h" +#include "base/memory/singleton.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +namespace user_prefs { +class PrefRegistrySyncable; +} + +namespace syncer { +class Invalidator; +} + +class Profile; + +namespace invalidation { + +class ProfileInvalidationProvider; + +// A BrowserContextKeyedServiceFactory to construct InvalidationServices wrapped +// in ProfileInvalidationProviders. The implementation of InvalidationService +// may be completely different on different platforms; this class should help to +// hide this complexity. It also exposes some factory methods that are useful +// for setting up tests that rely on invalidations. +class ProfileInvalidationProviderFactory + : public BrowserContextKeyedServiceFactory { + public: + // Returns the ProfileInvalidationProvider for the given |profile|, lazily + // creating one first if required. If |profile| does not support invalidation + // (Chrome OS login profile, Chrome OS guest), returns NULL instead. + static ProfileInvalidationProvider* GetForProfile(Profile* profile); + + static ProfileInvalidationProviderFactory* GetInstance(); + + // Switches service creation to go through |testing_factory| for all browser + // contexts. + void RegisterTestingFactory(TestingFactoryFunction testing_factory); + + private: + friend class ProfileInvalidationProviderFactoryTestBase; + friend struct DefaultSingletonTraits<ProfileInvalidationProviderFactory>; + + ProfileInvalidationProviderFactory(); + virtual ~ProfileInvalidationProviderFactory(); + + // BrowserContextKeyedServiceFactory: + virtual KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const OVERRIDE; + virtual void RegisterProfilePrefs( + user_prefs::PrefRegistrySyncable* registry) OVERRIDE; + + TestingFactoryFunction testing_factory_; + + DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationProviderFactory); +}; + +} // namespace invalidation + +#endif // CHROME_BROWSER_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_ diff --git a/chrome/browser/invalidation/profile_invalidation_provider_factory_browsertest.cc b/chrome/browser/invalidation/profile_invalidation_provider_factory_browsertest.cc new file mode 100644 index 0000000..41b939c --- /dev/null +++ b/chrome/browser/invalidation/profile_invalidation_provider_factory_browsertest.cc @@ -0,0 +1,127 @@ +// Copyright 2014 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 "base/basictypes.h" +#include "base/command_line.h" +#include "base/compiler_specific.h" +#include "chrome/browser/chromeos/login/users/user_manager.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chromeos/chromeos_switches.h" +#include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace invalidation { + +class ProfileInvalidationProviderFactoryTestBase : public InProcessBrowserTest { + protected: + ProfileInvalidationProviderFactoryTestBase(); + virtual ~ProfileInvalidationProviderFactoryTestBase(); + + bool CanConstructProfileInvalidationProvider(Profile* profile); + + private: + DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationProviderFactoryTestBase); +}; + +ProfileInvalidationProviderFactoryTestBase:: + ProfileInvalidationProviderFactoryTestBase() { +} + +ProfileInvalidationProviderFactoryTestBase:: + ~ProfileInvalidationProviderFactoryTestBase() { +} + +bool +ProfileInvalidationProviderFactoryTestBase:: + CanConstructProfileInvalidationProvider(Profile* profile) { + return static_cast<bool>( + ProfileInvalidationProviderFactory::GetInstance()-> + GetServiceForBrowserContext(profile, false)); +} + +class ProfileInvalidationProviderFactoryLoginScreenBrowserTest + : public ProfileInvalidationProviderFactoryTestBase { + protected: + ProfileInvalidationProviderFactoryLoginScreenBrowserTest(); + virtual ~ProfileInvalidationProviderFactoryLoginScreenBrowserTest(); + + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN( + ProfileInvalidationProviderFactoryLoginScreenBrowserTest); +}; + +ProfileInvalidationProviderFactoryLoginScreenBrowserTest:: + ProfileInvalidationProviderFactoryLoginScreenBrowserTest() { +} + +ProfileInvalidationProviderFactoryLoginScreenBrowserTest:: + ~ProfileInvalidationProviderFactoryLoginScreenBrowserTest() { +} + +void ProfileInvalidationProviderFactoryLoginScreenBrowserTest::SetUpCommandLine( + CommandLine* command_line) { + command_line->AppendSwitch(chromeos::switches::kLoginManager); + command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user"); +} + +// Verify that no InvalidationService is instantiated for the login profile on +// the login screen. +IN_PROC_BROWSER_TEST_F(ProfileInvalidationProviderFactoryLoginScreenBrowserTest, + NoInvalidationService) { + Profile* login_profile = + chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile(); + EXPECT_FALSE(CanConstructProfileInvalidationProvider(login_profile)); +} + +class ProfileInvalidationProviderFactoryGuestBrowserTest + : public ProfileInvalidationProviderFactoryTestBase { + protected: + ProfileInvalidationProviderFactoryGuestBrowserTest(); + virtual ~ProfileInvalidationProviderFactoryGuestBrowserTest(); + + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationProviderFactoryGuestBrowserTest); +}; + +ProfileInvalidationProviderFactoryGuestBrowserTest:: + ProfileInvalidationProviderFactoryGuestBrowserTest() { +} + +ProfileInvalidationProviderFactoryGuestBrowserTest:: + ~ProfileInvalidationProviderFactoryGuestBrowserTest() { +} + +void ProfileInvalidationProviderFactoryGuestBrowserTest::SetUpCommandLine( + CommandLine* command_line) { + command_line->AppendSwitch(chromeos::switches::kGuestSession); + command_line->AppendSwitch(::switches::kIncognito); + command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user"); + command_line->AppendSwitchASCII(chromeos::switches::kLoginUser, + chromeos::UserManager::kGuestUserName); +} + +// Verify that no InvalidationService is instantiated for the login profile or +// the guest profile while a guest session is in progress. +IN_PROC_BROWSER_TEST_F(ProfileInvalidationProviderFactoryGuestBrowserTest, + NoInvalidationService) { + chromeos::UserManager* user_manager = chromeos::UserManager::Get(); + EXPECT_TRUE(user_manager->IsLoggedInAsGuest()); + Profile* guest_profile = user_manager->GetProfileByUser( + user_manager->GetActiveUser())->GetOriginalProfile(); + Profile* login_profile = + chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile(); + EXPECT_FALSE(CanConstructProfileInvalidationProvider(guest_profile)); + EXPECT_FALSE(CanConstructProfileInvalidationProvider(login_profile)); +} + +} // namespace invalidation diff --git a/chrome/browser/invalidation/ticl_invalidation_service.cc b/chrome/browser/invalidation/ticl_invalidation_service.cc index 487bdb9..533cc5b 100644 --- a/chrome/browser/invalidation/ticl_invalidation_service.cc +++ b/chrome/browser/invalidation/ticl_invalidation_service.cc @@ -69,6 +69,12 @@ TiclInvalidationService::TiclInvalidationService( TiclInvalidationService::~TiclInvalidationService() { DCHECK(CalledOnValidThread()); + settings_provider_->RemoveObserver(this); + identity_provider_->RemoveActiveAccountRefreshTokenObserver(this); + identity_provider_->RemoveObserver(this); + if (IsStarted()) { + StopInvalidator(); + } } void TiclInvalidationService::Init( @@ -301,18 +307,6 @@ void TiclInvalidationService::OnIncomingInvalidation( std::string TiclInvalidationService::GetOwnerName() const { return "TICL"; } -void TiclInvalidationService::Shutdown() { - DCHECK(CalledOnValidThread()); - settings_provider_->RemoveObserver(this); - identity_provider_->RemoveActiveAccountRefreshTokenObserver(this); - identity_provider_->RemoveObserver(this); - if (IsStarted()) { - StopInvalidator(); - } - invalidation_state_tracker_.reset(); - invalidator_registrar_.reset(); -} - bool TiclInvalidationService::IsReadyToStart() { if (identity_provider_->GetActiveAccountId().empty()) { DVLOG(2) << "Not starting TiclInvalidationService: User is not signed in."; diff --git a/chrome/browser/invalidation/ticl_invalidation_service.h b/chrome/browser/invalidation/ticl_invalidation_service.h index 290882c..b1cbbd3 100644 --- a/chrome/browser/invalidation/ticl_invalidation_service.h +++ b/chrome/browser/invalidation/ticl_invalidation_service.h @@ -70,7 +70,7 @@ class TiclInvalidationService : public base::NonThreadSafe, scoped_ptr<syncer::InvalidationStateTracker> invalidation_state_tracker); // InvalidationService implementation. - // It is an error to have registered handlers when Shutdown() is called. + // It is an error to have registered handlers when the service is destroyed. virtual void RegisterInvalidationHandler( syncer::InvalidationHandler* handler) OVERRIDE; virtual void UpdateRegisteredInvalidationIds( @@ -113,9 +113,6 @@ class TiclInvalidationService : public base::NonThreadSafe, const syncer::ObjectIdInvalidationMap& invalidation_map) OVERRIDE; virtual std::string GetOwnerName() const OVERRIDE; - // Overrides KeyedService method. - virtual void Shutdown() OVERRIDE; - protected: // Initializes with an injected invalidator. void InitForTest( diff --git a/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc b/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc index 9a29ebd..33fa2dd 100644 --- a/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc +++ b/chrome/browser/invalidation/ticl_invalidation_service_unittest.cc @@ -53,7 +53,6 @@ class TiclInvalidationServiceTestDelegate { TiclInvalidationServiceTestDelegate() {} ~TiclInvalidationServiceTestDelegate() { - DestroyInvalidationService(); } void CreateInvalidationService() { @@ -83,7 +82,7 @@ class TiclInvalidationServiceTestDelegate { } void DestroyInvalidationService() { - invalidation_service_->Shutdown(); + invalidation_service_.reset(); } void TriggerOnInvalidatorStateChange(syncer::InvalidatorState state) { diff --git a/chrome/browser/invalidation/ticl_profile_settings_provider_unittest.cc b/chrome/browser/invalidation/ticl_profile_settings_provider_unittest.cc index f0e0dbe..51ec0ba 100644 --- a/chrome/browser/invalidation/ticl_profile_settings_provider_unittest.cc +++ b/chrome/browser/invalidation/ticl_profile_settings_provider_unittest.cc @@ -63,7 +63,7 @@ void TiclProfileSettingsProviderTest::SetUp() { } void TiclProfileSettingsProviderTest::TearDown() { - invalidation_service_->Shutdown(); + invalidation_service_.reset(); } TiclInvalidationService::InvalidationNetworkChannel diff --git a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc index 0ee316d..1675b87 100644 --- a/chrome/browser/policy/cloud/cloud_policy_browsertest.cc +++ b/chrome/browser/policy/cloud/cloud_policy_browsertest.cc @@ -16,13 +16,16 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/invalidation/fake_invalidation_service.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/policy/profile_policy_connector_factory.h" #include "chrome/browser/policy/test/local_policy_test_server.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/test/base/in_process_browser_test.h" +#include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" +#include "components/keyed_service/core/keyed_service.h" #include "components/policy/core/browser/browser_policy_connector.h" #include "components/policy/core/common/cloud/cloud_policy_client.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" @@ -63,12 +66,23 @@ using testing::Mock; using testing::Return; using testing::_; +namespace content { +class BrowserContext; +} + namespace em = enterprise_management; namespace policy { namespace { +KeyedService* BuildFakeProfileInvalidationProvider( + content::BrowserContext* context) { + return new invalidation::ProfileInvalidationProvider( + scoped_ptr<invalidation::InvalidationService>( + new invalidation::FakeInvalidationService)); +} + const char* GetTestUser() { #if defined(OS_CHROMEOS) return chromeos::UserManager::kStubUser; @@ -174,8 +188,8 @@ class CloudPolicyTest : public InProcessBrowserTest, CommandLine* command_line = CommandLine::ForCurrentProcess(); command_line->AppendSwitchASCII(switches::kDeviceManagementUrl, url); - invalidation::InvalidationServiceFactory::GetInstance()-> - RegisterTestingFactory(invalidation::FakeInvalidationService::Build); + invalidation::ProfileInvalidationProviderFactory::GetInstance()-> + RegisterTestingFactory(BuildFakeProfileInvalidationProvider); } virtual void SetUpOnMainThread() OVERRIDE { @@ -255,8 +269,9 @@ class CloudPolicyTest : public InProcessBrowserTest, invalidation::FakeInvalidationService* GetInvalidationService() { return static_cast<invalidation::FakeInvalidationService*>( - invalidation::InvalidationServiceFactory::GetForProfile( - browser()->profile())); + static_cast<invalidation::ProfileInvalidationProvider*>( + invalidation::ProfileInvalidationProviderFactory::GetInstance()-> + GetForProfile(browser()->profile()))->GetInvalidationService()); } void SetServerPolicy(const std::string& policy) { diff --git a/chrome/browser/policy/cloud/user_cloud_policy_invalidator.cc b/chrome/browser/policy/cloud/user_cloud_policy_invalidator.cc index eafa87e..504abafc 100644 --- a/chrome/browser/policy/cloud/user_cloud_policy_invalidator.cc +++ b/chrome/browser/policy/cloud/user_cloud_policy_invalidator.cc @@ -9,7 +9,8 @@ #include "base/message_loop/message_loop_proxy.h" #include "base/time/default_clock.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/policy/core/common/cloud/cloud_policy_manager.h" #include "content/public/browser/notification_source.h" @@ -48,10 +49,10 @@ void UserCloudPolicyInvalidator::Observe( // Initialize now that profile creation is complete and the invalidation // service can safely be initialized. DCHECK(type == chrome::NOTIFICATION_PROFILE_ADDED); - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile(profile_); - if (invalidation_service) - Initialize(invalidation_service); + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile(profile_); + if (invalidation_provider) + Initialize(invalidation_provider->GetInvalidationService()); } } // namespace policy diff --git a/chrome/browser/policy/cloud/user_cloud_policy_invalidator_factory.cc b/chrome/browser/policy/cloud/user_cloud_policy_invalidator_factory.cc index 5ab5a33..e4c7fef 100644 --- a/chrome/browser/policy/cloud/user_cloud_policy_invalidator_factory.cc +++ b/chrome/browser/policy/cloud/user_cloud_policy_invalidator_factory.cc @@ -4,7 +4,7 @@ #include "chrome/browser/policy/cloud/user_cloud_policy_invalidator_factory.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/policy/cloud/user_cloud_policy_invalidator.h" #include "chrome/browser/profiles/profile.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" @@ -28,7 +28,7 @@ UserCloudPolicyInvalidatorFactory::UserCloudPolicyInvalidatorFactory() : BrowserContextKeyedServiceFactory( "UserCloudPolicyInvalidator", BrowserContextDependencyManager::GetInstance()) { - DependsOn(invalidation::InvalidationServiceFactory::GetInstance()); + DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance()); #if defined(OS_CHROMEOS) DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance()); #else diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc index 90cfa30..69c24b6 100644 --- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc +++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc @@ -17,7 +17,7 @@ #include "chrome/browser/geolocation/chrome_geolocation_permission_context_factory.h" #include "chrome/browser/google/google_url_tracker_factory.h" #include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/media_galleries/media_galleries_preferences_factory.h" #include "chrome/browser/notifications/desktop_notification_service_factory.h" #include "chrome/browser/password_manager/password_store_factory.h" @@ -186,7 +186,7 @@ EnsureBrowserContextKeyedServiceFactoriesBuilt() { GoogleURLTrackerFactory::GetInstance(); HistoryServiceFactory::GetInstance(); HotwordServiceFactory::GetInstance(); - invalidation::InvalidationServiceFactory::GetInstance(); + invalidation::ProfileInvalidationProviderFactory::GetInstance(); InstantServiceFactory::GetInstance(); #if defined(ENABLE_SERVICE_DISCOVERY) local_discovery::PrivetNotificationServiceFactory::GetInstance(); diff --git a/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc b/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc index dfccb18..58f8015 100644 --- a/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc +++ b/chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc @@ -13,7 +13,7 @@ #include "base/synchronization/waitable_event.h" #include "base/test/test_timeouts.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/prefs/pref_service_syncable.h" #include "chrome/browser/sync/glue/device_info.h" #include "chrome/browser/sync/glue/synced_device_tracker.h" @@ -21,6 +21,7 @@ #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" #include "components/invalidation/invalidator_storage.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/sync_driver/sync_frontend.h" #include "components/sync_driver/sync_prefs.h" #include "content/public/browser/notification_service.h" @@ -159,7 +160,8 @@ class SyncBackendHostTest : public testing::Test { backend_.reset(new SyncBackendHostImpl( profile_->GetDebugName(), profile_, - invalidation::InvalidationServiceFactory::GetForProfile(profile_), + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + profile_)->GetInvalidationService(), sync_prefs_->AsWeakPtr(), base::FilePath(kTestSyncDir))); credentials_.email = "user@example.com"; diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc index 8d81498..cf2ae6e 100644 --- a/chrome/browser/sync/profile_sync_service.cc +++ b/chrome/browser/sync/profile_sync_service.cc @@ -30,7 +30,7 @@ #include "chrome/browser/browsing_data/browsing_data_remover.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/defaults.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/net/chrome_cookie_notification_details.h" #include "chrome/browser/prefs/pref_service_syncable.h" #include "chrome/browser/profiles/profile.h" @@ -64,6 +64,7 @@ #include "chrome/common/url_constants.h" #include "components/gcm_driver/gcm_driver.h" #include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/pref_registry/pref_registry_syncable.h" #include "components/signin/core/browser/about_signin_internals.h" #include "components/signin/core/browser/profile_oauth2_token_service.h" @@ -685,9 +686,14 @@ void ProfileSyncService::StartUpSlowBackendComponents( base::FilePath(kSyncDataFolderName) : base::FilePath(kSyncBackupDataFolderName); - invalidation::InvalidationService* invalidator = backend_mode_ == SYNC ? - invalidation::InvalidationServiceFactory::GetForProfile(profile_) : - NULL; + invalidation::InvalidationService* invalidator = NULL; + if (backend_mode_ == SYNC) { + invalidation::ProfileInvalidationProvider* provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + profile_); + if (provider) + invalidator = provider->GetInvalidationService(); + } backend_.reset( factory_->CreateSyncBackendHost( diff --git a/chrome/browser/sync/profile_sync_service_factory.cc b/chrome/browser/sync/profile_sync_service_factory.cc index 2c89c27..4bd69a1 100644 --- a/chrome/browser/sync/profile_sync_service_factory.cc +++ b/chrome/browser/sync/profile_sync_service_factory.cc @@ -11,7 +11,7 @@ #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/defaults.h" #include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" @@ -65,7 +65,7 @@ ProfileSyncServiceFactory::ProfileSyncServiceFactory() extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); DependsOn(GlobalErrorServiceFactory::GetInstance()); DependsOn(HistoryServiceFactory::GetInstance()); - DependsOn(invalidation::InvalidationServiceFactory::GetInstance()); + DependsOn(invalidation::ProfileInvalidationProviderFactory::GetInstance()); DependsOn(PasswordStoreFactory::GetInstance()); DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance()); DependsOn(SigninManagerFactory::GetInstance()); diff --git a/chrome/browser/sync/profile_sync_service_typed_url_unittest.cc b/chrome/browser/sync/profile_sync_service_typed_url_unittest.cc index fbe5cb1..c3780e5 100644 --- a/chrome/browser/sync/profile_sync_service_typed_url_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_typed_url_unittest.cc @@ -25,7 +25,7 @@ #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_types.h" #include "chrome/browser/invalidation/fake_invalidation_service.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/prefs/pref_service_syncable.h" #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" @@ -45,6 +45,8 @@ #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" +#include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/keyed_service/content/refcounted_browser_context_keyed_service.h" #include "components/signin/core/browser/signin_manager.h" #include "components/sync_driver/data_type_error_handler_mock.h" @@ -72,6 +74,10 @@ using testing::Return; using testing::SetArgumentPointee; using testing::_; +namespace content { +class BrowserContext; +} + namespace { const char kTestProfileName[] = "test-profile"; @@ -119,6 +125,13 @@ class HistoryServiceMock : public HistoryService { virtual ~HistoryServiceMock() {} }; +KeyedService* BuildFakeProfileInvalidationProvider( + content::BrowserContext* context) { + return new invalidation::ProfileInvalidationProvider( + scoped_ptr<invalidation::InvalidationService>( + new invalidation::FakeInvalidationService)); +} + KeyedService* BuildHistoryService(content::BrowserContext* profile) { return new HistoryServiceMock(NULL, static_cast<Profile*>(profile)); } @@ -208,8 +221,8 @@ class ProfileSyncServiceTypedUrlTest : public AbstractProfileSyncServiceTest { 0, std::string(), testing_factories); - invalidation::InvalidationServiceFactory::GetInstance()->SetTestingFactory( - profile_, invalidation::FakeInvalidationService::Build); + invalidation::ProfileInvalidationProviderFactory::GetInstance()-> + SetTestingFactory(profile_, BuildFakeProfileInvalidationProvider); history_backend_ = new HistoryBackendMock(); history_service_ = static_cast<HistoryServiceMock*>( HistoryServiceFactory::GetInstance()->SetTestingFactoryAndUse( diff --git a/chrome/browser/sync/profile_sync_service_unittest.cc b/chrome/browser/sync/profile_sync_service_unittest.cc index 771dc21..ddc9a9e 100644 --- a/chrome/browser/sync/profile_sync_service_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_unittest.cc @@ -10,7 +10,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/invalidation/fake_invalidation_service.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/signin/fake_profile_oauth2_token_service.h" #include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" @@ -24,6 +24,8 @@ #include "chrome/test/base/testing_pref_service_syncable.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" +#include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/signin/core/browser/signin_manager.h" #include "components/sync_driver/data_type_manager_impl.h" #include "components/sync_driver/pref_names.h" @@ -33,6 +35,10 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +namespace content { +class BrowserContext; +} + namespace browser_sync { namespace { @@ -127,6 +133,13 @@ ACTION_P(ReturnNewMockHostCollectDeleteDirParam, delete_dir_param) { delete_dir_param); } +KeyedService* BuildFakeProfileInvalidationProvider( + content::BrowserContext* context) { + return new invalidation::ProfileInvalidationProvider( + scoped_ptr<invalidation::InvalidationService>( + new invalidation::FakeInvalidationService)); +} + // A test harness that uses a real ProfileSyncService and in most cases a // MockSyncBackendHost. // @@ -151,8 +164,8 @@ class ProfileSyncServiceTest : public ::testing::Test { BuildAutoIssuingFakeProfileOAuth2TokenService)); testing_facotries.push_back( std::make_pair( - invalidation::InvalidationServiceFactory::GetInstance(), - invalidation::FakeInvalidationService::Build)); + invalidation::ProfileInvalidationProviderFactory::GetInstance(), + BuildFakeProfileInvalidationProvider)); profile_ = profile_manager_.CreateTestingProfile( "sync-service-test", scoped_ptr<PrefServiceSyncable>(), diff --git a/chrome/browser/sync/test/integration/fake_server_invalidation_service.cc b/chrome/browser/sync/test/integration/fake_server_invalidation_service.cc index befe6d4..47c99c9 100644 --- a/chrome/browser/sync/test/integration/fake_server_invalidation_service.cc +++ b/chrome/browser/sync/test/integration/fake_server_invalidation_service.cc @@ -25,12 +25,6 @@ FakeServerInvalidationService::FakeServerInvalidationService() FakeServerInvalidationService::~FakeServerInvalidationService() { } -// static -KeyedService* FakeServerInvalidationService::Build( - content::BrowserContext* context) { - return new FakeServerInvalidationService(); -} - void FakeServerInvalidationService::RegisterInvalidationHandler( syncer::InvalidationHandler* handler) { invalidator_registrar_.RegisterHandler(handler); diff --git a/chrome/browser/sync/test/integration/fake_server_invalidation_service.h b/chrome/browser/sync/test/integration/fake_server_invalidation_service.h index b7813fb..af397eaf 100644 --- a/chrome/browser/sync/test/integration/fake_server_invalidation_service.h +++ b/chrome/browser/sync/test/integration/fake_server_invalidation_service.h @@ -16,10 +16,6 @@ #include "sync/internal_api/public/base/model_type.h" #include "sync/test/fake_server/fake_server.h" -namespace content { -class BrowserContext; -} - namespace invalidation { class InvalidationLogger; } @@ -33,8 +29,6 @@ class FakeServerInvalidationService : public invalidation::InvalidationService, FakeServerInvalidationService(); virtual ~FakeServerInvalidationService(); - static KeyedService* Build(content::BrowserContext* context); - virtual void RegisterInvalidationHandler( syncer::InvalidationHandler* handler) OVERRIDE; virtual void UpdateRegisteredInvalidationIds( diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc index 6a17ade..358c72c 100644 --- a/chrome/browser/sync/test/integration/sync_test.cc +++ b/chrome/browser/sync/test/integration/sync_test.cc @@ -22,7 +22,7 @@ #include "base/values.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/history/history_service_factory.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" @@ -50,9 +50,12 @@ #include "chrome/test/base/ui_test_utils.h" #include "components/bookmarks/test/bookmark_test_helpers.h" #include "components/google/core/browser/google_url_tracker.h" +#include "components/invalidation/invalidation_service.h" #include "components/invalidation/invalidation_switches.h" #include "components/invalidation/p2p_invalidation_service.h" #include "components/invalidation/p2p_invalidator.h" +#include "components/invalidation/profile_invalidation_provider.h" +#include "components/keyed_service/core/keyed_service.h" #include "components/os_crypt/os_crypt.h" #include "components/signin/core/browser/signin_manager.h" #include "content/public/browser/web_contents.h" @@ -81,7 +84,6 @@ #endif using content::BrowserThread; -using invalidation::InvalidationServiceFactory; namespace switches { const char kPasswordFileForTest[] = "password-file-for-test"; @@ -142,27 +144,36 @@ void SetProxyConfigCallback( done->Signal(); } -KeyedService* BuildP2PInvalidationService( +KeyedService* BuildFakeServerProfileInvalidationProvider( + content::BrowserContext* context) { + return new invalidation::ProfileInvalidationProvider( + scoped_ptr<invalidation::InvalidationService>( + new fake_server::FakeServerInvalidationService)); +} + +KeyedService* BuildP2PProfileInvalidationProvider( content::BrowserContext* context, syncer::P2PNotificationTarget notification_target) { Profile* profile = static_cast<Profile*>(context); - return new invalidation::P2PInvalidationService( - scoped_ptr<IdentityProvider>(new ProfileIdentityProvider( - SigninManagerFactory::GetForProfile(profile), - ProfileOAuth2TokenServiceFactory::GetForProfile(profile), - LoginUIServiceFactory::GetForProfile(profile))), - profile->GetRequestContext(), - notification_target); + return new invalidation::ProfileInvalidationProvider( + scoped_ptr<invalidation::InvalidationService>( + new invalidation::P2PInvalidationService( + scoped_ptr<IdentityProvider>(new ProfileIdentityProvider( + SigninManagerFactory::GetForProfile(profile), + ProfileOAuth2TokenServiceFactory::GetForProfile(profile), + LoginUIServiceFactory::GetForProfile(profile))), + profile->GetRequestContext(), + notification_target))); } -KeyedService* BuildSelfNotifyingP2PInvalidationService( +KeyedService* BuildSelfNotifyingP2PProfileInvalidationProvider( content::BrowserContext* context) { - return BuildP2PInvalidationService(context, syncer::NOTIFY_ALL); + return BuildP2PProfileInvalidationProvider(context, syncer::NOTIFY_ALL); } -KeyedService* BuildRealisticP2PInvalidationService( +KeyedService* BuildRealisticP2PProfileInvalidationProvider( content::BrowserContext* context) { - return BuildP2PInvalidationService(context, syncer::NOTIFY_OTHERS); + return BuildP2PProfileInvalidationProvider(context, syncer::NOTIFY_OTHERS); } } // namespace @@ -401,9 +412,12 @@ void SyncTest::InitializeInvalidations(int index) { CHECK(fake_server_.get()); fake_server::FakeServerInvalidationService* invalidation_service = static_cast<fake_server::FakeServerInvalidationService*>( - InvalidationServiceFactory::GetInstance()->SetTestingFactoryAndUse( - GetProfile(index), - fake_server::FakeServerInvalidationService::Build)); + static_cast<invalidation::ProfileInvalidationProvider*>( + invalidation::ProfileInvalidationProviderFactory:: + GetInstance()->SetTestingFactoryAndUse( + GetProfile(index), + BuildFakeServerProfileInvalidationProvider))-> + GetInvalidationService()); fake_server_->AddObserver(invalidation_service); if (TestUsesSelfNotifications()) { invalidation_service->EnableSelfNotifications(); @@ -414,11 +428,14 @@ void SyncTest::InitializeInvalidations(int index) { } else { invalidation::P2PInvalidationService* p2p_invalidation_service = static_cast<invalidation::P2PInvalidationService*>( - InvalidationServiceFactory::GetInstance()->SetTestingFactoryAndUse( - GetProfile(index), - TestUsesSelfNotifications() ? - BuildSelfNotifyingP2PInvalidationService - : BuildRealisticP2PInvalidationService)); + static_cast<invalidation::ProfileInvalidationProvider*>( + invalidation::ProfileInvalidationProviderFactory:: + GetInstance()->SetTestingFactoryAndUse( + GetProfile(index), + TestUsesSelfNotifications() ? + BuildSelfNotifyingP2PProfileInvalidationProvider : + BuildRealisticP2PProfileInvalidationProvider))-> + GetInvalidationService()); p2p_invalidation_service->UpdateCredentials(username_, password_); // Start listening for and emitting notifications of commits. invalidation_forwarders_[index] = diff --git a/chrome/browser/sync/test_profile_sync_service.cc b/chrome/browser/sync/test_profile_sync_service.cc index dac4a1f..3ea9055 100644 --- a/chrome/browser/sync/test_profile_sync_service.cc +++ b/chrome/browser/sync/test_profile_sync_service.cc @@ -5,7 +5,7 @@ #include "chrome/browser/sync/test_profile_sync_service.h" #include "chrome/browser/chrome_notification_types.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "chrome/browser/signin/signin_manager_factory.h" @@ -16,6 +16,7 @@ #include "chrome/browser/sync/profile_sync_components_factory_mock.h" #include "chrome/browser/sync/profile_sync_service_factory.h" #include "chrome/browser/sync/test/test_http_bridge_factory.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "components/signin/core/browser/signin_manager.h" #include "sync/internal_api/public/test/sync_manager_factory_for_profile_sync_test.h" #include "sync/internal_api/public/test/test_internal_components_factory.h" @@ -148,7 +149,8 @@ TestProfileSyncService* TestProfileSyncService::BuildAutoStartAsyncInit( WillOnce(testing::Return( new browser_sync::SyncBackendHostForProfileSyncTest( profile, - invalidation::InvalidationServiceFactory::GetForProfile(profile), + invalidation::ProfileInvalidationProviderFactory::GetForProfile( + profile)->GetInvalidationService(), sync_service->sync_prefs_.AsWeakPtr(), callback))); return sync_service; diff --git a/chrome/browser/ui/webui/invalidations_message_handler.cc b/chrome/browser/ui/webui/invalidations_message_handler.cc index 0d1ad30..1b2e59a 100644 --- a/chrome/browser/ui/webui/invalidations_message_handler.cc +++ b/chrome/browser/ui/webui/invalidations_message_handler.cc @@ -5,10 +5,11 @@ #include "chrome/browser/ui/webui/invalidations_message_handler.h" #include "base/bind.h" -#include "chrome/browser/invalidation/invalidation_service_factory.h" +#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h" #include "chrome/browser/profiles/profile.h" #include "components/invalidation/invalidation_logger.h" #include "components/invalidation/invalidation_service.h" +#include "components/invalidation/profile_invalidation_provider.h" #include "content/public/browser/web_ui.h" #include "sync/notifier/invalidation_handler.h" @@ -40,11 +41,13 @@ void InvalidationsMessageHandler::RegisterMessages() { } void InvalidationsMessageHandler::UIReady(const base::ListValue* args) { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile( + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( Profile::FromWebUI(web_ui())); - if (invalidation_service) - logger_ = invalidation_service->GetInvalidationLogger(); + if (invalidation_provider) { + logger_ = invalidation_provider->GetInvalidationService()-> + GetInvalidationLogger(); + } if (logger_ && !logger_->IsObserverRegistered(this)) logger_->RegisterObserver(this); UpdateContent(args); @@ -52,13 +55,13 @@ void InvalidationsMessageHandler::UIReady(const base::ListValue* args) { void InvalidationsMessageHandler::HandleRequestDetailedStatus( const base::ListValue* args) { - invalidation::InvalidationService* invalidation_service = - invalidation::InvalidationServiceFactory::GetForProfile( + invalidation::ProfileInvalidationProvider* invalidation_provider = + invalidation::ProfileInvalidationProviderFactory::GetForProfile( Profile::FromWebUI(web_ui())); - if (invalidation_service) { - invalidation_service->RequestDetailedStatus(base::Bind( - &InvalidationsMessageHandler::OnDetailedStatus, - weak_ptr_factory_.GetWeakPtr())); + if (invalidation_provider) { + invalidation_provider->GetInvalidationService()->RequestDetailedStatus( + base::Bind(&InvalidationsMessageHandler::OnDetailedStatus, + weak_ptr_factory_.GetWeakPtr())); } } diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 5d02f6b..90b94b5 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -931,8 +931,8 @@ 'browser/invalidation/invalidation_controller_android.h', 'browser/invalidation/invalidation_service_android.cc', 'browser/invalidation/invalidation_service_android.h', - 'browser/invalidation/invalidation_service_factory.cc', - 'browser/invalidation/invalidation_service_factory.h', + 'browser/invalidation/profile_invalidation_provider_factory.cc', + 'browser/invalidation/profile_invalidation_provider_factory.h', 'browser/invalidation/ticl_invalidation_service.cc', 'browser/invalidation/ticl_invalidation_service.h', 'browser/invalidation/ticl_profile_settings_provider.cc', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 53ba705..d4b6aef3 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1245,7 +1245,7 @@ 'browser/importer/importer_unittest_utils.h', 'browser/infobars/infobar_extension_apitest.cc', 'browser/infobars/infobars_browsertest.cc', - 'browser/invalidation/invalidation_service_factory_browsertest.cc', + 'browser/invalidation/profile_invalidation_provider_factory_browsertest.cc', 'browser/lifetime/browser_close_manager_browsertest.cc', 'browser/loadtimes_extension_bindings_browsertest.cc', 'browser/locale_tests_browsertest.cc', @@ -1743,7 +1743,7 @@ 'sources!': [ 'browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc', 'browser/extensions/api/terminal/terminal_private_apitest.cc', - 'browser/invalidation/invalidation_service_factory_browsertest.cc', + 'browser/invalidation/profile_invalidation_provider_factory_browsertest.cc', 'browser/net/nss_context_chromeos_browsertest.cc', 'browser/notifications/login_state_notification_blocker_chromeos_browsertest.cc', 'browser/ui/views/select_file_dialog_extension_browsertest.cc', diff --git a/components/invalidation.gypi b/components/invalidation.gypi index fc39383..5a3d91d 100644 --- a/components/invalidation.gypi +++ b/components/invalidation.gypi @@ -34,6 +34,8 @@ 'invalidation/invalidator_registrar.h', 'invalidation/invalidator_storage.cc', 'invalidation/invalidator_storage.h', + 'invalidation/profile_invalidation_provider.cc', + 'invalidation/profile_invalidation_provider.h', 'invalidation/ticl_settings_provider.cc', 'invalidation/ticl_settings_provider.h', ], diff --git a/components/invalidation/invalidation_service.h b/components/invalidation/invalidation_service.h index 7b6f3cd..cc7613d 100644 --- a/components/invalidation/invalidation_service.h +++ b/components/invalidation/invalidation_service.h @@ -6,7 +6,6 @@ #define COMPONENTS_INVALIDATION_INVALIDATION_SERVICE_H_ #include "base/callback_forward.h" -#include "components/keyed_service/core/keyed_service.h" #include "sync/internal_api/public/base/invalidator_state.h" #include "sync/notifier/invalidation_util.h" @@ -64,12 +63,10 @@ class InvalidationLogger; // NOTE(akalin): Invalidations that come in during browser shutdown may get // dropped. This won't matter once we have an Acknowledge API, though: see // http://crbug.com/78462 and http://crbug.com/124149. -// -// This class inherits from ProfileKeyedService to make it possible to correctly -// cast from various InvalidationService implementations to ProfileKeyedService -// in InvalidationServiceFactory. -class InvalidationService : public KeyedService { +class InvalidationService { public: + virtual ~InvalidationService() {} + // Starts sending notifications to |handler|. |handler| must not be NULL, // and it must not already be registered. // @@ -112,9 +109,6 @@ class InvalidationService : public KeyedService { // Returns the identity provider. virtual IdentityProvider* GetIdentityProvider() = 0; - - protected: - virtual ~InvalidationService() { } }; } // namespace invalidation diff --git a/components/invalidation/p2p_invalidation_service.cc b/components/invalidation/p2p_invalidation_service.cc index 451bddf..b24625b0 100644 --- a/components/invalidation/p2p_invalidation_service.cc +++ b/components/invalidation/p2p_invalidation_service.cc @@ -41,10 +41,6 @@ void P2PInvalidationService::UpdateCredentials(const std::string& username, invalidator_->UpdateCredentials(username, password); } -void P2PInvalidationService::Shutdown() { - invalidator_.reset(); -} - void P2PInvalidationService::RegisterInvalidationHandler( syncer::InvalidationHandler* handler) { invalidator_->RegisterHandler(handler); diff --git a/components/invalidation/p2p_invalidation_service.h b/components/invalidation/p2p_invalidation_service.h index 94276b7..a2b600b 100644 --- a/components/invalidation/p2p_invalidation_service.h +++ b/components/invalidation/p2p_invalidation_service.h @@ -27,9 +27,8 @@ class InvalidationLogger; // This service is a wrapper around P2PInvalidator. Unlike other // InvalidationServices, it can both send and receive invalidations. It is used // only in tests, where we're unable to connect to a real invalidations server. -class P2PInvalidationService - : public base::NonThreadSafe, - public InvalidationService { +class P2PInvalidationService : public base::NonThreadSafe, + public InvalidationService { public: P2PInvalidationService( scoped_ptr<IdentityProvider> identity_provider, @@ -37,11 +36,8 @@ class P2PInvalidationService syncer::P2PNotificationTarget notification_target); virtual ~P2PInvalidationService(); - // Overrides KeyedService method. - virtual void Shutdown() OVERRIDE; - // InvalidationService implementation. - // It is an error to have registered handlers when Shutdown() is called. + // It is an error to have registered handlers when the service is destroyed. virtual void RegisterInvalidationHandler( syncer::InvalidationHandler* handler) OVERRIDE; virtual void UpdateRegisteredInvalidationIds( diff --git a/components/invalidation/profile_invalidation_provider.cc b/components/invalidation/profile_invalidation_provider.cc new file mode 100644 index 0000000..ed7c44b --- /dev/null +++ b/components/invalidation/profile_invalidation_provider.cc @@ -0,0 +1,27 @@ +// Copyright 2014 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 "components/invalidation/profile_invalidation_provider.h" + +#include "components/invalidation/invalidation_service.h" + +namespace invalidation { + +ProfileInvalidationProvider::ProfileInvalidationProvider( + scoped_ptr<InvalidationService> invalidation_service) + : invalidation_service_(invalidation_service.Pass()) { +} + +ProfileInvalidationProvider::~ProfileInvalidationProvider() { +} + +InvalidationService* ProfileInvalidationProvider::GetInvalidationService() { + return invalidation_service_.get(); +} + +void ProfileInvalidationProvider::Shutdown() { + invalidation_service_.reset(); +} + +} // namespace invalidation diff --git a/components/invalidation/profile_invalidation_provider.h b/components/invalidation/profile_invalidation_provider.h new file mode 100644 index 0000000..53c0db8 --- /dev/null +++ b/components/invalidation/profile_invalidation_provider.h @@ -0,0 +1,37 @@ +// Copyright 2014 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 COMPONENTS_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_H_ +#define COMPONENTS_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_H_ + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "base/memory/scoped_ptr.h" +#include "components/keyed_service/core/keyed_service.h" + +namespace invalidation { + +class InvalidationService; + +// A KeyedService that owns an InvalidationService. +class ProfileInvalidationProvider : public KeyedService { + public: + explicit ProfileInvalidationProvider( + scoped_ptr<InvalidationService> invalidation_service); + virtual ~ProfileInvalidationProvider(); + + InvalidationService* GetInvalidationService(); + + // KeyedService: + virtual void Shutdown() OVERRIDE; + + private: + scoped_ptr<InvalidationService> invalidation_service_; + + DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationProvider); +}; + +} // namespace invalidation + +#endif // COMPONENTS_INVALIDATION_PROFILE_INVALIDATION_PROVIDER_H_ |