diff options
author | xunjieli <xunjieli@chromium.org> | 2015-06-16 10:15:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-16 17:16:17 +0000 |
commit | 413a687892c42560986bf952590155bc65afc978 (patch) | |
tree | 82451120f2ab9998479210c13226d2ad5d0e85b0 /extensions/browser/extension_throttle_entry_interface.h | |
parent | 6d491c39b882fa2b3e27ddc785847fd21884fdce (diff) | |
download | chromium_src-413a687892c42560986bf952590155bc65afc978.zip chromium_src-413a687892c42560986bf952590155bc65afc978.tar.gz chromium_src-413a687892c42560986bf952590155bc65afc978.tar.bz2 |
Make a ResourceThrottle for extensions on top of net::URLRequestThrottlerManager.
net::URLRequestThrottlerManager is used for throttling extensions originated
requests. We would like to move it out of net/ and place it in a more appropriate
directory. Since content::ResourceThrottle is the standard way to throttle
requests, this CL makes URLRequestThrottlerManager into a extensions
ResourceThrottle and place it in extensions/browser/. Followup CLs will clean up
URLRequestThrottlerManager usage from net/.
BUG=484241
Committed: https://crrev.com/6a47d0e298a4c3050d95505f5ee18b122fdc213b
Cr-Commit-Position: refs/heads/master@{#334457}
Review URL: https://codereview.chromium.org/1171983003
Cr-Commit-Position: refs/heads/master@{#334624}
Diffstat (limited to 'extensions/browser/extension_throttle_entry_interface.h')
-rw-r--r-- | extensions/browser/extension_throttle_entry_interface.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/extensions/browser/extension_throttle_entry_interface.h b/extensions/browser/extension_throttle_entry_interface.h new file mode 100644 index 0000000..99989b8 --- /dev/null +++ b/extensions/browser/extension_throttle_entry_interface.h @@ -0,0 +1,76 @@ +// Copyright (c) 2012 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_THROTTLE_ENTRY_INTERFACE_H_ +#define EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_INTERFACE_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/memory/ref_counted.h" +#include "base/time/time.h" +#include "net/base/net_export.h" + +namespace net { +class URLRequest; +} // namespace net + +namespace extensions { + +// Interface provided on entries of the URL request throttler manager. +class ExtensionThrottleEntryInterface + : public base::RefCountedThreadSafe<ExtensionThrottleEntryInterface> { + public: + ExtensionThrottleEntryInterface() {} + + // Returns true when we have encountered server errors and are doing + // exponential back-off, unless the request has load flags that mean + // it is likely to be user-initiated, or the NetworkDelegate returns + // false for |CanThrottleRequest(request)|. + // + // URLRequestHttpJob checks this method prior to every request; it + // cancels requests if this method returns true. + virtual bool ShouldRejectRequest(const net::URLRequest& request) const = 0; + + // Calculates a recommended sending time for the next request and reserves it. + // The sending time is not earlier than the current exponential back-off + // release time or |earliest_time|. Moreover, the previous results of + // the method are taken into account, in order to make sure they are spread + // properly over time. + // Returns the recommended delay before sending the next request, in + // milliseconds. The return value is always positive or 0. + // Although it is not mandatory, respecting the value returned by this method + // is helpful to avoid traffic overload. + virtual int64 ReserveSendingTimeForNextRequest( + const base::TimeTicks& earliest_time) = 0; + + // Returns the time after which requests are allowed. + virtual base::TimeTicks GetExponentialBackoffReleaseTime() const = 0; + + // This method needs to be called each time a response is received. + virtual void UpdateWithResponse(int status_code) = 0; + + // Lets higher-level modules, that know how to parse particular response + // bodies, notify of receiving malformed content for the given URL. This will + // be handled by the throttler as if an HTTP 503 response had been received to + // the request, i.e. it will count as a failure, unless the HTTP response code + // indicated is already one of those that will be counted as an error. + virtual void ReceivedContentWasMalformed(int response_code) = 0; + + // Get the URL ID associated with his entry. Should only be used for debugging + // purpose. + virtual const std::string& GetURLIdForDebugging() const = 0; + + protected: + friend class base::RefCountedThreadSafe<ExtensionThrottleEntryInterface>; + virtual ~ExtensionThrottleEntryInterface() {} + + private: + friend class base::RefCounted<ExtensionThrottleEntryInterface>; + DISALLOW_COPY_AND_ASSIGN(ExtensionThrottleEntryInterface); +}; + +} // namespace extensions + +#endif // EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_INTERFACE_H_ |