Chromium Code Reviews| Index: chrome/browser/sync_file_system/drive_backend/drive_backend_util.cc |
| diff --git a/chrome/browser/sync_file_system/drive_backend/drive_backend_util.cc b/chrome/browser/sync_file_system/drive_backend/drive_backend_util.cc |
| index ac9d0d0581e26af57b37e233b5c7775045c09e98..4390b17f401a6cd394b9235b0815836d3c371aa5 100644 |
| --- a/chrome/browser/sync_file_system/drive_backend/drive_backend_util.cc |
| +++ b/chrome/browser/sync_file_system/drive_backend/drive_backend_util.cc |
| @@ -8,12 +8,14 @@ |
| #include "base/memory/scoped_vector.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| +#include "base/threading/thread_restrictions.h" |
| #include "chrome/browser/drive/drive_api_util.h" |
| #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" |
| #include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h" |
| #include "chrome/browser/sync_file_system/logger.h" |
| #include "google_apis/drive/drive_api_parser.h" |
| #include "google_apis/drive/gdata_wapi_parser.h" |
| +#include "third_party/leveldatabase/src/include/leveldb/db.h" |
| #include "third_party/leveldatabase/src/include/leveldb/write_batch.h" |
| namespace sync_file_system { |
| @@ -161,5 +163,40 @@ bool RemovePrefix(const std::string& str, const std::string& prefix, |
| return true; |
| } |
| +scoped_ptr<ServiceMetadata> ReadServiceMetadata(leveldb::DB* db) { |
| + base::ThreadRestrictions::AssertIOAllowed(); |
| + DCHECK(db); |
| + |
| + std::string value; |
| + leveldb::Status status = db->Get(leveldb::ReadOptions(), |
| + kServiceMetadataKey, |
| + &value); |
| + if (!status.ok()) |
| + return scoped_ptr<ServiceMetadata>(); |
| + |
| + scoped_ptr<ServiceMetadata> service_metadata(new ServiceMetadata); |
| + if (!service_metadata->ParseFromString(value)) { |
| + util::Log(logging::LOG_WARNING, FROM_HERE, |
| + "Failed to parse SyncServiceMetadata"); |
| + return scoped_ptr<ServiceMetadata>(); |
| + } |
| + return service_metadata.Pass(); |
| +} |
| + |
| +scoped_ptr<ServiceMetadata> InitializeServiceMetadata( |
| + leveldb::DB* db, leveldb::WriteBatch* batch) { |
| + scoped_ptr<ServiceMetadata> service_metadata = ReadServiceMetadata(db); |
| + if (!service_metadata) { |
| + service_metadata.reset(new ServiceMetadata); |
| + service_metadata->set_next_tracker_id(1); |
| + |
| + std::string value; |
| + service_metadata->SerializeToString(&value); |
| + if (batch) |
| + batch->Put(kServiceMetadataKey, value); |
|
nhiroki
2014/07/15 07:47:20
Is it necessary to put the initial metadata here?
peria
2014/07/15 09:00:58
Hmm, it sounds acceptable to remove handling |batc
|
| + } |
| + return service_metadata.Pass(); |
| +} |
| + |
| } // namespace drive_backend |
| } // namespace sync_file_system |