diff options
Diffstat (limited to 'chromium/extensions/browser/extension_request_limiting_throttle.h')
-rw-r--r-- | chromium/extensions/browser/extension_request_limiting_throttle.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/chromium/extensions/browser/extension_request_limiting_throttle.h b/chromium/extensions/browser/extension_request_limiting_throttle.h new file mode 100644 index 00000000000..bd9dd4c46b2 --- /dev/null +++ b/chromium/extensions/browser/extension_request_limiting_throttle.h @@ -0,0 +1,52 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_ +#define EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_ + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "content/public/browser/resource_throttle.h" + +namespace net { +struct RedirectInfo; +class URLRequest; +} + +namespace extensions { + +class ExtensionThrottleEntryInterface; +class ExtensionThrottleManager; + +// This class monitors requests issued by extensions and throttles the request +// if there are too many requests made within a short time to urls with the same +// scheme, host, port and path. For the exact criteria for throttling, please +// also see extension_throttle_manager.cc. +class ExtensionRequestLimitingThrottle : public content::ResourceThrottle { + public: + ExtensionRequestLimitingThrottle(const net::URLRequest* request, + ExtensionThrottleManager* manager); + ~ExtensionRequestLimitingThrottle() override; + + // content::ResourceThrottle implementation (called on IO thread): + void WillStartRequest(bool* defer) override; + void WillRedirectRequest(const net::RedirectInfo& redirect_info, + bool* defer) override; + void WillProcessResponse(bool* defer) override; + + const char* GetNameForLogging() const override; + + private: + const net::URLRequest* request_; + ExtensionThrottleManager* manager_; + + // This is used to supervise traffic and enforce exponential back-off. + scoped_refptr<ExtensionThrottleEntryInterface> throttling_entry_; + + DISALLOW_COPY_AND_ASSIGN(ExtensionRequestLimitingThrottle); +}; + +} // namespace extensions + +#endif // EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_ |