OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 CHROME_BROWSER_SYNC_SYNCABLE_SYNCABLE_H_ | 5 #ifndef CHROME_BROWSER_SYNC_SYNCABLE_SYNCABLE_H_ |
6 #define CHROME_BROWSER_SYNC_SYNCABLE_SYNCABLE_H_ | 6 #define CHROME_BROWSER_SYNC_SYNCABLE_SYNCABLE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <bitset> | 10 #include <bitset> |
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 // All methods which require the kernel lock to be already held take a | 629 // All methods which require the kernel lock to be already held take a |
630 // ScopeKernelLock* argument. | 630 // ScopeKernelLock* argument. |
631 // | 631 // |
632 // To prevent deadlock, the reader writer transaction lock must always | 632 // To prevent deadlock, the reader writer transaction lock must always |
633 // be held before acquiring the kernel lock. | 633 // be held before acquiring the kernel lock. |
634 class ScopedKernelLock; | 634 class ScopedKernelLock; |
635 class IdFilter; | 635 class IdFilter; |
636 class DirectoryManager; | 636 class DirectoryManager; |
637 struct PathMatcher; | 637 struct PathMatcher; |
638 | 638 |
| 639 struct AutofillMigrationDebugInfo { |
| 640 enum PropertyToSet { |
| 641 MIGRATION_TIME, |
| 642 BOOKMARK_ADDED, |
| 643 ENTRIES_ADDED, |
| 644 PROFILES_ADDED |
| 645 }; |
| 646 int64 autofill_migration_time; |
| 647 int bookmarks_added_during_migration; |
| 648 int autofill_entries_added_during_migration; |
| 649 int autofill_profile_added_during_migration; |
| 650 }; |
| 651 |
639 class Directory { | 652 class Directory { |
640 friend class BaseTransaction; | 653 friend class BaseTransaction; |
641 friend class Entry; | 654 friend class Entry; |
642 friend class MutableEntry; | 655 friend class MutableEntry; |
643 friend class ReadTransaction; | 656 friend class ReadTransaction; |
644 friend class ReadTransactionWithoutDB; | 657 friend class ReadTransactionWithoutDB; |
645 friend class ScopedKernelLock; | 658 friend class ScopedKernelLock; |
646 friend class ScopedKernelUnlock; | 659 friend class ScopedKernelUnlock; |
647 friend class WriteTransaction; | 660 friend class WriteTransaction; |
648 friend class SyncableDirectoryTest; | 661 friend class SyncableDirectoryTest; |
649 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, | 662 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, |
650 TakeSnapshotGetsAllDirtyHandlesTest); | 663 TakeSnapshotGetsAllDirtyHandlesTest); |
651 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, | 664 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, |
652 TakeSnapshotGetsOnlyDirtyHandlesTest); | 665 TakeSnapshotGetsOnlyDirtyHandlesTest); |
653 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, TestPurgeEntriesWithTypeIn); | 666 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, TestPurgeEntriesWithTypeIn); |
654 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, | 667 FRIEND_TEST_ALL_PREFIXES(SyncableDirectoryTest, |
655 TakeSnapshotGetsMetahandlesToPurge); | 668 TakeSnapshotGetsMetahandlesToPurge); |
656 | 669 |
657 public: | 670 public: |
658 class EventListenerHookup; | 671 class EventListenerHookup; |
659 | 672 |
660 // Various data that the Directory::Kernel we are backing (persisting data | 673 // Various data that the Directory::Kernel we are backing (persisting data |
661 // for) needs saved across runs of the application. | 674 // for) needs saved across runs of the application. |
662 struct PersistedKernelInfo { | 675 struct PersistedKernelInfo { |
| 676 enum AutofillMigrationState { |
| 677 NOT_DETERMINED, |
| 678 NOT_MIGRATED, |
| 679 MIGRATED, |
| 680 INSUFFICIENT_INFO_TO_DETERMINE |
| 681 }; |
| 682 |
| 683 AutofillMigrationDebugInfo autofill_migration_debug_info; |
| 684 |
663 PersistedKernelInfo(); | 685 PersistedKernelInfo(); |
664 ~PersistedKernelInfo(); | 686 ~PersistedKernelInfo(); |
665 | 687 |
666 // Last sync timestamp fetched from the server. | 688 // Last sync timestamp fetched from the server. |
667 int64 last_download_timestamp[MODEL_TYPE_COUNT]; | 689 int64 last_download_timestamp[MODEL_TYPE_COUNT]; |
668 // true iff we ever reached the end of the changelog. | 690 // true iff we ever reached the end of the changelog. |
669 ModelTypeBitSet initial_sync_ended; | 691 ModelTypeBitSet initial_sync_ended; |
670 // The store birthday we were given by the server. Contents are opaque to | 692 // The store birthday we were given by the server. Contents are opaque to |
671 // the client. | 693 // the client. |
672 std::string store_birthday; | 694 std::string store_birthday; |
673 // The next local ID that has not been used with this cache-GUID. | 695 // The next local ID that has not been used with this cache-GUID. |
674 int64 next_id; | 696 int64 next_id; |
675 // The persisted notification state. | 697 // The persisted notification state. |
676 std::string notification_state; | 698 std::string notification_state; |
| 699 |
| 700 AutofillMigrationState autofill_migration_state; |
677 }; | 701 }; |
678 | 702 |
679 // What the Directory needs on initialization to create itself and its Kernel. | 703 // What the Directory needs on initialization to create itself and its Kernel. |
680 // Filled by DirectoryBackingStore::Load. | 704 // Filled by DirectoryBackingStore::Load. |
681 struct KernelLoadInfo { | 705 struct KernelLoadInfo { |
682 PersistedKernelInfo kernel_info; | 706 PersistedKernelInfo kernel_info; |
683 std::string cache_guid; // Created on first initialization, never changes. | 707 std::string cache_guid; // Created on first initialization, never changes. |
684 int64 max_metahandle; // Computed (using sql MAX aggregate) on init. | 708 int64 max_metahandle; // Computed (using sql MAX aggregate) on init. |
685 KernelLoadInfo() : max_metahandle(0) { | 709 KernelLoadInfo() : max_metahandle(0) { |
686 } | 710 } |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 result.timestamp = stamp; | 771 result.timestamp = stamp; |
748 } | 772 } |
749 if (stamp == result.timestamp) | 773 if (stamp == result.timestamp) |
750 result.data_types.set(i); | 774 result.data_types.set(i); |
751 } | 775 } |
752 return result; | 776 return result; |
753 } | 777 } |
754 | 778 |
755 bool initial_sync_ended_for_type(ModelType type) const; | 779 bool initial_sync_ended_for_type(ModelType type) const; |
756 void set_initial_sync_ended_for_type(ModelType type, bool value); | 780 void set_initial_sync_ended_for_type(ModelType type, bool value); |
| 781 PersistedKernelInfo::AutofillMigrationState |
| 782 get_autofill_migration_state() const; |
| 783 |
| 784 AutofillMigrationDebugInfo get_autofill_migration_debug_info() const; |
| 785 |
| 786 void set_autofill_migration_state( |
| 787 PersistedKernelInfo::AutofillMigrationState state); |
| 788 |
| 789 template <class T> void TestAndSet(T* kernel_data, const T* data_to_set); |
| 790 |
| 791 void set_autofill_migration_state_debug_info( |
| 792 syncable::AutofillMigrationDebugInfo::PropertyToSet property_to_set, |
| 793 const syncable::AutofillMigrationDebugInfo& info); |
757 | 794 |
758 const std::string& name() const { return kernel_->name; } | 795 const std::string& name() const { return kernel_->name; } |
759 | 796 |
760 // (Account) Store birthday is opaque to the client, | 797 // (Account) Store birthday is opaque to the client, |
761 // so we keep it in the format it is in the proto buffer | 798 // so we keep it in the format it is in the proto buffer |
762 // in case we switch to a binary birthday later. | 799 // in case we switch to a binary birthday later. |
763 std::string store_birthday() const; | 800 std::string store_birthday() const; |
764 void set_store_birthday(std::string store_birthday); | 801 void set_store_birthday(std::string store_birthday); |
765 | 802 |
766 std::string GetAndClearNotificationState(); | 803 std::string GetAndClearNotificationState(); |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1138 void ZeroFields(EntryKernel* entry, int first_field); | 1175 void ZeroFields(EntryKernel* entry, int first_field); |
1139 | 1176 |
1140 } // namespace syncable | 1177 } // namespace syncable |
1141 | 1178 |
1142 std::ostream& operator <<(std::ostream&, const syncable::Blob&); | 1179 std::ostream& operator <<(std::ostream&, const syncable::Blob&); |
1143 | 1180 |
1144 browser_sync::FastDump& operator << | 1181 browser_sync::FastDump& operator << |
1145 (browser_sync::FastDump&, const syncable::Blob&); | 1182 (browser_sync::FastDump&, const syncable::Blob&); |
1146 | 1183 |
1147 #endif // CHROME_BROWSER_SYNC_SYNCABLE_SYNCABLE_H_ | 1184 #endif // CHROME_BROWSER_SYNC_SYNCABLE_SYNCABLE_H_ |
OLD | NEW |