| Index: sync/engine/syncer.cc
|
| diff --git a/sync/engine/syncer.cc b/sync/engine/syncer.cc
|
| index e75c1c691c3a0c2a18bf54787901e46117cfd581..339948d1ff95eb3d7c45bcfd50d2b33e17455000 100644
|
| --- a/sync/engine/syncer.cc
|
| +++ b/sync/engine/syncer.cc
|
| @@ -12,8 +12,10 @@
|
| #include "build/build_config.h"
|
| #include "sync/engine/apply_control_data_updates.h"
|
| #include "sync/engine/commit.h"
|
| +#include "sync/engine/commit_processor.h"
|
| #include "sync/engine/conflict_resolver.h"
|
| #include "sync/engine/download.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"
|
| @@ -56,14 +58,18 @@ bool Syncer::NormalSyncShare(ModelTypeSet request_types,
|
| const NudgeTracker& nudge_tracker,
|
| SyncSession* session) {
|
| HandleCycleBegin(session);
|
| + GetUpdatesProcessor get_updates_processor(
|
| + session->context()->model_type_registry()->update_handler_map());
|
| VLOG(1) << "Downloading types " << ModelTypeSetToString(request_types);
|
| if (nudge_tracker.IsGetUpdatesRequired(base::TimeTicks::Now()) ||
|
| session->context()->ShouldFetchUpdatesBeforeCommit()) {
|
| if (!DownloadAndApplyUpdates(
|
| request_types,
|
| session,
|
| + &get_updates_processor,
|
| base::Bind(&download::BuildNormalDownloadUpdates,
|
| session,
|
| + &get_updates_processor,
|
| kCreateMobileBookmarksFolder,
|
| request_types,
|
| base::ConstRef(nudge_tracker)))) {
|
| @@ -72,7 +78,10 @@ bool Syncer::NormalSyncShare(ModelTypeSet request_types,
|
| }
|
|
|
| VLOG(1) << "Committing from types " << ModelTypeSetToString(request_types);
|
| - SyncerError commit_result = BuildAndPostCommits(request_types, session);
|
| + CommitProcessor commit_processor(
|
| + session->context()->model_type_registry()->commit_contributor_map());
|
| + SyncerError commit_result =
|
| + BuildAndPostCommits(request_types, session, &commit_processor);
|
| session->mutable_status_controller()->set_commit_result(commit_result);
|
|
|
| return HandleCycleEnd(session, nudge_tracker.updates_source());
|
| @@ -83,12 +92,16 @@ bool Syncer::ConfigureSyncShare(
|
| sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source,
|
| SyncSession* session) {
|
| HandleCycleBegin(session);
|
| + GetUpdatesProcessor get_updates_processor(
|
| + session->context()->model_type_registry()->update_handler_map());
|
| VLOG(1) << "Configuring types " << ModelTypeSetToString(request_types);
|
| DownloadAndApplyUpdates(
|
| request_types,
|
| session,
|
| + &get_updates_processor,
|
| base::Bind(&download::BuildDownloadUpdatesForConfigure,
|
| session,
|
| + &get_updates_processor,
|
| kCreateMobileBookmarksFolder,
|
| source,
|
| request_types));
|
| @@ -98,12 +111,16 @@ bool Syncer::ConfigureSyncShare(
|
| bool Syncer::PollSyncShare(ModelTypeSet request_types,
|
| SyncSession* session) {
|
| HandleCycleBegin(session);
|
| + GetUpdatesProcessor get_updates_processor(
|
| + session->context()->model_type_registry()->update_handler_map());
|
| VLOG(1) << "Polling types " << ModelTypeSetToString(request_types);
|
| DownloadAndApplyUpdates(
|
| request_types,
|
| session,
|
| + &get_updates_processor,
|
| base::Bind(&download::BuildDownloadUpdatesForPoll,
|
| session,
|
| + &get_updates_processor,
|
| kCreateMobileBookmarksFolder,
|
| request_types));
|
| return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::PERIODIC);
|
| @@ -112,27 +129,29 @@ bool Syncer::PollSyncShare(ModelTypeSet request_types,
|
| bool Syncer::RetrySyncShare(ModelTypeSet request_types,
|
| SyncSession* session) {
|
| HandleCycleBegin(session);
|
| + GetUpdatesProcessor get_updates_processor(
|
| + session->context()->model_type_registry()->update_handler_map());
|
| VLOG(1) << "Retrying types " << ModelTypeSetToString(request_types);
|
| DownloadAndApplyUpdates(
|
| request_types,
|
| session,
|
| + &get_updates_processor,
|
| base::Bind(&download::BuildDownloadUpdatesForRetry,
|
| session,
|
| + &get_updates_processor,
|
| kCreateMobileBookmarksFolder,
|
| request_types));
|
| return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::RETRY);
|
| }
|
|
|
| -void Syncer::ApplyUpdates(SyncSession* session) {
|
| +void Syncer::ApplyUpdates(SyncSession* session,
|
| + GetUpdatesProcessor* get_updates_processor) {
|
| TRACE_EVENT0("sync", "ApplyUpdates");
|
|
|
| ApplyControlDataUpdates(session->context()->directory());
|
|
|
| - UpdateHandlerMap* handler_map = session->context()->update_handler_map();
|
| - for (UpdateHandlerMap::iterator it = handler_map->begin();
|
| - it != handler_map->end(); ++it) {
|
| - it->second->ApplyUpdates(session->mutable_status_controller());
|
| - }
|
| + get_updates_processor->ApplyUpdatesForAllTypes(
|
| + session->mutable_status_controller());
|
|
|
| session->context()->set_hierarchy_conflict_detected(
|
| session->status_controller().num_hierarchy_conflicts() > 0);
|
| @@ -143,14 +162,17 @@ void Syncer::ApplyUpdates(SyncSession* session) {
|
| bool Syncer::DownloadAndApplyUpdates(
|
| ModelTypeSet request_types,
|
| SyncSession* session,
|
| + GetUpdatesProcessor* get_updates_processor,
|
| base::Callback<void(sync_pb::ClientToServerMessage*)> build_fn) {
|
| SyncerError download_result = UNSET;
|
| do {
|
| TRACE_EVENT0("sync", "DownloadUpdates");
|
| sync_pb::ClientToServerMessage msg;
|
| build_fn.Run(&msg);
|
| - download_result =
|
| - download::ExecuteDownloadUpdates(request_types, session, &msg);
|
| + download_result = download::ExecuteDownloadUpdates(request_types,
|
| + session,
|
| + get_updates_processor,
|
| + &msg);
|
| session->mutable_status_controller()->set_last_download_updates_result(
|
| download_result);
|
| } while (download_result == SERVER_MORE_TO_DOWNLOAD);
|
| @@ -161,14 +183,15 @@ bool Syncer::DownloadAndApplyUpdates(
|
| if (ExitRequested())
|
| return false;
|
|
|
| - ApplyUpdates(session);
|
| + ApplyUpdates(session, get_updates_processor);
|
| if (ExitRequested())
|
| return false;
|
| return true;
|
| }
|
|
|
| SyncerError Syncer::BuildAndPostCommits(ModelTypeSet requested_types,
|
| - sessions::SyncSession* session) {
|
| + 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.
|
| @@ -176,10 +199,11 @@ SyncerError Syncer::BuildAndPostCommits(ModelTypeSet requested_types,
|
| scoped_ptr<Commit> commit(
|
| Commit::Init(
|
| requested_types,
|
| + session->context()->enabled_types(),
|
| session->context()->max_commit_batch_size(),
|
| session->context()->account_name(),
|
| session->context()->directory()->cache_guid(),
|
| - session->context()->commit_contributor_map(),
|
| + commit_processor,
|
| session->context()->extensions_activity()));
|
| if (!commit) {
|
| break;
|
|
|