diff options
author | xunjieli <xunjieli@chromium.org> | 2015-06-15 14:12:08 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-15 21:13:40 +0000 |
commit | 6a47d0e298a4c3050d95505f5ee18b122fdc213b (patch) | |
tree | d7376d81f466d3d2c9cd69960d9c3b130fd27412 /extensions/browser/extension_throttle_entry_interface.h | |
parent | 167fd6b6234f58bc42a7c08b43d6f3acf252ad4c (diff) | |
download | chromium_src-6a47d0e298a4c3050d95505f5ee18b122fdc213b.zip chromium_src-6a47d0e298a4c3050d95505f5ee18b122fdc213b.tar.gz chromium_src-6a47d0e298a4c3050d95505f5ee18b122fdc213b.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
Review URL: https://codereview.chromium.org/1171983003
Cr-Commit-Position: refs/heads/master@{#334457}
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_ |