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: 23 virtual ~ResourceThrottle() {} 24 25 virtual void WillStartRequest(bool* defer) {} 26 virtual void WillRedirectRequest(const GURL& new_url, bool* defer) {} 27 virtual void WillProcessResponse(bool* defer) {} 28 29 // Returns the name of the throttle, as a UTF-8 C-string, for logging 30 // purposes. NULL is not allowed. Caller does *not* take ownership of the 31 // returned string. 32 virtual const char* GetNameForLogging() const = 0; 33 34 void set_controller_for_testing(ResourceController* c) { 35 controller_ = c; 36 } 37 38 protected: 39 ResourceThrottle() : controller_(NULL) {} 40 ResourceController* controller() { return controller_; } 41 42 private: 43 friend class ThrottlingResourceHandler; 44 void set_controller(ResourceController* c) { controller_ = c; } 45 46 ResourceController* controller_; 47 }; 48 49 } // namespace content 50 51 #endif // CONTENT_PUBLIC_BROWSER_RESOURCE_THROTTLE_H_ 52