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

Side by Side Diff: chrome/browser/sync/glue/sync_backend_host_impl.cc

Issue 217183003: Add non-blocking sync code to ProfileSyncService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 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 "chrome/browser/sync/glue/sync_backend_host_impl.h" 5 #include "chrome/browser/sync/glue/sync_backend_host_impl.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/invalidation/invalidation_service.h" 9 #include "chrome/browser/invalidation/invalidation_service.h"
10 #include "chrome/browser/invalidation/invalidation_service_factory.h" 10 #include "chrome/browser/invalidation/invalidation_service_factory.h"
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 227
228 void SyncBackendHostImpl::StopSyncingForShutdown() { 228 void SyncBackendHostImpl::StopSyncingForShutdown() {
229 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); 229 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
230 230
231 // Immediately stop sending messages to the frontend. 231 // Immediately stop sending messages to the frontend.
232 frontend_ = NULL; 232 frontend_ = NULL;
233 233
234 // Stop listening for and forwarding locally-triggered sync refresh requests. 234 // Stop listening for and forwarding locally-triggered sync refresh requests.
235 notification_registrar_.RemoveAll(); 235 notification_registrar_.RemoveAll();
236 236
237 // Stop non-blocking sync types from sending any more requests to the syncer.
238 sync_core_proxy_.reset();
239
237 DCHECK(registrar_->sync_thread()->IsRunning()); 240 DCHECK(registrar_->sync_thread()->IsRunning());
238 241
239 registrar_->RequestWorkerStopOnUIThread(); 242 registrar_->RequestWorkerStopOnUIThread();
240 243
241 core_->ShutdownOnUIThread(); 244 core_->ShutdownOnUIThread();
242 } 245 }
243 246
244 scoped_ptr<base::Thread> SyncBackendHostImpl::Shutdown(ShutdownOption option) { 247 scoped_ptr<base::Thread> SyncBackendHostImpl::Shutdown(ShutdownOption option) {
245 // StopSyncingForShutdown() (which nulls out |frontend_|) should be 248 // StopSyncingForShutdown() (which nulls out |frontend_|) should be
246 // called first. 249 // called first.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 } 284 }
282 285
283 void SyncBackendHostImpl::UnregisterInvalidationIds() { 286 void SyncBackendHostImpl::UnregisterInvalidationIds() {
284 if (invalidation_handler_registered_) { 287 if (invalidation_handler_registered_) {
285 invalidator_->UpdateRegisteredInvalidationIds( 288 invalidator_->UpdateRegisteredInvalidationIds(
286 this, 289 this,
287 syncer::ObjectIdSet()); 290 syncer::ObjectIdSet());
288 } 291 }
289 } 292 }
290 293
294 void SyncBackendHostImpl::SetPreferredNonBlockingTypes(
295 syncer::ModelTypeSet types) {
296 preferred_non_blocking_types_ = types;
297 UpdateRegisteredInvalidationTypes();
298 }
299
291 void SyncBackendHostImpl::ConfigureDataTypes( 300 void SyncBackendHostImpl::ConfigureDataTypes(
292 syncer::ConfigureReason reason, 301 syncer::ConfigureReason reason,
293 const DataTypeConfigStateMap& config_state_map, 302 const DataTypeConfigStateMap& config_state_map,
294 const base::Callback<void(syncer::ModelTypeSet, 303 const base::Callback<void(syncer::ModelTypeSet,
295 syncer::ModelTypeSet)>& ready_task, 304 syncer::ModelTypeSet)>& ready_task,
296 const base::Callback<void()>& retry_callback) { 305 const base::Callback<void()>& retry_callback) {
297 // Only one configure is allowed at a time. This is guaranteed by our 306 // Only one configure is allowed at a time. This is guaranteed by our
298 // callers. The SyncBackendHostImpl requests one configure as the backend is 307 // callers. The SyncBackendHostImpl requests one configure as the backend is
299 // initializing and waits for it to complete. After initialization, all 308 // initializing and waits for it to complete. After initialization, all
300 // configurations will pass through the DataTypeManager, which is careful to 309 // configurations will pass through the DataTypeManager, which is careful to
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 } 429 }
421 430
422 void SyncBackendHostImpl::DeactivateDataType(syncer::ModelType type) { 431 void SyncBackendHostImpl::DeactivateDataType(syncer::ModelType type) {
423 registrar_->DeactivateDataType(type); 432 registrar_->DeactivateDataType(type);
424 } 433 }
425 434
426 syncer::UserShare* SyncBackendHostImpl::GetUserShare() const { 435 syncer::UserShare* SyncBackendHostImpl::GetUserShare() const {
427 return core_->sync_manager()->GetUserShare(); 436 return core_->sync_manager()->GetUserShare();
428 } 437 }
429 438
439 syncer::SyncCoreProxy SyncBackendHostImpl::GetSyncCoreProxy() {
440 return *sync_core_proxy_.get();
441 }
442
430 SyncBackendHostImpl::Status SyncBackendHostImpl::GetDetailedStatus() { 443 SyncBackendHostImpl::Status SyncBackendHostImpl::GetDetailedStatus() {
431 DCHECK(initialized()); 444 DCHECK(initialized());
432 return core_->sync_manager()->GetDetailedStatus(); 445 return core_->sync_manager()->GetDetailedStatus();
433 } 446 }
434 447
435 syncer::sessions::SyncSessionSnapshot 448 syncer::sessions::SyncSessionSnapshot
436 SyncBackendHostImpl::GetLastSessionSnapshot() const { 449 SyncBackendHostImpl::GetLastSessionSnapshot() const {
437 return last_snapshot_; 450 return last_snapshot_;
438 } 451 }
439 452
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 530
518 void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop( 531 void SyncBackendHostImpl::FinishConfigureDataTypesOnFrontendLoop(
519 const syncer::ModelTypeSet enabled_types, 532 const syncer::ModelTypeSet enabled_types,
520 const syncer::ModelTypeSet succeeded_configuration_types, 533 const syncer::ModelTypeSet succeeded_configuration_types,
521 const syncer::ModelTypeSet failed_configuration_types, 534 const syncer::ModelTypeSet failed_configuration_types,
522 const base::Callback<void(syncer::ModelTypeSet, 535 const base::Callback<void(syncer::ModelTypeSet,
523 syncer::ModelTypeSet)>& ready_task) { 536 syncer::ModelTypeSet)>& ready_task) {
524 if (!frontend_) 537 if (!frontend_)
525 return; 538 return;
526 539
527 invalidator_->UpdateRegisteredInvalidationIds( 540 enabled_directory_types_ = enabled_types;
528 this, 541 UpdateRegisteredInvalidationTypes();
529 ModelTypeSetToObjectIdSet(enabled_types));
530 542
531 if (!ready_task.is_null()) 543 if (!ready_task.is_null())
532 ready_task.Run(succeeded_configuration_types, failed_configuration_types); 544 ready_task.Run(succeeded_configuration_types, failed_configuration_types);
533 } 545 }
534 546
547 void SyncBackendHostImpl::UpdateRegisteredInvalidationTypes() {
Nicolas Zea 2014/04/02 23:19:05 How about changing this to UpdateEnabledTypes(dire
rlarocque 2014/04/03 01:03:46 I don't understand this suggestion. We'd still ne
Nicolas Zea 2014/04/03 17:52:15 Yeah, I think I was still thinking of the set of e
548 invalidator_->UpdateRegisteredInvalidationIds(
549 this,
550 ModelTypeSetToObjectIdSet(
551 Union(enabled_directory_types_, preferred_non_blocking_types_)));
552 }
553
535 void SyncBackendHostImpl::Observe( 554 void SyncBackendHostImpl::Observe(
536 int type, 555 int type,
537 const content::NotificationSource& source, 556 const content::NotificationSource& source,
538 const content::NotificationDetails& details) { 557 const content::NotificationDetails& details) {
539 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 558 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
540 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL); 559 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL);
541 560
542 content::Details<const syncer::ModelTypeSet> state_details(details); 561 content::Details<const syncer::ModelTypeSet> state_details(details);
543 const syncer::ModelTypeSet& types = *(state_details.ptr()); 562 const syncer::ModelTypeSet& types = *(state_details.ptr());
544 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE, 563 registrar_->sync_thread()->message_loop()->PostTask(FROM_HERE,
(...skipping 11 matching lines...) Expand all
556 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); 575 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
557 if (!frontend_) 576 if (!frontend_)
558 return; 577 return;
559 578
560 frontend_->OnSyncConfigureRetry(); 579 frontend_->OnSyncConfigureRetry();
561 } 580 }
562 581
563 void SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop( 582 void SyncBackendHostImpl::HandleInitializationSuccessOnFrontendLoop(
564 const syncer::WeakHandle<syncer::JsBackend> js_backend, 583 const syncer::WeakHandle<syncer::JsBackend> js_backend,
565 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener> 584 const syncer::WeakHandle<syncer::DataTypeDebugInfoListener>
566 debug_info_listener) { 585 debug_info_listener,
586 base::WeakPtr<syncer::SyncCore> sync_core) {
Nicolas Zea 2014/04/02 23:19:05 What do you think about creating the SyncCoreProxy
rlarocque 2014/04/03 01:03:46 I think that's a good idea. Done.
567 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_); 587 DCHECK_EQ(base::MessageLoop::current(), frontend_loop_);
568 if (!frontend_) 588 if (!frontend_)
569 return; 589 return;
570 590
571 initialized_ = true; 591 initialized_ = true;
572 592
593 sync_core_proxy_.reset(
594 new syncer::SyncCoreProxy(
595 registrar_->sync_thread()->message_loop_proxy(),
596 sync_core));
597
573 invalidator_->RegisterInvalidationHandler(this); 598 invalidator_->RegisterInvalidationHandler(this);
574 invalidation_handler_registered_ = true; 599 invalidation_handler_registered_ = true;
575 600
576 // Fake a state change to initialize the SyncManager's cached invalidator 601 // Fake a state change to initialize the SyncManager's cached invalidator
577 // state. 602 // state.
578 OnInvalidatorStateChange(invalidator_->GetInvalidatorState()); 603 OnInvalidatorStateChange(invalidator_->GetInvalidatorState());
579 604
580 // Start forwarding refresh requests to the SyncManager 605 // Start forwarding refresh requests to the SyncManager
581 notification_registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL, 606 notification_registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_LOCAL,
582 content::Source<Profile>(profile_)); 607 content::Source<Profile>(profile_));
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 base::MessageLoop* SyncBackendHostImpl::GetSyncLoopForTesting() { 789 base::MessageLoop* SyncBackendHostImpl::GetSyncLoopForTesting() {
765 return registrar_->sync_thread()->message_loop(); 790 return registrar_->sync_thread()->message_loop();
766 } 791 }
767 792
768 } // namespace browser_sync 793 } // namespace browser_sync
769 794
770 #undef SDVLOG 795 #undef SDVLOG
771 796
772 #undef SLOG 797 #undef SLOG
773 798
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698