| OLD | NEW | 
|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/sync/driver/glue/sync_backend_host_core.h" | 5 #include "components/sync/driver/glue/sync_backend_host_core.h" | 
| 6 | 6 | 
| 7 #include <utility> | 7 #include <utility> | 
| 8 | 8 | 
| 9 #include "base/bind.h" | 9 #include "base/bind.h" | 
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" | 
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 46 | 46 | 
| 47 namespace { | 47 namespace { | 
| 48 | 48 | 
| 49 void BindFetcherToDataTracker(net::URLFetcher* fetcher) { | 49 void BindFetcherToDataTracker(net::URLFetcher* fetcher) { | 
| 50   data_use_measurement::DataUseUserData::AttachToFetcher( | 50   data_use_measurement::DataUseUserData::AttachToFetcher( | 
| 51       fetcher, data_use_measurement::DataUseUserData::SYNC); | 51       fetcher, data_use_measurement::DataUseUserData::SYNC); | 
| 52 } | 52 } | 
| 53 | 53 | 
| 54 }  // namespace | 54 }  // namespace | 
| 55 | 55 | 
| 56 namespace browser_sync { | 56 namespace syncer { | 
| 57 | 57 | 
| 58 DoInitializeOptions::DoInitializeOptions( | 58 DoInitializeOptions::DoInitializeOptions( | 
| 59     base::MessageLoop* sync_loop, | 59     base::MessageLoop* sync_loop, | 
| 60     SyncBackendRegistrar* registrar, | 60     SyncBackendRegistrar* registrar, | 
| 61     const std::vector<scoped_refptr<syncer::ModelSafeWorker>>& workers, | 61     const std::vector<scoped_refptr<ModelSafeWorker>>& workers, | 
| 62     const scoped_refptr<syncer::ExtensionsActivity>& extensions_activity, | 62     const scoped_refptr<ExtensionsActivity>& extensions_activity, | 
| 63     const syncer::WeakHandle<syncer::JsEventHandler>& event_handler, | 63     const WeakHandle<JsEventHandler>& event_handler, | 
| 64     const GURL& service_url, | 64     const GURL& service_url, | 
| 65     const std::string& sync_user_agent, | 65     const std::string& sync_user_agent, | 
| 66     std::unique_ptr<syncer::HttpPostProviderFactory> http_bridge_factory, | 66     std::unique_ptr<HttpPostProviderFactory> http_bridge_factory, | 
| 67     const syncer::SyncCredentials& credentials, | 67     const SyncCredentials& credentials, | 
| 68     const std::string& invalidator_client_id, | 68     const std::string& invalidator_client_id, | 
| 69     std::unique_ptr<syncer::SyncManagerFactory> sync_manager_factory, | 69     std::unique_ptr<SyncManagerFactory> sync_manager_factory, | 
| 70     bool delete_sync_data_folder, | 70     bool delete_sync_data_folder, | 
| 71     const std::string& restored_key_for_bootstrapping, | 71     const std::string& restored_key_for_bootstrapping, | 
| 72     const std::string& restored_keystore_key_for_bootstrapping, | 72     const std::string& restored_keystore_key_for_bootstrapping, | 
| 73     std::unique_ptr<syncer::InternalComponentsFactory> | 73     std::unique_ptr<InternalComponentsFactory> internal_components_factory, | 
| 74         internal_components_factory, | 74     const WeakHandle<UnrecoverableErrorHandler>& unrecoverable_error_handler, | 
| 75     const syncer::WeakHandle<syncer::UnrecoverableErrorHandler>& |  | 
| 76         unrecoverable_error_handler, |  | 
| 77     const base::Closure& report_unrecoverable_error_function, | 75     const base::Closure& report_unrecoverable_error_function, | 
| 78     std::unique_ptr<syncer::SyncEncryptionHandler::NigoriState> | 76     std::unique_ptr<SyncEncryptionHandler::NigoriState> saved_nigori_state, | 
| 79         saved_nigori_state, | 77     const std::map<ModelType, int64_t>& invalidation_versions) | 
| 80     const std::map<syncer::ModelType, int64_t>& invalidation_versions) |  | 
| 81     : sync_loop(sync_loop), | 78     : sync_loop(sync_loop), | 
| 82       registrar(registrar), | 79       registrar(registrar), | 
| 83       workers(workers), | 80       workers(workers), | 
| 84       extensions_activity(extensions_activity), | 81       extensions_activity(extensions_activity), | 
| 85       event_handler(event_handler), | 82       event_handler(event_handler), | 
| 86       service_url(service_url), | 83       service_url(service_url), | 
| 87       sync_user_agent(sync_user_agent), | 84       sync_user_agent(sync_user_agent), | 
| 88       http_bridge_factory(std::move(http_bridge_factory)), | 85       http_bridge_factory(std::move(http_bridge_factory)), | 
| 89       credentials(credentials), | 86       credentials(credentials), | 
| 90       invalidator_client_id(invalidator_client_id), | 87       invalidator_client_id(invalidator_client_id), | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 123       forward_type_info_(false), | 120       forward_type_info_(false), | 
| 124       weak_ptr_factory_(this) { | 121       weak_ptr_factory_(this) { | 
| 125   DCHECK(backend.get()); | 122   DCHECK(backend.get()); | 
| 126 } | 123 } | 
| 127 | 124 | 
| 128 SyncBackendHostCore::~SyncBackendHostCore() { | 125 SyncBackendHostCore::~SyncBackendHostCore() { | 
| 129   DCHECK(!sync_manager_.get()); | 126   DCHECK(!sync_manager_.get()); | 
| 130 } | 127 } | 
| 131 | 128 | 
| 132 void SyncBackendHostCore::OnSyncCycleCompleted( | 129 void SyncBackendHostCore::OnSyncCycleCompleted( | 
| 133     const syncer::SyncCycleSnapshot& snapshot) { | 130     const SyncCycleSnapshot& snapshot) { | 
| 134   if (!sync_loop_) | 131   if (!sync_loop_) | 
| 135     return; | 132     return; | 
| 136   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 133   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 137 | 134 | 
| 138   host_.Call(FROM_HERE, | 135   host_.Call(FROM_HERE, | 
| 139              &SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop, | 136              &SyncBackendHostImpl::HandleSyncCycleCompletedOnFrontendLoop, | 
| 140              snapshot); | 137              snapshot); | 
| 141 } | 138 } | 
| 142 | 139 | 
| 143 void SyncBackendHostCore::DoRefreshTypes(syncer::ModelTypeSet types) { | 140 void SyncBackendHostCore::DoRefreshTypes(ModelTypeSet types) { | 
| 144   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 141   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 145   sync_manager_->RefreshTypes(types); | 142   sync_manager_->RefreshTypes(types); | 
| 146 } | 143 } | 
| 147 | 144 | 
| 148 void SyncBackendHostCore::OnInitializationComplete( | 145 void SyncBackendHostCore::OnInitializationComplete( | 
| 149     const syncer::WeakHandle<syncer::JsBackend>& js_backend, | 146     const WeakHandle<JsBackend>& js_backend, | 
| 150     const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>& | 147     const WeakHandle<DataTypeDebugInfoListener>& debug_info_listener, | 
| 151         debug_info_listener, |  | 
| 152     bool success, | 148     bool success, | 
| 153     const syncer::ModelTypeSet restored_types) { | 149     const ModelTypeSet restored_types) { | 
| 154   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 150   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 155 | 151 | 
| 156   if (!success) { | 152   if (!success) { | 
| 157     DoDestroySyncManager(syncer::STOP_SYNC); | 153     DoDestroySyncManager(STOP_SYNC); | 
| 158     host_.Call(FROM_HERE, | 154     host_.Call(FROM_HERE, | 
| 159                &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 155                &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 
| 160     return; | 156     return; | 
| 161   } | 157   } | 
| 162 | 158 | 
| 163   // Register for encryption related changes now. We have to do this before | 159   // Register for encryption related changes now. We have to do this before | 
| 164   // the initializing downloading control types or initializing the encryption | 160   // the initializing downloading control types or initializing the encryption | 
| 165   // handler in order to receive notifications triggered during encryption | 161   // handler in order to receive notifications triggered during encryption | 
| 166   // startup. | 162   // startup. | 
| 167   sync_manager_->GetEncryptionHandler()->AddObserver(this); | 163   sync_manager_->GetEncryptionHandler()->AddObserver(this); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 178   debug_info_listener_ = debug_info_listener; | 174   debug_info_listener_ = debug_info_listener; | 
| 179 | 175 | 
| 180   // Before proceeding any further, we need to download the control types and | 176   // Before proceeding any further, we need to download the control types and | 
| 181   // purge any partial data (ie. data downloaded for a type that was on its way | 177   // purge any partial data (ie. data downloaded for a type that was on its way | 
| 182   // to being initially synced, but didn't quite make it.).  The following | 178   // to being initially synced, but didn't quite make it.).  The following | 
| 183   // configure cycle will take care of this.  It depends on the registrar state | 179   // configure cycle will take care of this.  It depends on the registrar state | 
| 184   // which we initialize below to ensure that we don't perform any downloads if | 180   // which we initialize below to ensure that we don't perform any downloads if | 
| 185   // all control types have already completed their initial sync. | 181   // all control types have already completed their initial sync. | 
| 186   registrar_->SetInitialTypes(restored_types); | 182   registrar_->SetInitialTypes(restored_types); | 
| 187 | 183 | 
| 188   syncer::ConfigureReason reason = | 184   ConfigureReason reason = restored_types.Empty() | 
| 189       restored_types.Empty() ? syncer::CONFIGURE_REASON_NEW_CLIENT | 185                                ? CONFIGURE_REASON_NEW_CLIENT | 
| 190                              : syncer::CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; | 186                                : CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; | 
| 191 | 187 | 
| 192   syncer::ModelTypeSet new_control_types = registrar_->ConfigureDataTypes( | 188   ModelTypeSet new_control_types = | 
| 193       syncer::ControlTypes(), syncer::ModelTypeSet()); | 189       registrar_->ConfigureDataTypes(ControlTypes(), ModelTypeSet()); | 
| 194   syncer::ModelSafeRoutingInfo routing_info; | 190   ModelSafeRoutingInfo routing_info; | 
| 195   registrar_->GetModelSafeRoutingInfo(&routing_info); | 191   registrar_->GetModelSafeRoutingInfo(&routing_info); | 
| 196   SDVLOG(1) << "Control Types " | 192   SDVLOG(1) << "Control Types " << ModelTypeSetToString(new_control_types) | 
| 197             << syncer::ModelTypeSetToString(new_control_types) |  | 
| 198             << " added; calling ConfigureSyncer"; | 193             << " added; calling ConfigureSyncer"; | 
| 199 | 194 | 
| 200   syncer::ModelTypeSet types_to_purge = syncer::Difference( | 195   ModelTypeSet types_to_purge = | 
| 201       syncer::ModelTypeSet::All(), GetRoutingInfoTypes(routing_info)); | 196       Difference(ModelTypeSet::All(), GetRoutingInfoTypes(routing_info)); | 
| 202 | 197 | 
| 203   sync_manager_->ConfigureSyncer( | 198   sync_manager_->ConfigureSyncer( | 
| 204       reason, new_control_types, types_to_purge, syncer::ModelTypeSet(), | 199       reason, new_control_types, types_to_purge, ModelTypeSet(), ModelTypeSet(), | 
| 205       syncer::ModelTypeSet(), routing_info, | 200       routing_info, | 
| 206       base::Bind(&SyncBackendHostCore::DoInitialProcessControlTypes, | 201       base::Bind(&SyncBackendHostCore::DoInitialProcessControlTypes, | 
| 207                  weak_ptr_factory_.GetWeakPtr()), | 202                  weak_ptr_factory_.GetWeakPtr()), | 
| 208       base::Closure()); | 203       base::Closure()); | 
| 209 } | 204 } | 
| 210 | 205 | 
| 211 void SyncBackendHostCore::OnConnectionStatusChange( | 206 void SyncBackendHostCore::OnConnectionStatusChange(ConnectionStatus status) { | 
| 212     syncer::ConnectionStatus status) { |  | 
| 213   if (!sync_loop_) | 207   if (!sync_loop_) | 
| 214     return; | 208     return; | 
| 215   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 209   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 216   host_.Call(FROM_HERE, | 210   host_.Call(FROM_HERE, | 
| 217              &SyncBackendHostImpl::HandleConnectionStatusChangeOnFrontendLoop, | 211              &SyncBackendHostImpl::HandleConnectionStatusChangeOnFrontendLoop, | 
| 218              status); | 212              status); | 
| 219 } | 213 } | 
| 220 | 214 | 
| 221 void SyncBackendHostCore::OnPassphraseRequired( | 215 void SyncBackendHostCore::OnPassphraseRequired( | 
| 222     syncer::PassphraseRequiredReason reason, | 216     PassphraseRequiredReason reason, | 
| 223     const sync_pb::EncryptedData& pending_keys) { | 217     const sync_pb::EncryptedData& pending_keys) { | 
| 224   if (!sync_loop_) | 218   if (!sync_loop_) | 
| 225     return; | 219     return; | 
| 226   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 220   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 227   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseRequired, reason, | 221   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseRequired, reason, | 
| 228              pending_keys); | 222              pending_keys); | 
| 229 } | 223 } | 
| 230 | 224 | 
| 231 void SyncBackendHostCore::OnPassphraseAccepted() { | 225 void SyncBackendHostCore::OnPassphraseAccepted() { | 
| 232   if (!sync_loop_) | 226   if (!sync_loop_) | 
| 233     return; | 227     return; | 
| 234   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 228   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 235   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseAccepted); | 229   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyPassphraseAccepted); | 
| 236 } | 230 } | 
| 237 | 231 | 
| 238 void SyncBackendHostCore::OnBootstrapTokenUpdated( | 232 void SyncBackendHostCore::OnBootstrapTokenUpdated( | 
| 239     const std::string& bootstrap_token, | 233     const std::string& bootstrap_token, | 
| 240     syncer::BootstrapTokenType type) { | 234     BootstrapTokenType type) { | 
| 241   if (!sync_loop_) | 235   if (!sync_loop_) | 
| 242     return; | 236     return; | 
| 243   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 237   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 244   host_.Call(FROM_HERE, &SyncBackendHostImpl::PersistEncryptionBootstrapToken, | 238   host_.Call(FROM_HERE, &SyncBackendHostImpl::PersistEncryptionBootstrapToken, | 
| 245              bootstrap_token, type); | 239              bootstrap_token, type); | 
| 246 } | 240 } | 
| 247 | 241 | 
| 248 void SyncBackendHostCore::OnEncryptedTypesChanged( | 242 void SyncBackendHostCore::OnEncryptedTypesChanged(ModelTypeSet encrypted_types, | 
| 249     syncer::ModelTypeSet encrypted_types, | 243                                                   bool encrypt_everything) { | 
| 250     bool encrypt_everything) { |  | 
| 251   if (!sync_loop_) | 244   if (!sync_loop_) | 
| 252     return; | 245     return; | 
| 253   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 246   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 254   // NOTE: We're in a transaction. | 247   // NOTE: We're in a transaction. | 
| 255   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptedTypesChanged, | 248   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptedTypesChanged, | 
| 256              encrypted_types, encrypt_everything); | 249              encrypted_types, encrypt_everything); | 
| 257 } | 250 } | 
| 258 | 251 | 
| 259 void SyncBackendHostCore::OnEncryptionComplete() { | 252 void SyncBackendHostCore::OnEncryptionComplete() { | 
| 260   if (!sync_loop_) | 253   if (!sync_loop_) | 
| 261     return; | 254     return; | 
| 262   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 255   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 263   // NOTE: We're in a transaction. | 256   // NOTE: We're in a transaction. | 
| 264   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptionComplete); | 257   host_.Call(FROM_HERE, &SyncBackendHostImpl::NotifyEncryptionComplete); | 
| 265 } | 258 } | 
| 266 | 259 | 
| 267 void SyncBackendHostCore::OnCryptographerStateChanged( | 260 void SyncBackendHostCore::OnCryptographerStateChanged( | 
| 268     syncer::Cryptographer* cryptographer) { | 261     Cryptographer* cryptographer) { | 
| 269   // Do nothing. | 262   // Do nothing. | 
| 270 } | 263 } | 
| 271 | 264 | 
| 272 void SyncBackendHostCore::OnPassphraseTypeChanged(syncer::PassphraseType type, | 265 void SyncBackendHostCore::OnPassphraseTypeChanged(PassphraseType type, | 
| 273                                                   base::Time passphrase_time) { | 266                                                   base::Time passphrase_time) { | 
| 274   host_.Call(FROM_HERE, | 267   host_.Call(FROM_HERE, | 
| 275              &SyncBackendHostImpl::HandlePassphraseTypeChangedOnFrontendLoop, | 268              &SyncBackendHostImpl::HandlePassphraseTypeChangedOnFrontendLoop, | 
| 276              type, passphrase_time); | 269              type, passphrase_time); | 
| 277 } | 270 } | 
| 278 | 271 | 
| 279 void SyncBackendHostCore::OnLocalSetPassphraseEncryption( | 272 void SyncBackendHostCore::OnLocalSetPassphraseEncryption( | 
| 280     const syncer::SyncEncryptionHandler::NigoriState& nigori_state) { | 273     const SyncEncryptionHandler::NigoriState& nigori_state) { | 
| 281   host_.Call( | 274   host_.Call( | 
| 282       FROM_HERE, | 275       FROM_HERE, | 
| 283       &SyncBackendHostImpl::HandleLocalSetPassphraseEncryptionOnFrontendLoop, | 276       &SyncBackendHostImpl::HandleLocalSetPassphraseEncryptionOnFrontendLoop, | 
| 284       nigori_state); | 277       nigori_state); | 
| 285 } | 278 } | 
| 286 | 279 | 
| 287 void SyncBackendHostCore::OnCommitCountersUpdated( | 280 void SyncBackendHostCore::OnCommitCountersUpdated( | 
| 288     syncer::ModelType type, | 281     ModelType type, | 
| 289     const syncer::CommitCounters& counters) { | 282     const CommitCounters& counters) { | 
| 290   host_.Call( | 283   host_.Call( | 
| 291       FROM_HERE, | 284       FROM_HERE, | 
| 292       &SyncBackendHostImpl::HandleDirectoryCommitCountersUpdatedOnFrontendLoop, | 285       &SyncBackendHostImpl::HandleDirectoryCommitCountersUpdatedOnFrontendLoop, | 
| 293       type, counters); | 286       type, counters); | 
| 294 } | 287 } | 
| 295 | 288 | 
| 296 void SyncBackendHostCore::OnUpdateCountersUpdated( | 289 void SyncBackendHostCore::OnUpdateCountersUpdated( | 
| 297     syncer::ModelType type, | 290     ModelType type, | 
| 298     const syncer::UpdateCounters& counters) { | 291     const UpdateCounters& counters) { | 
| 299   host_.Call( | 292   host_.Call( | 
| 300       FROM_HERE, | 293       FROM_HERE, | 
| 301       &SyncBackendHostImpl::HandleDirectoryUpdateCountersUpdatedOnFrontendLoop, | 294       &SyncBackendHostImpl::HandleDirectoryUpdateCountersUpdatedOnFrontendLoop, | 
| 302       type, counters); | 295       type, counters); | 
| 303 } | 296 } | 
| 304 | 297 | 
| 305 void SyncBackendHostCore::OnStatusCountersUpdated( | 298 void SyncBackendHostCore::OnStatusCountersUpdated( | 
| 306     syncer::ModelType type, | 299     ModelType type, | 
| 307     const syncer::StatusCounters& counters) { | 300     const StatusCounters& counters) { | 
| 308   host_.Call( | 301   host_.Call( | 
| 309       FROM_HERE, | 302       FROM_HERE, | 
| 310       &SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop, | 303       &SyncBackendHostImpl::HandleDirectoryStatusCountersUpdatedOnFrontendLoop, | 
| 311       type, counters); | 304       type, counters); | 
| 312 } | 305 } | 
| 313 | 306 | 
| 314 void SyncBackendHostCore::OnActionableError( | 307 void SyncBackendHostCore::OnActionableError( | 
| 315     const syncer::SyncProtocolError& sync_error) { | 308     const SyncProtocolError& sync_error) { | 
| 316   if (!sync_loop_) | 309   if (!sync_loop_) | 
| 317     return; | 310     return; | 
| 318   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 311   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 319   host_.Call(FROM_HERE, | 312   host_.Call(FROM_HERE, | 
| 320              &SyncBackendHostImpl::HandleActionableErrorEventOnFrontendLoop, | 313              &SyncBackendHostImpl::HandleActionableErrorEventOnFrontendLoop, | 
| 321              sync_error); | 314              sync_error); | 
| 322 } | 315 } | 
| 323 | 316 | 
| 324 void SyncBackendHostCore::OnMigrationRequested(syncer::ModelTypeSet types) { | 317 void SyncBackendHostCore::OnMigrationRequested(ModelTypeSet types) { | 
| 325   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 318   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 326   host_.Call(FROM_HERE, | 319   host_.Call(FROM_HERE, | 
| 327              &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, | 320              &SyncBackendHostImpl::HandleMigrationRequestedOnFrontendLoop, | 
| 328              types); | 321              types); | 
| 329 } | 322 } | 
| 330 | 323 | 
| 331 void SyncBackendHostCore::OnProtocolEvent(const syncer::ProtocolEvent& event) { | 324 void SyncBackendHostCore::OnProtocolEvent(const ProtocolEvent& event) { | 
| 332   if (forward_protocol_events_) { | 325   if (forward_protocol_events_) { | 
| 333     std::unique_ptr<syncer::ProtocolEvent> event_clone(event.Clone()); | 326     std::unique_ptr<ProtocolEvent> event_clone(event.Clone()); | 
| 334     host_.Call(FROM_HERE, | 327     host_.Call(FROM_HERE, | 
| 335                &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 328                &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 
| 336                base::Passed(std::move(event_clone))); | 329                base::Passed(std::move(event_clone))); | 
| 337   } | 330   } | 
| 338 } | 331 } | 
| 339 | 332 | 
| 340 void SyncBackendHostCore::DoOnInvalidatorStateChange( | 333 void SyncBackendHostCore::DoOnInvalidatorStateChange(InvalidatorState state) { | 
| 341     syncer::InvalidatorState state) { |  | 
| 342   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 334   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 343   sync_manager_->SetInvalidatorEnabled(state == syncer::INVALIDATIONS_ENABLED); | 335   sync_manager_->SetInvalidatorEnabled(state == INVALIDATIONS_ENABLED); | 
| 344 } | 336 } | 
| 345 | 337 | 
| 346 void SyncBackendHostCore::DoOnIncomingInvalidation( | 338 void SyncBackendHostCore::DoOnIncomingInvalidation( | 
| 347     const syncer::ObjectIdInvalidationMap& invalidation_map) { | 339     const ObjectIdInvalidationMap& invalidation_map) { | 
| 348   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 340   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 349 | 341 | 
| 350   syncer::ObjectIdSet ids = invalidation_map.GetObjectIds(); | 342   ObjectIdSet ids = invalidation_map.GetObjectIds(); | 
| 351   for (const invalidation::ObjectId& object_id : ids) { | 343   for (const invalidation::ObjectId& object_id : ids) { | 
| 352     syncer::ModelType type; | 344     ModelType type; | 
| 353     if (!NotificationTypeToRealModelType(object_id.name(), &type)) { | 345     if (!NotificationTypeToRealModelType(object_id.name(), &type)) { | 
| 354       DLOG(WARNING) << "Notification has invalid id: " | 346       DLOG(WARNING) << "Notification has invalid id: " | 
| 355                     << syncer::ObjectIdToString(object_id); | 347                     << ObjectIdToString(object_id); | 
| 356     } else { | 348     } else { | 
| 357       syncer::SingleObjectInvalidationSet invalidation_set = | 349       SingleObjectInvalidationSet invalidation_set = | 
| 358           invalidation_map.ForObject(object_id); | 350           invalidation_map.ForObject(object_id); | 
| 359       for (syncer::Invalidation invalidation : invalidation_set) { | 351       for (Invalidation invalidation : invalidation_set) { | 
| 360         auto last_invalidation = last_invalidation_versions_.find(type); | 352         auto last_invalidation = last_invalidation_versions_.find(type); | 
| 361         if (!invalidation.is_unknown_version() && | 353         if (!invalidation.is_unknown_version() && | 
| 362             last_invalidation != last_invalidation_versions_.end() && | 354             last_invalidation != last_invalidation_versions_.end() && | 
| 363             invalidation.version() <= last_invalidation->second) { | 355             invalidation.version() <= last_invalidation->second) { | 
| 364           DVLOG(1) << "Ignoring redundant invalidation for " | 356           DVLOG(1) << "Ignoring redundant invalidation for " | 
| 365                    << syncer::ModelTypeToString(type) << " with version " | 357                    << ModelTypeToString(type) << " with version " | 
| 366                    << invalidation.version() << ", last seen version was " | 358                    << invalidation.version() << ", last seen version was " | 
| 367                    << last_invalidation->second; | 359                    << last_invalidation->second; | 
| 368           continue; | 360           continue; | 
| 369         } | 361         } | 
| 370         std::unique_ptr<syncer::InvalidationInterface> inv_adapter( | 362         std::unique_ptr<InvalidationInterface> inv_adapter( | 
| 371             new InvalidationAdapter(invalidation)); | 363             new InvalidationAdapter(invalidation)); | 
| 372         sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter)); | 364         sync_manager_->OnIncomingInvalidation(type, std::move(inv_adapter)); | 
| 373         if (!invalidation.is_unknown_version()) | 365         if (!invalidation.is_unknown_version()) | 
| 374           last_invalidation_versions_[type] = invalidation.version(); | 366           last_invalidation_versions_[type] = invalidation.version(); | 
| 375       } | 367       } | 
| 376     } | 368     } | 
| 377   } | 369   } | 
| 378 | 370 | 
| 379   host_.Call(FROM_HERE, &SyncBackendHostImpl::UpdateInvalidationVersions, | 371   host_.Call(FROM_HERE, &SyncBackendHostImpl::UpdateInvalidationVersions, | 
| 380              last_invalidation_versions_); | 372              last_invalidation_versions_); | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 406   // Load the previously persisted set of invalidation versions into memory. | 398   // Load the previously persisted set of invalidation versions into memory. | 
| 407   last_invalidation_versions_ = options->invalidation_versions; | 399   last_invalidation_versions_ = options->invalidation_versions; | 
| 408 | 400 | 
| 409   DCHECK(!registrar_); | 401   DCHECK(!registrar_); | 
| 410   registrar_ = options->registrar; | 402   registrar_ = options->registrar; | 
| 411   DCHECK(registrar_); | 403   DCHECK(registrar_); | 
| 412 | 404 | 
| 413   sync_manager_ = options->sync_manager_factory->CreateSyncManager(name_); | 405   sync_manager_ = options->sync_manager_factory->CreateSyncManager(name_); | 
| 414   sync_manager_->AddObserver(this); | 406   sync_manager_->AddObserver(this); | 
| 415 | 407 | 
| 416   syncer::SyncManager::InitArgs args; | 408   SyncManager::InitArgs args; | 
| 417   args.database_location = sync_data_folder_path_; | 409   args.database_location = sync_data_folder_path_; | 
| 418   args.event_handler = options->event_handler; | 410   args.event_handler = options->event_handler; | 
| 419   args.service_url = options->service_url; | 411   args.service_url = options->service_url; | 
| 420   args.post_factory = std::move(options->http_bridge_factory); | 412   args.post_factory = std::move(options->http_bridge_factory); | 
| 421   args.workers = options->workers; | 413   args.workers = options->workers; | 
| 422   args.extensions_activity = options->extensions_activity.get(); | 414   args.extensions_activity = options->extensions_activity.get(); | 
| 423   args.change_delegate = options->registrar;  // as SyncManager::ChangeDelegate | 415   args.change_delegate = options->registrar;  // as SyncManager::ChangeDelegate | 
| 424   args.credentials = options->credentials; | 416   args.credentials = options->credentials; | 
| 425   args.invalidator_client_id = options->invalidator_client_id; | 417   args.invalidator_client_id = options->invalidator_client_id; | 
| 426   args.restored_key_for_bootstrapping = options->restored_key_for_bootstrapping; | 418   args.restored_key_for_bootstrapping = options->restored_key_for_bootstrapping; | 
| 427   args.restored_keystore_key_for_bootstrapping = | 419   args.restored_keystore_key_for_bootstrapping = | 
| 428       options->restored_keystore_key_for_bootstrapping; | 420       options->restored_keystore_key_for_bootstrapping; | 
| 429   args.internal_components_factory = | 421   args.internal_components_factory = | 
| 430       std::move(options->internal_components_factory); | 422       std::move(options->internal_components_factory); | 
| 431   args.encryptor = &encryptor_; | 423   args.encryptor = &encryptor_; | 
| 432   args.unrecoverable_error_handler = options->unrecoverable_error_handler; | 424   args.unrecoverable_error_handler = options->unrecoverable_error_handler; | 
| 433   args.report_unrecoverable_error_function = | 425   args.report_unrecoverable_error_function = | 
| 434       options->report_unrecoverable_error_function; | 426       options->report_unrecoverable_error_function; | 
| 435   args.cancelation_signal = &stop_syncing_signal_; | 427   args.cancelation_signal = &stop_syncing_signal_; | 
| 436   args.saved_nigori_state = std::move(options->saved_nigori_state); | 428   args.saved_nigori_state = std::move(options->saved_nigori_state); | 
| 437   sync_manager_->Init(&args); | 429   sync_manager_->Init(&args); | 
| 438 } | 430 } | 
| 439 | 431 | 
| 440 void SyncBackendHostCore::DoUpdateCredentials( | 432 void SyncBackendHostCore::DoUpdateCredentials( | 
| 441     const syncer::SyncCredentials& credentials) { | 433     const SyncCredentials& credentials) { | 
| 442   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 434   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 443   // UpdateCredentials can be called during backend initialization, possibly | 435   // UpdateCredentials can be called during backend initialization, possibly | 
| 444   // when backend initialization has failed but hasn't notified the UI thread | 436   // when backend initialization has failed but hasn't notified the UI thread | 
| 445   // yet. In that case, the sync manager may have been destroyed on the sync | 437   // yet. In that case, the sync manager may have been destroyed on the sync | 
| 446   // thread before this task was executed, so we do nothing. | 438   // thread before this task was executed, so we do nothing. | 
| 447   if (sync_manager_) { | 439   if (sync_manager_) { | 
| 448     sync_manager_->UpdateCredentials(credentials); | 440     sync_manager_->UpdateCredentials(credentials); | 
| 449   } | 441   } | 
| 450 } | 442 } | 
| 451 | 443 | 
| 452 void SyncBackendHostCore::DoStartSyncing( | 444 void SyncBackendHostCore::DoStartSyncing( | 
| 453     const syncer::ModelSafeRoutingInfo& routing_info, | 445     const ModelSafeRoutingInfo& routing_info, | 
| 454     base::Time last_poll_time) { | 446     base::Time last_poll_time) { | 
| 455   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 447   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 456   sync_manager_->StartSyncingNormally(routing_info, last_poll_time); | 448   sync_manager_->StartSyncingNormally(routing_info, last_poll_time); | 
| 457 } | 449 } | 
| 458 | 450 | 
| 459 void SyncBackendHostCore::DoSetEncryptionPassphrase( | 451 void SyncBackendHostCore::DoSetEncryptionPassphrase( | 
| 460     const std::string& passphrase, | 452     const std::string& passphrase, | 
| 461     bool is_explicit) { | 453     bool is_explicit) { | 
| 462   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 454   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 463   sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase(passphrase, | 455   sync_manager_->GetEncryptionHandler()->SetEncryptionPassphrase(passphrase, | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 476   // which is called at the end of every sync cycle. | 468   // which is called at the end of every sync cycle. | 
| 477   // TODO(zea): eventually add an experiment handler and initialize it here. | 469   // TODO(zea): eventually add an experiment handler and initialize it here. | 
| 478 | 470 | 
| 479   if (!sync_manager_->GetUserShare()) {  // NULL in some tests. | 471   if (!sync_manager_->GetUserShare()) {  // NULL in some tests. | 
| 480     DVLOG(1) << "Skipping initialization of DeviceInfo"; | 472     DVLOG(1) << "Skipping initialization of DeviceInfo"; | 
| 481     host_.Call(FROM_HERE, | 473     host_.Call(FROM_HERE, | 
| 482                &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 474                &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 
| 483     return; | 475     return; | 
| 484   } | 476   } | 
| 485 | 477 | 
| 486   if (!sync_manager_->InitialSyncEndedTypes().HasAll(syncer::ControlTypes())) { | 478   if (!sync_manager_->InitialSyncEndedTypes().HasAll(ControlTypes())) { | 
| 487     LOG(ERROR) << "Failed to download control types"; | 479     LOG(ERROR) << "Failed to download control types"; | 
| 488     host_.Call(FROM_HERE, | 480     host_.Call(FROM_HERE, | 
| 489                &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 481                &SyncBackendHostImpl::HandleInitializationFailureOnFrontendLoop); | 
| 490     return; | 482     return; | 
| 491   } | 483   } | 
| 492 | 484 | 
| 493   host_.Call(FROM_HERE, | 485   host_.Call(FROM_HERE, | 
| 494              &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, | 486              &SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop, | 
| 495              js_backend_, debug_info_listener_, | 487              js_backend_, debug_info_listener_, | 
| 496              base::Passed(sync_manager_->GetModelTypeConnectorProxy()), | 488              base::Passed(sync_manager_->GetModelTypeConnectorProxy()), | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 525 | 517 | 
| 526   // This will drop the HttpBridgeFactory's reference to the | 518   // This will drop the HttpBridgeFactory's reference to the | 
| 527   // RequestContextGetter.  Once this has been called, the HttpBridgeFactory can | 519   // RequestContextGetter.  Once this has been called, the HttpBridgeFactory can | 
| 528   // no longer be used to create new HttpBridge instances.  We can get away with | 520   // no longer be used to create new HttpBridge instances.  We can get away with | 
| 529   // this because the stop_syncing_signal_ has already been signalled, which | 521   // this because the stop_syncing_signal_ has already been signalled, which | 
| 530   // guarantees that the ServerConnectionManager will no longer attempt to | 522   // guarantees that the ServerConnectionManager will no longer attempt to | 
| 531   // create new connections. | 523   // create new connections. | 
| 532   release_request_context_signal_.Signal(); | 524   release_request_context_signal_.Signal(); | 
| 533 } | 525 } | 
| 534 | 526 | 
| 535 void SyncBackendHostCore::DoShutdown(syncer::ShutdownReason reason) { | 527 void SyncBackendHostCore::DoShutdown(ShutdownReason reason) { | 
| 536   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 528   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 537 | 529 | 
| 538   DoDestroySyncManager(reason); | 530   DoDestroySyncManager(reason); | 
| 539 | 531 | 
| 540   registrar_ = NULL; | 532   registrar_ = NULL; | 
| 541 | 533 | 
| 542   if (reason == syncer::DISABLE_SYNC) | 534   if (reason == DISABLE_SYNC) | 
| 543     DeleteSyncDataFolder(); | 535     DeleteSyncDataFolder(); | 
| 544 | 536 | 
| 545   host_.Reset(); | 537   host_.Reset(); | 
| 546   weak_ptr_factory_.InvalidateWeakPtrs(); | 538   weak_ptr_factory_.InvalidateWeakPtrs(); | 
| 547 } | 539 } | 
| 548 | 540 | 
| 549 void SyncBackendHostCore::DoDestroySyncManager(syncer::ShutdownReason reason) { | 541 void SyncBackendHostCore::DoDestroySyncManager(ShutdownReason reason) { | 
| 550   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 542   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 551   if (sync_manager_) { | 543   if (sync_manager_) { | 
| 552     DisableDirectoryTypeDebugInfoForwarding(); | 544     DisableDirectoryTypeDebugInfoForwarding(); | 
| 553     save_changes_timer_.reset(); | 545     save_changes_timer_.reset(); | 
| 554     sync_manager_->RemoveObserver(this); | 546     sync_manager_->RemoveObserver(this); | 
| 555     sync_manager_->ShutdownOnSyncThread(reason); | 547     sync_manager_->ShutdownOnSyncThread(reason); | 
| 556     sync_manager_.reset(); | 548     sync_manager_.reset(); | 
| 557   } | 549   } | 
| 558 } | 550 } | 
| 559 | 551 | 
| 560 void SyncBackendHostCore::DoConfigureSyncer( | 552 void SyncBackendHostCore::DoConfigureSyncer( | 
| 561     syncer::ConfigureReason reason, | 553     ConfigureReason reason, | 
| 562     const DoConfigureSyncerTypes& config_types, | 554     const DoConfigureSyncerTypes& config_types, | 
| 563     const syncer::ModelSafeRoutingInfo routing_info, | 555     const ModelSafeRoutingInfo routing_info, | 
| 564     const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>& | 556     const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task, | 
| 565         ready_task, |  | 
| 566     const base::Closure& retry_callback) { | 557     const base::Closure& retry_callback) { | 
| 567   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 558   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 568   DCHECK(!ready_task.is_null()); | 559   DCHECK(!ready_task.is_null()); | 
| 569   DCHECK(!retry_callback.is_null()); | 560   DCHECK(!retry_callback.is_null()); | 
| 570   base::Closure chained_ready_task(base::Bind( | 561   base::Closure chained_ready_task(base::Bind( | 
| 571       &SyncBackendHostCore::DoFinishConfigureDataTypes, | 562       &SyncBackendHostCore::DoFinishConfigureDataTypes, | 
| 572       weak_ptr_factory_.GetWeakPtr(), config_types.to_download, ready_task)); | 563       weak_ptr_factory_.GetWeakPtr(), config_types.to_download, ready_task)); | 
| 573   base::Closure chained_retry_task( | 564   base::Closure chained_retry_task( | 
| 574       base::Bind(&SyncBackendHostCore::DoRetryConfiguration, | 565       base::Bind(&SyncBackendHostCore::DoRetryConfiguration, | 
| 575                  weak_ptr_factory_.GetWeakPtr(), retry_callback)); | 566                  weak_ptr_factory_.GetWeakPtr(), retry_callback)); | 
| 576   sync_manager_->ConfigureSyncer(reason, config_types.to_download, | 567   sync_manager_->ConfigureSyncer(reason, config_types.to_download, | 
| 577                                  config_types.to_purge, config_types.to_journal, | 568                                  config_types.to_purge, config_types.to_journal, | 
| 578                                  config_types.to_unapply, routing_info, | 569                                  config_types.to_unapply, routing_info, | 
| 579                                  chained_ready_task, chained_retry_task); | 570                                  chained_ready_task, chained_retry_task); | 
| 580 } | 571 } | 
| 581 | 572 | 
| 582 void SyncBackendHostCore::DoFinishConfigureDataTypes( | 573 void SyncBackendHostCore::DoFinishConfigureDataTypes( | 
| 583     syncer::ModelTypeSet types_to_config, | 574     ModelTypeSet types_to_config, | 
| 584     const base::Callback<void(syncer::ModelTypeSet, syncer::ModelTypeSet)>& | 575     const base::Callback<void(ModelTypeSet, ModelTypeSet)>& ready_task) { | 
| 585         ready_task) { |  | 
| 586   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 576   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 587 | 577 | 
| 588   // Update the enabled types for the bridge and sync manager. | 578   // Update the enabled types for the bridge and sync manager. | 
| 589   syncer::ModelSafeRoutingInfo routing_info; | 579   ModelSafeRoutingInfo routing_info; | 
| 590   registrar_->GetModelSafeRoutingInfo(&routing_info); | 580   registrar_->GetModelSafeRoutingInfo(&routing_info); | 
| 591   syncer::ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); | 581   ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); | 
| 592   enabled_types.RemoveAll(syncer::ProxyTypes()); | 582   enabled_types.RemoveAll(ProxyTypes()); | 
| 593 | 583 | 
| 594   const syncer::ModelTypeSet failed_configuration_types = | 584   const ModelTypeSet failed_configuration_types = | 
| 595       Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); | 585       Difference(types_to_config, sync_manager_->InitialSyncEndedTypes()); | 
| 596   const syncer::ModelTypeSet succeeded_configuration_types = | 586   const ModelTypeSet succeeded_configuration_types = | 
| 597       Difference(types_to_config, failed_configuration_types); | 587       Difference(types_to_config, failed_configuration_types); | 
| 598   host_.Call(FROM_HERE, | 588   host_.Call(FROM_HERE, | 
| 599              &SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop, | 589              &SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop, | 
| 600              enabled_types, succeeded_configuration_types, | 590              enabled_types, succeeded_configuration_types, | 
| 601              failed_configuration_types, ready_task); | 591              failed_configuration_types, ready_task); | 
| 602 } | 592 } | 
| 603 | 593 | 
| 604 void SyncBackendHostCore::DoRetryConfiguration( | 594 void SyncBackendHostCore::DoRetryConfiguration( | 
| 605     const base::Closure& retry_callback) { | 595     const base::Closure& retry_callback) { | 
| 606   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 596   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 607   host_.Call(FROM_HERE, &SyncBackendHostImpl::RetryConfigurationOnFrontendLoop, | 597   host_.Call(FROM_HERE, &SyncBackendHostImpl::RetryConfigurationOnFrontendLoop, | 
| 608              retry_callback); | 598              retry_callback); | 
| 609 } | 599 } | 
| 610 | 600 | 
| 611 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { | 601 void SyncBackendHostCore::SendBufferedProtocolEventsAndEnableForwarding() { | 
| 612   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 602   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 613   forward_protocol_events_ = true; | 603   forward_protocol_events_ = true; | 
| 614 | 604 | 
| 615   if (sync_manager_) { | 605   if (sync_manager_) { | 
| 616     // Grab our own copy of the buffered events. | 606     // Grab our own copy of the buffered events. | 
| 617     // The buffer is not modified by this operation. | 607     // The buffer is not modified by this operation. | 
| 618     std::vector<std::unique_ptr<syncer::ProtocolEvent>> buffered_events = | 608     std::vector<std::unique_ptr<ProtocolEvent>> buffered_events = | 
| 619         sync_manager_->GetBufferedProtocolEvents(); | 609         sync_manager_->GetBufferedProtocolEvents(); | 
| 620 | 610 | 
| 621     // Send them all over the fence to the host. | 611     // Send them all over the fence to the host. | 
| 622     for (auto& event : buffered_events) { | 612     for (auto& event : buffered_events) { | 
| 623       host_.Call(FROM_HERE, | 613       host_.Call(FROM_HERE, | 
| 624                  &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 614                  &SyncBackendHostImpl::HandleProtocolEventOnFrontendLoop, | 
| 625                  base::Passed(std::move(event))); | 615                  base::Passed(std::move(event))); | 
| 626     } | 616     } | 
| 627   } | 617   } | 
| 628 } | 618 } | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 672       FROM_HERE, base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), | 662       FROM_HERE, base::TimeDelta::FromSeconds(kSaveChangesIntervalSeconds), | 
| 673       this, &SyncBackendHostCore::SaveChanges); | 663       this, &SyncBackendHostCore::SaveChanges); | 
| 674 } | 664 } | 
| 675 | 665 | 
| 676 void SyncBackendHostCore::SaveChanges() { | 666 void SyncBackendHostCore::SaveChanges() { | 
| 677   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 667   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 678   sync_manager_->SaveChanges(); | 668   sync_manager_->SaveChanges(); | 
| 679 } | 669 } | 
| 680 | 670 | 
| 681 void SyncBackendHostCore::DoClearServerData( | 671 void SyncBackendHostCore::DoClearServerData( | 
| 682     const syncer::SyncManager::ClearServerDataCallback& frontend_callback) { | 672     const SyncManager::ClearServerDataCallback& frontend_callback) { | 
| 683   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 673   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 684   const syncer::SyncManager::ClearServerDataCallback callback = | 674   const SyncManager::ClearServerDataCallback callback = | 
| 685       base::Bind(&SyncBackendHostCore::ClearServerDataDone, | 675       base::Bind(&SyncBackendHostCore::ClearServerDataDone, | 
| 686                  weak_ptr_factory_.GetWeakPtr(), frontend_callback); | 676                  weak_ptr_factory_.GetWeakPtr(), frontend_callback); | 
| 687   sync_manager_->ClearServerData(callback); | 677   sync_manager_->ClearServerData(callback); | 
| 688 } | 678 } | 
| 689 | 679 | 
| 690 void SyncBackendHostCore::DoOnCookieJarChanged(bool account_mismatch, | 680 void SyncBackendHostCore::DoOnCookieJarChanged(bool account_mismatch, | 
| 691                                                bool empty_jar) { | 681                                                bool empty_jar) { | 
| 692   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 682   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 693   sync_manager_->OnCookieJarChanged(account_mismatch, empty_jar); | 683   sync_manager_->OnCookieJarChanged(account_mismatch, empty_jar); | 
| 694 } | 684 } | 
| 695 | 685 | 
| 696 void SyncBackendHostCore::ClearServerDataDone( | 686 void SyncBackendHostCore::ClearServerDataDone( | 
| 697     const base::Closure& frontend_callback) { | 687     const base::Closure& frontend_callback) { | 
| 698   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 688   DCHECK(sync_loop_->task_runner()->BelongsToCurrentThread()); | 
| 699   host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, | 689   host_.Call(FROM_HERE, &SyncBackendHostImpl::ClearServerDataDoneOnFrontendLoop, | 
| 700              frontend_callback); | 690              frontend_callback); | 
| 701 } | 691 } | 
| 702 | 692 | 
| 703 }  // namespace browser_sync | 693 }  // namespace syncer | 
| OLD | NEW | 
|---|