// 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 throttling_entry_; DISALLOW_COPY_AND_ASSIGN(ExtensionRequestLimitingThrottle); }; } // namespace extensions #endif // EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_