diff options
author | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-04 01:43:02 +0000 |
---|---|---|
committer | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-04 01:43:02 +0000 |
commit | d13950ec676bc8aa9ea493e89a4cd1aee4a41913 (patch) | |
tree | 548e23868022937d34b2966a2e08f2a3d6510bbd /chrome/browser/extensions/extension_function_dispatcher.cc | |
parent | f8c726650ef5fff6a9cc37411193c186a16f673f (diff) | |
download | chromium_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.cc | 13 |
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, |