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); |
+ } |
+ return service_metadata.Pass(); |
+} |
+ |
} // namespace drive_backend |
} // namespace sync_file_system |