Commit 379a2b51 authored by Tanja Gornak's avatar Tanja Gornak Committed by Commit Bot

[Tango->FCM] IOS.InvalidationProviderFactory, which uses FCMInvalidationService.

Bug: 801985, 894501
Cq-Include-Trybots: luci.chromium.try:ios-simulator-cronet;luci.chromium.try:ios-simulator-full-configs
Change-Id: I20613ab10fbce214fcd9f430ae9e9d09913429c4
Reviewed-on: https://chromium-review.googlesource.com/c/1276648Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Commit-Queue: Tatiana Gornak <melandory@chromium.org>
Cr-Commit-Position: refs/heads/master@{#599504}
parent ca7c8b17
......@@ -7,11 +7,14 @@ source_set("invalidation") {
sources = [
"ios_chrome_deprecated_profile_invalidation_provider_factory.h",
"ios_chrome_deprecated_profile_invalidation_provider_factory.mm",
"ios_chrome_profile_invalidation_provider_factory.h",
"ios_chrome_profile_invalidation_provider_factory.mm",
]
deps = [
"//base",
"//components/gcm_driver",
"//components/invalidation/impl",
"//components/invalidation/impl:json_unsafe_parser",
"//components/keyed_service/ios",
"//components/pref_registry",
"//components/prefs",
......@@ -19,6 +22,7 @@ source_set("invalidation") {
"//ios/chrome/browser",
"//ios/chrome/browser/browser_state",
"//ios/chrome/browser/gcm",
"//ios/chrome/browser/gcm/instance_id",
"//ios/chrome/browser/signin",
"//ios/web",
"//net",
......
// Copyright 2018 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 IOS_CHROME_BROWSER_INVALIDATION_IOS_CHROME_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_
#define IOS_CHROME_BROWSER_INVALIDATION_IOS_CHROME_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_
#include <memory>
#include "base/macros.h"
#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
namespace base {
template <typename T>
struct DefaultSingletonTraits;
}
namespace invalidation {
class ProfileInvalidationProvider;
}
namespace ios {
class ChromeBrowserState;
}
// A BrowserContextKeyedServiceFactory to construct InvalidationServices wrapped
// in ProfileInvalidationProviders.
class IOSChromeProfileInvalidationProviderFactory
: public BrowserStateKeyedServiceFactory {
public:
// Returns the ProfileInvalidationProvider for the given |browser_state|,
// lazily creating one first if required.
static invalidation::ProfileInvalidationProvider* GetForBrowserState(
ios::ChromeBrowserState* browser_state);
static IOSChromeProfileInvalidationProviderFactory* GetInstance();
private:
friend struct base::DefaultSingletonTraits<
IOSChromeProfileInvalidationProviderFactory>;
IOSChromeProfileInvalidationProviderFactory();
~IOSChromeProfileInvalidationProviderFactory() override;
// BrowserStateKeyedServiceFactory:
std::unique_ptr<KeyedService> BuildServiceInstanceFor(
web::BrowserState* context) const override;
DISALLOW_COPY_AND_ASSIGN(IOSChromeProfileInvalidationProviderFactory);
};
#endif // IOS_CHROME_BROWSER_INVALIDATION_IOS_CHROME_PROFILE_INVALIDATION_PROVIDER_FACTORY_H_
// Copyright 2018 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 "ios/chrome/browser/invalidation/ios_chrome_profile_invalidation_provider_factory.h"
#include <memory>
#include <utility>
#include "base/callback.h"
#include "base/memory/singleton.h"
#include "components/gcm_driver/gcm_profile_service.h"
#include "components/gcm_driver/instance_id/instance_id_profile_service.h"
#include "components/invalidation/impl/fcm_invalidation_service.h"
#include "components/invalidation/impl/invalidator_storage.h"
#include "components/invalidation/impl/json_unsafe_parser.h"
#include "components/invalidation/impl/profile_identity_provider.h"
#include "components/invalidation/impl/profile_invalidation_provider.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_registry.h"
#include "components/signin/core/browser/signin_manager.h"
#include "ios/chrome/browser/application_context.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/gcm/instance_id/ios_chrome_instance_id_profile_service_factory.h"
#include "ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.h"
#include "ios/chrome/browser/signin/identity_manager_factory.h"
#include "ios/web/public/web_client.h"
#include "net/url_request/url_request_context_getter.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using invalidation::ProfileInvalidationProvider;
// static
invalidation::ProfileInvalidationProvider*
IOSChromeProfileInvalidationProviderFactory::GetForBrowserState(
ios::ChromeBrowserState* browser_state) {
return static_cast<ProfileInvalidationProvider*>(
GetInstance()->GetServiceForBrowserState(browser_state, true));
}
// static
IOSChromeProfileInvalidationProviderFactory*
IOSChromeProfileInvalidationProviderFactory::GetInstance() {
return base::Singleton<IOSChromeProfileInvalidationProviderFactory>::get();
}
IOSChromeProfileInvalidationProviderFactory::
IOSChromeProfileInvalidationProviderFactory()
: BrowserStateKeyedServiceFactory(
"InvalidationService",
BrowserStateDependencyManager::GetInstance()) {
DependsOn(IdentityManagerFactory::GetInstance());
DependsOn(IOSChromeGCMProfileServiceFactory::GetInstance());
DependsOn(IOSChromeInstanceIDProfileServiceFactory::GetInstance());
}
IOSChromeProfileInvalidationProviderFactory::
~IOSChromeProfileInvalidationProviderFactory() {}
std::unique_ptr<KeyedService>
IOSChromeProfileInvalidationProviderFactory::BuildServiceInstanceFor(
web::BrowserState* context) const {
ios::ChromeBrowserState* browser_state =
ios::ChromeBrowserState::FromBrowserState(context);
auto identity_provider =
std::make_unique<invalidation::ProfileIdentityProvider>(
IdentityManagerFactory::GetForBrowserState(browser_state));
std::unique_ptr<invalidation::FCMInvalidationService> service =
std::make_unique<invalidation::FCMInvalidationService>(
identity_provider.get(),
IOSChromeGCMProfileServiceFactory::GetForBrowserState(browser_state)
->driver(),
IOSChromeInstanceIDProfileServiceFactory::GetForBrowserState(
browser_state)
->driver(),
browser_state->GetPrefs(),
base::BindRepeating(&syncer::JsonUnsafeParser::Parse),
browser_state->GetURLLoaderFactory());
service->Init();
return std::make_unique<ProfileInvalidationProvider>(
std::move(service), std::move(identity_provider));
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment