Chromium Code Reviews| Index: content/browser/indexed_db/indexed_db_backing_store.cc | 
| diff --git a/content/browser/indexed_db/indexed_db_backing_store.cc b/content/browser/indexed_db/indexed_db_backing_store.cc | 
| index 0da2abd5b8aff66b948e8cbf036f755d4f13c730..d4a5334bfec00e9d1cdced5d87600872c6a46527 100644 | 
| --- a/content/browser/indexed_db/indexed_db_backing_store.cc | 
| +++ b/content/browser/indexed_db/indexed_db_backing_store.cc | 
| @@ -4,8 +4,6 @@ | 
| #include "content/browser/indexed_db/indexed_db_backing_store.h" | 
| -#include <string> | 
| - | 
| #include "base/file_util.h" | 
| #include "base/logging.h" | 
| #include "base/metrics/histogram.h" | 
| @@ -17,7 +15,6 @@ | 
| #include "content/browser/indexed_db/leveldb/leveldb_comparator.h" | 
| #include "content/browser/indexed_db/leveldb/leveldb_database.h" | 
| #include "content/browser/indexed_db/leveldb/leveldb_iterator.h" | 
| -#include "content/browser/indexed_db/leveldb/leveldb_slice.h" | 
| #include "content/browser/indexed_db/leveldb/leveldb_transaction.h" | 
| #include "content/common/indexed_db/indexed_db_key.h" | 
| #include "content/common/indexed_db/indexed_db_key_path.h" | 
| @@ -88,16 +85,16 @@ static void RecordInternalError(const char* type, | 
| #define INTERNAL_WRITE_ERROR(location) REPORT_ERROR("Write", location) | 
| static void PutBool(LevelDBTransaction* transaction, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| bool value) { | 
| - std::vector<char> buffer; | 
| + std::string buffer; | 
| EncodeBool(value, &buffer); | 
| transaction->Put(key, &buffer); | 
| } | 
| template <typename DBOrTransaction> | 
| static bool GetInt(DBOrTransaction* db, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| int64* found_int, | 
| bool* found) { | 
| std::string result; | 
| @@ -111,17 +108,17 @@ static bool GetInt(DBOrTransaction* db, | 
| } | 
| static void PutInt(LevelDBTransaction* transaction, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| int64 value) { | 
| DCHECK_GE(value, 0); | 
| - std::vector<char> buffer; | 
| + std::string buffer; | 
| EncodeInt(value, &buffer); | 
| transaction->Put(key, &buffer); | 
| } | 
| template <typename DBOrTransaction> | 
| WARN_UNUSED_RESULT static bool GetVarInt(DBOrTransaction* db, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| int64* found_int, | 
| bool* found) { | 
| std::string result; | 
| @@ -135,16 +132,16 @@ WARN_UNUSED_RESULT static bool GetVarInt(DBOrTransaction* db, | 
| } | 
| static void PutVarInt(LevelDBTransaction* transaction, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| int64 value) { | 
| - std::vector<char> buffer; | 
| + std::string buffer; | 
| EncodeVarInt(value, &buffer); | 
| transaction->Put(key, &buffer); | 
| } | 
| template <typename DBOrTransaction> | 
| WARN_UNUSED_RESULT static bool GetString(DBOrTransaction* db, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| string16* found_string, | 
| bool* found) { | 
| std::string result; | 
| @@ -159,32 +156,32 @@ WARN_UNUSED_RESULT static bool GetString(DBOrTransaction* db, | 
| } | 
| static void PutString(LevelDBTransaction* transaction, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| const string16& value) { | 
| - std::vector<char> buffer; | 
| + std::string buffer; | 
| EncodeString(value, &buffer); | 
| transaction->Put(key, &buffer); | 
| } | 
| static void PutIDBKeyPath(LevelDBTransaction* transaction, | 
| - const LevelDBSlice& key, | 
| + const StringPiece& key, | 
| const IndexedDBKeyPath& value) { | 
| - std::vector<char> buffer; | 
| + std::string buffer; | 
| EncodeIDBKeyPath(value, &buffer); | 
| transaction->Put(key, &buffer); | 
| } | 
| -static int CompareKeys(const LevelDBSlice& a, const LevelDBSlice& b) { | 
| +static int CompareKeys(const StringPiece& a, const StringPiece& b) { | 
| return Compare(a, b, false /*index_keys*/); | 
| } | 
| -static int CompareIndexKeys(const LevelDBSlice& a, const LevelDBSlice& b) { | 
| +static int CompareIndexKeys(const StringPiece& a, const StringPiece& b) { | 
| return Compare(a, b, true /*index_keys*/); | 
| } | 
| class Comparator : public LevelDBComparator { | 
| public: | 
| - virtual int Compare(const LevelDBSlice& a, const LevelDBSlice& b) const | 
| + virtual int Compare(const StringPiece& a, const StringPiece& b) const | 
| OVERRIDE { | 
| return content::Compare(a, b, false /*index_keys*/); | 
| } | 
| @@ -198,8 +195,7 @@ static const int64 kLatestKnownSchemaVersion = 2; | 
| WARN_UNUSED_RESULT static bool IsSchemaKnown(LevelDBDatabase* db, bool* known) { | 
| int64 db_schema_version = 0; | 
| bool found = false; | 
| - bool ok = GetInt( | 
| - db, LevelDBSlice(SchemaVersionKey::Encode()), &db_schema_version, &found); | 
| + bool ok = GetInt(db, SchemaVersionKey::Encode(), &db_schema_version, &found); | 
| if (!ok) | 
| return false; | 
| if (!found) { | 
| @@ -213,8 +209,7 @@ WARN_UNUSED_RESULT static bool IsSchemaKnown(LevelDBDatabase* db, bool* known) { | 
| const uint32 latest_known_data_version = kWireVersion; | 
| int64 db_data_version = 0; | 
| - ok = GetInt( | 
| - db, LevelDBSlice(DataVersionKey::Encode()), &db_data_version, &found); | 
| + ok = GetInt(db, DataVersionKey::Encode(), &db_data_version, &found); | 
| if (!ok) | 
| return false; | 
| if (!found) { | 
| @@ -235,8 +230,8 @@ WARN_UNUSED_RESULT static bool SetUpMetadata( | 
| LevelDBDatabase* db, | 
| const std::string& origin_identifier) { | 
| const uint32 latest_known_data_version = kWireVersion; | 
| - const std::vector<char> schema_version_key = SchemaVersionKey::Encode(); | 
| - const std::vector<char> data_version_key = DataVersionKey::Encode(); | 
| + const std::string schema_version_key = SchemaVersionKey::Encode(); | 
| + const std::string data_version_key = DataVersionKey::Encode(); | 
| scoped_refptr<LevelDBTransaction> transaction = | 
| LevelDBTransaction::Create(db); | 
| @@ -244,10 +239,8 @@ WARN_UNUSED_RESULT static bool SetUpMetadata( | 
| int64 db_schema_version = 0; | 
| int64 db_data_version = 0; | 
| bool found = false; | 
| - bool ok = GetInt(transaction.get(), | 
| - LevelDBSlice(schema_version_key), | 
| - &db_schema_version, | 
| - &found); | 
| + bool ok = | 
| + GetInt(transaction.get(), schema_version_key, &db_schema_version, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(SET_UP_METADATA); | 
| return false; | 
| @@ -255,25 +248,22 @@ WARN_UNUSED_RESULT static bool SetUpMetadata( | 
| if (!found) { | 
| // Initialize new backing store. | 
| db_schema_version = kLatestKnownSchemaVersion; | 
| - PutInt( | 
| - transaction.get(), LevelDBSlice(schema_version_key), db_schema_version); | 
| + PutInt(transaction.get(), schema_version_key, db_schema_version); | 
| db_data_version = latest_known_data_version; | 
| - PutInt(transaction.get(), LevelDBSlice(data_version_key), db_data_version); | 
| + PutInt(transaction.get(), data_version_key, db_data_version); | 
| } else { | 
| // Upgrade old backing store. | 
| DCHECK_LE(db_schema_version, kLatestKnownSchemaVersion); | 
| if (db_schema_version < 1) { | 
| db_schema_version = 1; | 
| - PutInt(transaction.get(), | 
| - LevelDBSlice(schema_version_key), | 
| - db_schema_version); | 
| - const std::vector<char> start_key = | 
| + PutInt(transaction.get(), schema_version_key, db_schema_version); | 
| + const std::string start_key = | 
| DatabaseNameKey::EncodeMinKeyForOrigin(origin_identifier); | 
| - const std::vector<char> stop_key = | 
| + const std::string stop_key = | 
| DatabaseNameKey::EncodeStopKeyForOrigin(origin_identifier); | 
| scoped_ptr<LevelDBIterator> it = db->CreateIterator(); | 
| - for (it->Seek(LevelDBSlice(start_key)); | 
| - it->IsValid() && CompareKeys(it->Key(), LevelDBSlice(stop_key)) < 0; | 
| + for (it->Seek(start_key); | 
| + it->IsValid() && CompareKeys(it->Key(), stop_key) < 0; | 
| it->Next()) { | 
| int64 database_id = 0; | 
| found = false; | 
| @@ -286,30 +276,24 @@ WARN_UNUSED_RESULT static bool SetUpMetadata( | 
| INTERNAL_CONSISTENCY_ERROR(SET_UP_METADATA); | 
| return false; | 
| } | 
| - std::vector<char> int_version_key = DatabaseMetaDataKey::Encode( | 
| + std::string int_version_key = DatabaseMetaDataKey::Encode( | 
| database_id, DatabaseMetaDataKey::USER_INT_VERSION); | 
| PutVarInt(transaction.get(), | 
| - LevelDBSlice(int_version_key), | 
| + int_version_key, | 
| IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION); | 
| } | 
| } | 
| if (db_schema_version < 2) { | 
| db_schema_version = 2; | 
| - PutInt(transaction.get(), | 
| - LevelDBSlice(schema_version_key), | 
| - db_schema_version); | 
| + PutInt(transaction.get(), schema_version_key, db_schema_version); | 
| db_data_version = kWireVersion; | 
| - PutInt( | 
| - transaction.get(), LevelDBSlice(data_version_key), db_data_version); | 
| + PutInt(transaction.get(), data_version_key, db_data_version); | 
| } | 
| } | 
| // All new values will be written using this serialization version. | 
| found = false; | 
| - ok = GetInt(transaction.get(), | 
| - LevelDBSlice(data_version_key), | 
| - &db_data_version, | 
| - &found); | 
| + ok = GetInt(transaction.get(), data_version_key, &db_data_version, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(SET_UP_METADATA); | 
| return false; | 
| @@ -320,7 +304,7 @@ WARN_UNUSED_RESULT static bool SetUpMetadata( | 
| } | 
| if (db_data_version < latest_known_data_version) { | 
| db_data_version = latest_known_data_version; | 
| - PutInt(transaction.get(), LevelDBSlice(data_version_key), db_data_version); | 
| + PutInt(transaction.get(), data_version_key, db_data_version); | 
| } | 
| DCHECK_EQ(db_schema_version, kLatestKnownSchemaVersion); | 
| @@ -337,7 +321,7 @@ template <typename DBOrTransaction> | 
| WARN_UNUSED_RESULT static bool GetMaxObjectStoreId(DBOrTransaction* db, | 
| int64 database_id, | 
| int64* max_object_store_id) { | 
| - const std::vector<char> max_object_store_id_key = DatabaseMetaDataKey::Encode( | 
| + const std::string max_object_store_id_key = DatabaseMetaDataKey::Encode( | 
| database_id, DatabaseMetaDataKey::MAX_OBJECT_STORE_ID); | 
| bool ok = | 
| GetMaxObjectStoreId(db, max_object_store_id_key, max_object_store_id); | 
| @@ -347,12 +331,11 @@ WARN_UNUSED_RESULT static bool GetMaxObjectStoreId(DBOrTransaction* db, | 
| template <typename DBOrTransaction> | 
| WARN_UNUSED_RESULT static bool GetMaxObjectStoreId( | 
| DBOrTransaction* db, | 
| - const std::vector<char>& max_object_store_id_key, | 
| + const std::string& max_object_store_id_key, | 
| int64* max_object_store_id) { | 
| *max_object_store_id = -1; | 
| bool found = false; | 
| - bool ok = GetInt( | 
| - db, LevelDBSlice(max_object_store_id_key), max_object_store_id, &found); | 
| + bool ok = GetInt(db, max_object_store_id_key, max_object_store_id, &found); | 
| if (!ok) | 
| return false; | 
| if (!found) | 
| @@ -391,7 +374,7 @@ IndexedDBBackingStore::~IndexedDBBackingStore() { | 
| } | 
| IndexedDBBackingStore::RecordIdentifier::RecordIdentifier( | 
| - const std::vector<char>& primary_key, | 
| + const std::string& primary_key, | 
| int64 version) | 
| : primary_key_(primary_key), version_(version) { | 
| DCHECK(!primary_key.empty()); | 
| @@ -468,8 +451,8 @@ scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open( | 
| } | 
| base::FilePath identifier_path = | 
| - base::FilePath().AppendASCII(origin_identifier). | 
| - AddExtension(FILE_PATH_LITERAL(".indexeddb.leveldb")); | 
| + base::FilePath().AppendASCII(origin_identifier) | 
| + .AddExtension(FILE_PATH_LITERAL(".indexeddb.leveldb")); | 
| int limit = file_util::GetMaximumPathComponentLength(path_base); | 
| if (limit == -1) { | 
| @@ -549,12 +532,11 @@ scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Open( | 
| ->Add(INDEXED_DB_LEVEL_DB_BACKING_STORE_OPEN_SUCCESS); | 
| } else if (is_disk_full) { | 
| LOG(ERROR) << "Unable to open backing store - disk is full."; | 
| - base::Histogram::FactoryGet( | 
| - "WebCore.IndexedDB.BackingStore.OpenStatus", | 
| - 1, | 
| - INDEXED_DB_LEVEL_DB_BACKING_STORE_OPEN_MAX, | 
| - INDEXED_DB_LEVEL_DB_BACKING_STORE_OPEN_MAX + 1, | 
| - base::HistogramBase::kUmaTargetedHistogramFlag) | 
| + base::Histogram::FactoryGet("WebCore.IndexedDB.BackingStore.OpenStatus", | 
| + 1, | 
| + INDEXED_DB_LEVEL_DB_BACKING_STORE_OPEN_MAX, | 
| + INDEXED_DB_LEVEL_DB_BACKING_STORE_OPEN_MAX + 1, | 
| + base::HistogramBase::kUmaTargetedHistogramFlag) | 
| ->Add(INDEXED_DB_LEVEL_DB_BACKING_STORE_OPEN_DISK_FULL); | 
| return scoped_refptr<IndexedDBBackingStore>(); | 
| } else { | 
| @@ -658,16 +640,16 @@ scoped_refptr<IndexedDBBackingStore> IndexedDBBackingStore::Create( | 
| std::vector<string16> IndexedDBBackingStore::GetDatabaseNames() { | 
| std::vector<string16> found_names; | 
| - const std::vector<char> start_key = | 
| + const std::string start_key = | 
| DatabaseNameKey::EncodeMinKeyForOrigin(identifier_); | 
| - const std::vector<char> stop_key = | 
| + const std::string stop_key = | 
| DatabaseNameKey::EncodeStopKeyForOrigin(identifier_); | 
| DCHECK(found_names.empty()); | 
| scoped_ptr<LevelDBIterator> it = db_->CreateIterator(); | 
| - for (it->Seek(LevelDBSlice(start_key)); | 
| - it->IsValid() && CompareKeys(it->Key(), LevelDBSlice(stop_key)) < 0; | 
| + for (it->Seek(start_key); | 
| + it->IsValid() && CompareKeys(it->Key(), stop_key) < 0; | 
| it->Next()) { | 
| const char* p = it->Key().begin(); | 
| const char* limit = it->Key().end(); | 
| @@ -685,10 +667,10 @@ bool IndexedDBBackingStore::GetIDBDatabaseMetaData( | 
| const string16& name, | 
| IndexedDBDatabaseMetadata* metadata, | 
| bool* found) { | 
| - const std::vector<char> key = DatabaseNameKey::Encode(identifier_, name); | 
| + const std::string key = DatabaseNameKey::Encode(identifier_, name); | 
| *found = false; | 
| - bool ok = GetInt(db_.get(), LevelDBSlice(key), &metadata->id, found); | 
| + bool ok = GetInt(db_.get(), key, &metadata->id, found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(GET_IDBDATABASE_METADATA); | 
| return false; | 
| @@ -697,8 +679,8 @@ bool IndexedDBBackingStore::GetIDBDatabaseMetaData( | 
| return true; | 
| ok = GetString(db_.get(), | 
| - LevelDBSlice(DatabaseMetaDataKey::Encode( | 
| - metadata->id, DatabaseMetaDataKey::USER_VERSION)), | 
| + DatabaseMetaDataKey::Encode(metadata->id, | 
| + DatabaseMetaDataKey::USER_VERSION), | 
| &metadata->version, | 
| found); | 
| if (!ok) { | 
| @@ -711,8 +693,8 @@ bool IndexedDBBackingStore::GetIDBDatabaseMetaData( | 
| } | 
| ok = GetVarInt(db_.get(), | 
| - LevelDBSlice(DatabaseMetaDataKey::Encode( | 
| - metadata->id, DatabaseMetaDataKey::USER_INT_VERSION)), | 
| + DatabaseMetaDataKey::Encode( | 
| + metadata->id, DatabaseMetaDataKey::USER_INT_VERSION), | 
| &metadata->int_version, | 
| found); | 
| if (!ok) { | 
| @@ -745,10 +727,8 @@ WARN_UNUSED_RESULT static bool GetNewDatabaseId(LevelDBDatabase* db, | 
| *new_id = -1; | 
| int64 max_database_id = -1; | 
| bool found = false; | 
| - bool ok = GetInt(transaction.get(), | 
| - LevelDBSlice(MaxDatabaseIdKey::Encode()), | 
| - &max_database_id, | 
| - &found); | 
| + bool ok = GetInt( | 
| + transaction.get(), MaxDatabaseIdKey::Encode(), &max_database_id, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(GET_NEW_DATABASE_ID); | 
| return false; | 
| @@ -759,8 +739,7 @@ WARN_UNUSED_RESULT static bool GetNewDatabaseId(LevelDBDatabase* db, | 
| DCHECK_GE(max_database_id, 0); | 
| int64 database_id = max_database_id + 1; | 
| - PutInt( | 
| - transaction.get(), LevelDBSlice(MaxDatabaseIdKey::Encode()), database_id); | 
| + PutInt(transaction.get(), MaxDatabaseIdKey::Encode(), database_id); | 
| if (!transaction->Commit()) { | 
| INTERNAL_WRITE_ERROR(GET_NEW_DATABASE_ID); | 
| return false; | 
| @@ -783,16 +762,15 @@ bool IndexedDBBackingStore::CreateIDBDatabaseMetaData(const string16& name, | 
| scoped_refptr<LevelDBTransaction> transaction = | 
| LevelDBTransaction::Create(db_.get()); | 
| - PutInt(transaction.get(), | 
| - LevelDBSlice(DatabaseNameKey::Encode(identifier_, name)), | 
| - *row_id); | 
| - PutString(transaction.get(), | 
| - LevelDBSlice(DatabaseMetaDataKey::Encode( | 
| - *row_id, DatabaseMetaDataKey::USER_VERSION)), | 
| - version); | 
| + PutInt( | 
| + transaction.get(), DatabaseNameKey::Encode(identifier_, name), *row_id); | 
| + PutString( | 
| + transaction.get(), | 
| + DatabaseMetaDataKey::Encode(*row_id, DatabaseMetaDataKey::USER_VERSION), | 
| + version); | 
| PutVarInt(transaction.get(), | 
| - LevelDBSlice(DatabaseMetaDataKey::Encode( | 
| - *row_id, DatabaseMetaDataKey::USER_INT_VERSION)), | 
| + DatabaseMetaDataKey::Encode(*row_id, | 
| + DatabaseMetaDataKey::USER_INT_VERSION), | 
| int_version); | 
| if (!transaction->Commit()) { | 
| INTERNAL_WRITE_ERROR(CREATE_IDBDATABASE_METADATA); | 
| @@ -809,8 +787,8 @@ bool IndexedDBBackingStore::UpdateIDBDatabaseIntVersion( | 
| int_version = IndexedDBDatabaseMetadata::DEFAULT_INT_VERSION; | 
| DCHECK_GE(int_version, 0) << "int_version was " << int_version; | 
| PutVarInt(Transaction::LevelDBTransactionFrom(transaction), | 
| - LevelDBSlice(DatabaseMetaDataKey::Encode( | 
| - row_id, DatabaseMetaDataKey::USER_INT_VERSION)), | 
| + DatabaseMetaDataKey::Encode(row_id, | 
| + DatabaseMetaDataKey::USER_INT_VERSION), | 
| int_version); | 
| return true; | 
| } | 
| @@ -819,19 +797,18 @@ bool IndexedDBBackingStore::UpdateIDBDatabaseMetaData( | 
| IndexedDBBackingStore::Transaction* transaction, | 
| int64 row_id, | 
| const string16& version) { | 
| - PutString(Transaction::LevelDBTransactionFrom(transaction), | 
| - LevelDBSlice(DatabaseMetaDataKey::Encode( | 
| - row_id, DatabaseMetaDataKey::USER_VERSION)), | 
| - version); | 
| + PutString( | 
| + Transaction::LevelDBTransactionFrom(transaction), | 
| + DatabaseMetaDataKey::Encode(row_id, DatabaseMetaDataKey::USER_VERSION), | 
| + version); | 
| return true; | 
| } | 
| static void DeleteRange(LevelDBTransaction* transaction, | 
| - const std::vector<char>& begin, | 
| - const std::vector<char>& end) { | 
| + const std::string& begin, | 
| + const std::string& end) { | 
| scoped_ptr<LevelDBIterator> it = transaction->CreateIterator(); | 
| - for (it->Seek(LevelDBSlice(begin)); | 
| - it->IsValid() && CompareKeys(it->Key(), LevelDBSlice(end)) < 0; | 
| + for (it->Seek(begin); it->IsValid() && CompareKeys(it->Key(), end) < 0; | 
| it->Next()) | 
| transaction->Remove(it->Key()); | 
| } | 
| @@ -849,18 +826,18 @@ bool IndexedDBBackingStore::DeleteDatabase(const string16& name) { | 
| if (!success) | 
| return true; | 
| - const std::vector<char> start_key = DatabaseMetaDataKey::Encode( | 
| + const std::string start_key = DatabaseMetaDataKey::Encode( | 
| metadata.id, DatabaseMetaDataKey::ORIGIN_NAME); | 
| - const std::vector<char> stop_key = DatabaseMetaDataKey::Encode( | 
| + const std::string stop_key = DatabaseMetaDataKey::Encode( | 
| metadata.id + 1, DatabaseMetaDataKey::ORIGIN_NAME); | 
| scoped_ptr<LevelDBIterator> it = db_->CreateIterator(); | 
| - for (it->Seek(LevelDBSlice(start_key)); | 
| - it->IsValid() && CompareKeys(it->Key(), LevelDBSlice(stop_key)) < 0; | 
| + for (it->Seek(start_key); | 
| + it->IsValid() && CompareKeys(it->Key(), stop_key) < 0; | 
| it->Next()) | 
| transaction->Remove(it->Key()); | 
| - const std::vector<char> key = DatabaseNameKey::Encode(identifier_, name); | 
| - transaction->Remove(LevelDBSlice(key)); | 
| + const std::string key = DatabaseNameKey::Encode(identifier_, name); | 
| + transaction->Remove(key); | 
| if (!transaction->Commit()) { | 
| INTERNAL_WRITE_ERROR(DELETE_DATABASE); | 
| @@ -870,10 +847,10 @@ bool IndexedDBBackingStore::DeleteDatabase(const string16& name) { | 
| } | 
| static bool CheckObjectStoreAndMetaDataType(const LevelDBIterator* it, | 
| - const std::vector<char>& stop_key, | 
| + const std::string& stop_key, | 
| int64 object_store_id, | 
| int64 meta_data_type) { | 
| - if (!it->IsValid() || CompareKeys(it->Key(), LevelDBSlice(stop_key)) >= 0) | 
| + if (!it->IsValid() || CompareKeys(it->Key(), stop_key) >= 0) | 
| return false; | 
| ObjectStoreMetaDataKey meta_data_key; | 
| @@ -895,16 +872,16 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| IDB_TRACE("IndexedDBBackingStore::GetObjectStores"); | 
| if (!KeyPrefix::IsValidDatabaseId(database_id)) | 
| return false; | 
| - const std::vector<char> start_key = | 
| + const std::string start_key = | 
| ObjectStoreMetaDataKey::Encode(database_id, 1, 0); | 
| - const std::vector<char> stop_key = | 
| + const std::string stop_key = | 
| ObjectStoreMetaDataKey::EncodeMaxKey(database_id); | 
| DCHECK(object_stores->empty()); | 
| scoped_ptr<LevelDBIterator> it = db_->CreateIterator(); | 
| - it->Seek(LevelDBSlice(start_key)); | 
| - while (it->IsValid() && CompareKeys(it->Key(), LevelDBSlice(stop_key)) < 0) { | 
| + it->Seek(start_key); | 
| + while (it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) { | 
| const char* p = it->Key().begin(); | 
| const char* limit = it->Key().end(); | 
| @@ -924,7 +901,7 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| // simplify. | 
| string16 object_store_name; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeString(&slice, &object_store_name) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_OBJECT_STORES); | 
| } | 
| @@ -939,7 +916,7 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| } | 
| IndexedDBKeyPath key_path; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeIDBKeyPath(&slice, &key_path) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_OBJECT_STORES); | 
| } | 
| @@ -955,7 +932,7 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| } | 
| bool auto_increment; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeBool(&slice, &auto_increment) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_OBJECT_STORES); | 
| } | 
| @@ -990,7 +967,7 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| } | 
| int64 max_index_id; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeInt(&slice, &max_index_id) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_OBJECT_STORES); | 
| } | 
| @@ -1002,7 +979,7 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| ObjectStoreMetaDataKey::HAS_KEY_PATH)) { | 
| bool has_key_path; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeBool(&slice, &has_key_path)) | 
| INTERNAL_CONSISTENCY_ERROR(GET_OBJECT_STORES); | 
| } | 
| @@ -1027,7 +1004,7 @@ bool IndexedDBBackingStore::GetObjectStores( | 
| stop_key, | 
| object_store_id, | 
| ObjectStoreMetaDataKey::KEY_GENERATOR_CURRENT_NUMBER)) { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeInt(&slice, &key_generator_current_number) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_OBJECT_STORES); | 
| @@ -1054,7 +1031,7 @@ WARN_UNUSED_RESULT static bool SetMaxObjectStoreId( | 
| LevelDBTransaction* transaction, | 
| int64 database_id, | 
| int64 object_store_id) { | 
| - const std::vector<char> max_object_store_id_key = DatabaseMetaDataKey::Encode( | 
| + const std::string max_object_store_id_key = DatabaseMetaDataKey::Encode( | 
| database_id, DatabaseMetaDataKey::MAX_OBJECT_STORE_ID); | 
| int64 max_object_store_id = -1; | 
| bool ok = GetMaxObjectStoreId( | 
| @@ -1068,7 +1045,7 @@ WARN_UNUSED_RESULT static bool SetMaxObjectStoreId( | 
| INTERNAL_CONSISTENCY_ERROR(SET_MAX_OBJECT_STORE_ID); | 
| return false; | 
| } | 
| - PutInt(transaction, LevelDBSlice(max_object_store_id_key), object_store_id); | 
| + PutInt(transaction, max_object_store_id_key, object_store_id); | 
| return true; | 
| } | 
| @@ -1087,40 +1064,38 @@ bool IndexedDBBackingStore::CreateObjectStore( | 
| if (!SetMaxObjectStoreId(leveldb_transaction, database_id, object_store_id)) | 
| return false; | 
| - const std::vector<char> name_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string name_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::NAME); | 
| - const std::vector<char> key_path_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string key_path_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::KEY_PATH); | 
| - const std::vector<char> auto_increment_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string auto_increment_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::AUTO_INCREMENT); | 
| - const std::vector<char> evictable_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string evictable_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::EVICTABLE); | 
| - const std::vector<char> last_version_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string last_version_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::LAST_VERSION); | 
| - const std::vector<char> max_index_id_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string max_index_id_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::MAX_INDEX_ID); | 
| - const std::vector<char> has_key_path_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string has_key_path_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::HAS_KEY_PATH); | 
| - const std::vector<char> key_generator_current_number_key = | 
| + const std::string key_generator_current_number_key = | 
| ObjectStoreMetaDataKey::Encode( | 
| database_id, | 
| object_store_id, | 
| ObjectStoreMetaDataKey::KEY_GENERATOR_CURRENT_NUMBER); | 
| - const std::vector<char> names_key = | 
| - ObjectStoreNamesKey::Encode(database_id, name); | 
| - | 
| - PutString(leveldb_transaction, LevelDBSlice(name_key), name); | 
| - PutIDBKeyPath(leveldb_transaction, LevelDBSlice(key_path_key), key_path); | 
| - PutInt(leveldb_transaction, LevelDBSlice(auto_increment_key), auto_increment); | 
| - PutInt(leveldb_transaction, LevelDBSlice(evictable_key), false); | 
| - PutInt(leveldb_transaction, LevelDBSlice(last_version_key), 1); | 
| - PutInt(leveldb_transaction, LevelDBSlice(max_index_id_key), kMinimumIndexId); | 
| - PutBool( | 
| - leveldb_transaction, LevelDBSlice(has_key_path_key), !key_path.IsNull()); | 
| + const std::string names_key = ObjectStoreNamesKey::Encode(database_id, name); | 
| + | 
| + PutString(leveldb_transaction, name_key, name); | 
| + PutIDBKeyPath(leveldb_transaction, key_path_key, key_path); | 
| + PutInt(leveldb_transaction, auto_increment_key, auto_increment); | 
| + PutInt(leveldb_transaction, evictable_key, false); | 
| + PutInt(leveldb_transaction, last_version_key, 1); | 
| + PutInt(leveldb_transaction, max_index_id_key, kMinimumIndexId); | 
| + PutBool(leveldb_transaction, has_key_path_key, !key_path.IsNull()); | 
| PutInt(leveldb_transaction, | 
| - LevelDBSlice(key_generator_current_number_key), | 
| + key_generator_current_number_key, | 
| kKeyGeneratorInitialNumber); | 
| - PutInt(leveldb_transaction, LevelDBSlice(names_key), object_store_id); | 
| + PutInt(leveldb_transaction, names_key, object_store_id); | 
| return true; | 
| } | 
| @@ -1138,8 +1113,8 @@ bool IndexedDBBackingStore::DeleteObjectStore( | 
| bool found = false; | 
| bool ok = GetString( | 
| leveldb_transaction, | 
| - LevelDBSlice(ObjectStoreMetaDataKey::Encode( | 
| - database_id, object_store_id, ObjectStoreMetaDataKey::NAME)), | 
| + ObjectStoreMetaDataKey::Encode( | 
| + database_id, object_store_id, ObjectStoreMetaDataKey::NAME), | 
| &object_store_name, | 
| &found); | 
| if (!ok) { | 
| @@ -1156,8 +1131,8 @@ bool IndexedDBBackingStore::DeleteObjectStore( | 
| ObjectStoreMetaDataKey::Encode(database_id, object_store_id, 0), | 
| ObjectStoreMetaDataKey::EncodeMaxKey(database_id, object_store_id)); | 
| - leveldb_transaction->Remove(LevelDBSlice( | 
| - ObjectStoreNamesKey::Encode(database_id, object_store_name))); | 
| + leveldb_transaction->Remove( | 
| + ObjectStoreNamesKey::Encode(database_id, object_store_name)); | 
| DeleteRange(leveldb_transaction, | 
| IndexFreeListKey::Encode(database_id, object_store_id, 0), | 
| @@ -1174,21 +1149,21 @@ bool IndexedDBBackingStore::GetRecord( | 
| int64 database_id, | 
| int64 object_store_id, | 
| const IndexedDBKey& key, | 
| - std::vector<char>* record) { | 
| + std::string* record) { | 
| IDB_TRACE("IndexedDBBackingStore::GetRecord"); | 
| if (!KeyPrefix::ValidIds(database_id, object_store_id)) | 
| return false; | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> leveldb_key = | 
| + const std::string leveldb_key = | 
| ObjectStoreDataKey::Encode(database_id, object_store_id, key); | 
| std::string data; | 
| record->clear(); | 
| bool found = false; | 
| - bool ok = leveldb_transaction->Get(LevelDBSlice(leveldb_key), &data, &found); | 
| + bool ok = leveldb_transaction->Get(leveldb_key, &data, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(GET_RECORD); | 
| return false; | 
| @@ -1216,14 +1191,13 @@ WARN_UNUSED_RESULT static bool GetNewVersionNumber( | 
| int64 database_id, | 
| int64 object_store_id, | 
| int64* new_version_number) { | 
| - const std::vector<char> last_version_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string last_version_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::LAST_VERSION); | 
| *new_version_number = -1; | 
| int64 last_version = -1; | 
| bool found = false; | 
| - bool ok = GetInt( | 
| - transaction, LevelDBSlice(last_version_key), &last_version, &found); | 
| + bool ok = GetInt(transaction, last_version_key, &last_version, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(GET_NEW_VERSION_NUMBER); | 
| return false; | 
| @@ -1234,7 +1208,7 @@ WARN_UNUSED_RESULT static bool GetNewVersionNumber( | 
| DCHECK_GE(last_version, 0); | 
| int64 version = last_version + 1; | 
| - PutInt(transaction, LevelDBSlice(last_version_key), version); | 
| + PutInt(transaction, last_version_key, version); | 
| // TODO(jsbell): Think about how we want to handle the overflow scenario. | 
| DCHECK(version > last_version); | 
| @@ -1248,7 +1222,7 @@ bool IndexedDBBackingStore::PutRecord( | 
| int64 database_id, | 
| int64 object_store_id, | 
| const IndexedDBKey& key, | 
| - const std::vector<char>& value, | 
| + const std::string& value, | 
| RecordIdentifier* record_identifier) { | 
| IDB_TRACE("IndexedDBBackingStore::PutRecord"); | 
| if (!KeyPrefix::ValidIds(database_id, object_store_id)) | 
| @@ -1263,22 +1237,22 @@ bool IndexedDBBackingStore::PutRecord( | 
| if (!ok) | 
| return false; | 
| DCHECK_GE(version, 0); | 
| - const std::vector<char> object_storedata_key = | 
| + const std::string object_storedata_key = | 
| ObjectStoreDataKey::Encode(database_id, object_store_id, key); | 
| - std::vector<char> v; | 
| + std::string v; | 
| EncodeVarInt(version, &v); | 
| v.insert(v.end(), value.begin(), value.end()); | 
| - leveldb_transaction->Put(LevelDBSlice(object_storedata_key), &v); | 
| + leveldb_transaction->Put(object_storedata_key, &v); | 
| - const std::vector<char> exists_entry_key = | 
| + const std::string exists_entry_key = | 
| ExistsEntryKey::Encode(database_id, object_store_id, key); | 
| - std::vector<char> version_encoded; | 
| + std::string version_encoded; | 
| EncodeInt(version, &version_encoded); | 
| - leveldb_transaction->Put(LevelDBSlice(exists_entry_key), &version_encoded); | 
| + leveldb_transaction->Put(exists_entry_key, &version_encoded); | 
| - std::vector<char> key_encoded; | 
| + std::string key_encoded; | 
| EncodeIDBKey(key, &key_encoded); | 
| record_identifier->Reset(key_encoded, version); | 
| return true; | 
| @@ -1293,9 +1267,9 @@ bool IndexedDBBackingStore::ClearObjectStore( | 
| return false; | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> start_key = | 
| + const std::string start_key = | 
| KeyPrefix(database_id, object_store_id).Encode(); | 
| - const std::vector<char> stop_key = | 
| + const std::string stop_key = | 
| KeyPrefix(database_id, object_store_id + 1).Encode(); | 
| DeleteRange(leveldb_transaction, start_key, stop_key); | 
| @@ -1313,13 +1287,13 @@ bool IndexedDBBackingStore::DeleteRecord( | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> object_store_data_key = ObjectStoreDataKey::Encode( | 
| + const std::string object_store_data_key = ObjectStoreDataKey::Encode( | 
| database_id, object_store_id, record_identifier.primary_key()); | 
| - leveldb_transaction->Remove(LevelDBSlice(object_store_data_key)); | 
| + leveldb_transaction->Remove(object_store_data_key); | 
| - const std::vector<char> exists_entry_key = ExistsEntryKey::Encode( | 
| + const std::string exists_entry_key = ExistsEntryKey::Encode( | 
| database_id, object_store_id, record_identifier.primary_key()); | 
| - leveldb_transaction->Remove(LevelDBSlice(exists_entry_key)); | 
| + leveldb_transaction->Remove(exists_entry_key); | 
| return true; | 
| } | 
| @@ -1333,7 +1307,7 @@ bool IndexedDBBackingStore::GetKeyGeneratorCurrentNumber( | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> key_generator_current_number_key = | 
| + const std::string key_generator_current_number_key = | 
| ObjectStoreMetaDataKey::Encode( | 
| database_id, | 
| object_store_id, | 
| @@ -1343,8 +1317,8 @@ bool IndexedDBBackingStore::GetKeyGeneratorCurrentNumber( | 
| std::string data; | 
| bool found = false; | 
| - bool ok = leveldb_transaction->Get( | 
| - LevelDBSlice(key_generator_current_number_key), &data, &found); | 
| + bool ok = | 
| + leveldb_transaction->Get(key_generator_current_number_key, &data, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(GET_KEY_GENERATOR_CURRENT_NUMBER); | 
| return false; | 
| @@ -1363,16 +1337,16 @@ bool IndexedDBBackingStore::GetKeyGeneratorCurrentNumber( | 
| // data. This violates the spec as the data may be cleared but the | 
| // key generator state must be preserved. | 
| // TODO(jsbell): Fix this for all stores on database open? | 
| - const std::vector<char> start_key = | 
| + const std::string start_key = | 
| ObjectStoreDataKey::Encode(database_id, object_store_id, MinIDBKey()); | 
| - const std::vector<char> stop_key = | 
| + const std::string stop_key = | 
| ObjectStoreDataKey::Encode(database_id, object_store_id, MaxIDBKey()); | 
| scoped_ptr<LevelDBIterator> it = leveldb_transaction->CreateIterator(); | 
| int64 max_numeric_key = 0; | 
| - for (it->Seek(LevelDBSlice(start_key)); | 
| - it->IsValid() && CompareKeys(it->Key(), LevelDBSlice(stop_key)) < 0; | 
| + for (it->Seek(start_key); | 
| + it->IsValid() && CompareKeys(it->Key(), stop_key) < 0; | 
| it->Next()) { | 
| const char* p = it->Key().begin(); | 
| const char* limit = it->Key().end(); | 
| @@ -1414,14 +1388,12 @@ bool IndexedDBBackingStore::MaybeUpdateKeyGeneratorCurrentNumber( | 
| return true; | 
| } | 
| - const std::vector<char> key_generator_current_number_key = | 
| + const std::string key_generator_current_number_key = | 
| ObjectStoreMetaDataKey::Encode( | 
| database_id, | 
| object_store_id, | 
| ObjectStoreMetaDataKey::KEY_GENERATOR_CURRENT_NUMBER); | 
| - PutInt(leveldb_transaction, | 
| - LevelDBSlice(key_generator_current_number_key), | 
| - new_number); | 
| + PutInt(leveldb_transaction, key_generator_current_number_key, new_number); | 
| return true; | 
| } | 
| @@ -1438,11 +1410,11 @@ bool IndexedDBBackingStore::KeyExistsInObjectStore( | 
| *found = false; | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> leveldb_key = | 
| + const std::string leveldb_key = | 
| ObjectStoreDataKey::Encode(database_id, object_store_id, key); | 
| std::string data; | 
| - bool ok = leveldb_transaction->Get(LevelDBSlice(leveldb_key), &data, found); | 
| + bool ok = leveldb_transaction->Get(leveldb_key, &data, found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(KEY_EXISTS_IN_OBJECT_STORE); | 
| return false; | 
| @@ -1459,17 +1431,17 @@ bool IndexedDBBackingStore::KeyExistsInObjectStore( | 
| if (!DecodeVarInt(&slice, &version)) | 
| return false; | 
| - std::vector<char> encoded_key; | 
| + std::string encoded_key; | 
| EncodeIDBKey(key, &encoded_key); | 
| found_record_identifier->Reset(encoded_key, version); | 
| return true; | 
| } | 
| static bool CheckIndexAndMetaDataKey(const LevelDBIterator* it, | 
| - const std::vector<char>& stop_key, | 
| + const std::string& stop_key, | 
| int64 index_id, | 
| unsigned char meta_data_type) { | 
| - if (!it->IsValid() || CompareKeys(it->Key(), LevelDBSlice(stop_key)) >= 0) | 
| + if (!it->IsValid() || CompareKeys(it->Key(), stop_key) >= 0) | 
| return false; | 
| IndexMetaDataKey meta_data_key; | 
| @@ -1492,17 +1464,16 @@ bool IndexedDBBackingStore::GetIndexes( | 
| IDB_TRACE("IndexedDBBackingStore::GetIndexes"); | 
| if (!KeyPrefix::ValidIds(database_id, object_store_id)) | 
| return false; | 
| - const std::vector<char> start_key = | 
| + const std::string start_key = | 
| IndexMetaDataKey::Encode(database_id, object_store_id, 0, 0); | 
| - const std::vector<char> stop_key = | 
| + const std::string stop_key = | 
| IndexMetaDataKey::Encode(database_id, object_store_id + 1, 0, 0); | 
| DCHECK(indexes->empty()); | 
| scoped_ptr<LevelDBIterator> it = db_->CreateIterator(); | 
| - it->Seek(LevelDBSlice(start_key)); | 
| - while (it->IsValid() && | 
| - CompareKeys(LevelDBSlice(it->Key()), LevelDBSlice(stop_key)) < 0) { | 
| + it->Seek(start_key); | 
| + while (it->IsValid() && CompareKeys(it->Key(), stop_key) < 0) { | 
| const char* p = it->Key().begin(); | 
| const char* limit = it->Key().end(); | 
| @@ -1522,7 +1493,7 @@ bool IndexedDBBackingStore::GetIndexes( | 
| int64 index_id = meta_data_key.IndexId(); | 
| string16 index_name; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeString(&slice, &index_name) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_INDEXES); | 
| } | 
| @@ -1535,7 +1506,7 @@ bool IndexedDBBackingStore::GetIndexes( | 
| } | 
| bool index_unique; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeBool(&slice, &index_unique) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_INDEXES); | 
| } | 
| @@ -1548,7 +1519,7 @@ bool IndexedDBBackingStore::GetIndexes( | 
| } | 
| IndexedDBKeyPath key_path; | 
| { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeIDBKeyPath(&slice, &key_path) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_INDEXES); | 
| } | 
| @@ -1557,7 +1528,7 @@ bool IndexedDBBackingStore::GetIndexes( | 
| bool index_multi_entry = false; | 
| if (CheckIndexAndMetaDataKey( | 
| it.get(), stop_key, index_id, IndexMetaDataKey::MULTI_ENTRY)) { | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| if (!DecodeBool(&slice, &index_multi_entry) || !slice.empty()) | 
| INTERNAL_CONSISTENCY_ERROR(GET_INDEXES); | 
| @@ -1575,11 +1546,10 @@ WARN_UNUSED_RESULT static bool SetMaxIndexId(LevelDBTransaction* transaction, | 
| int64 object_store_id, | 
| int64 index_id) { | 
| int64 max_index_id = -1; | 
| - const std::vector<char> max_index_id_key = ObjectStoreMetaDataKey::Encode( | 
| + const std::string max_index_id_key = ObjectStoreMetaDataKey::Encode( | 
| database_id, object_store_id, ObjectStoreMetaDataKey::MAX_INDEX_ID); | 
| bool found = false; | 
| - bool ok = GetInt( | 
| - transaction, LevelDBSlice(max_index_id_key), &max_index_id, &found); | 
| + bool ok = GetInt(transaction, max_index_id_key, &max_index_id, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(SET_MAX_INDEX_ID); | 
| return false; | 
| @@ -1592,7 +1562,7 @@ WARN_UNUSED_RESULT static bool SetMaxIndexId(LevelDBTransaction* transaction, | 
| return false; | 
| } | 
| - PutInt(transaction, LevelDBSlice(max_index_id_key), index_id); | 
| + PutInt(transaction, max_index_id_key, index_id); | 
| return true; | 
| } | 
| @@ -1614,19 +1584,19 @@ bool IndexedDBBackingStore::CreateIndex( | 
| leveldb_transaction, database_id, object_store_id, index_id)) | 
| return false; | 
| - const std::vector<char> name_key = IndexMetaDataKey::Encode( | 
| + const std::string name_key = IndexMetaDataKey::Encode( | 
| database_id, object_store_id, index_id, IndexMetaDataKey::NAME); | 
| - const std::vector<char> unique_key = IndexMetaDataKey::Encode( | 
| + const std::string unique_key = IndexMetaDataKey::Encode( | 
| database_id, object_store_id, index_id, IndexMetaDataKey::UNIQUE); | 
| - const std::vector<char> key_path_key = IndexMetaDataKey::Encode( | 
| + const std::string key_path_key = IndexMetaDataKey::Encode( | 
| database_id, object_store_id, index_id, IndexMetaDataKey::KEY_PATH); | 
| - const std::vector<char> multi_entry_key = IndexMetaDataKey::Encode( | 
| + const std::string multi_entry_key = IndexMetaDataKey::Encode( | 
| database_id, object_store_id, index_id, IndexMetaDataKey::MULTI_ENTRY); | 
| - PutString(leveldb_transaction, LevelDBSlice(name_key), name); | 
| - PutBool(leveldb_transaction, LevelDBSlice(unique_key), is_unique); | 
| - PutIDBKeyPath(leveldb_transaction, LevelDBSlice(key_path_key), key_path); | 
| - PutBool(leveldb_transaction, LevelDBSlice(multi_entry_key), is_multi_entry); | 
| + PutString(leveldb_transaction, name_key, name); | 
| + PutBool(leveldb_transaction, unique_key, is_unique); | 
| + PutIDBKeyPath(leveldb_transaction, key_path_key, key_path); | 
| + PutBool(leveldb_transaction, multi_entry_key, is_multi_entry); | 
| return true; | 
| } | 
| @@ -1641,15 +1611,15 @@ bool IndexedDBBackingStore::DeleteIndex( | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> index_meta_data_start = | 
| + const std::string index_meta_data_start = | 
| IndexMetaDataKey::Encode(database_id, object_store_id, index_id, 0); | 
| - const std::vector<char> index_meta_data_end = | 
| + const std::string index_meta_data_end = | 
| IndexMetaDataKey::EncodeMaxKey(database_id, object_store_id, index_id); | 
| DeleteRange(leveldb_transaction, index_meta_data_start, index_meta_data_end); | 
| - const std::vector<char> index_data_start = | 
| + const std::string index_data_start = | 
| IndexDataKey::EncodeMinKey(database_id, object_store_id, index_id); | 
| - const std::vector<char> index_data_end = | 
| + const std::string index_data_end = | 
| IndexDataKey::EncodeMaxKey(database_id, object_store_id, index_id); | 
| DeleteRange(leveldb_transaction, index_data_start, index_data_end); | 
| return true; | 
| @@ -1670,10 +1640,10 @@ bool IndexedDBBackingStore::PutIndexDataForRecord( | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - std::vector<char> encoded_key; | 
| + std::string encoded_key; | 
| EncodeIDBKey(key, &encoded_key); | 
| - const std::vector<char> index_data_key = | 
| + const std::string index_data_key = | 
| IndexDataKey::Encode(database_id, | 
| object_store_id, | 
| index_id, | 
| @@ -1681,20 +1651,20 @@ bool IndexedDBBackingStore::PutIndexDataForRecord( | 
| record_identifier.primary_key(), | 
| 0); | 
| - std::vector<char> data; | 
| + std::string data; | 
| EncodeVarInt(record_identifier.version(), &data); | 
| - const std::vector<char>& primary_key = record_identifier.primary_key(); | 
| + const std::string& primary_key = record_identifier.primary_key(); | 
| data.insert(data.end(), primary_key.begin(), primary_key.end()); | 
| - leveldb_transaction->Put(LevelDBSlice(index_data_key), &data); | 
| + leveldb_transaction->Put(index_data_key, &data); | 
| return true; | 
| } | 
| static bool FindGreatestKeyLessThanOrEqual(LevelDBTransaction* transaction, | 
| - const std::vector<char>& target, | 
| - std::vector<char>* found_key) { | 
| + const std::string& target, | 
| + std::string* found_key) { | 
| scoped_ptr<LevelDBIterator> it = transaction->CreateIterator(); | 
| - it->Seek(LevelDBSlice(target)); | 
| + it->Seek(target); | 
| if (!it->IsValid()) { | 
| it->SeekToLast(); | 
| @@ -1702,7 +1672,7 @@ static bool FindGreatestKeyLessThanOrEqual(LevelDBTransaction* transaction, | 
| return false; | 
| } | 
| - while (CompareIndexKeys(LevelDBSlice(it->Key()), LevelDBSlice(target)) > 0) { | 
| + while (CompareIndexKeys(it->Key(), target) > 0) { | 
| 
 
alecflett
2013/07/09 18:26:30
Not a code review comment but:
This is interestin
 
jsbell
2013/07/09 19:41:46
I filed crbug.com/258538
Note that comparisons do
 
 | 
| it->Prev(); | 
| if (!it->IsValid()) | 
| return false; | 
| @@ -1713,7 +1683,7 @@ static bool FindGreatestKeyLessThanOrEqual(LevelDBTransaction* transaction, | 
| // There can be several index keys that compare equal. We want the last one. | 
| it->Next(); | 
| - } while (it->IsValid() && !CompareIndexKeys(it->Key(), LevelDBSlice(target))); | 
| + } while (it->IsValid() && !CompareIndexKeys(it->Key(), target)); | 
| 
 
alecflett
2013/07/09 18:26:30
ditto here about the pre-decoding on 'target'
 
 | 
| return true; | 
| } | 
| @@ -1722,13 +1692,13 @@ static bool VersionExists(LevelDBTransaction* transaction, | 
| int64 database_id, | 
| int64 object_store_id, | 
| int64 version, | 
| - const std::vector<char>& encoded_primary_key, | 
| + const std::string& encoded_primary_key, | 
| bool* exists) { | 
| - const std::vector<char> key = | 
| + const std::string key = | 
| ExistsEntryKey::Encode(database_id, object_store_id, encoded_primary_key); | 
| std::string data; | 
| - bool ok = transaction->Get(LevelDBSlice(key), &data, exists); | 
| + bool ok = transaction->Get(key, &data, exists); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(VERSION_EXISTS); | 
| return false; | 
| @@ -1750,7 +1720,7 @@ bool IndexedDBBackingStore::FindKeyInIndex( | 
| int64 object_store_id, | 
| int64 index_id, | 
| const IndexedDBKey& key, | 
| - std::vector<char>* found_encoded_primary_key, | 
| + std::string* found_encoded_primary_key, | 
| bool* found) { | 
| IDB_TRACE("IndexedDBBackingStore::FindKeyInIndex"); | 
| DCHECK(KeyPrefix::ValidIds(database_id, object_store_id, index_id)); | 
| @@ -1760,18 +1730,18 @@ bool IndexedDBBackingStore::FindKeyInIndex( | 
| LevelDBTransaction* leveldb_transaction = | 
| IndexedDBBackingStore::Transaction::LevelDBTransactionFrom(transaction); | 
| - const std::vector<char> leveldb_key = | 
| + const std::string leveldb_key = | 
| IndexDataKey::Encode(database_id, object_store_id, index_id, key); | 
| scoped_ptr<LevelDBIterator> it = leveldb_transaction->CreateIterator(); | 
| - it->Seek(LevelDBSlice(leveldb_key)); | 
| + it->Seek(leveldb_key); | 
| for (;;) { | 
| if (!it->IsValid()) | 
| return true; | 
| - if (CompareIndexKeys(it->Key(), LevelDBSlice(leveldb_key)) > 0) | 
| + if (CompareIndexKeys(it->Key(), leveldb_key) > 0) | 
| 
 
alecflett
2013/07/09 18:26:30
oh wow, lots of opportunity for pre-decoding?
 
 | 
| return true; | 
| - StringPiece slice(it->Value().AsStringPiece()); | 
| + StringPiece slice(it->Value()); | 
| int64 version; | 
| if (!DecodeVarInt(&slice, &version)) { | 
| @@ -1813,7 +1783,7 @@ bool IndexedDBBackingStore::GetPrimaryKeyViaIndex( | 
| return false; | 
| bool found = false; | 
| - std::vector<char> found_encoded_primary_key; | 
| + std::string found_encoded_primary_key; | 
| bool ok = FindKeyInIndex(transaction, | 
| database_id, | 
| object_store_id, | 
| @@ -1850,7 +1820,7 @@ bool IndexedDBBackingStore::KeyExistsInIndex( | 
| return false; | 
| *exists = false; | 
| - std::vector<char> found_encoded_primary_key; | 
| + std::string found_encoded_primary_key; | 
| bool ok = FindKeyInIndex(transaction, | 
| database_id, | 
| object_store_id, | 
| @@ -1897,9 +1867,9 @@ IndexedDBBackingStore::Cursor::~Cursor() {} | 
| bool IndexedDBBackingStore::Cursor::FirstSeek() { | 
| iterator_ = transaction_->CreateIterator(); | 
| if (cursor_options_.forward) | 
| - iterator_->Seek(LevelDBSlice(cursor_options_.low_key)); | 
| + iterator_->Seek(cursor_options_.low_key); | 
| else | 
| - iterator_->Seek(LevelDBSlice(cursor_options_.high_key)); | 
| + iterator_->Seek(cursor_options_.high_key); | 
| return ContinueFunction(0, READY); | 
| } | 
| @@ -1930,7 +1900,7 @@ bool IndexedDBBackingStore::Cursor::ContinueFunction(const IndexedDBKey* key, | 
| if (next_state == SEEK) { | 
| // TODO(jsbell): Optimize seeking for reverse cursors as well. | 
| if (first_iteration && key && key->IsValid() && forward) { | 
| - iterator_->Seek(LevelDBSlice(EncodeKey(*key))); | 
| + iterator_->Seek(EncodeKey(*key)); | 
| first_iteration = false; | 
| } else if (forward) { | 
| iterator_->Next(); | 
| @@ -2015,15 +1985,13 @@ bool IndexedDBBackingStore::Cursor::ContinueFunction(const IndexedDBKey* key, | 
| bool IndexedDBBackingStore::Cursor::HaveEnteredRange() const { | 
| if (cursor_options_.forward) { | 
| - int compare = CompareIndexKeys(iterator_->Key(), | 
| - LevelDBSlice(cursor_options_.low_key)); | 
| + int compare = CompareIndexKeys(iterator_->Key(), cursor_options_.low_key); | 
| 
 
alecflett
2013/07/09 18:26:30
I guess we should just look at every call in our o
 
 | 
| if (cursor_options_.low_open) { | 
| return compare > 0; | 
| } | 
| return compare >= 0; | 
| } | 
| - int compare = CompareIndexKeys(iterator_->Key(), | 
| - LevelDBSlice(cursor_options_.high_key)); | 
| + int compare = CompareIndexKeys(iterator_->Key(), cursor_options_.high_key); | 
| if (cursor_options_.high_open) { | 
| return compare < 0; | 
| } | 
| @@ -2032,15 +2000,13 @@ bool IndexedDBBackingStore::Cursor::HaveEnteredRange() const { | 
| bool IndexedDBBackingStore::Cursor::IsPastBounds() const { | 
| if (cursor_options_.forward) { | 
| - int compare = CompareIndexKeys(iterator_->Key(), | 
| - LevelDBSlice(cursor_options_.high_key)); | 
| + int compare = CompareIndexKeys(iterator_->Key(), cursor_options_.high_key); | 
| if (cursor_options_.high_open) { | 
| return compare >= 0; | 
| } | 
| return compare > 0; | 
| } | 
| - int compare = | 
| - CompareIndexKeys(iterator_->Key(), LevelDBSlice(cursor_options_.low_key)); | 
| + int compare = CompareIndexKeys(iterator_->Key(), cursor_options_.low_key); | 
| if (cursor_options_.low_open) { | 
| return compare <= 0; | 
| } | 
| @@ -2068,14 +2034,14 @@ class ObjectStoreKeyCursorImpl : public IndexedDBBackingStore::Cursor { | 
| } | 
| // IndexedDBBackingStore::Cursor | 
| - virtual std::vector<char>* Value() OVERRIDE { | 
| + virtual std::string* Value() OVERRIDE { | 
| NOTREACHED(); | 
| return NULL; | 
| } | 
| virtual bool LoadCurrentRow() OVERRIDE; | 
| protected: | 
| - virtual std::vector<char> EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| + virtual std::string EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| return ObjectStoreDataKey::Encode( | 
| cursor_options_.database_id, cursor_options_.object_store_id, key); | 
| } | 
| @@ -2100,14 +2066,14 @@ bool ObjectStoreKeyCursorImpl::LoadCurrentRow() { | 
| current_key_ = object_store_data_key.user_key(); | 
| int64 version; | 
| - StringPiece slice(iterator_->Value().AsStringPiece()); | 
| + StringPiece slice(iterator_->Value()); | 
| if (!DecodeVarInt(&slice, &version)) { | 
| INTERNAL_READ_ERROR(LOAD_CURRENT_ROW); | 
| return false; | 
| } | 
| // TODO(jsbell): This re-encodes what was just decoded; try and optimize. | 
| - std::vector<char> encoded_key; | 
| + std::string encoded_key; | 
| EncodeIDBKey(*current_key_, &encoded_key); | 
| record_identifier_.Reset(encoded_key, version); | 
| @@ -2124,11 +2090,11 @@ class ObjectStoreCursorImpl : public IndexedDBBackingStore::Cursor { | 
| virtual Cursor* Clone() OVERRIDE { return new ObjectStoreCursorImpl(this); } | 
| // IndexedDBBackingStore::Cursor | 
| - virtual std::vector<char>* Value() OVERRIDE { return ¤t_value_; } | 
| + virtual std::string* Value() OVERRIDE { return ¤t_value_; } | 
| virtual bool LoadCurrentRow() OVERRIDE; | 
| protected: | 
| - virtual std::vector<char> EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| + virtual std::string EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| return ObjectStoreDataKey::Encode( | 
| cursor_options_.database_id, cursor_options_.object_store_id, key); | 
| } | 
| @@ -2138,7 +2104,7 @@ class ObjectStoreCursorImpl : public IndexedDBBackingStore::Cursor { | 
| : IndexedDBBackingStore::Cursor(other), | 
| current_value_(other->current_value_) {} | 
| - std::vector<char> current_value_; | 
| + std::string current_value_; | 
| }; | 
| bool ObjectStoreCursorImpl::LoadCurrentRow() { | 
| @@ -2156,18 +2122,18 @@ bool ObjectStoreCursorImpl::LoadCurrentRow() { | 
| current_key_ = object_store_data_key.user_key(); | 
| int64 version; | 
| - StringPiece slice(iterator_->Value().AsStringPiece()); | 
| + StringPiece slice(iterator_->Value()); | 
| if (!DecodeVarInt(&slice, &version)) { | 
| INTERNAL_READ_ERROR(LOAD_CURRENT_ROW); | 
| return false; | 
| } | 
| // TODO(jsbell): This re-encodes what was just decoded; try and optimize. | 
| - std::vector<char> encoded_key; | 
| + std::string encoded_key; | 
| EncodeIDBKey(*current_key_, &encoded_key); | 
| record_identifier_.Reset(encoded_key, version); | 
| - std::vector<char> value; | 
| + std::string value; | 
| value.insert(value.end(), slice.begin(), slice.end()); | 
| current_value_.swap(value); | 
| return true; | 
| @@ -2183,7 +2149,7 @@ class IndexKeyCursorImpl : public IndexedDBBackingStore::Cursor { | 
| virtual Cursor* Clone() OVERRIDE { return new IndexKeyCursorImpl(this); } | 
| // IndexedDBBackingStore::Cursor | 
| - virtual std::vector<char>* Value() OVERRIDE { | 
| + virtual std::string* Value() OVERRIDE { | 
| NOTREACHED(); | 
| return NULL; | 
| } | 
| @@ -2198,7 +2164,7 @@ class IndexKeyCursorImpl : public IndexedDBBackingStore::Cursor { | 
| virtual bool LoadCurrentRow() OVERRIDE; | 
| protected: | 
| - virtual std::vector<char> EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| + virtual std::string EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| return IndexDataKey::Encode(cursor_options_.database_id, | 
| cursor_options_.object_store_id, | 
| cursor_options_.index_id, | 
| @@ -2223,7 +2189,7 @@ bool IndexKeyCursorImpl::LoadCurrentRow() { | 
| current_key_ = index_data_key.user_key(); | 
| DCHECK(current_key_); | 
| - StringPiece slice(iterator_->Value().AsStringPiece()); | 
| + StringPiece slice(iterator_->Value()); | 
| int64 index_data_version; | 
| if (!DecodeVarInt(&slice, &index_data_version)) { | 
| INTERNAL_READ_ERROR(LOAD_CURRENT_ROW); | 
| @@ -2235,15 +2201,14 @@ bool IndexKeyCursorImpl::LoadCurrentRow() { | 
| return false; | 
| } | 
| - std::vector<char> primary_leveldb_key = | 
| + std::string primary_leveldb_key = | 
| ObjectStoreDataKey::Encode(index_data_key.DatabaseId(), | 
| index_data_key.ObjectStoreId(), | 
| *primary_key_); | 
| std::string result; | 
| bool found = false; | 
| - bool ok = | 
| - transaction_->Get(LevelDBSlice(primary_leveldb_key), &result, &found); | 
| + bool ok = transaction_->Get(primary_leveldb_key, &result, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(LOAD_CURRENT_ROW); | 
| return false; | 
| @@ -2282,7 +2247,7 @@ class IndexCursorImpl : public IndexedDBBackingStore::Cursor { | 
| virtual Cursor* Clone() OVERRIDE { return new IndexCursorImpl(this); } | 
| // IndexedDBBackingStore::Cursor | 
| - virtual std::vector<char>* Value() OVERRIDE { return ¤t_value_; } | 
| + virtual std::string* Value() OVERRIDE { return ¤t_value_; } | 
| virtual const IndexedDBKey& primary_key() const OVERRIDE { | 
| return *primary_key_; | 
| } | 
| @@ -2294,7 +2259,7 @@ class IndexCursorImpl : public IndexedDBBackingStore::Cursor { | 
| virtual bool LoadCurrentRow() OVERRIDE; | 
| protected: | 
| - virtual std::vector<char> EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| + virtual std::string EncodeKey(const IndexedDBKey& key) OVERRIDE { | 
| return IndexDataKey::Encode(cursor_options_.database_id, | 
| cursor_options_.object_store_id, | 
| cursor_options_.index_id, | 
| @@ -2309,8 +2274,8 @@ class IndexCursorImpl : public IndexedDBBackingStore::Cursor { | 
| primary_leveldb_key_(other->primary_leveldb_key_) {} | 
| scoped_ptr<IndexedDBKey> primary_key_; | 
| - std::vector<char> current_value_; | 
| - std::vector<char> primary_leveldb_key_; | 
| + std::string current_value_; | 
| + std::string primary_leveldb_key_; | 
| }; | 
| bool IndexCursorImpl::LoadCurrentRow() { | 
| @@ -2323,7 +2288,7 @@ bool IndexCursorImpl::LoadCurrentRow() { | 
| current_key_ = index_data_key.user_key(); | 
| DCHECK(current_key_); | 
| - StringPiece slice(iterator_->Value().AsStringPiece()); | 
| + StringPiece slice(iterator_->Value()); | 
| int64 index_data_version; | 
| if (!DecodeVarInt(&slice, &index_data_version)) { | 
| INTERNAL_READ_ERROR(LOAD_CURRENT_ROW); | 
| @@ -2341,8 +2306,7 @@ bool IndexCursorImpl::LoadCurrentRow() { | 
| std::string result; | 
| bool found = false; | 
| - bool ok = | 
| - transaction_->Get(LevelDBSlice(primary_leveldb_key_), &result, &found); | 
| + bool ok = transaction_->Get(primary_leveldb_key_, &result, &found); | 
| if (!ok) { | 
| INTERNAL_READ_ERROR(LOAD_CURRENT_ROW); | 
| return false; | 
| @@ -2421,7 +2385,7 @@ bool ObjectStoreCursorOptions( | 
| if (!cursor_options->forward) { | 
| // For reverse cursors, we need a key that exists. | 
| - std::vector<char> found_high_key; | 
| + std::string found_high_key; | 
| if (!FindGreatestKeyLessThanOrEqual( | 
| transaction, cursor_options->high_key, &found_high_key)) | 
| return false; | 
| @@ -2429,9 +2393,7 @@ bool ObjectStoreCursorOptions( | 
| // If the target key should not be included, but we end up with a smaller | 
| // key, we should include that. | 
| if (cursor_options->high_open && | 
| - CompareIndexKeys(LevelDBSlice(found_high_key), | 
| - LevelDBSlice(cursor_options->high_key)) < | 
| - 0) | 
| + CompareIndexKeys(found_high_key, cursor_options->high_key) < 0) | 
| cursor_options->high_open = false; | 
| cursor_options->high_key = found_high_key; | 
| @@ -2491,7 +2453,7 @@ bool IndexCursorOptions( | 
| database_id, object_store_id, index_id, range.upper()); | 
| cursor_options->high_open = range.upperOpen(); | 
| - std::vector<char> found_high_key; | 
| + std::string found_high_key; | 
| // Seek to the *last* key in the set of non-unique keys | 
| if (!FindGreatestKeyLessThanOrEqual( | 
| transaction, cursor_options->high_key, &found_high_key)) | 
| @@ -2500,9 +2462,7 @@ bool IndexCursorOptions( | 
| // If the target key should not be included, but we end up with a smaller | 
| // key, we should include that. | 
| if (cursor_options->high_open && | 
| - CompareIndexKeys(LevelDBSlice(found_high_key), | 
| - LevelDBSlice(cursor_options->high_key)) < | 
| - 0) | 
| + CompareIndexKeys(found_high_key, cursor_options->high_key) < 0) | 
| cursor_options->high_open = false; | 
| cursor_options->high_key = found_high_key; |