diff options
Diffstat (limited to 'chrome/browser/sync/engine/syncer_end_command.cc')
-rw-r--r-- | chrome/browser/sync/engine/syncer_end_command.cc | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/chrome/browser/sync/engine/syncer_end_command.cc b/chrome/browser/sync/engine/syncer_end_command.cc new file mode 100644 index 0000000..f25cec8 --- /dev/null +++ b/chrome/browser/sync/engine/syncer_end_command.cc @@ -0,0 +1,44 @@ +// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE entry. + +#include "chrome/browser/sync/engine/syncer_end_command.h" + +#include "chrome/browser/sync/engine/conflict_resolution_view.h" +#include "chrome/browser/sync/engine/syncer_session.h" +#include "chrome/browser/sync/engine/syncer_status.h" +#include "chrome/browser/sync/engine/syncer_types.h" +#include "chrome/browser/sync/syncable/directory_manager.h" +#include "chrome/browser/sync/util/event_sys-inl.h" + +namespace browser_sync { + +SyncerEndCommand::SyncerEndCommand() {} +SyncerEndCommand::~SyncerEndCommand() {} + +void SyncerEndCommand::ExecuteImpl(SyncerSession* session) { + ConflictResolutionView conflict_view(session); + conflict_view.increment_num_sync_cycles(); + SyncerStatus status(session); + status.set_syncing(false); + + if (!session->ShouldSyncAgain()) { + // This might be the first time we've fully completed a sync cycle. + DCHECK(session->got_zero_updates()); + + syncable::ScopedDirLookup dir(session->dirman(), session->account_name()); + if (!dir.good()) { + LOG(ERROR) << "Scoped dir lookup failed!"; + return; + } + + // This gets persisted to the directory's backing store. + dir->set_initial_sync_ended(true); + } + + SyncerEvent event = { SyncerEvent::SYNC_CYCLE_ENDED }; + event.last_session = session; + session->syncer_event_channel()->NotifyListeners(event); +} + +} // namespace browser_sync |