From 2b528b08b0958e8631ece758fca290b7cda22f55 Mon Sep 17 00:00:00 2001 From: Anthony Tseng Date: Tue, 1 Sep 2020 17:33:17 -0700 Subject: [PATCH] Move Get/Set sync code and reset sync to BraveProfileSyncService on desktop --- .../ui/webui/settings/brave_sync_handler.cc | 62 ++++++----------- .../ui/webui/settings/brave_sync_handler.h | 2 +- .../driver/brave_sync_profile_sync_service.cc | 69 ++++++++++++++++--- .../driver/brave_sync_profile_sync_service.h | 15 ++++ 4 files changed, 99 insertions(+), 49 deletions(-) diff --git a/browser/ui/webui/settings/brave_sync_handler.cc b/browser/ui/webui/settings/brave_sync_handler.cc index 1d1e9320666..5f11a1127d7 100644 --- a/browser/ui/webui/settings/brave_sync_handler.cc +++ b/browser/ui/webui/settings/brave_sync_handler.cc @@ -13,6 +13,7 @@ #include "base/strings/string_number_conversions.h" #include "brave/components/brave_sync/brave_sync_prefs.h" #include "brave/components/brave_sync/crypto/crypto.h" +#include "brave/components/sync/driver/brave_sync_profile_sync_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sync/device_info_sync_service_factory.h" #include "chrome/browser/sync/profile_sync_service_factory.h" @@ -83,12 +84,11 @@ void BraveSyncHandler::HandleGetSyncCode(const base::ListValue* args) { const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); - brave_sync::Prefs brave_sync_prefs(profile_->GetPrefs()); - std::string sync_code = brave_sync_prefs.GetSeed(); - if (sync_code.empty()) { - std::vector seed = brave_sync::crypto::GetSeed(); - sync_code = brave_sync::crypto::PassphraseFromBytes32(seed); - } + auto* sync_service = + static_cast(GetSyncService()); + std::string sync_code; + if (sync_service) + sync_code = sync_service->GetOrCreateSyncCode(); ResolveJavascriptCallback(*callback_id, base::Value(sync_code)); } @@ -154,17 +154,13 @@ void BraveSyncHandler::HandleSetSyncCode(const base::ListValue* args) { return; } - std::vector seed; - if (!brave_sync::crypto::PassphraseToBytes32(sync_code->GetString(), &seed)) { - LOG(ERROR) << "invalid sync code"; + auto* sync_service = + static_cast(GetSyncService()); + if (!sync_service || !sync_service->SetSyncCode(sync_code->GetString())) { RejectJavascriptCallback(*callback_id, base::Value(false)); return; } - brave_sync::Prefs brave_sync_prefs(profile_->GetPrefs()); - if (!brave_sync_prefs.SetSeed(sync_code->GetString())) { - ResolveJavascriptCallback(*callback_id, base::Value(false)); - return; - } + ResolveJavascriptCallback(*callback_id, base::Value(true)); } @@ -173,25 +169,21 @@ void BraveSyncHandler::HandleReset(const base::ListValue* args) { CHECK_EQ(1U, args->GetSize()); const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); - base::Value callback_id_arg(callback_id->Clone()); - auto* sync_service = GetSyncService(); - // Do not send self deleted commit if engine is not up and running - if (!sync_service || sync_service->GetTransportState() != - syncer::SyncService::TransportState::ACTIVE) { - OnSelfDeleted(std::move(callback_id_arg)); + auto* sync_service = + static_cast(GetSyncService()); + if (!sync_service) { + ResolveJavascriptCallback(*callback_id, base::Value(true)); return; } - syncer::DeviceInfoTracker* tracker = GetDeviceInfoTracker(); - DCHECK(tracker); - const syncer::DeviceInfo* local_device_info = - GetLocalDeviceInfoProvider()->GetLocalDeviceInfo(); - - tracker->DeleteDeviceInfo(local_device_info->guid(), - base::BindOnce(&BraveSyncHandler::OnSelfDeleted, - weak_ptr_factory_.GetWeakPtr(), - std::move(callback_id_arg))); + base::Value callback_id_arg(callback_id->Clone()); + auto* device_info_sync_service = + DeviceInfoSyncServiceFactory::GetForProfile(profile_); + sync_service->ResetSync(device_info_sync_service, + base::BindOnce(&BraveSyncHandler::OnResetDone, + weak_ptr_factory_.GetWeakPtr(), + std::move(callback_id_arg))); } syncer::SyncService* BraveSyncHandler::GetSyncService() const { @@ -213,17 +205,7 @@ syncer::LocalDeviceInfoProvider* BraveSyncHandler::GetLocalDeviceInfoProvider() return device_info_sync_service->GetLocalDeviceInfoProvider(); } -void BraveSyncHandler::OnSelfDeleted(base::Value callback_id) { - auto* sync_service = GetSyncService(); - if (sync_service) { - // This function will follow normal reset process and set SyncRequested to - // false - sync_service->StopAndClear(); - } - brave_sync::Prefs brave_sync_prefs(profile_->GetPrefs()); - brave_sync_prefs.Clear(); - // Sync prefs will be clear in ProfileSyncService::StopImpl - +void BraveSyncHandler::OnResetDone(base::Value callback_id) { ResolveJavascriptCallback(callback_id, base::Value(true)); } diff --git a/browser/ui/webui/settings/brave_sync_handler.h b/browser/ui/webui/settings/brave_sync_handler.h index 1785544160f..da6f4a5cb37 100644 --- a/browser/ui/webui/settings/brave_sync_handler.h +++ b/browser/ui/webui/settings/brave_sync_handler.h @@ -42,7 +42,7 @@ class BraveSyncHandler : public settings::SettingsPageUIHandler, void HandleGetQRCode(const base::ListValue* args); void HandleReset(const base::ListValue* args); - void OnSelfDeleted(base::Value callback_id); + void OnResetDone(base::Value callback_id); base::Value GetSyncDeviceList(); syncer::SyncService* GetSyncService() const; diff --git a/components/sync/driver/brave_sync_profile_sync_service.cc b/components/sync/driver/brave_sync_profile_sync_service.cc index a8c3c2d8e0e..951f81b05b2 100644 --- a/components/sync/driver/brave_sync_profile_sync_service.cc +++ b/components/sync/driver/brave_sync_profile_sync_service.cc @@ -6,26 +6,31 @@ #include "brave/components/sync/driver/brave_sync_profile_sync_service.h" #include +#include #include "base/logging.h" -#include "brave/components/brave_sync/brave_sync_prefs.h" +#include "brave/components/brave_sync/crypto/crypto.h" #include "brave/components/sync/driver/brave_sync_auth_manager.h" #include "components/prefs/pref_service.h" +#include "components/sync_device_info/device_info_sync_service.h" +#include "components/sync_device_info/device_info_tracker.h" +#include "components/sync_device_info/local_device_info_provider.h" namespace syncer { BraveProfileSyncService::BraveProfileSyncService(InitParams init_params) - : ProfileSyncService(std::move(init_params)) { + : ProfileSyncService(std::move(init_params)), + brave_sync_prefs_(sync_client_->GetPrefService()), + weak_ptr_factory_(this) { brave_sync_prefs_change_registrar_.Init(sync_client_->GetPrefService()); brave_sync_prefs_change_registrar_.Add( brave_sync::Prefs::GetSeedPath(), base::Bind(&BraveProfileSyncService::OnBraveSyncPrefsChanged, base::Unretained(this))); - brave_sync::Prefs brave_sync_prefs(sync_client_->GetPrefService()); - GetBraveSyncAuthManager()->DeriveSigningKeys(brave_sync_prefs.GetSeed()); - if (!brave_sync_prefs.IsSyncV1Migrated()) { + GetBraveSyncAuthManager()->DeriveSigningKeys(brave_sync_prefs_.GetSeed()); + if (!brave_sync_prefs_.IsSyncV1Migrated()) { StopImpl(CLEAR_DATA); - brave_sync_prefs.SetSyncV1Migrated(true); + brave_sync_prefs_.SetSyncV1Migrated(true); } } @@ -38,6 +43,45 @@ bool BraveProfileSyncService::IsSetupInProgress() const { !user_settings_->IsFirstSetupComplete(); } +std::string BraveProfileSyncService::GetOrCreateSyncCode() { + std::string sync_code = brave_sync_prefs_.GetSeed(); + if (sync_code.empty()) { + std::vector seed = brave_sync::crypto::GetSeed(); + sync_code = brave_sync::crypto::PassphraseFromBytes32(seed); + } + return sync_code; +} + +bool BraveProfileSyncService::SetSyncCode(const std::string& sync_code) { + std::vector seed; + if (!brave_sync::crypto::PassphraseToBytes32(sync_code, &seed)) + return false; + if (!brave_sync_prefs_.SetSeed(sync_code)) + return false; + return true; +} + +void BraveProfileSyncService::ResetSync( + DeviceInfoSyncService* device_info_service, base::OnceClosure cb) { + DCHECK(device_info_service); + // Do not send self deleted commit if engine is not up and running + if (GetTransportState() != SyncService::TransportState::ACTIVE) { + std::move(cb).Run(); + return; + } + syncer::DeviceInfoTracker* tracker = + device_info_service->GetDeviceInfoTracker(); + DCHECK(tracker); + const syncer::DeviceInfo* local_device_info = + device_info_service->GetLocalDeviceInfoProvider()->GetLocalDeviceInfo(); + + tracker->DeleteDeviceInfo(local_device_info->guid(), + base::BindOnce( + &BraveProfileSyncService::OnSelfDeleted, + weak_ptr_factory_.GetWeakPtr(), + std::move(cb))); +} + BraveSyncAuthManager* BraveProfileSyncService::GetBraveSyncAuthManager() { return static_cast(auth_manager_.get()); } @@ -45,8 +89,7 @@ BraveSyncAuthManager* BraveProfileSyncService::GetBraveSyncAuthManager() { void BraveProfileSyncService::OnBraveSyncPrefsChanged(const std::string& path) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (path == brave_sync::Prefs::GetSeedPath()) { - brave_sync::Prefs brave_sync_prefs(sync_client_->GetPrefService()); - const std::string seed = brave_sync_prefs.GetSeed(); + const std::string seed = brave_sync_prefs_.GetSeed(); if (!seed.empty()) { GetBraveSyncAuthManager()->DeriveSigningKeys(seed); // Default enabled types: Bookmarks @@ -59,4 +102,14 @@ void BraveProfileSyncService::OnBraveSyncPrefsChanged(const std::string& path) { } } } + +void BraveProfileSyncService::OnSelfDeleted(base::OnceClosure cb) { + // This function will follow normal reset process and set SyncRequested to + // false + StopAndClear(); + brave_sync_prefs_.Clear(); + // Sync prefs will be clear in ProfileSyncService::StopImpl + std::move(cb).Run(); +} + } // namespace syncer diff --git a/components/sync/driver/brave_sync_profile_sync_service.h b/components/sync/driver/brave_sync_profile_sync_service.h index 8f9447fc9fb..b01d8498e17 100644 --- a/components/sync/driver/brave_sync_profile_sync_service.h +++ b/components/sync/driver/brave_sync_profile_sync_service.h @@ -8,12 +8,16 @@ #include +#include "base/callback.h" +#include "base/memory/weak_ptr.h" +#include "brave/components/brave_sync/brave_sync_prefs.h" #include "components/prefs/pref_change_registrar.h" #include "components/sync/driver/profile_sync_service.h" namespace syncer { class BraveSyncAuthManager; +class DeviceInfoSyncService; class BraveProfileSyncService : public ProfileSyncService { public: @@ -23,13 +27,24 @@ class BraveProfileSyncService : public ProfileSyncService { // SyncService implementation bool IsSetupInProgress() const override; + std::string GetOrCreateSyncCode(); + bool SetSyncCode(const std::string& sync_code); + void ResetSync(DeviceInfoSyncService* device_info_service, + base::OnceClosure cb); + private: BraveSyncAuthManager* GetBraveSyncAuthManager(); void OnBraveSyncPrefsChanged(const std::string& path); + void OnSelfDeleted(base::OnceClosure cb); + + brave_sync::Prefs brave_sync_prefs_; + PrefChangeRegistrar brave_sync_prefs_change_registrar_; + base::WeakPtrFactory weak_ptr_factory_; + DISALLOW_COPY_AND_ASSIGN(BraveProfileSyncService); }; } // namespace syncer