| Index: chrome/browser/extensions/api/storage/storage_api.cc
|
| diff --git a/chrome/browser/extensions/api/storage/storage_api.cc b/chrome/browser/extensions/api/storage/storage_api.cc
|
| index 2bf88d7558a07215eeb91603146b30c73285a372..1d6b361110b9b72aa7694a844be3f8073014ee09 100644
|
| --- a/chrome/browser/extensions/api/storage/storage_api.cc
|
| +++ b/chrome/browser/extensions/api/storage/storage_api.cc
|
| @@ -73,21 +73,23 @@
|
| base::Bind(&SettingsFunction::SendResponse, this, success));
|
| }
|
|
|
| -bool SettingsFunction::UseReadResult(ValueStore::ReadResult result,
|
| - ValueStore* storage) {
|
| - if (result->HasError())
|
| - return HandleError(result->error(), storage);
|
| -
|
| - base::DictionaryValue* dict = new base::DictionaryValue();
|
| - dict->Swap(&result->settings());
|
| - SetResult(dict);
|
| - return true;
|
| -}
|
| -
|
| -bool SettingsFunction::UseWriteResult(ValueStore::WriteResult result,
|
| - ValueStore* storage) {
|
| - if (result->HasError())
|
| - return HandleError(result->error(), storage);
|
| +bool SettingsFunction::UseReadResult(ValueStore::ReadResult read_result) {
|
| + if (read_result->HasError()) {
|
| + error_ = read_result->error().message;
|
| + return false;
|
| + }
|
| +
|
| + base::DictionaryValue* result = new base::DictionaryValue();
|
| + result->Swap(&read_result->settings());
|
| + SetResult(result);
|
| + return true;
|
| +}
|
| +
|
| +bool SettingsFunction::UseWriteResult(ValueStore::WriteResult result) {
|
| + if (result->HasError()) {
|
| + error_ = result->error().message;
|
| + return false;
|
| + }
|
|
|
| if (!result->changes().empty()) {
|
| observers_->Notify(
|
| @@ -98,29 +100,6 @@
|
| }
|
|
|
| return true;
|
| -}
|
| -
|
| -bool SettingsFunction::HandleError(const ValueStore::Error& error,
|
| - ValueStore* storage) {
|
| - // If the method failed due to corruption, and we haven't tried to fix it, we
|
| - // can try to restore the storage and re-run it. Otherwise, the method has
|
| - // failed.
|
| - if (error.code == ValueStore::CORRUPTION && !tried_restoring_storage_) {
|
| - tried_restoring_storage_ = true;
|
| -
|
| - // If the corruption is on a particular key, try to restore that key and
|
| - // re-run.
|
| - if (error.key.get() && storage->RestoreKey(*error.key))
|
| - return RunWithStorage(storage);
|
| -
|
| - // If the full database is corrupted, try to restore the whole thing and
|
| - // re-run.
|
| - if (storage->Restore())
|
| - return RunWithStorage(storage);
|
| - }
|
| -
|
| - error_ = error.message;
|
| - return false;
|
| }
|
|
|
| // Concrete settings functions
|
| @@ -182,34 +161,32 @@
|
|
|
| switch (input->GetType()) {
|
| case base::Value::TYPE_NULL:
|
| - return UseReadResult(storage->Get(), storage);
|
| + return UseReadResult(storage->Get());
|
|
|
| case base::Value::TYPE_STRING: {
|
| std::string as_string;
|
| input->GetAsString(&as_string);
|
| - return UseReadResult(storage->Get(as_string), storage);
|
| + return UseReadResult(storage->Get(as_string));
|
| }
|
|
|
| case base::Value::TYPE_LIST: {
|
| std::vector<std::string> as_string_list;
|
| AddAllStringValues(*static_cast<base::ListValue*>(input),
|
| &as_string_list);
|
| - return UseReadResult(storage->Get(as_string_list), storage);
|
| + return UseReadResult(storage->Get(as_string_list));
|
| }
|
|
|
| case base::Value::TYPE_DICTIONARY: {
|
| - base::DictionaryValue* as_dict =
|
| - static_cast<base::DictionaryValue*>(input);
|
| + base::DictionaryValue* as_dict = static_cast<base::DictionaryValue*>(input);
|
| ValueStore::ReadResult result = storage->Get(GetKeys(*as_dict));
|
| if (result->HasError()) {
|
| - return UseReadResult(result.Pass(), storage);
|
| + return UseReadResult(result.Pass());
|
| }
|
|
|
| base::DictionaryValue* with_default_values = as_dict->DeepCopy();
|
| with_default_values->MergeDictionary(&result->settings());
|
| return UseReadResult(
|
| - ValueStore::MakeReadResult(make_scoped_ptr(with_default_values)),
|
| - storage);
|
| + ValueStore::MakeReadResult(make_scoped_ptr(with_default_values)));
|
| }
|
|
|
| default:
|
| @@ -257,7 +234,7 @@
|
| bool StorageStorageAreaSetFunction::RunWithStorage(ValueStore* storage) {
|
| base::DictionaryValue* input = NULL;
|
| EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &input));
|
| - return UseWriteResult(storage->Set(ValueStore::DEFAULTS, *input), storage);
|
| + return UseWriteResult(storage->Set(ValueStore::DEFAULTS, *input));
|
| }
|
|
|
| void StorageStorageAreaSetFunction::GetQuotaLimitHeuristics(
|
| @@ -273,14 +250,14 @@
|
| case base::Value::TYPE_STRING: {
|
| std::string as_string;
|
| input->GetAsString(&as_string);
|
| - return UseWriteResult(storage->Remove(as_string), storage);
|
| + return UseWriteResult(storage->Remove(as_string));
|
| }
|
|
|
| case base::Value::TYPE_LIST: {
|
| std::vector<std::string> as_string_list;
|
| AddAllStringValues(*static_cast<base::ListValue*>(input),
|
| &as_string_list);
|
| - return UseWriteResult(storage->Remove(as_string_list), storage);
|
| + return UseWriteResult(storage->Remove(as_string_list));
|
| }
|
|
|
| default:
|
| @@ -295,7 +272,7 @@
|
| }
|
|
|
| bool StorageStorageAreaClearFunction::RunWithStorage(ValueStore* storage) {
|
| - return UseWriteResult(storage->Clear(), storage);
|
| + return UseWriteResult(storage->Clear());
|
| }
|
|
|
| void StorageStorageAreaClearFunction::GetQuotaLimitHeuristics(
|
|
|