throttling_resource_handler.h revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CONTENT_BROWSER_LOADER_THROTTLING_RESOURCE_HANDLER_H_ 6#define CONTENT_BROWSER_LOADER_THROTTLING_RESOURCE_HANDLER_H_ 7 8#include "base/memory/ref_counted.h" 9#include "base/memory/scoped_vector.h" 10#include "content/browser/loader/layered_resource_handler.h" 11#include "content/public/browser/resource_controller.h" 12#include "url/gurl.h" 13 14namespace net { 15class URLRequest; 16} 17 18namespace content { 19 20class ResourceThrottle; 21struct ResourceResponse; 22 23// Used to apply a list of ResourceThrottle instances to an URLRequest. 24class ThrottlingResourceHandler : public LayeredResourceHandler, 25 public ResourceController { 26 public: 27 // Takes ownership of the ResourceThrottle instances. 28 ThrottlingResourceHandler(scoped_ptr<ResourceHandler> next_handler, 29 net::URLRequest* request, 30 ScopedVector<ResourceThrottle> throttles); 31 virtual ~ThrottlingResourceHandler(); 32 33 // LayeredResourceHandler overrides: 34 virtual bool OnRequestRedirected(int request_id, const GURL& url, 35 ResourceResponse* response, 36 bool* defer) OVERRIDE; 37 virtual bool OnResponseStarted(int request_id, 38 ResourceResponse* response, 39 bool* defer) OVERRIDE; 40 virtual bool OnWillStart(int request_id, const GURL& url, 41 bool* defer) OVERRIDE; 42 43 // ResourceThrottleController implementation: 44 virtual void Cancel() OVERRIDE; 45 virtual void CancelAndIgnore() OVERRIDE; 46 virtual void CancelWithError(int error_code) OVERRIDE; 47 virtual void Resume() OVERRIDE; 48 49 private: 50 void ResumeStart(); 51 void ResumeRedirect(); 52 void ResumeResponse(); 53 54 enum DeferredStage { 55 DEFERRED_NONE, 56 DEFERRED_START, 57 DEFERRED_REDIRECT, 58 DEFERRED_RESPONSE 59 }; 60 DeferredStage deferred_stage_; 61 62 net::URLRequest* request_; 63 64 ScopedVector<ResourceThrottle> throttles_; 65 size_t index_; 66 67 GURL deferred_url_; 68 scoped_refptr<ResourceResponse> deferred_response_; 69 70 bool cancelled_by_resource_throttle_; 71}; 72 73} // namespace content 74 75#endif // CONTENT_BROWSER_LOADER_THROTTLING_RESOURCE_HANDLER_H_ 76