summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_function_dispatcher.cc
diff options
context:
space:
mode:
authortim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-04 01:43:02 +0000
committertim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-04 01:43:02 +0000
commitd13950ec676bc8aa9ea493e89a4cd1aee4a41913 (patch)
tree548e23868022937d34b2966a2e08f2a3d6510bbd /chrome/browser/extensions/extension_function_dispatcher.cc
parentf8c726650ef5fff6a9cc37411193c186a16f673f (diff)
downloadchromium_src-d13950ec676bc8aa9ea493e89a4cd1aee4a41913.zip
chromium_src-d13950ec676bc8aa9ea493e89a4cd1aee4a41913.tar.gz
chromium_src-d13950ec676bc8aa9ea493e89a4cd1aee4a41913.tar.bz2
Add ExtensionsQuotaService to limit abusive amounts of requests
to mutating extension functions, as discussed on chromium-dev and in Extensions quotaserver design doc. Add a hook in the dispatcher to have the quota service assess the request. Wire up bookmarks.{create, move, remove, update} to the service. BUG=19899 TEST=ExtensionsQuotaServiceTest, QuotaLimitHeuristicTest (both new) Review URL: http://codereview.chromium.org/441006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33770 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_function_dispatcher.cc')
-rw-r--r--chrome/browser/extensions/extension_function_dispatcher.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc
index 3a99e37..071c6f1 100644
--- a/chrome/browser/extensions/extension_function_dispatcher.cc
+++ b/chrome/browser/extensions/extension_function_dispatcher.cc
@@ -24,6 +24,7 @@
#include "chrome/browser/extensions/extension_tabs_module_constants.h"
#include "chrome/browser/extensions/extension_test_api.h"
#include "chrome/browser/extensions/extension_toolstrip_api.h"
+#include "chrome/browser/extensions/extensions_quota_service.h"
#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/renderer_host/render_process_host.h"
@@ -149,6 +150,7 @@ void FactoryRegistry::ResetFunctions() {
RegisterFunction<ExtensionTestPassFunction>();
RegisterFunction<ExtensionTestFailFunction>();
RegisterFunction<ExtensionTestLogFunction>();
+ RegisterFunction<ExtensionTestQuotaResetFunction>();
}
void FactoryRegistry::GetAllNames(std::vector<std::string>* names) {
@@ -281,7 +283,16 @@ void ExtensionFunctionDispatcher::HandleRequest(const std::string& name,
function->SetArgs(args);
function->set_request_id(request_id);
function->set_has_callback(has_callback);
- function->Run();
+
+ ExtensionsService* service = profile()->GetExtensionsService();
+ DCHECK(service);
+ ExtensionsQuotaService* quota = service->quota_service();
+ if (quota->Assess(extension_id(), function, args, base::TimeTicks::Now())) {
+ function->Run();
+ } else {
+ render_view_host_->SendExtensionResponse(function->request_id(), false,
+ std::string(), QuotaLimitHeuristic::kGenericOverQuotaError);
+ }
}
void ExtensionFunctionDispatcher::SendResponse(ExtensionFunction* function,