Commit be7b8946 authored by Marc Treib's avatar Marc Treib Committed by Commit Bot

[SyncInvalidations] Implement factories for iOS and iOS-WebView

...and wire them into the respective SyncClient implementations.
The feature flag for this service is still disabled, so this causes no
behavior change yet.

Bug: 1102314
Change-Id: I3a06470b2faf0cc9941e90024cf7ba672a70a99f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2397736
Commit-Queue: Marc Treib <treib@chromium.org>
Reviewed-by: default avatarMikel Astiz <mastiz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805418}
parent d4fb5657
......@@ -29,6 +29,8 @@ source_set("sync") {
"send_tab_to_self_sync_service_factory.mm",
"session_sync_service_factory.h",
"session_sync_service_factory.mm",
"sync_invalidations_service_factory.h",
"sync_invalidations_service_factory.mm",
"sync_observer_bridge.h",
"sync_observer_bridge.mm",
"sync_setup_service.cc",
......@@ -71,6 +73,7 @@ source_set("sync") {
"//ios/chrome/browser/dom_distiller",
"//ios/chrome/browser/favicon",
"//ios/chrome/browser/gcm",
"//ios/chrome/browser/gcm/instance_id",
"//ios/chrome/browser/history",
"//ios/chrome/browser/invalidation",
"//ios/chrome/browser/passwords",
......
......@@ -56,6 +56,7 @@
#include "ios/chrome/browser/sync/model_type_store_service_factory.h"
#include "ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.h"
#include "ios/chrome/browser/sync/session_sync_service_factory.h"
#include "ios/chrome/browser/sync/sync_invalidations_service_factory.h"
#include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
#include "ios/chrome/browser/webdata_services/web_data_service_factory.h"
#include "ios/chrome/common/channel_info.h"
......@@ -197,8 +198,7 @@ IOSChromeSyncClient::GetInvalidationService() {
syncer::SyncInvalidationsService*
IOSChromeSyncClient::GetSyncInvalidationsService() {
// TODO(crbug.com/1082122): implement sync invalidations on iOS.
return nullptr;
return SyncInvalidationsServiceFactory::GetForBrowserState(browser_state_);
}
syncer::TrustedVaultClient* IOSChromeSyncClient::GetTrustedVaultClient() {
......
......@@ -42,6 +42,7 @@
#include "ios/chrome/browser/sync/ios_user_event_service_factory.h"
#include "ios/chrome/browser/sync/model_type_store_service_factory.h"
#include "ios/chrome/browser/sync/session_sync_service_factory.h"
#include "ios/chrome/browser/sync/sync_invalidations_service_factory.h"
#include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
#include "ios/chrome/browser/webdata_services/web_data_service_factory.h"
#include "ios/chrome/common/channel_info.h"
......@@ -138,6 +139,7 @@ ProfileSyncServiceFactory::ProfileSyncServiceFactory()
DependsOn(ModelTypeStoreServiceFactory::GetInstance());
DependsOn(ReadingListModelFactory::GetInstance());
DependsOn(SessionSyncServiceFactory::GetInstance());
DependsOn(SyncInvalidationsServiceFactory::GetInstance());
}
ProfileSyncServiceFactory::~ProfileSyncServiceFactory() {}
......
// Copyright 2020 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_SYNC_SYNC_INVALIDATIONS_SERVICE_FACTORY_H_
#define IOS_CHROME_BROWSER_SYNC_SYNC_INVALIDATIONS_SERVICE_FACTORY_H_
#include <memory>
#include "base/no_destructor.h"
#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
class ChromeBrowserState;
namespace syncer {
class SyncInvalidationsService;
} // namespace syncer
class SyncInvalidationsServiceFactory : public BrowserStateKeyedServiceFactory {
public:
SyncInvalidationsServiceFactory(const SyncInvalidationsServiceFactory&) =
delete;
SyncInvalidationsServiceFactory& operator=(
const SyncInvalidationsServiceFactory&) = delete;
// Returned value may be nullptr in case if sync invalidations are disabled or
// not supported.
static syncer::SyncInvalidationsService* GetForBrowserState(
ChromeBrowserState* browser_state);
static SyncInvalidationsServiceFactory* GetInstance();
private:
friend class base::NoDestructor<SyncInvalidationsServiceFactory>;
SyncInvalidationsServiceFactory();
~SyncInvalidationsServiceFactory() override;
// BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor(
web::BrowserState* context) const override;
};
#endif // IOS_CHROME_BROWSER_SYNC_SYNC_INVALIDATIONS_SERVICE_FACTORY_H_
// Copyright 2020 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/sync/sync_invalidations_service_factory.h"
#include "components/gcm_driver/gcm_profile_service.h"
#include "components/gcm_driver/instance_id/instance_id_profile_service.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "components/sync/invalidations/switches.h"
#include "components/sync/invalidations/sync_invalidations_service_impl.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"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
// static
syncer::SyncInvalidationsService*
SyncInvalidationsServiceFactory::GetForBrowserState(
ChromeBrowserState* browser_state) {
return static_cast<syncer::SyncInvalidationsService*>(
GetInstance()->GetServiceForBrowserState(browser_state, /*create=*/true));
}
// static
SyncInvalidationsServiceFactory*
SyncInvalidationsServiceFactory::GetInstance() {
static base::NoDestructor<SyncInvalidationsServiceFactory> instance;
return instance.get();
}
SyncInvalidationsServiceFactory::SyncInvalidationsServiceFactory()
: BrowserStateKeyedServiceFactory(
"SyncInvalidationsService",
BrowserStateDependencyManager::GetInstance()) {
DependsOn(IOSChromeGCMProfileServiceFactory::GetInstance());
DependsOn(IOSChromeInstanceIDProfileServiceFactory::GetInstance());
}
SyncInvalidationsServiceFactory::~SyncInvalidationsServiceFactory() = default;
std::unique_ptr<KeyedService>
SyncInvalidationsServiceFactory::BuildServiceInstanceFor(
web::BrowserState* context) const {
if (!base::FeatureList::IsEnabled(switches::kSubscribeForSyncInvalidations)) {
return nullptr;
}
ChromeBrowserState* browser_state =
ChromeBrowserState::FromBrowserState(context);
gcm::GCMDriver* gcm_driver =
IOSChromeGCMProfileServiceFactory::GetForBrowserState(browser_state)
->driver();
instance_id::InstanceIDDriver* instance_id_driver =
IOSChromeInstanceIDProfileServiceFactory::GetForBrowserState(
browser_state)
->driver();
return std::make_unique<syncer::SyncInvalidationsServiceImpl>(
gcm_driver, instance_id_driver);
}
......@@ -205,6 +205,8 @@ source_set("web_view_sources") {
"internal/sync/web_view_profile_sync_service_factory.mm",
"internal/sync/web_view_sync_client.h",
"internal/sync/web_view_sync_client.mm",
"internal/sync/web_view_sync_invalidations_service_factory.h",
"internal/sync/web_view_sync_invalidations_service_factory.mm",
"internal/translate/cwv_translation_controller.mm",
"internal/translate/cwv_translation_controller_internal.h",
"internal/translate/cwv_translation_language.mm",
......
......@@ -32,6 +32,7 @@
#import "ios/web_view/internal/sync/web_view_model_type_store_service_factory.h"
#import "ios/web_view/internal/sync/web_view_profile_invalidation_provider_factory.h"
#import "ios/web_view/internal/sync/web_view_sync_client.h"
#import "ios/web_view/internal/sync/web_view_sync_invalidations_service_factory.h"
#include "ios/web_view/internal/web_view_browser_state.h"
#include "ios/web_view/internal/webdata_services/web_view_web_data_service_wrapper_factory.h"
#include "services/network/public/cpp/shared_url_loader_factory.h"
......@@ -73,6 +74,7 @@ WebViewProfileSyncServiceFactory::WebViewProfileSyncServiceFactory()
DependsOn(WebViewGCMProfileServiceFactory::GetInstance());
DependsOn(WebViewProfileInvalidationProviderFactory::GetInstance());
DependsOn(WebViewModelTypeStoreServiceFactory::GetInstance());
DependsOn(WebViewSyncInvalidationsServiceFactory::GetInstance());
}
WebViewProfileSyncServiceFactory::~WebViewProfileSyncServiceFactory() {}
......
......@@ -31,6 +31,7 @@
#import "ios/web_view/internal/sync/web_view_device_info_sync_service_factory.h"
#import "ios/web_view/internal/sync/web_view_model_type_store_service_factory.h"
#import "ios/web_view/internal/sync/web_view_profile_invalidation_provider_factory.h"
#import "ios/web_view/internal/sync/web_view_sync_invalidations_service_factory.h"
#include "ios/web_view/internal/webdata_services/web_view_web_data_service_wrapper_factory.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
......@@ -74,8 +75,8 @@ std::unique_ptr<WebViewSyncClient> WebViewSyncClient::Create(
WebViewProfileInvalidationProviderFactory::GetForBrowserState(
browser_state)
->GetInvalidationService(),
/*sync_invalidations_service=*/nullptr);
// TODO(crbug.com/1082122): implement sync invalidations on iOS platform.
WebViewSyncInvalidationsServiceFactory::GetForBrowserState(
browser_state));
}
WebViewSyncClient::WebViewSyncClient(
......
// Copyright 2020 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_WEB_VIEW_INTERNAL_SYNC_WEB_VIEW_SYNC_INVALIDATIONS_SERVICE_FACTORY_H_
#define IOS_WEB_VIEW_INTERNAL_SYNC_WEB_VIEW_SYNC_INVALIDATIONS_SERVICE_FACTORY_H_
#include <memory>
#include "base/no_destructor.h"
#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
namespace syncer {
class SyncInvalidationsService;
} // namespace syncer
namespace ios_web_view {
class WebViewBrowserState;
class WebViewSyncInvalidationsServiceFactory
: public BrowserStateKeyedServiceFactory {
public:
WebViewSyncInvalidationsServiceFactory(
const WebViewSyncInvalidationsServiceFactory&) = delete;
WebViewSyncInvalidationsServiceFactory& operator=(
const WebViewSyncInvalidationsServiceFactory&) = delete;
// Returned value may be nullptr in case if sync invalidations are disabled or
// not supported.
static syncer::SyncInvalidationsService* GetForBrowserState(
WebViewBrowserState* browser_state);
static WebViewSyncInvalidationsServiceFactory* GetInstance();
private:
friend class base::NoDestructor<WebViewSyncInvalidationsServiceFactory>;
WebViewSyncInvalidationsServiceFactory();
~WebViewSyncInvalidationsServiceFactory() override;
// BrowserStateKeyedServiceFactory implementation.
std::unique_ptr<KeyedService> BuildServiceInstanceFor(
web::BrowserState* context) const override;
};
} // namespace ios_web_view
#endif // IOS_WEB_VIEW_INTERNAL_SYNC_WEB_VIEW_SYNC_INVALIDATIONS_SERVICE_FACTORY_H_
// Copyright 2020 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/web_view/internal/sync/web_view_sync_invalidations_service_factory.h"
#include "components/gcm_driver/gcm_profile_service.h"
#include "components/gcm_driver/instance_id/instance_id_profile_service.h"
#include "components/keyed_service/ios/browser_state_dependency_manager.h"
#include "components/sync/invalidations/switches.h"
#include "components/sync/invalidations/sync_invalidations_service_impl.h"
#include "ios/web_view/internal/sync/web_view_gcm_profile_service_factory.h"
#include "ios/web_view/internal/sync/web_view_instance_id_profile_service_factory.h"
#include "ios/web_view/internal/web_view_browser_state.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace ios_web_view {
// static
syncer::SyncInvalidationsService*
WebViewSyncInvalidationsServiceFactory::GetForBrowserState(
WebViewBrowserState* browser_state) {
return static_cast<syncer::SyncInvalidationsService*>(
GetInstance()->GetServiceForBrowserState(browser_state, /*create=*/true));
}
// static
WebViewSyncInvalidationsServiceFactory*
WebViewSyncInvalidationsServiceFactory::GetInstance() {
static base::NoDestructor<WebViewSyncInvalidationsServiceFactory> instance;
return instance.get();
}
WebViewSyncInvalidationsServiceFactory::WebViewSyncInvalidationsServiceFactory()
: BrowserStateKeyedServiceFactory(
"SyncInvalidationsService",
BrowserStateDependencyManager::GetInstance()) {
DependsOn(WebViewGCMProfileServiceFactory::GetInstance());
DependsOn(WebViewInstanceIDProfileServiceFactory::GetInstance());
}
WebViewSyncInvalidationsServiceFactory::
~WebViewSyncInvalidationsServiceFactory() = default;
std::unique_ptr<KeyedService>
WebViewSyncInvalidationsServiceFactory::BuildServiceInstanceFor(
web::BrowserState* context) const {
if (!base::FeatureList::IsEnabled(switches::kSubscribeForSyncInvalidations)) {
return nullptr;
}
WebViewBrowserState* browser_state =
WebViewBrowserState::FromBrowserState(context);
gcm::GCMDriver* gcm_driver =
WebViewGCMProfileServiceFactory::GetForBrowserState(browser_state)
->driver();
instance_id::InstanceIDDriver* instance_id_driver =
WebViewInstanceIDProfileServiceFactory::GetForBrowserState(browser_state)
->driver();
return std::make_unique<syncer::SyncInvalidationsServiceImpl>(
gcm_driver, instance_id_driver);
}
} // namespace ios_web_view
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