Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: chrome/browser/extensions/settings/settings_storage_quota_enforcer.cc

Issue 10871034: Make all quota-exceeding messages in the storage API explain what the failure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update... the other error message Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/settings/settings_storage_quota_enforcer.h" 5 #include "chrome/browser/extensions/settings/settings_storage_quota_enforcer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "chrome/common/extensions/api/extension_api.h" 12 #include "chrome/common/extensions/api/extension_api.h"
13 #include "chrome/common/extensions/extension_error_utils.h"
13 14
14 namespace extensions { 15 namespace extensions {
15 16
16 namespace { 17 namespace {
17 18
18 const char* kExceededQuotaErrorMessage = "Quota exceeded"; 19 const char* kQuotaExceededError = "* quota exceeded.";
19 20
20 // Resources there are a quota for. 21 // Resources there are a quota for.
21 enum Resource { 22 enum Resource {
22 QUOTA_BYTES, 23 QUOTA_BYTES,
23 QUOTA_BYTES_PER_ITEM, 24 QUOTA_BYTES_PER_ITEM,
24 MAX_ITEMS 25 MAX_ITEMS
25 }; 26 };
26 27
27 // Allocates a setting in a record of total and per-setting usage. 28 // Allocates a setting in a record of total and per-setting usage.
28 void Allocate( 29 void Allocate(
(...skipping 18 matching lines...) Expand all
47 void Free( 48 void Free(
48 size_t* used_total, 49 size_t* used_total,
49 std::map<std::string, size_t>* used_per_setting, 50 std::map<std::string, size_t>* used_per_setting,
50 const std::string& key) { 51 const std::string& key) {
51 *used_total -= (*used_per_setting)[key]; 52 *used_total -= (*used_per_setting)[key];
52 used_per_setting->erase(key); 53 used_per_setting->erase(key);
53 } 54 }
54 55
55 // Returns an error result and logs the quota exceeded to UMA. 56 // Returns an error result and logs the quota exceeded to UMA.
56 ValueStore::WriteResult QuotaExceededFor(Resource resource) { 57 ValueStore::WriteResult QuotaExceededFor(Resource resource) {
58 std::string name;
57 switch (resource) { 59 switch (resource) {
58 case QUOTA_BYTES: 60 case QUOTA_BYTES:
61 name = "QUOTA_BYTES";
59 UMA_HISTOGRAM_COUNTS_100( 62 UMA_HISTOGRAM_COUNTS_100(
60 "Extensions.SettingsQuotaExceeded.TotalBytes", 1); 63 "Extensions.SettingsQuotaExceeded.TotalBytes", 1);
61 break; 64 break;
62 case QUOTA_BYTES_PER_ITEM: 65 case QUOTA_BYTES_PER_ITEM:
66 name = "QUOTA_BYTES_PER_ITEM";
63 UMA_HISTOGRAM_COUNTS_100( 67 UMA_HISTOGRAM_COUNTS_100(
64 "Extensions.SettingsQuotaExceeded.BytesPerSetting", 1); 68 "Extensions.SettingsQuotaExceeded.BytesPerSetting", 1);
65 break; 69 break;
66 case MAX_ITEMS: 70 case MAX_ITEMS:
71 name = "MAX_ITEMS";
67 UMA_HISTOGRAM_COUNTS_100( 72 UMA_HISTOGRAM_COUNTS_100(
68 "Extensions.SettingsQuotaExceeded.KeyCount", 1); 73 "Extensions.SettingsQuotaExceeded.KeyCount", 1);
69 break; 74 break;
70 default: 75 default:
71 NOTREACHED(); 76 NOTREACHED();
72 } 77 }
73 return ValueStore::MakeWriteResult(kExceededQuotaErrorMessage); 78 return ValueStore::MakeWriteResult(
79 ExtensionErrorUtils::FormatErrorMessage(kQuotaExceededError, name));
74 } 80 }
75 81
76 } // namespace 82 } // namespace
77 83
78 SettingsStorageQuotaEnforcer::SettingsStorageQuotaEnforcer( 84 SettingsStorageQuotaEnforcer::SettingsStorageQuotaEnforcer(
79 const Limits& limits, ValueStore* delegate) 85 const Limits& limits, ValueStore* delegate)
80 : limits_(limits), delegate_(delegate), used_total_(0) { 86 : limits_(limits), delegate_(delegate), used_total_(0) {
81 ReadResult maybe_settings = delegate_->Get(); 87 ReadResult maybe_settings = delegate_->Get();
82 if (maybe_settings->HasError()) { 88 if (maybe_settings->HasError()) {
83 LOG(WARNING) << "Failed to get initial settings for quota: " << 89 LOG(WARNING) << "Failed to get initial settings for quota: " <<
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 return result.Pass(); 226 return result.Pass();
221 } 227 }
222 228
223 while (!used_per_setting_.empty()) { 229 while (!used_per_setting_.empty()) {
224 Free(&used_total_, &used_per_setting_, used_per_setting_.begin()->first); 230 Free(&used_total_, &used_per_setting_, used_per_setting_.begin()->first);
225 } 231 }
226 return result.Pass(); 232 return result.Pass();
227 } 233 }
228 234
229 } // namespace extensions 235 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/settings/settings_api.cc ('k') | chrome/common/extensions/api/api.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698