Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: chrome/browser/sync_file_system/drive_metadata_store.cc

Issue 15808002: SyncFS: Convert WAPI ResourceID to DriveAPI FileID (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix more Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698