summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-12 16:55:35 +0000
committerbartfab@chromium.org <bartfab@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-12 16:55:35 +0000
commitd03d2e1c530c0329de57e31e76390defe6cad676 (patch)
treedabe4be9eeb91d810ba2e8daea1995c88acee42d
parent9ba666117ed56d6ff4b1e058f9027798faa31b22 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/drive/DEPS6
-rw-r--r--chrome/browser/drive/drive_notification_manager.cc1
-rw-r--r--chrome/browser/drive/drive_notification_manager_factory.cc17
-rw-r--r--chrome/browser/extensions/api/push_messaging/push_messaging_api.cc54
-rw-r--r--chrome/browser/extensions/api/push_messaging/push_messaging_apitest.cc25
-rw-r--r--chrome/browser/invalidation/fake_invalidation_service.cc5
-rw-r--r--chrome/browser/invalidation/fake_invalidation_service.h6
-rw-r--r--chrome/browser/invalidation/invalidation_service_android_unittest.cc13
-rw-r--r--chrome/browser/invalidation/invalidation_service_factory.h66
-rw-r--r--chrome/browser/invalidation/invalidation_service_factory_browsertest.cc123
-rw-r--r--chrome/browser/invalidation/profile_invalidation_provider_factory.cc (renamed from chrome/browser/invalidation/invalidation_service_factory.cc)40
-rw-r--r--chrome/browser/invalidation/profile_invalidation_provider_factory.h65
-rw-r--r--chrome/browser/invalidation/profile_invalidation_provider_factory_browsertest.cc127
-rw-r--r--chrome/browser/invalidation/ticl_invalidation_service.cc18
-rw-r--r--chrome/browser/invalidation/ticl_invalidation_service.h5
-rw-r--r--chrome/browser/invalidation/ticl_invalidation_service_unittest.cc3
-rw-r--r--chrome/browser/invalidation/ticl_profile_settings_provider_unittest.cc2
-rw-r--r--chrome/browser/policy/cloud/cloud_policy_browsertest.cc25
-rw-r--r--chrome/browser/policy/cloud/user_cloud_policy_invalidator.cc11
-rw-r--r--chrome/browser/policy/cloud/user_cloud_policy_invalidator_factory.cc4
-rw-r--r--chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc4
-rw-r--r--chrome/browser/sync/glue/sync_backend_host_impl_unittest.cc6
-rw-r--r--chrome/browser/sync/profile_sync_service.cc14
-rw-r--r--chrome/browser/sync/profile_sync_service_factory.cc4
-rw-r--r--chrome/browser/sync/profile_sync_service_typed_url_unittest.cc19
-rw-r--r--chrome/browser/sync/profile_sync_service_unittest.cc19
-rw-r--r--chrome/browser/sync/test/integration/fake_server_invalidation_service.cc6
-rw-r--r--chrome/browser/sync/test/integration/fake_server_invalidation_service.h6
-rw-r--r--chrome/browser/sync/test/integration/sync_test.cc61
-rw-r--r--chrome/browser/sync/test_profile_sync_service.cc6
-rw-r--r--chrome/browser/ui/webui/invalidations_message_handler.cc25
-rw-r--r--chrome/chrome_browser.gypi4
-rw-r--r--chrome/chrome_tests.gypi4
-rw-r--r--components/invalidation.gypi2
-rw-r--r--components/invalidation/invalidation_service.h12
-rw-r--r--components/invalidation/p2p_invalidation_service.cc4
-rw-r--r--components/invalidation/p2p_invalidation_service.h10
-rw-r--r--components/invalidation/profile_invalidation_provider.cc27
-rw-r--r--components/invalidation/profile_invalidation_provider.h37
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_