| Index: sync/engine/syncer.cc
|
| diff --git a/sync/engine/syncer.cc b/sync/engine/syncer.cc
|
| deleted file mode 100644
|
| index 23d8c961752f77dea95cfe3cc8ab5b29cd17e78a..0000000000000000000000000000000000000000
|
| --- a/sync/engine/syncer.cc
|
| +++ /dev/null
|
| @@ -1,234 +0,0 @@
|
| -// Copyright (c) 2012 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 "sync/engine/syncer.h"
|
| -
|
| -#include <memory>
|
| -
|
| -#include "base/auto_reset.h"
|
| -#include "base/location.h"
|
| -#include "base/logging.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/time/time.h"
|
| -#include "base/trace_event/trace_event.h"
|
| -#include "build/build_config.h"
|
| -#include "sync/engine/apply_control_data_updates.h"
|
| -#include "sync/engine/clear_server_data.h"
|
| -#include "sync/engine/commit.h"
|
| -#include "sync/engine/commit_processor.h"
|
| -#include "sync/engine/conflict_resolver.h"
|
| -#include "sync/engine/get_updates_delegate.h"
|
| -#include "sync/engine/get_updates_processor.h"
|
| -#include "sync/engine/net/server_connection_manager.h"
|
| -#include "sync/engine/syncer_types.h"
|
| -#include "sync/internal_api/public/base/cancelation_signal.h"
|
| -#include "sync/internal_api/public/base/unique_position.h"
|
| -#include "sync/internal_api/public/util/syncer_error.h"
|
| -#include "sync/sessions/nudge_tracker.h"
|
| -#include "sync/syncable/directory.h"
|
| -#include "sync/syncable/mutable_entry.h"
|
| -#include "sync/syncable/syncable-inl.h"
|
| -
|
| -using base::Time;
|
| -using base::TimeDelta;
|
| -using sync_pb::ClientCommand;
|
| -
|
| -namespace syncer {
|
| -
|
| -// TODO(akalin): We may want to propagate this switch up
|
| -// eventually.
|
| -#if defined(OS_ANDROID) || defined(OS_IOS)
|
| -static const bool kCreateMobileBookmarksFolder = true;
|
| -#else
|
| -static const bool kCreateMobileBookmarksFolder = false;
|
| -#endif
|
| -
|
| -using sessions::StatusController;
|
| -using sessions::SyncSession;
|
| -using sessions::NudgeTracker;
|
| -
|
| -Syncer::Syncer(syncer::CancelationSignal* cancelation_signal)
|
| - : cancelation_signal_(cancelation_signal),
|
| - is_syncing_(false) {
|
| -}
|
| -
|
| -Syncer::~Syncer() {}
|
| -
|
| -bool Syncer::ExitRequested() {
|
| - return cancelation_signal_->IsSignalled();
|
| -}
|
| -
|
| -bool Syncer::IsSyncing() const {
|
| - return is_syncing_;
|
| -}
|
| -
|
| -bool Syncer::NormalSyncShare(ModelTypeSet request_types,
|
| - NudgeTracker* nudge_tracker,
|
| - SyncSession* session) {
|
| - base::AutoReset<bool> is_syncing(&is_syncing_, true);
|
| - HandleCycleBegin(session);
|
| - if (nudge_tracker->IsGetUpdatesRequired() ||
|
| - session->context()->ShouldFetchUpdatesBeforeCommit()) {
|
| - VLOG(1) << "Downloading types " << ModelTypeSetToString(request_types);
|
| - NormalGetUpdatesDelegate normal_delegate(*nudge_tracker);
|
| - GetUpdatesProcessor get_updates_processor(
|
| - session->context()->model_type_registry()->update_handler_map(),
|
| - normal_delegate);
|
| - if (!DownloadAndApplyUpdates(
|
| - &request_types,
|
| - session,
|
| - &get_updates_processor,
|
| - kCreateMobileBookmarksFolder)) {
|
| - return HandleCycleEnd(session, nudge_tracker->GetLegacySource());
|
| - }
|
| - }
|
| -
|
| - VLOG(1) << "Committing from types " << ModelTypeSetToString(request_types);
|
| - CommitProcessor commit_processor(
|
| - session->context()->model_type_registry()->commit_contributor_map());
|
| - SyncerError commit_result = BuildAndPostCommits(request_types, nudge_tracker,
|
| - session, &commit_processor);
|
| - session->mutable_status_controller()->set_commit_result(commit_result);
|
| -
|
| - return HandleCycleEnd(session, nudge_tracker->GetLegacySource());
|
| -}
|
| -
|
| -bool Syncer::ConfigureSyncShare(
|
| - ModelTypeSet request_types,
|
| - sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source,
|
| - SyncSession* session) {
|
| - base::AutoReset<bool> is_syncing(&is_syncing_, true);
|
| - VLOG(1) << "Configuring types " << ModelTypeSetToString(request_types);
|
| - HandleCycleBegin(session);
|
| - ConfigureGetUpdatesDelegate configure_delegate(source);
|
| - GetUpdatesProcessor get_updates_processor(
|
| - session->context()->model_type_registry()->update_handler_map(),
|
| - configure_delegate);
|
| - DownloadAndApplyUpdates(
|
| - &request_types,
|
| - session,
|
| - &get_updates_processor,
|
| - kCreateMobileBookmarksFolder);
|
| - return HandleCycleEnd(session, source);
|
| -}
|
| -
|
| -bool Syncer::PollSyncShare(ModelTypeSet request_types,
|
| - SyncSession* session) {
|
| - base::AutoReset<bool> is_syncing(&is_syncing_, true);
|
| - VLOG(1) << "Polling types " << ModelTypeSetToString(request_types);
|
| - HandleCycleBegin(session);
|
| - PollGetUpdatesDelegate poll_delegate;
|
| - GetUpdatesProcessor get_updates_processor(
|
| - session->context()->model_type_registry()->update_handler_map(),
|
| - poll_delegate);
|
| - DownloadAndApplyUpdates(
|
| - &request_types,
|
| - session,
|
| - &get_updates_processor,
|
| - kCreateMobileBookmarksFolder);
|
| - return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::PERIODIC);
|
| -}
|
| -
|
| -bool Syncer::DownloadAndApplyUpdates(
|
| - ModelTypeSet* request_types,
|
| - SyncSession* session,
|
| - GetUpdatesProcessor* get_updates_processor,
|
| - bool create_mobile_bookmarks_folder) {
|
| - SyncerError download_result = UNSET;
|
| - do {
|
| - download_result = get_updates_processor->DownloadUpdates(
|
| - request_types,
|
| - session,
|
| - create_mobile_bookmarks_folder);
|
| - } while (download_result == SERVER_MORE_TO_DOWNLOAD);
|
| -
|
| - // Exit without applying if we're shutting down or an error was detected.
|
| - if (download_result != SYNCER_OK)
|
| - return false;
|
| - if (ExitRequested())
|
| - return false;
|
| -
|
| - {
|
| - TRACE_EVENT0("sync", "ApplyUpdates");
|
| -
|
| - // Control type updates always get applied first.
|
| - ApplyControlDataUpdates(session->context()->directory());
|
| -
|
| - // Apply upates to the other types. May or may not involve cross-thread
|
| - // traffic, depending on the underlying update handlers and the GU type's
|
| - // delegate.
|
| - get_updates_processor->ApplyUpdates(*request_types,
|
| - session->mutable_status_controller());
|
| -
|
| - session->context()->set_hierarchy_conflict_detected(
|
| - session->status_controller().num_hierarchy_conflicts() > 0);
|
| - session->SendEventNotification(SyncCycleEvent::STATUS_CHANGED);
|
| - }
|
| -
|
| - if (ExitRequested())
|
| - return false;
|
| - return true;
|
| -}
|
| -
|
| -SyncerError Syncer::BuildAndPostCommits(ModelTypeSet requested_types,
|
| - sessions::NudgeTracker* nudge_tracker,
|
| - sessions::SyncSession* session,
|
| - CommitProcessor* commit_processor) {
|
| - // The ExitRequested() check is unnecessary, since we should start getting
|
| - // errors from the ServerConnectionManager if an exist has been requested.
|
| - // However, it doesn't hurt to check it anyway.
|
| - while (!ExitRequested()) {
|
| - std::unique_ptr<Commit> commit(
|
| - Commit::Init(requested_types, session->context()->GetEnabledTypes(),
|
| - session->context()->max_commit_batch_size(),
|
| - session->context()->account_name(),
|
| - session->context()->directory()->cache_guid(),
|
| - session->context()->cookie_jar_mismatch(),
|
| - session->context()->cookie_jar_empty(), commit_processor,
|
| - session->context()->extensions_activity()));
|
| - if (!commit) {
|
| - break;
|
| - }
|
| -
|
| - SyncerError error = commit->PostAndProcessResponse(
|
| - nudge_tracker, session, session->mutable_status_controller(),
|
| - session->context()->extensions_activity());
|
| - commit->CleanUp();
|
| - if (error != SYNCER_OK) {
|
| - return error;
|
| - }
|
| - }
|
| -
|
| - return SYNCER_OK;
|
| -}
|
| -
|
| -void Syncer::HandleCycleBegin(SyncSession* session) {
|
| - session->mutable_status_controller()->UpdateStartTime();
|
| - session->SendEventNotification(SyncCycleEvent::SYNC_CYCLE_BEGIN);
|
| -}
|
| -
|
| -bool Syncer::HandleCycleEnd(
|
| - SyncSession* session,
|
| - sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source) {
|
| - if (!ExitRequested()) {
|
| - session->SendSyncCycleEndEventNotification(source);
|
| -
|
| - bool success = !sessions::HasSyncerError(
|
| - session->status_controller().model_neutral_state());
|
| - if (success && source == sync_pb::GetUpdatesCallerInfo::PERIODIC)
|
| - session->mutable_status_controller()->UpdatePollTime();
|
| - return success;
|
| - } else {
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool Syncer::PostClearServerData(SyncSession* session) {
|
| - DCHECK(session);
|
| - ClearServerData clear_server_data(session->context()->account_name());
|
| - const SyncerError post_result = clear_server_data.SendRequest(session);
|
| - return post_result == SYNCER_OK;
|
| -}
|
| -
|
| -} // namespace syncer
|
|
|