[SendTabToSelf] add Sync Plumbing for STTS datatype on IOS
Adding objective-c factories and sync clients for SendTabToSelf,
and changing browser_sync code to make use of those new classes.
Bug: 910390
Change-Id: Ieae03174e8c1ff02e2e2de845247f037e805a811
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1488118
Commit-Queue: Jeffrey Cohen <jeffreycohen@chromium.org>
Reviewed-by: Peter Lee <pkl@chromium.org>
Reviewed-by: Mikel Astiz <mastiz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#643392}
diff --git a/chrome/browser/sync/chrome_sync_client.cc b/chrome/browser/sync/chrome_sync_client.cc
index 72997ff7..dcb41ac 100644
--- a/chrome/browser/sync/chrome_sync_client.cc
+++ b/chrome/browser/sync/chrome_sync_client.cc
@@ -257,6 +257,12 @@
profile_, ServiceAccessType::EXPLICIT_ACCESS);
}
+send_tab_to_self::SendTabToSelfSyncService*
+ChromeSyncClient::GetSendTabToSelfSyncService() {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ return SendTabToSelfSyncServiceFactory::GetForProfile(profile_);
+}
+
sync_sessions::SessionSyncService* ChromeSyncClient::GetSessionSyncService() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
return SessionSyncServiceFactory::GetForProfile(profile_);
@@ -458,16 +464,6 @@
}
#endif // defined(OS_CHROMEOS)
- if (!disabled_types.Has(syncer::SEND_TAB_TO_SELF) &&
- base::FeatureList::IsEnabled(switches::kSyncSendTabToSelf)) {
- controllers.push_back(std::make_unique<syncer::ModelTypeController>(
- syncer::SEND_TAB_TO_SELF,
- std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(
- SendTabToSelfSyncServiceFactory::GetForProfile(profile_)
- ->GetControllerDelegate()
- .get())));
- }
-
return controllers;
}
diff --git a/chrome/browser/sync/chrome_sync_client.h b/chrome/browser/sync/chrome_sync_client.h
index e4891d6..b1a729a 100644
--- a/chrome/browser/sync/chrome_sync_client.h
+++ b/chrome/browser/sync/chrome_sync_client.h
@@ -45,6 +45,8 @@
bookmarks::BookmarkModel* GetBookmarkModel() override;
favicon::FaviconService* GetFaviconService() override;
history::HistoryService* GetHistoryService() override;
+ send_tab_to_self::SendTabToSelfSyncService* GetSendTabToSelfSyncService()
+ override;
sync_sessions::SessionSyncService* GetSessionSyncService() override;
base::Closure GetPasswordStateChangedCallback() override;
syncer::DataTypeController::TypeVector CreateDataTypeControllers(
diff --git a/components/browser_sync/BUILD.gn b/components/browser_sync/BUILD.gn
index f0f1f6f..026adef8 100644
--- a/components/browser_sync/BUILD.gn
+++ b/components/browser_sync/BUILD.gn
@@ -32,6 +32,7 @@
"//components/password_manager/core/browser",
"//components/prefs",
"//components/reading_list/features:flags",
+ "//components/send_tab_to_self",
"//components/signin/core/browser",
"//components/sync_bookmarks",
"//components/sync_sessions",
diff --git a/components/browser_sync/browser_sync_client.h b/components/browser_sync/browser_sync_client.h
index a628137..fc6f687 100644
--- a/components/browser_sync/browser_sync_client.h
+++ b/components/browser_sync/browser_sync_client.h
@@ -30,6 +30,10 @@
class HistoryService;
} // namespace history
+namespace send_tab_to_self {
+class SendTabToSelfSyncService;
+} // namespace send_tab_to_self
+
namespace sync_sessions {
class SessionSyncService;
} // namespace sync_sessions
@@ -62,6 +66,8 @@
virtual favicon::FaviconService* GetFaviconService() = 0;
virtual history::HistoryService* GetHistoryService() = 0;
virtual sync_sessions::SessionSyncService* GetSessionSyncService() = 0;
+ virtual send_tab_to_self::SendTabToSelfSyncService*
+ GetSendTabToSelfSyncService() = 0;
virtual autofill::PersonalDataManager* GetPersonalDataManager() = 0;
virtual BookmarkUndoService* GetBookmarkUndoService() = 0;
virtual base::RepeatingClosure GetPasswordStateChangedCallback() = 0;
diff --git a/components/browser_sync/profile_sync_components_factory_impl.cc b/components/browser_sync/profile_sync_components_factory_impl.cc
index 8ea99da..85e9d71 100644
--- a/components/browser_sync/profile_sync_components_factory_impl.cc
+++ b/components/browser_sync/profile_sync_components_factory_impl.cc
@@ -31,6 +31,7 @@
#include "components/password_manager/core/browser/sync/password_model_type_controller.h"
#include "components/prefs/pref_service.h"
#include "components/reading_list/features/reading_list_switches.h"
+#include "components/send_tab_to_self/send_tab_to_self_sync_service.h"
#include "components/sync/base/report_unrecoverable_error.h"
#include "components/sync/device_info/device_info_sync_service.h"
#include "components/sync/driver/async_directory_type_controller.h"
@@ -404,6 +405,16 @@
syncer::USER_EVENTS));
}
+ if (!disabled_types.Has(syncer::SEND_TAB_TO_SELF) &&
+ base::FeatureList::IsEnabled(switches::kSyncSendTabToSelf)) {
+ controllers.push_back(std::make_unique<syncer::ModelTypeController>(
+ syncer::SEND_TAB_TO_SELF,
+ std::make_unique<syncer::ForwardingModelTypeControllerDelegate>(
+ sync_client_->GetSendTabToSelfSyncService()
+ ->GetControllerDelegate()
+ .get())));
+ }
+
// TODO(crbug.com/919489): Enable security events once their controller
// delegate is wired properly.
diff --git a/ios/chrome/browser/BUILD.gn b/ios/chrome/browser/BUILD.gn
index ed6df48..13664c2 100644
--- a/ios/chrome/browser/BUILD.gn
+++ b/ios/chrome/browser/BUILD.gn
@@ -105,6 +105,7 @@
"//components/search_engines",
"//components/search_provider_logos",
"//components/security_state/core",
+ "//components/send_tab_to_self",
"//components/signin/core/browser",
"//components/strings",
"//components/sync",
diff --git a/ios/chrome/browser/DEPS b/ios/chrome/browser/DEPS
index 7bb2e46..e90b9876 100644
--- a/ios/chrome/browser/DEPS
+++ b/ios/chrome/browser/DEPS
@@ -68,6 +68,7 @@
"+components/search_provider_logos",
"+components/security_interstitials",
"+components/security_state",
+ "+components/send_tab_to_self",
"+components/services/unzip",
"+components/sessions",
"+components/signin/core/browser",
diff --git a/ios/chrome/browser/sync/BUILD.gn b/ios/chrome/browser/sync/BUILD.gn
index a37bd58d..9a9af94 100644
--- a/ios/chrome/browser/sync/BUILD.gn
+++ b/ios/chrome/browser/sync/BUILD.gn
@@ -23,6 +23,8 @@
"model_type_store_service_factory.h",
"profile_sync_service_factory.cc",
"profile_sync_service_factory.h",
+ "send_tab_to_self_sync_service_factory.h",
+ "send_tab_to_self_sync_service_factory.mm",
"session_sync_service_factory.h",
"session_sync_service_factory.mm",
"sync_observer_bridge.h",
@@ -48,6 +50,7 @@
"//components/prefs",
"//components/reading_list/core",
"//components/search_engines",
+ "//components/send_tab_to_self",
"//components/sessions",
"//components/signin/core/browser",
"//components/sync",
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.h b/ios/chrome/browser/sync/ios_chrome_sync_client.h
index 9056c41..c70e319 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.h
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.h
@@ -39,6 +39,8 @@
base::FilePath GetLocalSyncBackendFolder() override;
syncer::ModelTypeStoreService* GetModelTypeStoreService() override;
syncer::DeviceInfoSyncService* GetDeviceInfoSyncService() override;
+ send_tab_to_self::SendTabToSelfSyncService* GetSendTabToSelfSyncService()
+ override;
bookmarks::BookmarkModel* GetBookmarkModel() override;
favicon::FaviconService* GetFaviconService() override;
history::HistoryService* GetHistoryService() override;
diff --git a/ios/chrome/browser/sync/ios_chrome_sync_client.mm b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
index 66d0efd..9fb1104 100644
--- a/ios/chrome/browser/sync/ios_chrome_sync_client.mm
+++ b/ios/chrome/browser/sync/ios_chrome_sync_client.mm
@@ -62,6 +62,7 @@
#include "ios/chrome/browser/sync/device_info_sync_service_factory.h"
#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/send_tab_to_self_sync_service_factory.h"
#include "ios/chrome/browser/sync/session_sync_service_factory.h"
#include "ios/chrome/browser/undo/bookmark_undo_service_factory.h"
#include "ios/chrome/browser/web_data_service_factory.h"
@@ -137,6 +138,12 @@
return DeviceInfoSyncServiceFactory::GetForBrowserState(browser_state_);
}
+send_tab_to_self::SendTabToSelfSyncService*
+IOSChromeSyncClient::GetSendTabToSelfSyncService() {
+ DCHECK_CURRENTLY_ON(web::WebThread::UI);
+ return SendTabToSelfSyncServiceFactory::GetForBrowserState(browser_state_);
+}
+
bookmarks::BookmarkModel* IOSChromeSyncClient::GetBookmarkModel() {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
return ios::BookmarkModelFactory::GetForBrowserState(browser_state_);
diff --git a/ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.h b/ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.h
new file mode 100644
index 0000000..931140a
--- /dev/null
+++ b/ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.h
@@ -0,0 +1,44 @@
+// Copyright 2019 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_SEND_TAB_TO_SELF_SYNC_SERVICE_FACTORY_H_
+#define IOS_CHROME_BROWSER_SYNC_SEND_TAB_TO_SELF_SYNC_SERVICE_FACTORY_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/no_destructor.h"
+#include "components/keyed_service/ios/browser_state_keyed_service_factory.h"
+
+namespace send_tab_to_self {
+class SendTabToSelfSyncService;
+} // namespace send_tab_to_self
+
+namespace ios {
+class ChromeBrowserState;
+} // namespace ios
+
+// Singleton that owns all SendTabToSelfSyncService and associates them with
+// ios::ChromeBrowserState.
+class SendTabToSelfSyncServiceFactory : public BrowserStateKeyedServiceFactory {
+ public:
+ static send_tab_to_self::SendTabToSelfSyncService* GetForBrowserState(
+ ios::ChromeBrowserState* browser_state);
+
+ static SendTabToSelfSyncServiceFactory* GetInstance();
+
+ private:
+ friend class base::NoDestructor<SendTabToSelfSyncServiceFactory>;
+
+ SendTabToSelfSyncServiceFactory();
+ ~SendTabToSelfSyncServiceFactory() override;
+
+ // BrowserStateKeyedServiceFactory implementation.
+ std::unique_ptr<KeyedService> BuildServiceInstanceFor(
+ web::BrowserState* context) const override;
+
+ DISALLOW_COPY_AND_ASSIGN(SendTabToSelfSyncServiceFactory);
+};
+
+#endif // IOS_CHROME_BROWSER_SYNC_SEND_TAB_TO_SELF_SYNC_SERVICE_FACTORY_H_
diff --git a/ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.mm b/ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.mm
new file mode 100644
index 0000000..0513c44
--- /dev/null
+++ b/ios/chrome/browser/sync/send_tab_to_self_sync_service_factory.mm
@@ -0,0 +1,70 @@
+// Copyright 2019 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/send_tab_to_self_sync_service_factory.h"
+
+#include "components/keyed_service/core/service_access_type.h"
+#include "components/keyed_service/ios/browser_state_dependency_manager.h"
+#include "components/send_tab_to_self/send_tab_to_self_sync_service.h"
+#include "components/sync/device_info/device_info_sync_service.h"
+#include "components/sync/device_info/local_device_info_provider.h"
+#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
+#include "ios/chrome/browser/history/history_service_factory.h"
+#include "ios/chrome/browser/sync/device_info_sync_service_factory.h"
+#include "ios/chrome/browser/sync/model_type_store_service_factory.h"
+#include "ios/chrome/common/channel_info.h"
+
+#if !defined(__has_feature) || !__has_feature(objc_arc)
+#error "This file requires ARC support."
+#endif
+
+using send_tab_to_self::SendTabToSelfSyncService;
+
+// static
+SendTabToSelfSyncServiceFactory*
+SendTabToSelfSyncServiceFactory::GetInstance() {
+ static base::NoDestructor<SendTabToSelfSyncServiceFactory> instance;
+ return instance.get();
+}
+
+// static
+SendTabToSelfSyncService* SendTabToSelfSyncServiceFactory::GetForBrowserState(
+ ios::ChromeBrowserState* browser_state) {
+ return static_cast<SendTabToSelfSyncService*>(
+ GetInstance()->GetServiceForBrowserState(browser_state, true));
+}
+
+SendTabToSelfSyncServiceFactory::SendTabToSelfSyncServiceFactory()
+ : BrowserStateKeyedServiceFactory(
+ "SendTabToSelfSyncService",
+ BrowserStateDependencyManager::GetInstance()) {
+ DependsOn(DeviceInfoSyncServiceFactory::GetInstance());
+ DependsOn(ModelTypeStoreServiceFactory::GetInstance());
+ DependsOn(ios::HistoryServiceFactory::GetInstance());
+}
+
+SendTabToSelfSyncServiceFactory::~SendTabToSelfSyncServiceFactory() {}
+
+std::unique_ptr<KeyedService>
+SendTabToSelfSyncServiceFactory::BuildServiceInstanceFor(
+ web::BrowserState* context) const {
+ ios::ChromeBrowserState* browser_state =
+ ios::ChromeBrowserState::FromBrowserState(context);
+
+ syncer::LocalDeviceInfoProvider* local_device_info_provider =
+ DeviceInfoSyncServiceFactory::GetForBrowserState(browser_state)
+ ->GetLocalDeviceInfoProvider();
+
+ syncer::OnceModelTypeStoreFactory store_factory =
+ ModelTypeStoreServiceFactory::GetForBrowserState(browser_state)
+ ->GetStoreFactory();
+
+ history::HistoryService* history_service =
+ ios::HistoryServiceFactory::GetForBrowserState(
+ browser_state, ServiceAccessType::EXPLICIT_ACCESS);
+
+ return std::make_unique<SendTabToSelfSyncService>(
+ GetChannel(), local_device_info_provider, std::move(store_factory),
+ history_service);
+}
diff --git a/ios/web_view/internal/sync/web_view_sync_client.h b/ios/web_view/internal/sync/web_view_sync_client.h
index f106829..7db2ba2 100644
--- a/ios/web_view/internal/sync/web_view_sync_client.h
+++ b/ios/web_view/internal/sync/web_view_sync_client.h
@@ -45,6 +45,8 @@
bookmarks::BookmarkModel* GetBookmarkModel() override;
favicon::FaviconService* GetFaviconService() override;
history::HistoryService* GetHistoryService() override;
+ send_tab_to_self::SendTabToSelfSyncService* GetSendTabToSelfSyncService()
+ override;
sync_sessions::SessionSyncService* GetSessionSyncService() override;
base::RepeatingClosure GetPasswordStateChangedCallback() override;
syncer::DataTypeController::TypeVector CreateDataTypeControllers(
diff --git a/ios/web_view/internal/sync/web_view_sync_client.mm b/ios/web_view/internal/sync/web_view_sync_client.mm
index 33003c7..19ccab4 100644
--- a/ios/web_view/internal/sync/web_view_sync_client.mm
+++ b/ios/web_view/internal/sync/web_view_sync_client.mm
@@ -125,6 +125,11 @@
return nullptr;
}
+send_tab_to_self::SendTabToSelfSyncService*
+WebViewSyncClient::GetSendTabToSelfSyncService() {
+ return nullptr;
+}
+
autofill::PersonalDataManager* WebViewSyncClient::GetPersonalDataManager() {
DCHECK_CURRENTLY_ON(web::WebThread::UI);
return WebViewPersonalDataManagerFactory::GetForBrowserState(browser_state_);