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

Unified Diff: chrome/browser/extensions/settings/settings_api.cc

Issue 8491033: Extension Settings API: throttle the API in the same way that the Bookmarks API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/settings/settings_api.cc
diff --git a/chrome/browser/extensions/settings/settings_api.cc b/chrome/browser/extensions/settings/settings_api.cc
index a83a01ef210dcadbd95a1372b8c1b993723be17f..2d292888f38d4677e8d7376181eee32157b4538d 100644
--- a/chrome/browser/extensions/settings/settings_api.cc
+++ b/chrome/browser/extensions/settings/settings_api.cc
@@ -7,6 +7,8 @@
#include "base/bind.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extensions_quota_service.h"
+#include "chrome/browser/extensions/settings/settings_api.h"
#include "chrome/browser/extensions/settings/settings_frontend.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_thread.h"
@@ -77,9 +79,10 @@ bool SettingsFunction::UseWriteResult(
// Concrete settings functions
+namespace {
+
// Adds all StringValues from a ListValue to a vector of strings.
-static void AddAllStringValues(
- const ListValue& from, std::vector<std::string>* to) {
+void AddAllStringValues(const ListValue& from, std::vector<std::string>* to) {
DCHECK(to->empty());
std::string as_string;
for (ListValue::const_iterator it = from.begin(); it != from.end(); ++it) {
@@ -90,7 +93,7 @@ static void AddAllStringValues(
}
// Gets the keys of a DictionaryValue.
-static std::vector<std::string> GetKeys(const DictionaryValue& dict) {
+std::vector<std::string> GetKeys(const DictionaryValue& dict) {
std::vector<std::string> keys;
for (DictionaryValue::key_iterator it = dict.begin_keys();
it != dict.end_keys(); ++it) {
@@ -99,6 +102,32 @@ static std::vector<std::string> GetKeys(const DictionaryValue& dict) {
return keys;
}
+// Creates quota heuristics for settings modification.
+static void GetModificationQuotaLimitHeuristics(
+ QuotaLimitHeuristics* heuristics) {
+ // A max of 1000 operations per hour.
+ QuotaLimitHeuristic::Config longLimitConfig = {
+ 1000,
+ base::TimeDelta::FromHours(1)
+ };
+ heuristics->push_back(
+ new ExtensionsQuotaService::TimedLimit(
+ longLimitConfig, new QuotaLimitHeuristic::SingletonBucketMapper()));
+
+ // A max of 10 operations per minute, sustained over 10 minutes.
+ QuotaLimitHeuristic::Config shortLimitConfig = {
+ 10,
+ base::TimeDelta::FromMinutes(1)
+ };
+ heuristics->push_back(
+ new ExtensionsQuotaService::SustainedLimit(
+ base::TimeDelta::FromMinutes(10),
+ shortLimitConfig,
+ new QuotaLimitHeuristic::SingletonBucketMapper()));
+};
+
+} // namespace
+
bool GetSettingsFunction::RunWithStorage(
scoped_refptr<SettingsObserverList> observers,
SettingsStorage* storage) {
@@ -152,6 +181,11 @@ bool SetSettingsFunction::RunWithStorage(
observers, storage->Set(SettingsStorage::DEFAULTS, *input));
}
+void SetSettingsFunction::GetQuotaLimitHeuristics(
+ QuotaLimitHeuristics* heuristics) const {
+ GetModificationQuotaLimitHeuristics(heuristics);
+}
+
bool RemoveSettingsFunction::RunWithStorage(
scoped_refptr<SettingsObserverList> observers,
SettingsStorage* storage) {
@@ -179,6 +213,11 @@ bool RemoveSettingsFunction::RunWithStorage(
};
}
+void RemoveSettingsFunction::GetQuotaLimitHeuristics(
+ QuotaLimitHeuristics* heuristics) const {
+ GetModificationQuotaLimitHeuristics(heuristics);
+}
+
bool ClearSettingsFunction::RunWithStorage(
scoped_refptr<SettingsObserverList> observers,
SettingsStorage* storage) {
@@ -186,4 +225,9 @@ bool ClearSettingsFunction::RunWithStorage(
return UseWriteResult(observers, storage->Clear());
}
+void ClearSettingsFunction::GetQuotaLimitHeuristics(
+ QuotaLimitHeuristics* heuristics) const {
+ GetModificationQuotaLimitHeuristics(heuristics);
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698