| Index: components/sync_driver/shared_change_processor.cc
|
| diff --git a/components/sync_driver/shared_change_processor.cc b/components/sync_driver/shared_change_processor.cc
|
| deleted file mode 100644
|
| index eee40d2bcf03afefe2df900977698378fdf39dc5..0000000000000000000000000000000000000000
|
| --- a/components/sync_driver/shared_change_processor.cc
|
| +++ /dev/null
|
| @@ -1,225 +0,0 @@
|
| -// Copyright 2014 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 "components/sync_driver/shared_change_processor.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "components/sync/api/sync_change.h"
|
| -#include "components/sync/api/syncable_service.h"
|
| -#include "components/sync/core/data_type_error_handler.h"
|
| -#include "components/sync_driver/generic_change_processor.h"
|
| -#include "components/sync_driver/generic_change_processor_factory.h"
|
| -#include "components/sync_driver/sync_client.h"
|
| -
|
| -using base::AutoLock;
|
| -
|
| -namespace syncer {
|
| -class AttachmentService;
|
| -}
|
| -
|
| -namespace sync_driver {
|
| -
|
| -SharedChangeProcessor::SharedChangeProcessor()
|
| - : disconnected_(false),
|
| - type_(syncer::UNSPECIFIED),
|
| - frontend_task_runner_(base::ThreadTaskRunnerHandle::Get()),
|
| - generic_change_processor_(NULL),
|
| - error_handler_(NULL) {
|
| -}
|
| -
|
| -SharedChangeProcessor::~SharedChangeProcessor() {
|
| - // We can either be deleted when the DTC is destroyed (on UI
|
| - // thread), or when the syncer::SyncableService stops syncing (datatype
|
| - // thread). |generic_change_processor_|, if non-NULL, must be
|
| - // deleted on |backend_loop_|.
|
| - if (backend_task_runner_.get()) {
|
| - if (backend_task_runner_->BelongsToCurrentThread()) {
|
| - delete generic_change_processor_;
|
| - } else {
|
| - DCHECK(frontend_task_runner_->BelongsToCurrentThread());
|
| - if (!backend_task_runner_->DeleteSoon(FROM_HERE,
|
| - generic_change_processor_)) {
|
| - NOTREACHED();
|
| - }
|
| - }
|
| - } else {
|
| - DCHECK(!generic_change_processor_);
|
| - }
|
| -}
|
| -
|
| -base::WeakPtr<syncer::SyncableService> SharedChangeProcessor::Connect(
|
| - SyncClient* sync_client,
|
| - GenericChangeProcessorFactory* processor_factory,
|
| - syncer::UserShare* user_share,
|
| - syncer::DataTypeErrorHandler* error_handler,
|
| - syncer::ModelType type,
|
| - const base::WeakPtr<syncer::SyncMergeResult>& merge_result) {
|
| - DCHECK(sync_client);
|
| - DCHECK(error_handler);
|
| - DCHECK_NE(type, syncer::UNSPECIFIED);
|
| - backend_task_runner_ = base::ThreadTaskRunnerHandle::Get();
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_)
|
| - return base::WeakPtr<syncer::SyncableService>();
|
| - type_ = type;
|
| - error_handler_ = error_handler;
|
| - base::WeakPtr<syncer::SyncableService> local_service =
|
| - sync_client->GetSyncableServiceForType(type);
|
| - if (!local_service.get()) {
|
| - LOG(WARNING) << "SyncableService destroyed before DTC was stopped.";
|
| - disconnected_ = true;
|
| - return base::WeakPtr<syncer::SyncableService>();
|
| - }
|
| -
|
| - generic_change_processor_ =
|
| - processor_factory->CreateGenericChangeProcessor(type,
|
| - user_share,
|
| - error_handler,
|
| - local_service,
|
| - merge_result,
|
| - sync_client).release();
|
| - // If available, propagate attachment service to the syncable service.
|
| - std::unique_ptr<syncer::AttachmentService> attachment_service =
|
| - generic_change_processor_->GetAttachmentService();
|
| - if (attachment_service) {
|
| - local_service->SetAttachmentService(std::move(attachment_service));
|
| - }
|
| - return local_service;
|
| -}
|
| -
|
| -bool SharedChangeProcessor::Disconnect() {
|
| - // May be called from any thread.
|
| - DVLOG(1) << "Disconnecting change processor.";
|
| - AutoLock lock(monitor_lock_);
|
| - bool was_connected = !disconnected_;
|
| - disconnected_ = true;
|
| - error_handler_ = NULL;
|
| - return was_connected;
|
| -}
|
| -
|
| -ChangeProcessor* SharedChangeProcessor::generic_change_processor() {
|
| - return generic_change_processor_;
|
| -}
|
| -
|
| -int SharedChangeProcessor::GetSyncCount() {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - LOG(ERROR) << "Change processor disconnected.";
|
| - return 0;
|
| - }
|
| - return generic_change_processor_->GetSyncCount();
|
| -}
|
| -
|
| -syncer::SyncError SharedChangeProcessor::ProcessSyncChanges(
|
| - const tracked_objects::Location& from_here,
|
| - const syncer::SyncChangeList& list_of_changes) {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - // The DTC that disconnects us must ensure it posts a StopSyncing task.
|
| - // If we reach this, it means it just hasn't executed yet.
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Change processor disconnected.",
|
| - type_);
|
| - return error;
|
| - }
|
| - return generic_change_processor_->ProcessSyncChanges(
|
| - from_here, list_of_changes);
|
| -}
|
| -
|
| -syncer::SyncDataList SharedChangeProcessor::GetAllSyncData(
|
| - syncer::ModelType type) const {
|
| - syncer::SyncDataList data;
|
| - GetAllSyncDataReturnError(type, &data); // Handles the disconnect case.
|
| - return data;
|
| -}
|
| -
|
| -syncer::SyncError SharedChangeProcessor::GetAllSyncDataReturnError(
|
| - syncer::ModelType type,
|
| - syncer::SyncDataList* data) const {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Change processor disconnected.",
|
| - type_);
|
| - return error;
|
| - }
|
| - return generic_change_processor_->GetAllSyncDataReturnError(data);
|
| -}
|
| -
|
| -syncer::SyncError SharedChangeProcessor::UpdateDataTypeContext(
|
| - syncer::ModelType type,
|
| - syncer::SyncChangeProcessor::ContextRefreshStatus refresh_status,
|
| - const std::string& context) {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - syncer::SyncError error(FROM_HERE,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - "Change processor disconnected.",
|
| - type_);
|
| - return error;
|
| - }
|
| - return generic_change_processor_->UpdateDataTypeContext(
|
| - type, refresh_status, context);
|
| -}
|
| -
|
| -bool SharedChangeProcessor::SyncModelHasUserCreatedNodes(bool* has_nodes) {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - LOG(ERROR) << "Change processor disconnected.";
|
| - return false;
|
| - }
|
| - return generic_change_processor_->SyncModelHasUserCreatedNodes(has_nodes);
|
| -}
|
| -
|
| -bool SharedChangeProcessor::CryptoReadyIfNecessary() {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - LOG(ERROR) << "Change processor disconnected.";
|
| - return true; // Otherwise we get into infinite spin waiting.
|
| - }
|
| - return generic_change_processor_->CryptoReadyIfNecessary();
|
| -}
|
| -
|
| -bool SharedChangeProcessor::GetDataTypeContext(std::string* context) const {
|
| - DCHECK(backend_task_runner_.get());
|
| - DCHECK(backend_task_runner_->BelongsToCurrentThread());
|
| - AutoLock lock(monitor_lock_);
|
| - if (disconnected_) {
|
| - LOG(ERROR) << "Change processor disconnected.";
|
| - return false;
|
| - }
|
| - return generic_change_processor_->GetDataTypeContext(context);
|
| -}
|
| -
|
| -syncer::SyncError SharedChangeProcessor::CreateAndUploadError(
|
| - const tracked_objects::Location& location,
|
| - const std::string& message) {
|
| - AutoLock lock(monitor_lock_);
|
| - if (!disconnected_) {
|
| - return error_handler_->CreateAndUploadError(location, message, type_);
|
| - } else {
|
| - return syncer::SyncError(location,
|
| - syncer::SyncError::DATATYPE_ERROR,
|
| - message,
|
| - type_);
|
| - }
|
| -}
|
| -
|
| -} // namespace sync_driver
|
|
|