1// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_SYNC_ENGINE_BUILD_AND_PROCESS_CONFLICT_SETS_COMMAND_H_ 6#define CHROME_BROWSER_SYNC_ENGINE_BUILD_AND_PROCESS_CONFLICT_SETS_COMMAND_H_ 7#pragma once 8 9#include <vector> 10 11#include "base/basictypes.h" 12#include "chrome/browser/sync/engine/model_changing_syncer_command.h" 13#include "chrome/browser/sync/engine/model_safe_worker.h" 14 15namespace syncable { 16class BaseTransaction; 17class Entry; 18class Id; 19class MutableEntry; 20class WriteTransaction; 21} // namespace syncable 22 23namespace browser_sync { 24 25class ConflictResolver; 26class Cryptographer; 27 28namespace sessions { 29class ConflictProgress; 30class StatusController; 31} 32 33class BuildAndProcessConflictSetsCommand : public ModelChangingSyncerCommand { 34 public: 35 BuildAndProcessConflictSetsCommand(); 36 virtual ~BuildAndProcessConflictSetsCommand(); 37 38 // ModelChangingSyncerCommand implementation. 39 virtual void ModelChangingExecuteImpl(sessions::SyncSession* session); 40 41 private: 42 bool BuildAndProcessConflictSets(sessions::SyncSession* session); 43 44 bool ProcessSingleDirectionConflictSets( 45 syncable::WriteTransaction* trans, ConflictResolver* resolver, 46 Cryptographer* cryptographer, sessions::StatusController* status, 47 const ModelSafeRoutingInfo& routes); 48 bool ApplyUpdatesTransactionally( 49 syncable::WriteTransaction* trans, 50 const std::vector<syncable::Id>* const update_set, 51 ConflictResolver* resolver, 52 Cryptographer* cryptographer, 53 const ModelSafeRoutingInfo& routes, 54 sessions::StatusController* status); 55 void BuildConflictSets(syncable::BaseTransaction* trans, 56 sessions::ConflictProgress* conflict_progress); 57 58 void MergeSetsForNameClash(syncable::BaseTransaction* trans, 59 syncable::Entry* entry, 60 sessions::ConflictProgress* conflict_progress); 61 void MergeSetsForIntroducedLoops(syncable::BaseTransaction* trans, 62 syncable::Entry* entry, 63 sessions::ConflictProgress* conflict_progress); 64 void MergeSetsForNonEmptyDirectories(syncable::BaseTransaction* trans, 65 syncable::Entry* entry, 66 sessions::ConflictProgress* conflict_progress); 67 void MergeSetsForPositionUpdate(syncable::BaseTransaction* trans, 68 syncable::Entry* entry, 69 sessions::ConflictProgress* conflict_progress); 70 71 DISALLOW_COPY_AND_ASSIGN(BuildAndProcessConflictSetsCommand); 72}; 73 74} // namespace browser_sync 75 76#endif // CHROME_BROWSER_SYNC_ENGINE_BUILD_AND_PROCESS_CONFLICT_SETS_COMMAND_H_ 77