Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/drive_metadata_store.h" | 5 #include "chrome/browser/sync_file_system/drive_metadata_store.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/files/file_path.h" | 12 #include "base/files/file_path.h" |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/message_loop/message_loop_proxy.h" | 14 #include "base/message_loop/message_loop_proxy.h" |
| 15 #include "base/sequenced_task_runner.h" | 15 #include "base/sequenced_task_runner.h" |
| 16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
| 17 #include "base/string_util.h" | 17 #include "base/string_util.h" |
| 18 #include "base/strings/string_number_conversions.h" | 18 #include "base/strings/string_number_conversions.h" |
| 19 #include "base/task_runner_util.h" | 19 #include "base/task_runner_util.h" |
| 20 #include "chrome/browser/sync_file_system/drive/metadata_db_migration_util.h" | |
| 20 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" | 21 #include "chrome/browser/sync_file_system/drive_file_sync_service.h" |
| 22 #include "chrome/browser/sync_file_system/drive_file_sync_util.h" | |
| 21 #include "chrome/browser/sync_file_system/logger.h" | 23 #include "chrome/browser/sync_file_system/logger.h" |
| 22 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" | 24 #include "chrome/browser/sync_file_system/sync_file_system.pb.h" |
| 23 #include "googleurl/src/gurl.h" | 25 #include "googleurl/src/gurl.h" |
| 24 #include "third_party/leveldatabase/src/include/leveldb/db.h" | 26 #include "third_party/leveldatabase/src/include/leveldb/db.h" |
| 25 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" | 27 #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
| 26 #include "webkit/browser/fileapi/file_system_url.h" | 28 #include "webkit/browser/fileapi/file_system_url.h" |
| 27 #include "webkit/common/fileapi/file_system_util.h" | 29 #include "webkit/common/fileapi/file_system_util.h" |
| 28 #include "webkit/fileapi/syncable/syncable_file_system_util.h" | 30 #include "webkit/fileapi/syncable/syncable_file_system_util.h" |
| 29 | 31 |
| 30 using fileapi::FileSystemURL; | 32 using fileapi::FileSystemURL; |
| 31 | 33 |
| 32 namespace sync_file_system { | 34 namespace sync_file_system { |
| 33 | 35 |
| 34 typedef DriveMetadataStore::ResourceIdByOrigin ResourceIdByOrigin; | 36 typedef DriveMetadataStore::ResourceIdByOrigin ResourceIdByOrigin; |
| 35 typedef DriveMetadataStore::OriginByResourceId OriginByResourceId; | 37 typedef DriveMetadataStore::OriginByResourceId OriginByResourceId; |
| 36 | 38 |
| 37 const base::FilePath::CharType DriveMetadataStore::kDatabaseName[] = | 39 const base::FilePath::CharType DriveMetadataStore::kDatabaseName[] = |
| 38 FILE_PATH_LITERAL("DriveMetadata"); | 40 FILE_PATH_LITERAL("DriveMetadata"); |
| 39 | 41 |
| 40 namespace { | 42 namespace { |
| 41 | 43 |
| 42 const char* const kServiceName = DriveFileSyncService::kServiceName; | 44 const char* const kServiceName = DriveFileSyncService::kServiceName; |
| 43 const char kDatabaseVersionKey[] = "VERSION"; | 45 const char kDatabaseVersionKey[] = "VERSION"; |
| 44 const int64 kCurrentDatabaseVersion = 1; | 46 const int64 kCurrentDatabaseVersion = 2; |
| 45 const char kChangeStampKey[] = "CHANGE_STAMP"; | 47 const char kChangeStampKey[] = "CHANGE_STAMP"; |
| 46 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; | 48 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; |
| 47 const char kDriveMetadataKeyPrefix[] = "METADATA: "; | 49 const char kDriveMetadataKeyPrefix[] = "METADATA: "; |
| 48 const char kMetadataKeySeparator = ' '; | 50 const char kMetadataKeySeparator = ' '; |
| 49 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | 51 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; |
| 50 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; | 52 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; |
| 51 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; | 53 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; |
| 52 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); | 54 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); |
| 53 | 55 |
| 54 const base::FilePath::CharType kV0FormatPathPrefix[] = | 56 const base::FilePath::CharType kV0FormatPathPrefix[] = |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 118 typedef DriveMetadataStore::MetadataMap MetadataMap; | 120 typedef DriveMetadataStore::MetadataMap MetadataMap; |
| 119 | 121 |
| 120 DriveMetadataDB(const base::FilePath& base_dir, | 122 DriveMetadataDB(const base::FilePath& base_dir, |
| 121 base::SequencedTaskRunner* task_runner); | 123 base::SequencedTaskRunner* task_runner); |
| 122 ~DriveMetadataDB(); | 124 ~DriveMetadataDB(); |
| 123 | 125 |
| 124 SyncStatusCode Initialize(bool* created); | 126 SyncStatusCode Initialize(bool* created); |
| 125 SyncStatusCode ReadContents(DriveMetadataDBContents* contents); | 127 SyncStatusCode ReadContents(DriveMetadataDBContents* contents); |
| 126 | 128 |
| 127 SyncStatusCode MigrateDatabaseIfNeeded(); | 129 SyncStatusCode MigrateDatabaseIfNeeded(); |
| 128 SyncStatusCode MigrateFromVersion0Database(); | 130 SyncStatusCode MigrateFromVersion0To1Database(); |
| 129 | 131 |
| 130 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); | 132 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); |
| 131 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); | 133 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); |
| 132 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); | 134 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); |
| 133 SyncStatusCode SetOriginRootDirectory(const GURL& origin, | 135 SyncStatusCode SetOriginRootDirectory(const GURL& origin, |
| 134 OriginSyncType sync_type, | 136 OriginSyncType sync_type, |
| 135 const std::string& resource_id); | 137 const std::string& resource_id); |
| 136 SyncStatusCode UpdateEntry(const FileSystemURL& url, | 138 SyncStatusCode UpdateEntry(const FileSystemURL& url, |
| 137 const DriveMetadata& metadata); | 139 DriveMetadata metadata); |
| 138 SyncStatusCode DeleteEntry(const FileSystemURL& url); | 140 SyncStatusCode DeleteEntry(const FileSystemURL& url); |
| 139 | 141 |
| 140 // TODO(calvinlo): consolidate these state transition functions for sync | 142 // TODO(calvinlo): consolidate these state transition functions for sync |
| 141 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in | 143 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in |
| 142 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". | 144 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". |
| 143 // http://crbug.com/211600 | 145 // http://crbug.com/211600 |
| 144 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, | 146 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, |
| 145 const std::string& resource_id); | 147 const std::string& resource_id); |
| 146 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, | 148 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, |
| 147 const std::string& resource_id); | 149 const std::string& resource_id); |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 436 | 438 |
| 437 if (found->second.erase(url.path()) == 1) { | 439 if (found->second.erase(url.path()) == 1) { |
| 438 base::PostTaskAndReplyWithResult( | 440 base::PostTaskAndReplyWithResult( |
| 439 file_task_runner_, FROM_HERE, | 441 file_task_runner_, FROM_HERE, |
| 440 base::Bind(&DriveMetadataDB::DeleteEntry, | 442 base::Bind(&DriveMetadataDB::DeleteEntry, |
| 441 base::Unretained(db_.get()), url), | 443 base::Unretained(db_.get()), url), |
| 442 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, | 444 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, |
| 443 AsWeakPtr(), callback)); | 445 AsWeakPtr(), callback)); |
| 444 return; | 446 return; |
| 445 } | 447 } |
| 448 | |
| 446 base::MessageLoopProxy::current()->PostTask( | 449 base::MessageLoopProxy::current()->PostTask( |
| 447 FROM_HERE, | 450 FROM_HERE, |
| 448 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); | 451 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); |
| 449 } | 452 } |
| 450 | 453 |
| 451 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, | 454 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, |
| 452 DriveMetadata* metadata) const { | 455 DriveMetadata* metadata) const { |
| 453 DCHECK(CalledOnValidThread()); | 456 DCHECK(CalledOnValidThread()); |
| 454 DCHECK(metadata); | 457 DCHECK(metadata); |
| 455 | 458 |
| (...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 809 DCHECK(success); | 812 DCHECK(success); |
| 810 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) { | 813 } else if (StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) { |
| 811 GURL origin; | 814 GURL origin; |
| 812 base::FilePath path; | 815 base::FilePath path; |
| 813 MetadataKeyToOriginAndPath(key, &origin, &path); | 816 MetadataKeyToOriginAndPath(key, &origin, &path); |
| 814 | 817 |
| 815 DriveMetadata metadata; | 818 DriveMetadata metadata; |
| 816 bool success = metadata.ParseFromString(itr->value().ToString()); | 819 bool success = metadata.ParseFromString(itr->value().ToString()); |
| 817 DCHECK(success); | 820 DCHECK(success); |
| 818 | 821 |
| 822 if (!IsDriveAPIEnabled()) { | |
| 823 metadata.set_resource_id( | |
| 824 drive::AddWapiIdPrefix(metadata.resource_id(), metadata.type())); | |
| 825 } | |
| 826 | |
| 819 success = contents->metadata_map[origin].insert( | 827 success = contents->metadata_map[origin].insert( |
| 820 std::make_pair(path, metadata)).second; | 828 std::make_pair(path, metadata)).second; |
| 821 DCHECK(success); | 829 DCHECK(success); |
| 822 } | 830 } |
| 823 } | 831 } |
| 824 | 832 |
| 825 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins, | 833 SyncStatusCode status = GetOrigins(&contents->incremental_sync_origins, |
| 826 &contents->disabled_origins); | 834 &contents->disabled_origins); |
| 827 if (status != SYNC_STATUS_OK && | 835 if (status != SYNC_STATUS_OK && |
| 828 status != SYNC_DATABASE_ERROR_NOT_FOUND) | 836 status != SYNC_DATABASE_ERROR_NOT_FOUND) |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 845 bool success = base::StringToInt64(itr->value().ToString(), | 853 bool success = base::StringToInt64(itr->value().ToString(), |
| 846 &database_version); | 854 &database_version); |
| 847 if (!success) | 855 if (!success) |
| 848 return SYNC_DATABASE_ERROR_FAILED; | 856 return SYNC_DATABASE_ERROR_FAILED; |
| 849 if (database_version > kCurrentDatabaseVersion) | 857 if (database_version > kCurrentDatabaseVersion) |
| 850 return SYNC_DATABASE_ERROR_FAILED; | 858 return SYNC_DATABASE_ERROR_FAILED; |
| 851 if (database_version == kCurrentDatabaseVersion) | 859 if (database_version == kCurrentDatabaseVersion) |
| 852 return SYNC_STATUS_OK; | 860 return SYNC_STATUS_OK; |
| 853 } | 861 } |
| 854 | 862 |
| 855 if (database_version == 0) { | 863 switch (database_version) { |
| 856 MigrateFromVersion0Database(); | 864 case 0: |
| 857 return SYNC_STATUS_OK; | 865 MigrateFromVersion0To1Database(); |
| 866 // fall-through | |
| 867 case 1: | |
| 868 drive::MigrateDatabaseFromV1ToV2(db_.get()); | |
| 869 return SYNC_STATUS_OK; | |
| 858 } | 870 } |
| 859 return SYNC_DATABASE_ERROR_FAILED; | 871 return SYNC_DATABASE_ERROR_FAILED; |
| 860 } | 872 } |
| 861 | 873 |
| 862 SyncStatusCode DriveMetadataDB::MigrateFromVersion0Database() { | 874 SyncStatusCode DriveMetadataDB::MigrateFromVersion0To1Database() { |
| 863 // Version 0 database format: | 875 // Version 0 database format: |
| 864 // key: "CHANGE_STAMP" | 876 // key: "CHANGE_STAMP" |
| 865 // value: <Largest Changestamp> | 877 // value: <Largest Changestamp> |
| 866 // | 878 // |
| 867 // key: "SYNC_ROOT_DIR" | 879 // key: "SYNC_ROOT_DIR" |
| 868 // value: <Resource ID of the sync root directory> | 880 // value: <Resource ID of the sync root directory> |
| 869 // | 881 // |
| 870 // key: "METADATA: " + | 882 // key: "METADATA: " + |
| 871 // <FileSystemURL serialized by SerializeSyncableFileSystemURL> | 883 // <FileSystemURL serialized by SerializeSyncableFileSystemURL> |
| 872 // value: <Serialized DriveMetadata> | 884 // value: <Serialized DriveMetadata> |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 893 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> | 905 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> |
| 894 // value: <Resource ID of the drive directory for the origin> | 906 // value: <Resource ID of the drive directory for the origin> |
| 895 // | 907 // |
| 896 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> | 908 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> |
| 897 // value: <Resource ID of the drive directory for the origin> | 909 // value: <Resource ID of the drive directory for the origin> |
| 898 // | 910 // |
| 899 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> | 911 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> |
| 900 // value: <Resource ID of the drive directory for the origin> | 912 // value: <Resource ID of the drive directory for the origin> |
| 901 | 913 |
| 902 leveldb::WriteBatch write_batch; | 914 leveldb::WriteBatch write_batch; |
| 903 write_batch.Put(kDatabaseVersionKey, | 915 write_batch.Put(kDatabaseVersionKey, "1"); |
| 904 base::Int64ToString(kCurrentDatabaseVersion)); | |
| 905 | 916 |
| 906 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 917 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
| 907 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { | 918 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { |
| 908 std::string key = itr->key().ToString(); | 919 std::string key = itr->key().ToString(); |
| 909 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 920 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
| 910 break; | 921 break; |
| 911 std::string serialized_url( | 922 std::string serialized_url( |
| 912 key.begin() + kDriveMetadataKeyPrefixLength - 1, key.end()); | 923 key.begin() + kDriveMetadataKeyPrefixLength - 1, key.end()); |
| 913 | 924 |
| 914 GURL origin; | 925 GURL origin; |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 935 leveldb::WriteOptions(), | 946 leveldb::WriteOptions(), |
| 936 kChangeStampKey, base::Int64ToString(largest_changestamp)); | 947 kChangeStampKey, base::Int64ToString(largest_changestamp)); |
| 937 return LevelDBStatusToSyncStatusCode(status); | 948 return LevelDBStatusToSyncStatusCode(status); |
| 938 } | 949 } |
| 939 | 950 |
| 940 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory( | 951 SyncStatusCode DriveMetadataDB::SetSyncRootDirectory( |
| 941 const std::string& resource_id) { | 952 const std::string& resource_id) { |
| 942 DCHECK(CalledOnValidThread()); | 953 DCHECK(CalledOnValidThread()); |
| 943 DCHECK(db_.get()); | 954 DCHECK(db_.get()); |
| 944 | 955 |
| 945 leveldb::Status status = db_->Put( | 956 leveldb::Status status = db_->Put(leveldb::WriteOptions(), |
| 946 leveldb::WriteOptions(), kSyncRootDirectoryKey, resource_id); | 957 kSyncRootDirectoryKey, |
| 958 drive::RemoveWapiIdPrefix(resource_id)); | |
| 947 return LevelDBStatusToSyncStatusCode(status); | 959 return LevelDBStatusToSyncStatusCode(status); |
| 948 } | 960 } |
| 949 | 961 |
| 950 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory( | 962 SyncStatusCode DriveMetadataDB::SetOriginRootDirectory( |
| 951 const GURL& origin, | 963 const GURL& origin, |
| 952 OriginSyncType sync_type, | 964 OriginSyncType sync_type, |
| 953 const std::string& resource_id) { | 965 const std::string& resource_id) { |
| 954 DCHECK(CalledOnValidThread()); | 966 DCHECK(CalledOnValidThread()); |
| 955 DCHECK(db_.get()); | 967 DCHECK(db_.get()); |
| 956 | 968 |
| 957 std::string key = CreateKeyForOriginRoot(origin, sync_type); | 969 std::string key = CreateKeyForOriginRoot(origin, sync_type); |
| 958 if (key.empty()) | 970 if (key.empty()) |
| 959 return SYNC_DATABASE_ERROR_FAILED; | 971 return SYNC_DATABASE_ERROR_FAILED; |
| 960 | 972 |
| 961 leveldb::Status status = db_->Put(leveldb::WriteOptions(), key, resource_id); | 973 leveldb::Status status = db_->Put( |
| 974 leveldb::WriteOptions(), key, drive::RemoveWapiIdPrefix(resource_id)); | |
| 962 return LevelDBStatusToSyncStatusCode(status); | 975 return LevelDBStatusToSyncStatusCode(status); |
| 963 } | 976 } |
| 964 | 977 |
| 965 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) { | 978 SyncStatusCode DriveMetadataDB::GetSyncRootDirectory(std::string* resource_id) { |
| 966 DCHECK(CalledOnValidThread()); | 979 DCHECK(CalledOnValidThread()); |
| 967 DCHECK(db_.get()); | 980 DCHECK(db_.get()); |
| 968 | 981 |
| 969 leveldb::Status status = db_->Get( | 982 leveldb::Status status = db_->Get( |
| 970 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id); | 983 leveldb::ReadOptions(), kSyncRootDirectoryKey, resource_id); |
| 984 | |
| 985 if (!IsDriveAPIEnabled() && status.ok()) | |
| 986 *resource_id = drive::AddWapiFolderPrefix(*resource_id); | |
| 987 | |
| 971 return LevelDBStatusToSyncStatusCode(status); | 988 return LevelDBStatusToSyncStatusCode(status); |
| 972 } | 989 } |
| 973 | 990 |
| 974 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url, | 991 SyncStatusCode DriveMetadataDB::UpdateEntry(const FileSystemURL& url, |
| 975 const DriveMetadata& metadata) { | 992 DriveMetadata metadata) { |
| 976 DCHECK(CalledOnValidThread()); | 993 DCHECK(CalledOnValidThread()); |
| 977 DCHECK(db_.get()); | 994 DCHECK(db_.get()); |
| 978 | 995 |
| 996 if (!IsDriveAPIEnabled()) { | |
| 997 metadata.set_resource_id( | |
|
kinuko
2013/05/28 15:09:20
nit: indent
nhiroki
2013/05/29 04:10:18
Done.
| |
| 998 drive::RemoveWapiIdPrefix(metadata.resource_id())); | |
| 999 } | |
| 1000 | |
| 979 std::string metadata_key = FileSystemURLToMetadataKey(url); | 1001 std::string metadata_key = FileSystemURLToMetadataKey(url); |
| 980 std::string value; | 1002 std::string value; |
| 981 bool success = metadata.SerializeToString(&value); | 1003 bool success = metadata.SerializeToString(&value); |
| 982 DCHECK(success); | 1004 DCHECK(success); |
| 983 leveldb::Status status = db_->Put( | 1005 leveldb::Status status = db_->Put( |
| 984 leveldb::WriteOptions(), metadata_key, value); | 1006 leveldb::WriteOptions(), metadata_key, value); |
| 985 | 1007 |
| 986 return LevelDBStatusToSyncStatusCode(status); | 1008 return LevelDBStatusToSyncStatusCode(status); |
| 987 } | 1009 } |
| 988 | 1010 |
| 989 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { | 1011 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { |
| 990 DCHECK(CalledOnValidThread()); | 1012 DCHECK(CalledOnValidThread()); |
| 991 DCHECK(db_.get()); | 1013 DCHECK(db_.get()); |
| 992 | 1014 |
| 993 std::string metadata_key = FileSystemURLToMetadataKey(url); | 1015 std::string metadata_key = FileSystemURLToMetadataKey(url); |
| 994 leveldb::Status status = db_->Delete( | 1016 leveldb::Status status = db_->Delete( |
| 995 leveldb::WriteOptions(), metadata_key); | 1017 leveldb::WriteOptions(), metadata_key); |
| 996 return LevelDBStatusToSyncStatusCode(status); | 1018 return LevelDBStatusToSyncStatusCode(status); |
| 997 } | 1019 } |
| 998 | 1020 |
| 999 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( | 1021 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( |
| 1000 const GURL& origin, const std::string& resource_id) { | 1022 const GURL& origin, const std::string& resource_id) { |
| 1001 DCHECK(CalledOnValidThread()); | 1023 DCHECK(CalledOnValidThread()); |
| 1002 DCHECK(db_.get()); | 1024 DCHECK(db_.get()); |
| 1003 | 1025 |
| 1004 leveldb::WriteBatch batch; | 1026 leveldb::WriteBatch batch; |
| 1005 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); | 1027 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); |
| 1006 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), | 1028 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), |
| 1007 resource_id); | 1029 drive::RemoveWapiIdPrefix(resource_id)); |
| 1008 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 1030 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
| 1009 | 1031 |
| 1010 return LevelDBStatusToSyncStatusCode(status); | 1032 return LevelDBStatusToSyncStatusCode(status); |
| 1011 } | 1033 } |
| 1012 | 1034 |
| 1013 SyncStatusCode DriveMetadataDB::EnableOrigin( | 1035 SyncStatusCode DriveMetadataDB::EnableOrigin( |
| 1014 const GURL& origin, const std::string& resource_id) { | 1036 const GURL& origin, const std::string& resource_id) { |
| 1015 DCHECK(CalledOnValidThread()); | 1037 DCHECK(CalledOnValidThread()); |
| 1016 DCHECK(db_.get()); | 1038 DCHECK(db_.get()); |
| 1017 | 1039 |
| 1018 // No DB entry as enabled origins go back to | 1040 // No DB entry as enabled origins go back to |
| 1019 // DriveFileSyncService.pending_batch_sync_origins only. | 1041 // DriveFileSyncService.pending_batch_sync_origins only. |
| 1020 leveldb::WriteBatch batch; | 1042 leveldb::WriteBatch batch; |
| 1021 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN)); | 1043 batch.Delete(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN)); |
| 1022 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); | 1044 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); |
| 1023 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 1045 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
| 1024 | 1046 |
| 1025 return LevelDBStatusToSyncStatusCode(status); | 1047 return LevelDBStatusToSyncStatusCode(status); |
| 1026 } | 1048 } |
| 1027 | 1049 |
| 1028 SyncStatusCode DriveMetadataDB::DisableOrigin( | 1050 SyncStatusCode DriveMetadataDB::DisableOrigin( |
| 1029 const GURL& origin_to_disable, const std::string& resource_id) { | 1051 const GURL& origin_to_disable, const std::string& resource_id) { |
| 1030 DCHECK(CalledOnValidThread()); | 1052 DCHECK(CalledOnValidThread()); |
| 1031 DCHECK(db_.get()); | 1053 DCHECK(db_.get()); |
| 1032 | 1054 |
| 1033 leveldb::WriteBatch batch; | 1055 leveldb::WriteBatch batch; |
| 1034 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, | 1056 batch.Delete(CreateKeyForOriginRoot(origin_to_disable, |
| 1035 INCREMENTAL_SYNC_ORIGIN)); | 1057 INCREMENTAL_SYNC_ORIGIN)); |
| 1036 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), | 1058 batch.Put(CreateKeyForOriginRoot(origin_to_disable, DISABLED_ORIGIN), |
| 1037 resource_id); | 1059 drive::RemoveWapiIdPrefix(resource_id)); |
| 1038 | 1060 |
| 1039 // Remove entries specified by |origin_to_disable|. | 1061 // Remove entries specified by |origin_to_disable|. |
| 1040 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 1062 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
| 1041 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); | 1063 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); |
| 1042 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { | 1064 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { |
| 1043 std::string key = itr->key().ToString(); | 1065 std::string key = itr->key().ToString(); |
| 1044 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 1066 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
| 1045 break; | 1067 break; |
| 1046 GURL origin; | 1068 GURL origin; |
| 1047 base::FilePath path; | 1069 base::FilePath path; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1092 // Get incremental sync origins from the DB. | 1114 // Get incremental sync origins from the DB. |
| 1093 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); | 1115 for (itr->Seek(kDriveIncrementalSyncOriginKeyPrefix); |
| 1094 itr->Valid(); itr->Next()) { | 1116 itr->Valid(); itr->Next()) { |
| 1095 std::string key = itr->key().ToString(); | 1117 std::string key = itr->key().ToString(); |
| 1096 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true)) | 1118 if (!StartsWithASCII(key, kDriveIncrementalSyncOriginKeyPrefix, true)) |
| 1097 break; | 1119 break; |
| 1098 GURL origin(std::string( | 1120 GURL origin(std::string( |
| 1099 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, | 1121 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, |
| 1100 key.end())); | 1122 key.end())); |
| 1101 DCHECK(origin.is_valid()); | 1123 DCHECK(origin.is_valid()); |
| 1124 | |
| 1125 std::string origin_resource_id = IsDriveAPIEnabled() | |
| 1126 ? itr->value().ToString() | |
| 1127 : drive::AddWapiFolderPrefix(itr->value().ToString()); | |
| 1128 | |
| 1102 bool result = incremental_sync_origins->insert( | 1129 bool result = incremental_sync_origins->insert( |
| 1103 std::make_pair(origin, itr->value().ToString())).second; | 1130 std::make_pair(origin, origin_resource_id)).second; |
| 1104 DCHECK(result); | 1131 DCHECK(result); |
| 1105 } | 1132 } |
| 1106 | 1133 |
| 1107 // Get disabled origins from the DB. | 1134 // Get disabled origins from the DB. |
| 1108 for (itr->Seek(kDriveDisabledOriginKeyPrefix); | 1135 for (itr->Seek(kDriveDisabledOriginKeyPrefix); |
| 1109 itr->Valid(); itr->Next()) { | 1136 itr->Valid(); itr->Next()) { |
| 1110 std::string key = itr->key().ToString(); | 1137 std::string key = itr->key().ToString(); |
| 1111 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) | 1138 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) |
| 1112 break; | 1139 break; |
| 1113 GURL origin(std::string( | 1140 GURL origin(std::string( |
| 1114 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1, | 1141 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1, |
| 1115 key.end())); | 1142 key.end())); |
| 1116 DCHECK(origin.is_valid()); | 1143 DCHECK(origin.is_valid()); |
| 1144 | |
| 1145 std::string origin_resource_id = IsDriveAPIEnabled() | |
| 1146 ? itr->value().ToString() | |
| 1147 : drive::AddWapiFolderPrefix(itr->value().ToString()); | |
| 1148 | |
| 1117 bool result = disabled_origins->insert( | 1149 bool result = disabled_origins->insert( |
| 1118 std::make_pair(origin, itr->value().ToString())).second; | 1150 std::make_pair(origin, origin_resource_id)).second; |
| 1119 DCHECK(result); | 1151 DCHECK(result); |
| 1120 } | 1152 } |
| 1121 | 1153 |
| 1122 return SYNC_STATUS_OK; | 1154 return SYNC_STATUS_OK; |
| 1123 } | 1155 } |
| 1124 | 1156 |
| 1125 } // namespace sync_file_system | 1157 } // namespace sync_file_system |
| OLD | NEW |