1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/browser_sync/sync_engine_factory_impl.h"
#include <utility>
#include "base/functional/bind.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/task_traits.h"
#include "base/task/thread_pool.h"
#include "base/time/default_clock.h"
#include "components/browser_sync/active_devices_provider_impl.h"
#include "components/signin/public/base/gaia_id_hash.h"
#include "components/sync/base/legacy_directory_deletion.h"
#include "components/sync/engine/sync_engine.h"
#include "components/sync/invalidations/sync_invalidations_service.h"
#include "components/sync/service/glue/sync_engine_impl.h"
#include "components/sync/service/glue/sync_transport_data_prefs.h"
#include "components/sync/service/sync_client.h"
#include "components/sync_device_info/device_info_tracker.h"
namespace browser_sync {
SyncEngineFactoryImpl::SyncEngineFactoryImpl(
syncer::SyncClient* sync_client,
syncer::DeviceInfoTracker* device_info_tracker,
const base::FilePath& sync_data_folder)
: engines_and_directory_deletion_thread_(
base::ThreadPool::CreateSequencedTaskRunner(
{base::MayBlock(), base::TaskPriority::USER_VISIBLE,
base::TaskShutdownBehavior::BLOCK_SHUTDOWN})),
sync_client_(sync_client),
device_info_tracker_(device_info_tracker),
sync_data_folder_(sync_data_folder) {
CHECK(sync_client_);
}
SyncEngineFactoryImpl::~SyncEngineFactoryImpl() = default;
std::unique_ptr<syncer::SyncEngine>
SyncEngineFactoryImpl::CreateSyncEngine(
const std::string& name,
const signin::GaiaIdHash& gaia_id_hash,
syncer::SyncInvalidationsService* sync_invalidation_service) {
return std::make_unique<syncer::SyncEngineImpl>(
name, sync_invalidation_service,
std::make_unique<browser_sync::ActiveDevicesProviderImpl>(
device_info_tracker_, base::DefaultClock::GetInstance()),
std::make_unique<syncer::SyncTransportDataPrefs>(
sync_client_->GetPrefService(), gaia_id_hash),
sync_data_folder_, engines_and_directory_deletion_thread_);
}
bool SyncEngineFactoryImpl::HasTransportDataIncludingFirstSync(
const signin::GaiaIdHash& gaia_id_hash) {
syncer::SyncTransportDataPrefs sync_transport_data_prefs(
sync_client_->GetPrefService(), gaia_id_hash);
// NOTE: Keep this logic consistent with how SyncEngineImpl reports
// is-first-sync.
return !sync_transport_data_prefs.GetLastSyncedTime().is_null();
}
void SyncEngineFactoryImpl::CleanupOnDisableSync() {
PrefService* pref_service = sync_client_->GetPrefService();
// Clearing the Directory via DeleteLegacyDirectoryFilesAndNigoriStorage()
// means there's IO involved which may be considerable overhead if
// triggered consistently upon browser startup (which is the case for
// certain codepaths such as the user being signed out). To avoid that, prefs
// are used to determine whether it's worth it.
if (syncer::SyncTransportDataPrefs::HasCurrentSyncingGaiaId(pref_service)) {
syncer::SyncTransportDataPrefs::ClearCurrentSyncingGaiaId(pref_service);
engines_and_directory_deletion_thread_->PostTask(
FROM_HERE,
base::BindOnce(&syncer::DeleteLegacyDirectoryFilesAndNigoriStorage,
sync_data_folder_));
}
}
void SyncEngineFactoryImpl::ClearTransportDataForAccount(
const signin::GaiaIdHash& gaia_id_hash) {
syncer::SyncTransportDataPrefs prefs(sync_client_->GetPrefService(),
gaia_id_hash);
prefs.ClearForCurrentAccount();
}
} // namespace browser_sync
|