Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: sync/engine/syncer.cc

Issue 93433006: sync: Introduce ModelTypeRegistry and helpers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Renames and moves Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/engine/syncer.h" 5 #include "sync/engine/syncer.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "build/build_config.h" 12 #include "build/build_config.h"
13 #include "sync/engine/apply_control_data_updates.h" 13 #include "sync/engine/apply_control_data_updates.h"
14 #include "sync/engine/commit.h" 14 #include "sync/engine/commit.h"
15 #include "sync/engine/commit_processor.h"
15 #include "sync/engine/conflict_resolver.h" 16 #include "sync/engine/conflict_resolver.h"
16 #include "sync/engine/download.h" 17 #include "sync/engine/download.h"
18 #include "sync/engine/get_updates_processor.h"
17 #include "sync/engine/net/server_connection_manager.h" 19 #include "sync/engine/net/server_connection_manager.h"
18 #include "sync/engine/syncer_types.h" 20 #include "sync/engine/syncer_types.h"
19 #include "sync/internal_api/public/base/cancelation_signal.h" 21 #include "sync/internal_api/public/base/cancelation_signal.h"
20 #include "sync/internal_api/public/base/unique_position.h" 22 #include "sync/internal_api/public/base/unique_position.h"
21 #include "sync/internal_api/public/util/syncer_error.h" 23 #include "sync/internal_api/public/util/syncer_error.h"
22 #include "sync/sessions/nudge_tracker.h" 24 #include "sync/sessions/nudge_tracker.h"
23 #include "sync/syncable/directory.h" 25 #include "sync/syncable/directory.h"
24 #include "sync/syncable/mutable_entry.h" 26 #include "sync/syncable/mutable_entry.h"
25 #include "sync/syncable/syncable-inl.h" 27 #include "sync/syncable/syncable-inl.h"
26 28
(...skipping 22 matching lines...) Expand all
49 Syncer::~Syncer() {} 51 Syncer::~Syncer() {}
50 52
51 bool Syncer::ExitRequested() { 53 bool Syncer::ExitRequested() {
52 return cancelation_signal_->IsSignalled(); 54 return cancelation_signal_->IsSignalled();
53 } 55 }
54 56
55 bool Syncer::NormalSyncShare(ModelTypeSet request_types, 57 bool Syncer::NormalSyncShare(ModelTypeSet request_types,
56 const NudgeTracker& nudge_tracker, 58 const NudgeTracker& nudge_tracker,
57 SyncSession* session) { 59 SyncSession* session) {
58 HandleCycleBegin(session); 60 HandleCycleBegin(session);
61 GetUpdatesProcessor get_updates_processor(
62 session->context()->model_type_registry()->update_handler_map());
59 VLOG(1) << "Downloading types " << ModelTypeSetToString(request_types); 63 VLOG(1) << "Downloading types " << ModelTypeSetToString(request_types);
60 if (nudge_tracker.IsGetUpdatesRequired() || 64 if (nudge_tracker.IsGetUpdatesRequired() ||
61 session->context()->ShouldFetchUpdatesBeforeCommit()) { 65 session->context()->ShouldFetchUpdatesBeforeCommit()) {
62 if (!DownloadAndApplyUpdates( 66 if (!DownloadAndApplyUpdates(
63 request_types, 67 request_types,
64 session, 68 session,
69 &get_updates_processor,
65 base::Bind(&download::BuildNormalDownloadUpdates, 70 base::Bind(&download::BuildNormalDownloadUpdates,
66 session, 71 session,
72 &get_updates_processor,
67 kCreateMobileBookmarksFolder, 73 kCreateMobileBookmarksFolder,
68 request_types, 74 request_types,
69 base::ConstRef(nudge_tracker)))) { 75 base::ConstRef(nudge_tracker)))) {
70 return HandleCycleEnd(session, nudge_tracker.updates_source()); 76 return HandleCycleEnd(session, nudge_tracker.updates_source());
71 } 77 }
72 } 78 }
73 79
74 VLOG(1) << "Committing from types " << ModelTypeSetToString(request_types); 80 VLOG(1) << "Committing from types " << ModelTypeSetToString(request_types);
75 SyncerError commit_result = BuildAndPostCommits(request_types, session); 81 CommitProcessor commit_processor(
82 session->context()->model_type_registry()->commit_contributor_map());
83 SyncerError commit_result =
84 BuildAndPostCommits(request_types, session, &commit_processor);
76 session->mutable_status_controller()->set_commit_result(commit_result); 85 session->mutable_status_controller()->set_commit_result(commit_result);
77 86
78 return HandleCycleEnd(session, nudge_tracker.updates_source()); 87 return HandleCycleEnd(session, nudge_tracker.updates_source());
79 } 88 }
80 89
81 bool Syncer::ConfigureSyncShare( 90 bool Syncer::ConfigureSyncShare(
82 ModelTypeSet request_types, 91 ModelTypeSet request_types,
83 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source, 92 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source,
84 SyncSession* session) { 93 SyncSession* session) {
85 HandleCycleBegin(session); 94 HandleCycleBegin(session);
95 GetUpdatesProcessor get_updates_processor(
96 session->context()->model_type_registry()->update_handler_map());
86 VLOG(1) << "Configuring types " << ModelTypeSetToString(request_types); 97 VLOG(1) << "Configuring types " << ModelTypeSetToString(request_types);
87 DownloadAndApplyUpdates( 98 DownloadAndApplyUpdates(
88 request_types, 99 request_types,
89 session, 100 session,
101 &get_updates_processor,
90 base::Bind(&download::BuildDownloadUpdatesForConfigure, 102 base::Bind(&download::BuildDownloadUpdatesForConfigure,
91 session, 103 session,
104 &get_updates_processor,
92 kCreateMobileBookmarksFolder, 105 kCreateMobileBookmarksFolder,
93 source, 106 source,
94 request_types)); 107 request_types));
95 return HandleCycleEnd(session, source); 108 return HandleCycleEnd(session, source);
96 } 109 }
97 110
98 bool Syncer::PollSyncShare(ModelTypeSet request_types, 111 bool Syncer::PollSyncShare(ModelTypeSet request_types,
99 SyncSession* session) { 112 SyncSession* session) {
100 HandleCycleBegin(session); 113 HandleCycleBegin(session);
114 GetUpdatesProcessor get_updates_processor(
115 session->context()->model_type_registry()->update_handler_map());
101 VLOG(1) << "Polling types " << ModelTypeSetToString(request_types); 116 VLOG(1) << "Polling types " << ModelTypeSetToString(request_types);
102 DownloadAndApplyUpdates( 117 DownloadAndApplyUpdates(
103 request_types, 118 request_types,
104 session, 119 session,
120 &get_updates_processor,
105 base::Bind(&download::BuildDownloadUpdatesForPoll, 121 base::Bind(&download::BuildDownloadUpdatesForPoll,
106 session, 122 session,
123 &get_updates_processor,
107 kCreateMobileBookmarksFolder, 124 kCreateMobileBookmarksFolder,
108 request_types)); 125 request_types));
109 return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::PERIODIC); 126 return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::PERIODIC);
110 } 127 }
111 128
112 void Syncer::ApplyUpdates(SyncSession* session) { 129 void Syncer::ApplyUpdates(SyncSession* session,
130 GetUpdatesProcessor* get_updates_processor) {
113 TRACE_EVENT0("sync", "ApplyUpdates"); 131 TRACE_EVENT0("sync", "ApplyUpdates");
114 132
115 ApplyControlDataUpdates(session->context()->directory()); 133 ApplyControlDataUpdates(session->context()->directory());
116 134
117 UpdateHandlerMap* handler_map = session->context()->update_handler_map(); 135 get_updates_processor->ApplyUpdatesForAllTypes(
118 for (UpdateHandlerMap::iterator it = handler_map->begin(); 136 session->mutable_status_controller());
119 it != handler_map->end(); ++it) {
120 it->second->ApplyUpdates(session->mutable_status_controller());
121 }
122 137
123 session->context()->set_hierarchy_conflict_detected( 138 session->context()->set_hierarchy_conflict_detected(
124 session->status_controller().num_hierarchy_conflicts() > 0); 139 session->status_controller().num_hierarchy_conflicts() > 0);
125 140
126 session->SendEventNotification(SyncEngineEvent::STATUS_CHANGED); 141 session->SendEventNotification(SyncEngineEvent::STATUS_CHANGED);
127 } 142 }
128 143
129 bool Syncer::DownloadAndApplyUpdates( 144 bool Syncer::DownloadAndApplyUpdates(
130 ModelTypeSet request_types, 145 ModelTypeSet request_types,
131 SyncSession* session, 146 SyncSession* session,
147 GetUpdatesProcessor* get_updates_processor,
132 base::Callback<void(sync_pb::ClientToServerMessage*)> build_fn) { 148 base::Callback<void(sync_pb::ClientToServerMessage*)> build_fn) {
133 SyncerError download_result = UNSET; 149 SyncerError download_result = UNSET;
134 do { 150 do {
135 TRACE_EVENT0("sync", "DownloadUpdates"); 151 TRACE_EVENT0("sync", "DownloadUpdates");
136 sync_pb::ClientToServerMessage msg; 152 sync_pb::ClientToServerMessage msg;
137 build_fn.Run(&msg); 153 build_fn.Run(&msg);
138 download_result = 154 download_result = download::ExecuteDownloadUpdates(request_types,
139 download::ExecuteDownloadUpdates(request_types, session, &msg); 155 session,
156 get_updates_processor,
157 &msg);
140 session->mutable_status_controller()->set_last_download_updates_result( 158 session->mutable_status_controller()->set_last_download_updates_result(
141 download_result); 159 download_result);
142 } while (download_result == SERVER_MORE_TO_DOWNLOAD); 160 } while (download_result == SERVER_MORE_TO_DOWNLOAD);
143 161
144 // Exit without applying if we're shutting down or an error was detected. 162 // Exit without applying if we're shutting down or an error was detected.
145 if (download_result != SYNCER_OK) 163 if (download_result != SYNCER_OK)
146 return false; 164 return false;
147 if (ExitRequested()) 165 if (ExitRequested())
148 return false; 166 return false;
149 167
150 ApplyUpdates(session); 168 ApplyUpdates(session, get_updates_processor);
151 if (ExitRequested()) 169 if (ExitRequested())
152 return false; 170 return false;
153 return true; 171 return true;
154 } 172 }
155 173
156 SyncerError Syncer::BuildAndPostCommits(ModelTypeSet requested_types, 174 SyncerError Syncer::BuildAndPostCommits(ModelTypeSet requested_types,
157 sessions::SyncSession* session) { 175 sessions::SyncSession* session,
176 CommitProcessor* commit_processor) {
158 // The ExitRequested() check is unnecessary, since we should start getting 177 // The ExitRequested() check is unnecessary, since we should start getting
159 // errors from the ServerConnectionManager if an exist has been requested. 178 // errors from the ServerConnectionManager if an exist has been requested.
160 // However, it doesn't hurt to check it anyway. 179 // However, it doesn't hurt to check it anyway.
161 while (!ExitRequested()) { 180 while (!ExitRequested()) {
162 scoped_ptr<Commit> commit( 181 scoped_ptr<Commit> commit(
163 Commit::Init( 182 Commit::Init(
164 requested_types, 183 requested_types,
184 session->context()->enabled_types(),
165 session->context()->max_commit_batch_size(), 185 session->context()->max_commit_batch_size(),
166 session->context()->account_name(), 186 session->context()->account_name(),
167 session->context()->directory()->cache_guid(), 187 session->context()->directory()->cache_guid(),
168 session->context()->commit_contributor_map(), 188 commit_processor,
169 session->context()->extensions_activity())); 189 session->context()->extensions_activity()));
170 if (!commit) { 190 if (!commit) {
171 break; 191 break;
172 } 192 }
173 193
174 SyncerError error = commit->PostAndProcessResponse( 194 SyncerError error = commit->PostAndProcessResponse(
175 session, 195 session,
176 session->mutable_status_controller(), 196 session->mutable_status_controller(),
177 session->context()->extensions_activity()); 197 session->context()->extensions_activity());
178 commit->CleanUp(); 198 commit->CleanUp();
(...skipping 15 matching lines...) Expand all
194 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source) { 214 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source) {
195 if (!ExitRequested()) { 215 if (!ExitRequested()) {
196 session->SendSyncCycleEndEventNotification(source); 216 session->SendSyncCycleEndEventNotification(source);
197 return true; 217 return true;
198 } else { 218 } else {
199 return false; 219 return false;
200 } 220 }
201 } 221 }
202 222
203 } // namespace syncer 223 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698