| Index: chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.cc
|
| diff --git a/chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.cc b/chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.cc
|
| index f301c01626baf66c8dcfa6e20a39f83b816812ec..6e928ff64d3407f511df9e8b89c9070ba5faf103 100644
|
| --- a/chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.cc
|
| +++ b/chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.cc
|
| @@ -9,15 +9,16 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/metrics/histogram.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "chrome/browser/value_store/value_store_util.h"
|
| #include "chrome/common/extensions/api/extension_api.h"
|
| -#include "extensions/common/error_utils.h"
|
| +
|
| +namespace util = value_store_util;
|
|
|
| namespace extensions {
|
|
|
| namespace {
|
|
|
| -const char* kQuotaExceededError = "* quota exceeded.";
|
| -
|
| // Resources there are a quota for.
|
| enum Resource {
|
| QUOTA_BYTES,
|
| @@ -53,9 +54,10 @@ void Free(
|
| used_per_setting->erase(key);
|
| }
|
|
|
| -// Returns an error result and logs the quota exceeded to UMA.
|
| -ValueStore::WriteResult QuotaExceededFor(Resource resource) {
|
| - std::string name;
|
| +scoped_ptr<ValueStore::Error> QuotaExceededError(Resource resource,
|
| + scoped_ptr<std::string> key) {
|
| + const char* name = NULL;
|
| + // TODO(kalman): These hisograms are both silly and untracked. Fix.
|
| switch (resource) {
|
| case QUOTA_BYTES:
|
| name = "QUOTA_BYTES";
|
| @@ -72,11 +74,12 @@ ValueStore::WriteResult QuotaExceededFor(Resource resource) {
|
| UMA_HISTOGRAM_COUNTS_100(
|
| "Extensions.SettingsQuotaExceeded.KeyCount", 1);
|
| break;
|
| - default:
|
| - NOTREACHED();
|
| }
|
| - return ValueStore::MakeWriteResult(
|
| - ErrorUtils::FormatErrorMessage(kQuotaExceededError, name));
|
| + CHECK(name);
|
| + return make_scoped_ptr(new ValueStore::Error(
|
| + ValueStore::QUOTA_EXCEEDED,
|
| + base::StringPrintf("%s quota exceeded", name),
|
| + key.Pass()));
|
| }
|
|
|
| } // namespace
|
| @@ -87,11 +90,11 @@ SettingsStorageQuotaEnforcer::SettingsStorageQuotaEnforcer(
|
| ReadResult maybe_settings = delegate_->Get();
|
| if (maybe_settings->HasError()) {
|
| LOG(WARNING) << "Failed to get initial settings for quota: " <<
|
| - maybe_settings->error();
|
| + maybe_settings->error().message;
|
| return;
|
| }
|
|
|
| - for (base::DictionaryValue::Iterator it(*maybe_settings->settings().get());
|
| + for (base::DictionaryValue::Iterator it(maybe_settings->settings());
|
| !it.IsAtEnd(); it.Advance()) {
|
| Allocate(it.key(), it.value(), &used_total_, &used_per_setting_);
|
| }
|
| @@ -143,14 +146,15 @@ ValueStore::WriteResult SettingsStorageQuotaEnforcer::Set(
|
|
|
| if (!(options & IGNORE_QUOTA)) {
|
| if (new_used_total > limits_.quota_bytes) {
|
| - return QuotaExceededFor(QUOTA_BYTES);
|
| + return MakeWriteResult(
|
| + QuotaExceededError(QUOTA_BYTES, util::NewKey(key)));
|
| }
|
| if (new_used_per_setting[key] > limits_.quota_bytes_per_item) {
|
| - return QuotaExceededFor(QUOTA_BYTES_PER_ITEM);
|
| - }
|
| - if (new_used_per_setting.size() > limits_.max_items) {
|
| - return QuotaExceededFor(MAX_ITEMS);
|
| + return MakeWriteResult(
|
| + QuotaExceededError(QUOTA_BYTES_PER_ITEM, util::NewKey(key)));
|
| }
|
| + if (new_used_per_setting.size() > limits_.max_items)
|
| + return MakeWriteResult(QuotaExceededError(MAX_ITEMS, util::NewKey(key)));
|
| }
|
|
|
| WriteResult result = delegate_->Set(options, key, value);
|
| @@ -173,17 +177,16 @@ ValueStore::WriteResult SettingsStorageQuotaEnforcer::Set(
|
|
|
| if (!(options & IGNORE_QUOTA) &&
|
| new_used_per_setting[it.key()] > limits_.quota_bytes_per_item) {
|
| - return QuotaExceededFor(QUOTA_BYTES_PER_ITEM);
|
| + return MakeWriteResult(
|
| + QuotaExceededError(QUOTA_BYTES_PER_ITEM, util::NewKey(it.key())));
|
| }
|
| }
|
|
|
| if (!(options & IGNORE_QUOTA)) {
|
| - if (new_used_total > limits_.quota_bytes) {
|
| - return QuotaExceededFor(QUOTA_BYTES);
|
| - }
|
| - if (new_used_per_setting.size() > limits_.max_items) {
|
| - return QuotaExceededFor(MAX_ITEMS);
|
| - }
|
| + if (new_used_total > limits_.quota_bytes)
|
| + return MakeWriteResult(QuotaExceededError(QUOTA_BYTES, util::NoKey()));
|
| + if (new_used_per_setting.size() > limits_.max_items)
|
| + return MakeWriteResult(QuotaExceededError(MAX_ITEMS, util::NoKey()));
|
| }
|
|
|
| WriteResult result = delegate_->Set(options, values);
|
|
|