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

Side by Side Diff: chrome/browser/sync_file_system/sync_file_system_service.cc

Issue 480413006: [SyncFS] Add idle callback to SyncFileSystemService for testing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 "chrome/browser/sync_file_system/sync_file_system_service.h" 5 #include "chrome/browser/sync_file_system/sync_file_system_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 SyncEventObserver* observer) { 348 SyncEventObserver* observer) {
349 observers_.RemoveObserver(observer); 349 observers_.RemoveObserver(observer);
350 } 350 }
351 351
352 LocalChangeProcessor* SyncFileSystemService::GetLocalChangeProcessor( 352 LocalChangeProcessor* SyncFileSystemService::GetLocalChangeProcessor(
353 const GURL& origin) { 353 const GURL& origin) {
354 return GetRemoteService(origin)->GetLocalChangeProcessor(); 354 return GetRemoteService(origin)->GetLocalChangeProcessor();
355 } 355 }
356 356
357 void SyncFileSystemService::OnSyncIdle() { 357 void SyncFileSystemService::OnSyncIdle() {
358 if (promoting_demoted_changes_)
359 return;
360 promoting_demoted_changes_ = true;
361
362 int* job_count = new int(1);
363 base::Closure promote_completion_callback =
364 base::Bind(&SyncFileSystemService::OnPromotionCompleted,
365 AsWeakPtr(), base::Owned(job_count));
366
358 int64 remote_changes = 0; 367 int64 remote_changes = 0;
359 for (ScopedVector<SyncProcessRunner>::iterator iter = 368 for (size_t i = 0; i < remote_sync_runners_.size(); ++i)
360 remote_sync_runners_.begin(); 369 remote_changes += remote_sync_runners_[i]->pending_changes();
361 iter != remote_sync_runners_.end(); ++iter) 370 if (remote_changes == 0) {
362 remote_changes += (*iter)->pending_changes(); 371 ++*job_count;
363 if (remote_changes == 0) 372 local_service_->PromoteDemotedChanges(promote_completion_callback);
364 local_service_->PromoteDemotedChanges(NoopClosure()); 373 }
365 374
366 int64 local_changes = 0; 375 int64 local_changes = 0;
367 for (ScopedVector<SyncProcessRunner>::iterator iter = 376 for (size_t i = 0; i < local_sync_runners_.size(); ++i)
368 local_sync_runners_.begin(); 377 local_changes += local_sync_runners_[i]->pending_changes();
369 iter != local_sync_runners_.end(); ++iter)
370 local_changes += (*iter)->pending_changes();
371 if (local_changes == 0) { 378 if (local_changes == 0) {
372 remote_service_->PromoteDemotedChanges(NoopClosure()); 379 ++*job_count;
380 remote_service_->PromoteDemotedChanges(promote_completion_callback);
373 } 381 }
382
383 promote_completion_callback.Run();
384 }
385
386 void SyncFileSystemService::OnPromotionCompleted(int* count) {
387 if (--*count != 0)
388 return;
389 promoting_demoted_changes_ = false;
390 CheckIfIdle();
391 }
392
393 void SyncFileSystemService::CheckIfIdle() {
394 if (promoting_demoted_changes_)
395 return;
396
397 for (size_t i = 0; i < remote_sync_runners_.size(); ++i) {
398 SyncServiceState service_state = remote_sync_runners_[i]->GetServiceState();
399 if (service_state != SYNC_SERVICE_RUNNING &&
400 service_state != SYNC_SERVICE_TEMPORARY_UNAVAILABLE)
401 continue;
402
403 if (remote_sync_runners_[i]->pending_changes())
404 return;
405 }
406
407 for (size_t i = 0; i < local_sync_runners_.size(); ++i) {
408 SyncServiceState service_state = local_sync_runners_[i]->GetServiceState();
409 if (service_state != SYNC_SERVICE_RUNNING &&
410 service_state != SYNC_SERVICE_TEMPORARY_UNAVAILABLE)
411 continue;
412
413 if (local_sync_runners_[i]->pending_changes())
414 return;
415 }
416
417 if (idle_callback_.is_null())
418 return;
419
420 base::Closure callback = idle_callback_;
421 idle_callback_.Reset();
422 callback.Run();
374 } 423 }
375 424
376 SyncServiceState SyncFileSystemService::GetSyncServiceState() { 425 SyncServiceState SyncFileSystemService::GetSyncServiceState() {
377 // For now we always query the state from the main RemoteFileSyncService. 426 // For now we always query the state from the main RemoteFileSyncService.
378 return RemoteStateToSyncServiceState(remote_service_->GetCurrentState()); 427 return RemoteStateToSyncServiceState(remote_service_->GetCurrentState());
379 } 428 }
380 429
381 SyncFileSystemService* SyncFileSystemService::GetSyncService() { 430 SyncFileSystemService* SyncFileSystemService::GetSyncService() {
382 return this; 431 return this;
383 } 432 }
384 433
434 void SyncFileSystemService::CallOnIdleForTesting(
435 const base::Closure& callback) {
436 DCHECK(idle_callback_.is_null());
437 idle_callback_ = callback;
438 CheckIfIdle();
439 }
440
385 SyncFileSystemService::SyncFileSystemService(Profile* profile) 441 SyncFileSystemService::SyncFileSystemService(Profile* profile)
386 : profile_(profile), 442 : profile_(profile),
387 sync_enabled_(true) { 443 sync_enabled_(true),
444 promoting_demoted_changes_(false) {
388 } 445 }
389 446
390 void SyncFileSystemService::Initialize( 447 void SyncFileSystemService::Initialize(
391 scoped_ptr<LocalFileSyncService> local_service, 448 scoped_ptr<LocalFileSyncService> local_service,
392 scoped_ptr<RemoteFileSyncService> remote_service) { 449 scoped_ptr<RemoteFileSyncService> remote_service) {
393 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 450 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
394 DCHECK(local_service); 451 DCHECK(local_service);
395 DCHECK(remote_service); 452 DCHECK(remote_service);
396 DCHECK(profile_); 453 DCHECK(profile_);
397 454
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 iter != remote_sync_runners_.end(); ++iter) 747 iter != remote_sync_runners_.end(); ++iter)
691 ((*iter)->*method)(); 748 ((*iter)->*method)();
692 } 749 }
693 750
694 RemoteFileSyncService* SyncFileSystemService::GetRemoteService( 751 RemoteFileSyncService* SyncFileSystemService::GetRemoteService(
695 const GURL& origin) { 752 const GURL& origin) {
696 return remote_service_.get(); 753 return remote_service_.get();
697 } 754 }
698 755
699 } // namespace sync_file_system 756 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/sync_file_system_service.h ('k') | chrome/browser/sync_file_system/sync_process_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698