summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorachuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-25 00:15:34 +0000
committerachuith@chromium.org <achuith@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-25 00:15:34 +0000
commit671b613a7506f78672129b4dc9685fde01e66f00 (patch)
tree1b36c91867e522c83906e0c272c8ff59e832c986 /chrome
parent11e82d5b469c06f22503cfce5edc4f21fb4a1102 (diff)
downloadchromium_src-671b613a7506f78672129b4dc9685fde01e66f00.zip
chromium_src-671b613a7506f78672129b4dc9685fde01e66f00.tar.gz
chromium_src-671b613a7506f78672129b4dc9685fde01e66f00.tar.bz2
Revert 133815 - GDataDB support with leveldb.
* Define GDataDB interface with methods to Put, Get and Delete. Also define a path-based iterator. * GDataLevelDB implements GDataDB using leveldb. * Add methods SerializeToString and FromProtoString to serialize GDataEntry to strings and vice versa. * GDataDBTests test Put, Get, Delete for files and directories. * Iterator tests in GDataDBTests. * GDataDBFactory class to create GDataLevelDB instance. TODO: * There is no integration with GDataRootDirectory/GDataFileSystem yet. BUG=chromium-os:29232 TEST=unittests pass. Review URL: https://chromiumcodereview.appspot.com/10168025 TBR=achuith@chromium.org Review URL: https://chromiumcodereview.appspot.com/10214008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133819 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/chromeos/gdata/gdata_db.h69
-rw-r--r--chrome/browser/chromeos/gdata/gdata_db_factory.cc22
-rw-r--r--chrome/browser/chromeos/gdata/gdata_db_factory.h25
-rw-r--r--chrome/browser/chromeos/gdata/gdata_db_unittest.cc266
-rw-r--r--chrome/browser/chromeos/gdata/gdata_files.cc70
-rw-r--r--chrome/browser/chromeos/gdata/gdata_files.h28
-rw-r--r--chrome/browser/chromeos/gdata/gdata_leveldb.cc204
-rw-r--r--chrome/browser/chromeos/gdata/gdata_leveldb.h60
-rw-r--r--chrome/chrome_browser.gypi5
-rw-r--r--chrome/chrome_tests.gypi1
10 files changed, 14 insertions, 736 deletions
diff --git a/chrome/browser/chromeos/gdata/gdata_db.h b/chrome/browser/chromeos/gdata/gdata_db.h
deleted file mode 100644
index 67d1e58..0000000
--- a/chrome/browser/chromeos/gdata/gdata_db.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_DB_H_
-#define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_DB_H_
-#pragma once
-
-#include <string>
-
-#include "base/memory/scoped_ptr.h"
-
-class FilePath;
-
-namespace gdata {
-
-class GDataEntry;
-class GDataDBIter;
-
-// GData Database interface class.
-class GDataDB {
- public:
- enum Status {
- DB_OK = 0,
- DB_KEY_NOT_FOUND, // Key not found.
- DB_CORRUPTION, // Database file corrupt.
- DB_IO_ERROR, // File I/O error.
- DB_INTERNAL_ERROR,
- };
-
- virtual ~GDataDB() {}
-
- // Puts |entry| to the database.
- virtual Status Put(const GDataEntry& entry) = 0;
-
- // Deletes a database entry with key |resource_id| or |path| respectively.
- virtual Status DeleteByResourceId(const std::string& resource_id) = 0;
- virtual Status DeleteByPath(const FilePath& path) = 0;
-
- // Fetches a GDataEntry* by key |resource_id| or |path| respectively.
- virtual Status GetByResourceId(const std::string& resource_id,
- scoped_ptr<GDataEntry>* entry) = 0;
- virtual Status GetByPath(const FilePath& path,
- scoped_ptr<GDataEntry>* entry) = 0;
-
- // Creates an iterator to fetch all GDataEntry's under |path|.
- // Will not return NULL.
- virtual scoped_ptr<GDataDBIter> CreateIterator(const FilePath& path) = 0;
-
- protected:
- GDataDB() {}
-};
-
-// GData Database Iterator interface class.
-class GDataDBIter {
- public:
- virtual ~GDataDBIter() {}
-
- // Fetches the next |entry| in the iteration sequence. Returns false when
- // there are no more entries.
- virtual bool GetNext(std::string* path, scoped_ptr<GDataEntry>* entry) = 0;
-
- protected:
- GDataDBIter() {}
-};
-
-} // namespace gdata
-
-#endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_DB_H_
diff --git a/chrome/browser/chromeos/gdata/gdata_db_factory.cc b/chrome/browser/chromeos/gdata/gdata_db_factory.cc
deleted file mode 100644
index 31c88ca..0000000
--- a/chrome/browser/chromeos/gdata/gdata_db_factory.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/gdata/gdata_db_factory.h"
-
-#include "base/file_path.h"
-#include "base/logging.h"
-#include "chrome/browser/chromeos/gdata/gdata_leveldb.h"
-
-namespace gdata {
-namespace db_factory {
-
-scoped_ptr<GDataDB> CreateGDataDB(const FilePath& db_path) {
- DVLOG(1) << "CreateGDataDB " << db_path.value();
- GDataLevelDB* level_db = new GDataLevelDB();
- level_db->Init(db_path);
- return scoped_ptr<GDataDB>(level_db);
-}
-
-} // namespace db_factory
-} // namespace gdata
diff --git a/chrome/browser/chromeos/gdata/gdata_db_factory.h b/chrome/browser/chromeos/gdata/gdata_db_factory.h
deleted file mode 100644
index ad88e1f..0000000
--- a/chrome/browser/chromeos/gdata/gdata_db_factory.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_DB_FACTORY_H_
-#define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_DB_FACTORY_H_
-#pragma once
-
-#include "base/memory/scoped_ptr.h"
-
-class FilePath;
-
-namespace gdata {
-
-class GDataDB;
-
-namespace db_factory {
-
-// Factory method to create an instance of GDataDB.
-scoped_ptr<GDataDB> CreateGDataDB(const FilePath& db_path);
-
-} // namespace db_factory
-} // namespace gdata
-
-#endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_DB_FACTORY_H_
diff --git a/chrome/browser/chromeos/gdata/gdata_db_unittest.cc b/chrome/browser/chromeos/gdata/gdata_db_unittest.cc
deleted file mode 100644
index f35db48..0000000
--- a/chrome/browser/chromeos/gdata/gdata_db_unittest.cc
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/gdata/gdata_db.h"
-
-#include "base/string_number_conversions.h"
-#include "chrome/browser/chromeos/gdata/gdata_db_factory.h"
-#include "chrome/browser/chromeos/gdata/gdata_files.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "chrome/test/base/testing_profile.h"
-
-namespace gdata {
-namespace {
-
-class GDataDBTest : public testing::Test {
- public:
- GDataDBTest() {
- }
-
- virtual ~GDataDBTest() {
- }
-
- protected:
- // testing::Test implementation.
- virtual void SetUp() OVERRIDE;
-
- // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry
- // matching |source| does not exist.
- void TestGetNotFound(const GDataEntry& source);
-
- // Tests GDataDB::GetPath and GDataDB::ResourceId, ensuring that an entry
- // matching |source| exists.
- void TestGetFound(const GDataEntry& source);
-
- // Initialize the database with the following entries:
- // dir1
- // dir2
- // dir1/dir3
- // dir1/file4
- // dir1/file5
- // dir2/file6
- // dir2/file7
- // dir2/file8
- // dir1/dir3/file9
- // dir1/dir3/file10
- void InitDB();
-
- // Helper functions to add a directory/file, incrementing index.
- GDataDirectory* AddDirectory(GDataDirectory* parent, int sequence_id);
- GDataFile* AddFile(GDataDirectory* parent, int sequence_id);
-
- // Tests GDataDB::NewIterator and GDataDBIter::GetNext.
- // Creates an iterator with start at |parent|, and iterates comparing with
- // expected |filenames|.
- void TestIter(const std::string& parent,
- const char* file_paths[],
- size_t file_paths_size);
-
- scoped_ptr<TestingProfile> profile_;
- scoped_ptr<GDataDB> gdata_db_;
- GDataRootDirectory root_;
-};
-
-void GDataDBTest::SetUp() {
- profile_.reset(new TestingProfile());
- gdata_db_ = db_factory::CreateGDataDB(
- profile_->GetPath().Append("testdb"));
-}
-
-void GDataDBTest::TestGetNotFound(const GDataEntry& source) {
- scoped_ptr<GDataEntry> entry;
- GDataDB::Status status = gdata_db_->GetByPath(source.GetFilePath(), &entry);
- EXPECT_EQ(GDataDB::DB_KEY_NOT_FOUND, status);
- EXPECT_FALSE(entry.get());
-
- status = gdata_db_->GetByResourceId(source.resource_id(), &entry);
- EXPECT_EQ(GDataDB::DB_KEY_NOT_FOUND, status);
- EXPECT_FALSE(entry.get());
-}
-
-void GDataDBTest::TestGetFound(const GDataEntry& source) {
- scoped_ptr<GDataEntry> entry;
- GDataDB::Status status = gdata_db_->GetByPath(source.GetFilePath(), &entry);
- EXPECT_EQ(GDataDB::DB_OK, status);
- ASSERT_TRUE(entry.get());
- EXPECT_EQ(source.file_name(), entry->file_name());
- EXPECT_EQ(source.resource_id(), entry->resource_id());
- EXPECT_EQ(source.content_url(), entry->content_url());
- entry.reset();
-
- status = gdata_db_->GetByResourceId(source.resource_id(), &entry);
- EXPECT_EQ(GDataDB::DB_OK, status);
- ASSERT_TRUE(entry.get());
- EXPECT_EQ(source.file_name(), entry->file_name());
- EXPECT_EQ(source.resource_id(), entry->resource_id());
- EXPECT_EQ(source.content_url(), entry->content_url());
-}
-
-void GDataDBTest::InitDB() {
- int sequence_id = 1;
- GDataDirectory* dir1 = AddDirectory(NULL, sequence_id++);
- GDataDirectory* dir2 = AddDirectory(NULL, sequence_id++);
- GDataDirectory* dir3 = AddDirectory(dir1, sequence_id++);
-
- AddFile(dir1, sequence_id++);
- AddFile(dir1, sequence_id++);
-
- AddFile(dir2, sequence_id++);
- AddFile(dir2, sequence_id++);
- AddFile(dir2, sequence_id++);
-
- AddFile(dir3, sequence_id++);
- AddFile(dir3, sequence_id++);
-}
-
-GDataDirectory* GDataDBTest::AddDirectory(GDataDirectory* parent,
- int sequence_id) {
- GDataDirectory* dir = new GDataDirectory(parent ? parent : &root_, &root_);
- const std::string dir_name = "dir" + base::IntToString(sequence_id);
- const std::string resource_id = std::string("dir_resource_id:") +
- dir_name;
- dir->set_file_name(dir_name);
- dir->set_resource_id(resource_id);
- GDataDB::Status status = gdata_db_->Put(*dir);
- EXPECT_EQ(GDataDB::DB_OK, status);
- DVLOG(1) << "AddDirectory " << dir->GetFilePath().value()
- << ", " << resource_id;
- return dir;
-}
-
-GDataFile* GDataDBTest::AddFile(GDataDirectory* parent,
- int sequence_id) {
- GDataFile* file = new GDataFile(parent, &root_);
- const std::string file_name = "file" + base::IntToString(sequence_id);
- const std::string resource_id = std::string("file_resource_id:") +
- file_name;
- file->set_file_name(file_name);
- file->set_resource_id(resource_id);
- GDataDB::Status status = gdata_db_->Put(*file);
- EXPECT_EQ(GDataDB::DB_OK, status);
- DVLOG(1) << "AddFile " << file->GetFilePath().value()
- << ", " << resource_id;
- return file;
-}
-
-void GDataDBTest::TestIter(const std::string& parent,
- const char* file_paths[],
- size_t file_paths_size) {
- scoped_ptr<GDataDBIter> iter = gdata_db_->CreateIterator(
- FilePath::FromUTF8Unsafe(parent));
- for (size_t i = 0; ; ++i) {
- scoped_ptr<GDataEntry> entry;
- std::string path;
- if (!iter->GetNext(&path, &entry)) {
- EXPECT_EQ(i, file_paths_size);
- break;
- }
- ASSERT_LT(i, file_paths_size);
- // TODO(achuith): Also test entry->GetFilePath().
- EXPECT_EQ(FilePath(file_paths[i]).BaseName().value(), entry->file_name());
- EXPECT_EQ(file_paths[i], path);
- DVLOG(1) << "Iter " << path;
- }
-}
-
-} // namespace
-
-TEST_F(GDataDBTest, PutTest) {
- GDataDirectory* dir = new GDataDirectory(&root_, &root_);
- dir->set_file_name("dir");
- dir->set_resource_id("dir_resource_id");
- dir->set_content_url(GURL("http://content/dir"));
- dir->set_upload_url(GURL("http://upload/dir"));
-
- TestGetNotFound(*dir);
-
- GDataDB::Status status = gdata_db_->Put(*dir);
- EXPECT_EQ(GDataDB::DB_OK, status);
-
- TestGetFound(*dir);
-
- scoped_ptr<GDataEntry> entry;
- gdata_db_->GetByPath(dir->GetFilePath(), &entry);
- EXPECT_EQ(dir->upload_url(), entry->AsGDataDirectory()->upload_url());
- EXPECT_TRUE(entry->AsGDataDirectory()->file_info().is_directory);
-
- status = gdata_db_->DeleteByPath(dir->GetFilePath());
- EXPECT_EQ(GDataDB::DB_OK, status);
-
- TestGetNotFound(*dir);
-
- GDataFile* file = new GDataFile(dir, &root_);
- file->set_file_name("file1");
- file->set_resource_id("file1_resource_id");
- file->set_content_url(GURL("http://content/dir1/file1"));
- file->set_file_md5("file1_md5");
-
- TestGetNotFound(*file);
-
- status = gdata_db_->Put(*file);
- EXPECT_EQ(GDataDB::DB_OK, status);
-
- TestGetFound(*file);
-
- gdata_db_->GetByPath(file->GetFilePath(), &entry);
- EXPECT_EQ(file->file_md5(), entry->AsGDataFile()->file_md5());
- EXPECT_FALSE(entry->AsGDataFile()->file_info().is_directory);
-
- status = gdata_db_->DeleteByPath(file->GetFilePath());
- EXPECT_EQ(GDataDB::DB_OK, status);
-
- TestGetNotFound(*file);
-}
-
-TEST_F(GDataDBTest, IterTest) {
- InitDB();
-
- const char* dir1_children[] = {
- "dir1",
- "dir1/dir3",
- "dir1/dir3/file10",
- "dir1/dir3/file9",
- "dir1/file4",
- "dir1/file5",
- };
- TestIter("dir1", dir1_children, arraysize(dir1_children));
-
- const char* dir2_children[] = {
- "dir2",
- "dir2/file6",
- "dir2/file7",
- "dir2/file8",
- };
- TestIter("dir2", dir2_children, arraysize(dir2_children));
-
- const char* dir3_children[] = {
- "dir1/dir3",
- "dir1/dir3/file10",
- "dir1/dir3/file9",
- };
- TestIter("dir1/dir3", dir3_children, arraysize(dir3_children));
-
- const char* file10[] = {
- "dir1/dir3/file10",
- };
- TestIter(file10[0], file10, arraysize(file10));
-
- const char* all_entries[] = {
- "dir1",
- "dir1/dir3",
- "dir1/dir3/file10",
- "dir1/dir3/file9",
- "dir1/file4",
- "dir1/file5",
- "dir2",
- "dir2/file6",
- "dir2/file7",
- "dir2/file8",
- };
- TestIter("", all_entries, arraysize(all_entries));
-
- TestIter("dir4", NULL, 0);
-}
-
-} // namespace gdata
diff --git a/chrome/browser/chromeos/gdata/gdata_files.cc b/chrome/browser/chromeos/gdata/gdata_files.cc
index 43a3cca..9dcd99a 100644
--- a/chrome/browser/chromeos/gdata/gdata_files.cc
+++ b/chrome/browser/chromeos/gdata/gdata_files.cc
@@ -78,20 +78,10 @@ GDataRootDirectory* GDataEntry::AsGDataRootDirectory() {
return NULL;
}
-const GDataFile* GDataEntry::AsGDataFileConst() const {
- // cast away const and call the non-const version. This is safe.
- return const_cast<GDataEntry*>(this)->AsGDataFile();
-}
-
-const GDataDirectory* GDataEntry::AsGDataDirectoryConst() const {
- // cast away const and call the non-const version. This is safe.
- return const_cast<GDataEntry*>(this)->AsGDataDirectory();
-}
-
-FilePath GDataEntry::GetFilePath() const {
+FilePath GDataEntry::GetFilePath() {
FilePath path;
std::vector<FilePath::StringType> parts;
- for (const GDataEntry* entry = this; entry != NULL; entry = entry->parent_)
+ for (GDataEntry* entry = this; entry != NULL; entry = entry->parent())
parts.push_back(entry->file_name());
// Paste paths parts back together in reverse order from upward tree
@@ -143,7 +133,6 @@ GDataFile::GDataFile(GDataDirectory* parent, GDataRootDirectory* root)
: GDataEntry(parent, root),
kind_(gdata::DocumentEntry::UNKNOWN),
is_hosted_document_(false) {
- file_info_.is_directory = false;
}
GDataFile::~GDataFile() {
@@ -592,7 +581,6 @@ void GDataEntry::ToProto(GDataEntryProto* proto) const {
}
void GDataFile::FromProto(const GDataFileProto& proto) {
- DCHECK(!proto.gdata_entry().file_info().is_directory());
GDataEntry::FromProto(proto.gdata_entry());
kind_ = DocumentEntry::EntryKind(proto.kind());
thumbnail_url_ = GURL(proto.thumbnail_url());
@@ -607,7 +595,6 @@ void GDataFile::FromProto(const GDataFileProto& proto) {
void GDataFile::ToProto(GDataFileProto* proto) const {
GDataEntry::ToProto(proto->mutable_gdata_entry());
- DCHECK(!proto->gdata_entry().file_info().is_directory());
proto->set_kind(kind_);
proto->set_thumbnail_url(thumbnail_url_.spec());
proto->set_alternate_url(alternate_url_.spec());
@@ -620,7 +607,6 @@ void GDataFile::ToProto(GDataFileProto* proto) const {
}
void GDataDirectory::FromProto(const GDataDirectoryProto& proto) {
- DCHECK(proto.gdata_entry().file_info().is_directory());
GDataEntry::FromProto(proto.gdata_entry());
refresh_time_ = base::Time::FromInternalValue(proto.refresh_time());
start_feed_url_ = GURL(proto.start_feed_url());
@@ -641,7 +627,6 @@ void GDataDirectory::FromProto(const GDataDirectoryProto& proto) {
void GDataDirectory::ToProto(GDataDirectoryProto* proto) const {
GDataEntry::ToProto(proto->mutable_gdata_entry());
- DCHECK(proto->gdata_entry().file_info().is_directory());
proto->set_refresh_time(refresh_time_.ToInternalValue());
proto->set_start_feed_url(start_feed_url_.spec());
proto->set_next_feed_url(next_feed_url_.spec());
@@ -669,61 +654,18 @@ void GDataRootDirectory::ToProto(GDataRootDirectoryProto* proto) const {
proto->set_largest_changestamp(largest_changestamp_);
}
-void GDataEntry::SerializeToString(std::string* serialized_proto) const {
- const GDataFile* file = AsGDataFileConst();
- const GDataDirectory* dir = AsGDataDirectoryConst();
-
- if (file) {
- scoped_ptr<GDataFileProto> proto(new GDataFileProto());
- file->ToProto(proto.get());
- const bool ok = proto->SerializeToString(serialized_proto);
- DCHECK(ok);
- } else if (dir) {
- scoped_ptr<GDataDirectoryProto> proto(new GDataDirectoryProto());
- dir->ToProto(proto.get());
- const bool ok = proto->SerializeToString(serialized_proto);
- DCHECK(ok);
- }
-}
-
-// static
-scoped_ptr<GDataEntry> GDataEntry::FromProtoString(
- const std::string& serialized_proto) {
- // First try to parse as GDataDirectoryProto. Note that this can succeed for
- // a serialized_proto that's really a GDataFileProto - we have to check
- // is_directory to be sure.
- scoped_ptr<GDataDirectoryProto> dir_proto(new GDataDirectoryProto());
- bool ok = dir_proto->ParseFromString(serialized_proto);
- if (ok && dir_proto->gdata_entry().file_info().is_directory()) {
- GDataDirectory* dir = new GDataDirectory(NULL, NULL);
- dir->FromProto(*dir_proto);
- return scoped_ptr<GDataEntry>(dir);
- }
-
- scoped_ptr<GDataFileProto> file_proto(new GDataFileProto());
- ok = file_proto->ParseFromString(serialized_proto);
- if (ok) {
- DCHECK(!file_proto->gdata_entry().file_info().is_directory());
- GDataFile* file = new GDataFile(NULL, NULL);
- file->FromProto(*file_proto);
- return scoped_ptr<GDataEntry>(file);
- }
- return scoped_ptr<GDataEntry>(NULL);
-}
-
-void GDataRootDirectory::SerializeToString(
- std::string* serialized_proto) const {
+void GDataRootDirectory::SerializeToString(std::string* proto_string) const {
scoped_ptr<GDataRootDirectoryProto> proto(
new GDataRootDirectoryProto());
ToProto(proto.get());
- const bool ok = proto->SerializeToString(serialized_proto);
+ const bool ok = proto->SerializeToString(proto_string);
DCHECK(ok);
}
-bool GDataRootDirectory::ParseFromString(const std::string& serialized_proto) {
+bool GDataRootDirectory::ParseFromString(const std::string& proto_string) {
scoped_ptr<GDataRootDirectoryProto> proto(
new GDataRootDirectoryProto());
- bool ok = proto->ParseFromString(serialized_proto);
+ bool ok = proto->ParseFromString(proto_string);
if (ok) {
FromProto(*proto.get());
set_origin(FROM_CACHE);
diff --git a/chrome/browser/chromeos/gdata/gdata_files.h b/chrome/browser/chromeos/gdata/gdata_files.h
index 1944235..b7e9031 100644
--- a/chrome/browser/chromeos/gdata/gdata_files.h
+++ b/chrome/browser/chromeos/gdata/gdata_files.h
@@ -59,27 +59,15 @@ class GDataEntry {
public:
explicit GDataEntry(GDataDirectory* parent, GDataRootDirectory* root);
virtual ~GDataEntry();
-
virtual GDataFile* AsGDataFile();
virtual GDataDirectory* AsGDataDirectory();
virtual GDataRootDirectory* AsGDataRootDirectory();
- // const versions of AsGDataFile and AsGDataDirectory.
- const GDataFile* AsGDataFileConst() const;
- const GDataDirectory* AsGDataDirectoryConst() const;
-
// Converts DocumentEntry into GDataEntry.
static GDataEntry* FromDocumentEntry(GDataDirectory* parent,
DocumentEntry* doc,
GDataRootDirectory* root);
- // Serialize/Parse to/from string via proto classes.
- // TODO(achuith): Correctly set up parent_ and root_ links in
- // FromProtoString.
- void SerializeToString(std::string* serialized_proto) const;
- static scoped_ptr<GDataEntry> FromProtoString(
- const std::string& serialized_proto);
-
// Convert to/from proto.
void FromProto(const GDataEntryProto& proto);
void ToProto(GDataEntryProto* proto) const;
@@ -93,20 +81,20 @@ class GDataEntry {
GDataDirectory* parent() { return parent_; }
const base::PlatformFileInfo& file_info() const { return file_info_; }
-
const FilePath::StringType& file_name() const { return file_name_; }
+ const FilePath::StringType& title() const {
+ return title_;
+ }
+ void set_title(const FilePath::StringType& title) {
+ title_ = title;
+ }
void set_file_name(const FilePath::StringType& name) { file_name_ = name; }
- const FilePath::StringType& title() const { return title_; }
- void set_title(const FilePath::StringType& title) { title_ = title; }
-
// The unique resource ID associated with this file system entry.
const std::string& resource_id() const { return resource_id_; }
- void set_resource_id(const std::string& res_id) { resource_id_ = res_id; }
// The content URL is used for downloading regular files as is.
const GURL& content_url() const { return content_url_; }
- void set_content_url(const GURL& url) { content_url_ = url; }
// The edit URL is used for removing files and hosted documents.
const GURL& edit_url() const { return edit_url_; }
@@ -123,7 +111,7 @@ class GDataEntry {
// Returns virtual file path representing this file system entry. This path
// corresponds to file path expected by public methods of GDataFileSyste
// class.
- FilePath GetFilePath() const;
+ FilePath GetFilePath();
// Sets |file_name_| based on the value of |title_| without name
// de-duplication (see AddEntry() for details on de-duplication).
@@ -233,7 +221,6 @@ class GDataFile : public GDataEntry {
const std::string& etag() const { return etag_; }
const std::string& id() const { return id_; }
const std::string& file_md5() const { return file_md5_; }
- void set_file_md5(const std::string& file_md5) { file_md5_ = file_md5; }
const std::string& document_extension() const { return document_extension_; }
bool is_hosted_document() const { return is_hosted_document_; }
@@ -411,6 +398,7 @@ class GDataRootDirectory : public GDataDirectory {
void set_serialized_size(size_t size) { serialized_size_ = size; }
// GDataEntry implementation.
+
virtual GDataRootDirectory* AsGDataRootDirectory() OVERRIDE;
// Add the entry to resource map.
diff --git a/chrome/browser/chromeos/gdata/gdata_leveldb.cc b/chrome/browser/chromeos/gdata/gdata_leveldb.cc
deleted file mode 100644
index 1966627..0000000
--- a/chrome/browser/chromeos/gdata/gdata_leveldb.cc
+++ /dev/null
@@ -1,204 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/chromeos/gdata/gdata_leveldb.h"
-
-#include <string>
-
-#include "base/logging.h"
-#include "chrome/browser/chromeos/gdata/gdata_files.h"
-#include "leveldb/write_batch.h"
-
-namespace gdata {
-namespace {
-
-const char kResourceIdPrefix[] = "id:";
-const char kPathPrefix[] = "path:";
-
-// Append prefix id: to |resource_id|.
-std::string ResourceIdToKey(const std::string& resource_id) {
- return std::string(kResourceIdPrefix) + resource_id;
-}
-
-// Append prefix path: to |path|.
-std::string PathToKey(const FilePath& path) {
- return std::string(kPathPrefix) + path.value();
-}
-
-GDataDB::Status GetStatus(const leveldb::Status& db_status) {
- if (db_status.ok())
- return GDataDB::DB_OK;
-
- if (db_status.IsNotFound())
- return GDataDB::DB_KEY_NOT_FOUND;
-
- if (db_status.IsCorruption())
- return GDataDB::DB_CORRUPTION;
-
- if (db_status.IsIOError())
- return GDataDB::DB_IO_ERROR;
-
- NOTREACHED();
- return GDataDB::DB_INTERNAL_ERROR;
-}
-
-} // namespace
-
-GDataLevelDB::GDataLevelDB() {
-}
-
-GDataLevelDB::~GDataLevelDB() {
-}
-
-void GDataLevelDB::Init(const FilePath& db_path) {
- leveldb::DB* level_db = NULL;
- leveldb::Options options;
- options.create_if_missing = true;
- leveldb::Status db_status = leveldb::DB::Open(options,
- db_path.Append("level_db").value(), &level_db);
- DCHECK(level_db);
- // TODO(achuith): If db cannot be opened, we should try to recover it.
- // If that fails, we should just delete it and create a new file.
- DCHECK(db_status.ok());
- level_db_.reset(level_db);
-}
-
-GDataDB::Status GDataLevelDB::Put(const GDataEntry& entry) {
- // Write the serialized proto.
- std::string serialized_proto;
- entry.SerializeToString(&serialized_proto);
-
- leveldb::WriteBatch batch;
- const std::string resource_id_key =
- ResourceIdToKey(entry.resource_id());
- const std::string path_key = PathToKey(entry.GetFilePath());
- batch.Put(leveldb::Slice(resource_id_key), leveldb::Slice(serialized_proto));
- // Note we store the resource_id without prefix when it's the value.
- batch.Put(leveldb::Slice(path_key), leveldb::Slice(entry.resource_id()));
- leveldb::Status db_status = level_db_->Write(
- leveldb::WriteOptions(),
- &batch);
-
- DVLOG(1) << "GDataLevelDB::Put resource_id key = " << resource_id_key
- << ", path key = " << path_key;
- return GetStatus(db_status);
-}
-
-GDataDB::Status GDataLevelDB::DeleteByResourceId(
- const std::string& resource_id) {
- scoped_ptr<GDataEntry> entry;
- Status status = GetByResourceId(resource_id, &entry);
- if (status == DB_KEY_NOT_FOUND)
- return DB_OK;
- else if (status != DB_OK)
- return status;
-
- leveldb::WriteBatch batch;
- const std::string resource_id_key = ResourceIdToKey(resource_id);
- const std::string path_key = PathToKey(entry->GetFilePath());
- batch.Delete(leveldb::Slice(resource_id_key));
- batch.Delete(leveldb::Slice(path_key));
-
- leveldb::Status db_status = level_db_->Write(leveldb::WriteOptions(),
- &batch);
- return GetStatus(db_status);
-}
-
-GDataDB::Status GDataLevelDB::DeleteByPath(
- const FilePath& path) {
- std::string resource_id;
- const Status status = ResourceIdForPath(path, &resource_id);
- if (status != DB_OK)
- return status;
- return DeleteByResourceId(resource_id);
-}
-
-GDataDB::Status GDataLevelDB::GetByResourceId(const std::string& resource_id,
- scoped_ptr<GDataEntry>* entry) {
- entry->reset();
- std::string serialized_proto;
- const std::string resource_id_key = ResourceIdToKey(resource_id);
- const leveldb::Status db_status = level_db_->Get(leveldb::ReadOptions(),
- leveldb::Slice(resource_id_key), &serialized_proto);
-
- if (db_status.IsNotFound())
- return DB_KEY_NOT_FOUND;
-
- if (db_status.ok()) {
- DCHECK(!serialized_proto.empty());
- *entry = GDataEntry::FromProtoString(serialized_proto);
- DCHECK(entry->get());
- return DB_OK;
- }
- return GetStatus(db_status);
-}
-
-GDataDB::Status GDataLevelDB::GetByPath(const FilePath& path,
- scoped_ptr<GDataEntry>* entry) {
- entry->reset();
- std::string resource_id;
- const Status status = ResourceIdForPath(path, &resource_id);
- if (status != DB_OK)
- return status;
- return GetByResourceId(resource_id, entry);
-}
-
-GDataDB::Status GDataLevelDB::ResourceIdForPath(const FilePath& path,
- std::string* resource_id) {
- const std::string path_key = PathToKey(path);
- const leveldb::Status db_status = level_db_->Get(
- leveldb::ReadOptions(), path_key, resource_id);
-
- return GetStatus(db_status);
-}
-
-scoped_ptr<GDataDBIter> GDataLevelDB::CreateIterator(const FilePath& path) {
- return scoped_ptr<GDataDBIter>(new GDataLevelDBIter(
- scoped_ptr<leveldb::Iterator>(
- level_db_->NewIterator(leveldb::ReadOptions())),
- this,
- path));
-}
-
-GDataLevelDBIter::GDataLevelDBIter(scoped_ptr<leveldb::Iterator> level_db_iter,
- GDataDB* db,
- const FilePath& path)
- : level_db_iter_(level_db_iter.Pass()),
- db_(db),
- path_(path) {
- const std::string path_key = PathToKey(path);
- level_db_iter_->Seek(leveldb::Slice(path_key));
-}
-
-GDataLevelDBIter::~GDataLevelDBIter() {
-}
-
-bool GDataLevelDBIter::GetNext(std::string* path,
- scoped_ptr<GDataEntry>* entry) {
- DCHECK(path);
- DCHECK(entry);
- path->clear();
- entry->reset();
-
- if (!level_db_iter_->Valid())
- return false;
-
- // Only consider keys under |path|.
- const std::string path_key = PathToKey(path_);
- leveldb::Slice key_slice(level_db_iter_->key());
- if (!key_slice.starts_with(path_key))
- return false;
-
- GDataDB::Status status =
- db_->GetByResourceId(level_db_iter_->value().ToString(), entry);
- DCHECK_EQ(GDataDB::DB_OK, status);
-
- key_slice.remove_prefix(sizeof(kPathPrefix) - 1);
- path->assign(key_slice.ToString());
-
- level_db_iter_->Next();
- return true;
-}
-
-} // namespace gdata
diff --git a/chrome/browser/chromeos/gdata/gdata_leveldb.h b/chrome/browser/chromeos/gdata/gdata_leveldb.h
deleted file mode 100644
index e2385cc..0000000
--- a/chrome/browser/chromeos/gdata/gdata_leveldb.h
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_CHROMEOS_GDATA_GDATA_LEVELDB_H_
-#define CHROME_BROWSER_CHROMEOS_GDATA_GDATA_LEVELDB_H_
-#pragma once
-
-#include <leveldb/db.h>
-#include <string>
-
-#include "base/file_path.h"
-#include "chrome/browser/chromeos/gdata/gdata_db.h"
-
-namespace gdata {
-
-class GDataLevelDB : public GDataDB {
- public:
- GDataLevelDB();
-
- void Init(const FilePath& db_path);
-
- private:
- virtual ~GDataLevelDB();
-
- // GDataDB implementation.
- virtual Status Put(const GDataEntry& file) OVERRIDE;
- virtual Status DeleteByResourceId(const std::string& resource_id) OVERRIDE;
- virtual Status DeleteByPath(const FilePath& path) OVERRIDE;
- virtual Status GetByResourceId(const std::string& resource_id,
- scoped_ptr<GDataEntry>* file) OVERRIDE;
- virtual Status GetByPath(const FilePath& path,
- scoped_ptr<GDataEntry>* file) OVERRIDE;
- virtual scoped_ptr<GDataDBIter> CreateIterator(const FilePath& path) OVERRIDE;
-
- // Returns |resource_id| for |path| by looking up path_db_.
- Status ResourceIdForPath(const FilePath& path, std::string* resource_id);
-
- scoped_ptr<leveldb::DB> level_db_;
-};
-
-class GDataLevelDBIter : public GDataDBIter {
- public:
- GDataLevelDBIter(scoped_ptr<leveldb::Iterator> level_db_iter,
- GDataDB* db, const FilePath& path);
- private:
- virtual ~GDataLevelDBIter();
-
- // GDataDBIter implementation.
- virtual bool GetNext(std::string* path,
- scoped_ptr<GDataEntry>* entry) OVERRIDE;
-
- scoped_ptr<leveldb::Iterator> level_db_iter_;
- GDataDB* db_;
- const FilePath path_;
-};
-
-} // namespace gdata
-
-#endif // CHROME_BROWSER_CHROMEOS_GDATA_GDATA_LEVELDB_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 3e3d25d..76845ad 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -509,9 +509,6 @@
'browser/chromeos/external_protocol_dialog.h',
'browser/chromeos/gdata/gdata_auth_service.cc',
'browser/chromeos/gdata/gdata_auth_service.h',
- 'browser/chromeos/gdata/gdata_db.h',
- 'browser/chromeos/gdata/gdata_db_factory.cc',
- 'browser/chromeos/gdata/gdata_db_factory.h',
'browser/chromeos/gdata/gdata_documents_service.cc',
'browser/chromeos/gdata/gdata_documents_service.h',
'browser/chromeos/gdata/gdata_download_observer.cc',
@@ -523,8 +520,6 @@
'browser/chromeos/gdata/gdata_file_system_proxy.h',
'browser/chromeos/gdata/gdata_files.cc',
'browser/chromeos/gdata/gdata_files.h',
- 'browser/chromeos/gdata/gdata_leveldb.cc',
- 'browser/chromeos/gdata/gdata_leveldb.h',
'browser/chromeos/gdata/gdata_operation_registry.cc',
'browser/chromeos/gdata/gdata_operation_registry.h',
'browser/chromeos/gdata/gdata_operations.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 15cff58..016a6bf 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1203,7 +1203,6 @@
'browser/chromeos/dbus/proxy_resolution_service_provider_unittest.cc',
'browser/chromeos/extensions/file_browser_notifications_unittest.cc',
'browser/chromeos/external_metrics_unittest.cc',
- 'browser/chromeos/gdata/gdata_db_unittest.cc',
'browser/chromeos/gdata/gdata_file_system_unittest.cc',
'browser/chromeos/gdata/gdata_files_unittest.cc',
'browser/chromeos/gdata/gdata_operation_registry_unittest.cc',