OLD | NEW |
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 "components/sync/engine_impl/syncer.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
10 #include "base/location.h" | 10 #include "base/location.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
13 #include "base/time/time.h" | 13 #include "base/time/time.h" |
14 #include "base/trace_event/trace_event.h" | 14 #include "base/trace_event/trace_event.h" |
15 #include "build/build_config.h" | 15 #include "build/build_config.h" |
16 #include "sync/engine/apply_control_data_updates.h" | 16 #include "components/sync/base/cancelation_signal.h" |
17 #include "sync/engine/clear_server_data.h" | 17 #include "components/sync/base/syncer_error.h" |
18 #include "sync/engine/commit.h" | 18 #include "components/sync/base/unique_position.h" |
19 #include "sync/engine/commit_processor.h" | 19 #include "components/sync/engine_impl/apply_control_data_updates.h" |
20 #include "sync/engine/conflict_resolver.h" | 20 #include "components/sync/engine_impl/clear_server_data.h" |
21 #include "sync/engine/get_updates_delegate.h" | 21 #include "components/sync/engine_impl/commit.h" |
22 #include "sync/engine/get_updates_processor.h" | 22 #include "components/sync/engine_impl/commit_processor.h" |
23 #include "sync/engine/net/server_connection_manager.h" | 23 #include "components/sync/engine_impl/conflict_resolver.h" |
24 #include "sync/engine/syncer_types.h" | 24 #include "components/sync/engine_impl/get_updates_delegate.h" |
25 #include "sync/internal_api/public/base/cancelation_signal.h" | 25 #include "components/sync/engine_impl/get_updates_processor.h" |
26 #include "sync/internal_api/public/base/unique_position.h" | 26 #include "components/sync/engine_impl/net/server_connection_manager.h" |
27 #include "sync/internal_api/public/util/syncer_error.h" | 27 #include "components/sync/engine_impl/syncer_types.h" |
28 #include "sync/sessions/nudge_tracker.h" | 28 #include "components/sync/sessions_impl/nudge_tracker.h" |
29 #include "sync/syncable/directory.h" | 29 #include "components/sync/syncable/directory.h" |
30 #include "sync/syncable/mutable_entry.h" | 30 #include "components/sync/syncable/mutable_entry.h" |
31 #include "sync/syncable/syncable-inl.h" | 31 #include "components/sync/syncable/syncable-inl.h" |
32 | 32 |
33 using base::Time; | 33 using base::Time; |
34 using base::TimeDelta; | 34 using base::TimeDelta; |
35 using sync_pb::ClientCommand; | 35 using sync_pb::ClientCommand; |
36 | 36 |
37 namespace syncer { | 37 namespace syncer { |
38 | 38 |
39 // TODO(akalin): We may want to propagate this switch up | 39 // TODO(akalin): We may want to propagate this switch up |
40 // eventually. | 40 // eventually. |
41 #if defined(OS_ANDROID) || defined(OS_IOS) | 41 #if defined(OS_ANDROID) || defined(OS_IOS) |
42 static const bool kCreateMobileBookmarksFolder = true; | 42 static const bool kCreateMobileBookmarksFolder = true; |
43 #else | 43 #else |
44 static const bool kCreateMobileBookmarksFolder = false; | 44 static const bool kCreateMobileBookmarksFolder = false; |
45 #endif | 45 #endif |
46 | 46 |
47 using sessions::StatusController; | 47 using sessions::StatusController; |
48 using sessions::SyncSession; | 48 using sessions::SyncSession; |
49 using sessions::NudgeTracker; | 49 using sessions::NudgeTracker; |
50 | 50 |
51 Syncer::Syncer(syncer::CancelationSignal* cancelation_signal) | 51 Syncer::Syncer(syncer::CancelationSignal* cancelation_signal) |
52 : cancelation_signal_(cancelation_signal), | 52 : cancelation_signal_(cancelation_signal), is_syncing_(false) {} |
53 is_syncing_(false) { | |
54 } | |
55 | 53 |
56 Syncer::~Syncer() {} | 54 Syncer::~Syncer() {} |
57 | 55 |
58 bool Syncer::ExitRequested() { | 56 bool Syncer::ExitRequested() { |
59 return cancelation_signal_->IsSignalled(); | 57 return cancelation_signal_->IsSignalled(); |
60 } | 58 } |
61 | 59 |
62 bool Syncer::IsSyncing() const { | 60 bool Syncer::IsSyncing() const { |
63 return is_syncing_; | 61 return is_syncing_; |
64 } | 62 } |
65 | 63 |
66 bool Syncer::NormalSyncShare(ModelTypeSet request_types, | 64 bool Syncer::NormalSyncShare(ModelTypeSet request_types, |
67 NudgeTracker* nudge_tracker, | 65 NudgeTracker* nudge_tracker, |
68 SyncSession* session) { | 66 SyncSession* session) { |
69 base::AutoReset<bool> is_syncing(&is_syncing_, true); | 67 base::AutoReset<bool> is_syncing(&is_syncing_, true); |
70 HandleCycleBegin(session); | 68 HandleCycleBegin(session); |
71 if (nudge_tracker->IsGetUpdatesRequired() || | 69 if (nudge_tracker->IsGetUpdatesRequired() || |
72 session->context()->ShouldFetchUpdatesBeforeCommit()) { | 70 session->context()->ShouldFetchUpdatesBeforeCommit()) { |
73 VLOG(1) << "Downloading types " << ModelTypeSetToString(request_types); | 71 VLOG(1) << "Downloading types " << ModelTypeSetToString(request_types); |
74 NormalGetUpdatesDelegate normal_delegate(*nudge_tracker); | 72 NormalGetUpdatesDelegate normal_delegate(*nudge_tracker); |
75 GetUpdatesProcessor get_updates_processor( | 73 GetUpdatesProcessor get_updates_processor( |
76 session->context()->model_type_registry()->update_handler_map(), | 74 session->context()->model_type_registry()->update_handler_map(), |
77 normal_delegate); | 75 normal_delegate); |
78 if (!DownloadAndApplyUpdates( | 76 if (!DownloadAndApplyUpdates(&request_types, session, |
79 &request_types, | 77 &get_updates_processor, |
80 session, | 78 kCreateMobileBookmarksFolder)) { |
81 &get_updates_processor, | |
82 kCreateMobileBookmarksFolder)) { | |
83 return HandleCycleEnd(session, nudge_tracker->GetLegacySource()); | 79 return HandleCycleEnd(session, nudge_tracker->GetLegacySource()); |
84 } | 80 } |
85 } | 81 } |
86 | 82 |
87 VLOG(1) << "Committing from types " << ModelTypeSetToString(request_types); | 83 VLOG(1) << "Committing from types " << ModelTypeSetToString(request_types); |
88 CommitProcessor commit_processor( | 84 CommitProcessor commit_processor( |
89 session->context()->model_type_registry()->commit_contributor_map()); | 85 session->context()->model_type_registry()->commit_contributor_map()); |
90 SyncerError commit_result = BuildAndPostCommits(request_types, nudge_tracker, | 86 SyncerError commit_result = BuildAndPostCommits(request_types, nudge_tracker, |
91 session, &commit_processor); | 87 session, &commit_processor); |
92 session->mutable_status_controller()->set_commit_result(commit_result); | 88 session->mutable_status_controller()->set_commit_result(commit_result); |
93 | 89 |
94 return HandleCycleEnd(session, nudge_tracker->GetLegacySource()); | 90 return HandleCycleEnd(session, nudge_tracker->GetLegacySource()); |
95 } | 91 } |
96 | 92 |
97 bool Syncer::ConfigureSyncShare( | 93 bool Syncer::ConfigureSyncShare( |
98 ModelTypeSet request_types, | 94 ModelTypeSet request_types, |
99 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source, | 95 sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source, |
100 SyncSession* session) { | 96 SyncSession* session) { |
101 base::AutoReset<bool> is_syncing(&is_syncing_, true); | 97 base::AutoReset<bool> is_syncing(&is_syncing_, true); |
102 VLOG(1) << "Configuring types " << ModelTypeSetToString(request_types); | 98 VLOG(1) << "Configuring types " << ModelTypeSetToString(request_types); |
103 HandleCycleBegin(session); | 99 HandleCycleBegin(session); |
104 ConfigureGetUpdatesDelegate configure_delegate(source); | 100 ConfigureGetUpdatesDelegate configure_delegate(source); |
105 GetUpdatesProcessor get_updates_processor( | 101 GetUpdatesProcessor get_updates_processor( |
106 session->context()->model_type_registry()->update_handler_map(), | 102 session->context()->model_type_registry()->update_handler_map(), |
107 configure_delegate); | 103 configure_delegate); |
108 DownloadAndApplyUpdates( | 104 DownloadAndApplyUpdates(&request_types, session, &get_updates_processor, |
109 &request_types, | 105 kCreateMobileBookmarksFolder); |
110 session, | |
111 &get_updates_processor, | |
112 kCreateMobileBookmarksFolder); | |
113 return HandleCycleEnd(session, source); | 106 return HandleCycleEnd(session, source); |
114 } | 107 } |
115 | 108 |
116 bool Syncer::PollSyncShare(ModelTypeSet request_types, | 109 bool Syncer::PollSyncShare(ModelTypeSet request_types, SyncSession* session) { |
117 SyncSession* session) { | |
118 base::AutoReset<bool> is_syncing(&is_syncing_, true); | 110 base::AutoReset<bool> is_syncing(&is_syncing_, true); |
119 VLOG(1) << "Polling types " << ModelTypeSetToString(request_types); | 111 VLOG(1) << "Polling types " << ModelTypeSetToString(request_types); |
120 HandleCycleBegin(session); | 112 HandleCycleBegin(session); |
121 PollGetUpdatesDelegate poll_delegate; | 113 PollGetUpdatesDelegate poll_delegate; |
122 GetUpdatesProcessor get_updates_processor( | 114 GetUpdatesProcessor get_updates_processor( |
123 session->context()->model_type_registry()->update_handler_map(), | 115 session->context()->model_type_registry()->update_handler_map(), |
124 poll_delegate); | 116 poll_delegate); |
125 DownloadAndApplyUpdates( | 117 DownloadAndApplyUpdates(&request_types, session, &get_updates_processor, |
126 &request_types, | 118 kCreateMobileBookmarksFolder); |
127 session, | |
128 &get_updates_processor, | |
129 kCreateMobileBookmarksFolder); | |
130 return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::PERIODIC); | 119 return HandleCycleEnd(session, sync_pb::GetUpdatesCallerInfo::PERIODIC); |
131 } | 120 } |
132 | 121 |
133 bool Syncer::DownloadAndApplyUpdates( | 122 bool Syncer::DownloadAndApplyUpdates(ModelTypeSet* request_types, |
134 ModelTypeSet* request_types, | 123 SyncSession* session, |
135 SyncSession* session, | 124 GetUpdatesProcessor* get_updates_processor, |
136 GetUpdatesProcessor* get_updates_processor, | 125 bool create_mobile_bookmarks_folder) { |
137 bool create_mobile_bookmarks_folder) { | |
138 SyncerError download_result = UNSET; | 126 SyncerError download_result = UNSET; |
139 do { | 127 do { |
140 download_result = get_updates_processor->DownloadUpdates( | 128 download_result = get_updates_processor->DownloadUpdates( |
141 request_types, | 129 request_types, session, create_mobile_bookmarks_folder); |
142 session, | |
143 create_mobile_bookmarks_folder); | |
144 } while (download_result == SERVER_MORE_TO_DOWNLOAD); | 130 } while (download_result == SERVER_MORE_TO_DOWNLOAD); |
145 | 131 |
146 // Exit without applying if we're shutting down or an error was detected. | 132 // Exit without applying if we're shutting down or an error was detected. |
147 if (download_result != SYNCER_OK) | 133 if (download_result != SYNCER_OK) |
148 return false; | 134 return false; |
149 if (ExitRequested()) | 135 if (ExitRequested()) |
150 return false; | 136 return false; |
151 | 137 |
152 { | 138 { |
153 TRACE_EVENT0("sync", "ApplyUpdates"); | 139 TRACE_EVENT0("sync", "ApplyUpdates"); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 } | 211 } |
226 | 212 |
227 bool Syncer::PostClearServerData(SyncSession* session) { | 213 bool Syncer::PostClearServerData(SyncSession* session) { |
228 DCHECK(session); | 214 DCHECK(session); |
229 ClearServerData clear_server_data(session->context()->account_name()); | 215 ClearServerData clear_server_data(session->context()->account_name()); |
230 const SyncerError post_result = clear_server_data.SendRequest(session); | 216 const SyncerError post_result = clear_server_data.SendRequest(session); |
231 return post_result == SYNCER_OK; | 217 return post_result == SYNCER_OK; |
232 } | 218 } |
233 | 219 |
234 } // namespace syncer | 220 } // namespace syncer |
OLD | NEW |