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" |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 SyncStatusCode MigrateDatabaseIfNeeded(); | 108 SyncStatusCode MigrateDatabaseIfNeeded(); |
109 | 109 |
110 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); | 110 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); |
111 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); | 111 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); |
112 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); | 112 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); |
113 SyncStatusCode SetOriginRootDirectory(const GURL& origin, | 113 SyncStatusCode SetOriginRootDirectory(const GURL& origin, |
114 OriginSyncType sync_type, | 114 OriginSyncType sync_type, |
115 const std::string& resource_id); | 115 const std::string& resource_id); |
116 SyncStatusCode UpdateEntry(const FileSystemURL& url, | 116 SyncStatusCode UpdateEntry(const FileSystemURL& url, |
117 DriveMetadata metadata); | 117 DriveMetadata metadata); |
118 SyncStatusCode DeleteEntry(const FileSystemURL& url); | |
119 | 118 |
120 // TODO(calvinlo): consolidate these state transition functions for sync | 119 // TODO(calvinlo): consolidate these state transition functions for sync |
121 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in | 120 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in |
122 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". | 121 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". |
123 // http://crbug.com/211600 | 122 // http://crbug.com/211600 |
124 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, | 123 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, |
125 const std::string& resource_id); | 124 const std::string& resource_id); |
126 SyncStatusCode EnableOrigin(const GURL& origin, | 125 SyncStatusCode EnableOrigin(const GURL& origin, |
127 const std::string& resource_id); | 126 const std::string& resource_id); |
128 SyncStatusCode DisableOrigin(const GURL& origin, | 127 SyncStatusCode DisableOrigin(const GURL& origin, |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
425 DCHECK(CalledOnValidThread()); | 424 DCHECK(CalledOnValidThread()); |
426 MetadataMap::iterator found = metadata_map_.find(url.origin()); | 425 MetadataMap::iterator found = metadata_map_.find(url.origin()); |
427 if (found == metadata_map_.end()) { | 426 if (found == metadata_map_.end()) { |
428 base::MessageLoopProxy::current()->PostTask( | 427 base::MessageLoopProxy::current()->PostTask( |
429 FROM_HERE, | 428 FROM_HERE, |
430 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); | 429 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); |
431 return; | 430 return; |
432 } | 431 } |
433 | 432 |
434 if (found->second.erase(url.path()) == 1) { | 433 if (found->second.erase(url.path()) == 1) { |
435 base::PostTaskAndReplyWithResult( | 434 scoped_ptr<leveldb::WriteBatch> batch(new leveldb::WriteBatch); |
436 file_task_runner_.get(), | 435 batch->Delete(FileSystemURLToMetadataKey(url)); |
437 FROM_HERE, | 436 WriteToDB(batch.Pass(), callback); |
438 base::Bind( | |
439 &DriveMetadataDB::DeleteEntry, base::Unretained(db_.get()), url), | |
440 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, | |
441 AsWeakPtr(), | |
442 callback)); | |
443 return; | 437 return; |
444 } | 438 } |
445 | 439 |
446 base::MessageLoopProxy::current()->PostTask( | 440 base::MessageLoopProxy::current()->PostTask( |
447 FROM_HERE, | 441 FROM_HERE, |
448 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); | 442 base::Bind(callback, SYNC_DATABASE_ERROR_NOT_FOUND)); |
449 } | 443 } |
450 | 444 |
451 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, | 445 SyncStatusCode DriveMetadataStore::ReadEntry(const FileSystemURL& url, |
452 DriveMetadata* metadata) const { | 446 DriveMetadata* metadata) const { |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
627 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); | 621 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
628 } | 622 } |
629 | 623 |
630 void DriveMetadataStore::DidUpdateOrigin( | 624 void DriveMetadataStore::DidUpdateOrigin( |
631 const SyncStatusCallback& callback, | 625 const SyncStatusCallback& callback, |
632 SyncStatusCode status) { | 626 SyncStatusCode status) { |
633 UpdateDBStatus(status); | 627 UpdateDBStatus(status); |
634 callback.Run(status); | 628 callback.Run(status); |
635 } | 629 } |
636 | 630 |
| 631 void DriveMetadataStore::WriteToDB(scoped_ptr<leveldb::WriteBatch> batch, |
| 632 const SyncStatusCallback& callback) { |
| 633 base::PostTaskAndReplyWithResult( |
| 634 file_task_runner_, FROM_HERE, |
| 635 base::Bind(&DriveMetadataDB::WriteToDB, |
| 636 base::Unretained(db_.get()), base::Owned(batch.release())), |
| 637 base::Bind(&DriveMetadataStore::UpdateDBStatusAndInvokeCallback, |
| 638 AsWeakPtr(), callback)); |
| 639 } |
| 640 |
637 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { | 641 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { |
638 DCHECK(CalledOnValidThread()); | 642 DCHECK(CalledOnValidThread()); |
639 if (db_status_ != SYNC_STATUS_OK && | 643 if (db_status_ != SYNC_STATUS_OK && |
640 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { | 644 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { |
641 // TODO(tzik): Handle database corruption. http://crbug.com/153709 | 645 // TODO(tzik): Handle database corruption. http://crbug.com/153709 |
642 db_status_ = status; | 646 db_status_ = status; |
643 util::Log(logging::LOG_WARNING, | 647 util::Log(logging::LOG_WARNING, |
644 FROM_HERE, | 648 FROM_HERE, |
645 "DriveMetadataStore turned to wrong state: %s", | 649 "DriveMetadataStore turned to wrong state: %s", |
646 SyncStatusCodeToString(status).c_str()); | 650 SyncStatusCodeToString(status).c_str()); |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
930 std::string metadata_key = FileSystemURLToMetadataKey(url); | 934 std::string metadata_key = FileSystemURLToMetadataKey(url); |
931 std::string value; | 935 std::string value; |
932 bool success = metadata.SerializeToString(&value); | 936 bool success = metadata.SerializeToString(&value); |
933 DCHECK(success); | 937 DCHECK(success); |
934 | 938 |
935 leveldb::WriteBatch batch; | 939 leveldb::WriteBatch batch; |
936 batch.Put(metadata_key, value); | 940 batch.Put(metadata_key, value); |
937 return WriteToDB(&batch); | 941 return WriteToDB(&batch); |
938 } | 942 } |
939 | 943 |
940 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { | |
941 DCHECK(CalledOnValidThread()); | |
942 DCHECK(db_.get()); | |
943 | |
944 std::string metadata_key = FileSystemURLToMetadataKey(url); | |
945 leveldb::WriteBatch batch; | |
946 batch.Delete(metadata_key); | |
947 return WriteToDB(&batch); | |
948 } | |
949 | |
950 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( | 944 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( |
951 const GURL& origin, const std::string& resource_id) { | 945 const GURL& origin, const std::string& resource_id) { |
952 DCHECK(CalledOnValidThread()); | 946 DCHECK(CalledOnValidThread()); |
953 DCHECK(db_.get()); | 947 DCHECK(db_.get()); |
954 | 948 |
955 leveldb::WriteBatch batch; | 949 leveldb::WriteBatch batch; |
956 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); | 950 batch.Delete(CreateKeyForOriginRoot(origin, DISABLED_ORIGIN)); |
957 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), | 951 batch.Put(CreateKeyForOriginRoot(origin, INCREMENTAL_SYNC_ORIGIN), |
958 drive::RemoveWapiIdPrefix(resource_id)); | 952 drive::RemoveWapiIdPrefix(resource_id)); |
959 return WriteToDB(&batch); | 953 return WriteToDB(&batch); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1068 | 1062 |
1069 bool result = disabled_origins->insert( | 1063 bool result = disabled_origins->insert( |
1070 std::make_pair(origin, origin_resource_id)).second; | 1064 std::make_pair(origin, origin_resource_id)).second; |
1071 DCHECK(result); | 1065 DCHECK(result); |
1072 } | 1066 } |
1073 | 1067 |
1074 return SYNC_STATUS_OK; | 1068 return SYNC_STATUS_OK; |
1075 } | 1069 } |
1076 | 1070 |
1077 } // namespace sync_file_system | 1071 } // namespace sync_file_system |
OLD | NEW |