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_PUBLIC_BROWSER_RESOURCE_THROTTLE_H_ 6 #define CONTENT_PUBLIC_BROWSER_RESOURCE_THROTTLE_H_ 7 8 #include <vector> 9 10 class GURL; 11 12 namespace content { 13 14 class ResourceController; 15 16 // A ResourceThrottle gets notified at various points during the process of 17 // loading a resource. At each stage, it has the opportunity to defer the 18 // resource load. The ResourceController interface may be used to resume a 19 // deferred resource load, or it may be used to cancel a resource load at any 20 // time. 21 class ResourceThrottle { 22 public: ~ResourceThrottle()23 virtual ~ResourceThrottle() {} 24 WillStartRequest(bool * defer)25 virtual void WillStartRequest(bool* defer) {} WillRedirectRequest(const GURL & new_url,bool * defer)26 virtual void WillRedirectRequest(const GURL& new_url, bool* defer) {} WillProcessResponse(bool * defer)27 virtual void WillProcessResponse(bool* defer) {} OnBeforeNetworkStart(bool * defer)28 virtual void OnBeforeNetworkStart(bool* defer) {} 29 30 // Returns the name of the throttle, as a UTF-8 C-string, for logging 31 // purposes. NULL is not allowed. Caller does *not* take ownership of the 32 // returned string. 33 virtual const char* GetNameForLogging() const = 0; 34 set_controller_for_testing(ResourceController * c)35 void set_controller_for_testing(ResourceController* c) { 36 controller_ = c; 37 } 38 39 protected: ResourceThrottle()40 ResourceThrottle() : controller_(NULL) {} controller()41 ResourceController* controller() { return controller_; } 42 43 private: 44 friend class ThrottlingResourceHandler; set_controller(ResourceController * c)45 void set_controller(ResourceController* c) { controller_ = c; } 46 47 ResourceController* controller_; 48 }; 49 50 } // namespace content 51 52 #endif // CONTENT_PUBLIC_BROWSER_RESOURCE_THROTTLE_H_ 53