| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #ifndef SYNC_SYNCABLE_DIRECTORY_H_ | 5 #ifndef SYNC_SYNCABLE_DIRECTORY_H_ |
| 6 #define SYNC_SYNCABLE_DIRECTORY_H_ | 6 #define SYNC_SYNCABLE_DIRECTORY_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/file_util.h" | 12 #include "base/file_util.h" |
| 13 #include "base/gtest_prod_util.h" | 13 #include "base/gtest_prod_util.h" |
| 14 #include "sync/base/sync_export.h" | 14 #include "sync/base/sync_export.h" |
| 15 #include "sync/internal_api/public/util/report_unrecoverable_error_function.h" | 15 #include "sync/internal_api/public/util/report_unrecoverable_error_function.h" |
| 16 #include "sync/internal_api/public/util/weak_handle.h" | 16 #include "sync/internal_api/public/util/weak_handle.h" |
| 17 #include "sync/syncable/delete_journal.h" |
| 17 #include "sync/syncable/dir_open_result.h" | 18 #include "sync/syncable/dir_open_result.h" |
| 18 #include "sync/syncable/entry_kernel.h" | 19 #include "sync/syncable/entry_kernel.h" |
| 19 #include "sync/syncable/metahandle_set.h" | 20 #include "sync/syncable/metahandle_set.h" |
| 20 #include "sync/syncable/scoped_kernel_lock.h" | 21 #include "sync/syncable/scoped_kernel_lock.h" |
| 21 | 22 |
| 22 namespace syncer { | 23 namespace syncer { |
| 23 | 24 |
| 24 class Cryptographer; | 25 class Cryptographer; |
| 25 class UnrecoverableErrorHandler; | 26 class UnrecoverableErrorHandler; |
| 26 | 27 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 typedef std::set<EntryKernel*, typename Indexer::Comparator> Set; | 107 typedef std::set<EntryKernel*, typename Indexer::Comparator> Set; |
| 107 }; | 108 }; |
| 108 | 109 |
| 109 // Reason for unlinking. | 110 // Reason for unlinking. |
| 110 enum UnlinkReason { | 111 enum UnlinkReason { |
| 111 NODE_MANIPULATION, // To be used by any operation manipulating the linked | 112 NODE_MANIPULATION, // To be used by any operation manipulating the linked |
| 112 // list. | 113 // list. |
| 113 DATA_TYPE_PURGE // To be used when purging a dataype. | 114 DATA_TYPE_PURGE // To be used when purging a dataype. |
| 114 }; | 115 }; |
| 115 | 116 |
| 116 class EntryKernelLessByMetaHandle { | |
| 117 public: | |
| 118 inline bool operator()(const EntryKernel& a, | |
| 119 const EntryKernel& b) const { | |
| 120 return a.ref(META_HANDLE) < b.ref(META_HANDLE); | |
| 121 } | |
| 122 }; | |
| 123 | |
| 124 typedef std::set<EntryKernel, EntryKernelLessByMetaHandle> EntryKernelSet; | |
| 125 | |
| 126 enum InvariantCheckLevel { | 117 enum InvariantCheckLevel { |
| 127 OFF = 0, // No checking. | 118 OFF = 0, // No checking. |
| 128 VERIFY_CHANGES = 1, // Checks only mutated entries. Does not check hierarchy. | 119 VERIFY_CHANGES = 1, // Checks only mutated entries. Does not check hierarchy. |
| 129 FULL_DB_VERIFICATION = 2 // Check every entry. This can be expensive. | 120 FULL_DB_VERIFICATION = 2 // Check every entry. This can be expensive. |
| 130 }; | 121 }; |
| 131 | 122 |
| 132 class SYNC_EXPORT Directory { | 123 class SYNC_EXPORT Directory { |
| 133 friend class BaseTransaction; | 124 friend class BaseTransaction; |
| 134 friend class Entry; | 125 friend class Entry; |
| 135 friend class MutableEntry; | 126 friend class MutableEntry; |
| 136 friend class ReadTransaction; | 127 friend class ReadTransaction; |
| 137 friend class ReadTransactionWithoutDB; | 128 friend class ReadTransactionWithoutDB; |
| 138 friend class ScopedKernelLock; | 129 friend class ScopedKernelLock; |
| 139 friend class ScopedKernelUnlock; | 130 friend class ScopedKernelUnlock; |
| 140 friend class WriteTransaction; | 131 friend class WriteTransaction; |
| 141 friend class SyncableDirectoryTest; | 132 friend class SyncableDirectoryTest; |
| 133 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, ManageDeleteJournals); |
| 142 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, | 134 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, |
| 143 TakeSnapshotGetsAllDirtyHandlesTest); | 135 TakeSnapshotGetsAllDirtyHandlesTest); |
| 144 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, | 136 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, |
| 145 TakeSnapshotGetsOnlyDirtyHandlesTest); | 137 TakeSnapshotGetsOnlyDirtyHandlesTest); |
| 146 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, | 138 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, |
| 147 TakeSnapshotGetsMetahandlesToPurge); | 139 TakeSnapshotGetsMetahandlesToPurge); |
| 148 | 140 |
| 149 public: | 141 public: |
| 150 static const FilePath::CharType kSyncDatabaseFilename[]; | 142 static const FilePath::CharType kSyncDatabaseFilename[]; |
| 151 | 143 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 // constructed and forms a consistent snapshot of what needs to be sent to | 196 // constructed and forms a consistent snapshot of what needs to be sent to |
| 205 // the backing store. | 197 // the backing store. |
| 206 struct SYNC_EXPORT_PRIVATE SaveChangesSnapshot { | 198 struct SYNC_EXPORT_PRIVATE SaveChangesSnapshot { |
| 207 SaveChangesSnapshot(); | 199 SaveChangesSnapshot(); |
| 208 ~SaveChangesSnapshot(); | 200 ~SaveChangesSnapshot(); |
| 209 | 201 |
| 210 KernelShareInfoStatus kernel_info_status; | 202 KernelShareInfoStatus kernel_info_status; |
| 211 PersistedKernelInfo kernel_info; | 203 PersistedKernelInfo kernel_info; |
| 212 EntryKernelSet dirty_metas; | 204 EntryKernelSet dirty_metas; |
| 213 MetahandleSet metahandles_to_purge; | 205 MetahandleSet metahandles_to_purge; |
| 206 EntryKernelSet delete_journals; |
| 207 MetahandleSet delete_journals_to_purge; |
| 214 }; | 208 }; |
| 215 | 209 |
| 216 // Does not take ownership of |encryptor|. | 210 // Does not take ownership of |encryptor|. |
| 217 // |report_unrecoverable_error_function| may be NULL. | 211 // |report_unrecoverable_error_function| may be NULL. |
| 218 // Takes ownership of |store|. | 212 // Takes ownership of |store|. |
| 219 Directory( | 213 Directory( |
| 220 DirectoryBackingStore* store, | 214 DirectoryBackingStore* store, |
| 221 UnrecoverableErrorHandler* unrecoverable_error_handler, | 215 UnrecoverableErrorHandler* unrecoverable_error_handler, |
| 222 ReportUnrecoverableErrorFunction | 216 ReportUnrecoverableErrorFunction |
| 223 report_unrecoverable_error_function, | 217 report_unrecoverable_error_function, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 bool UnlinkEntryFromOrder(EntryKernel* entry, | 326 bool UnlinkEntryFromOrder(EntryKernel* entry, |
| 333 WriteTransaction* trans, | 327 WriteTransaction* trans, |
| 334 ScopedKernelLock* lock, | 328 ScopedKernelLock* lock, |
| 335 UnlinkReason unlink_reason); | 329 UnlinkReason unlink_reason); |
| 336 | 330 |
| 337 DirOpenResult OpenImpl( | 331 DirOpenResult OpenImpl( |
| 338 const std::string& name, | 332 const std::string& name, |
| 339 DirectoryChangeDelegate* delegate, | 333 DirectoryChangeDelegate* delegate, |
| 340 const WeakHandle<TransactionObserver>& transaction_observer); | 334 const WeakHandle<TransactionObserver>& transaction_observer); |
| 341 | 335 |
| 336 DeleteJournal* delete_journal(); |
| 337 |
| 342 private: | 338 private: |
| 343 // These private versions expect the kernel lock to already be held | 339 // These private versions expect the kernel lock to already be held |
| 344 // before calling. | 340 // before calling. |
| 345 EntryKernel* GetEntryById(const Id& id, ScopedKernelLock* const lock); | 341 EntryKernel* GetEntryById(const Id& id, ScopedKernelLock* const lock); |
| 346 | 342 |
| 347 template <class T> void TestAndSet(T* kernel_data, const T* data_to_set); | 343 template <class T> void TestAndSet(T* kernel_data, const T* data_to_set); |
| 348 | 344 |
| 349 public: | 345 public: |
| 350 typedef std::vector<int64> ChildHandles; | 346 typedef std::vector<int64> ChildHandles; |
| 351 | 347 |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 627 | 623 |
| 628 UnrecoverableErrorHandler* const unrecoverable_error_handler_; | 624 UnrecoverableErrorHandler* const unrecoverable_error_handler_; |
| 629 const ReportUnrecoverableErrorFunction report_unrecoverable_error_function_; | 625 const ReportUnrecoverableErrorFunction report_unrecoverable_error_function_; |
| 630 bool unrecoverable_error_set_; | 626 bool unrecoverable_error_set_; |
| 631 | 627 |
| 632 // Not owned. | 628 // Not owned. |
| 633 NigoriHandler* const nigori_handler_; | 629 NigoriHandler* const nigori_handler_; |
| 634 Cryptographer* const cryptographer_; | 630 Cryptographer* const cryptographer_; |
| 635 | 631 |
| 636 InvariantCheckLevel invariant_check_level_; | 632 InvariantCheckLevel invariant_check_level_; |
| 633 |
| 634 // Maintain deleted entries not in |kernel_| until it's verified that they |
| 635 // are deleted in native models as well. |
| 636 scoped_ptr<DeleteJournal> delete_journal_; |
| 637 }; | 637 }; |
| 638 | 638 |
| 639 } // namespace syncable | 639 } // namespace syncable |
| 640 } // namespace syncer | 640 } // namespace syncer |
| 641 | 641 |
| 642 #endif // SYNC_SYNCABLE_DIRECTORY_H_ | 642 #endif // SYNC_SYNCABLE_DIRECTORY_H_ |
| OLD | NEW |