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( |