Home | History | Annotate | Download | only in browser
      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 WillStartUsingNetwork(bool* defer) {}
     27   virtual void WillRedirectRequest(const GURL& new_url, bool* defer) {}
     28   virtual void WillProcessResponse(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 
     35   void set_controller_for_testing(ResourceController* c) {
     36     controller_ = c;
     37   }
     38 
     39  protected:
     40   ResourceThrottle() : controller_(NULL) {}
     41   ResourceController* controller() { return controller_; }
     42 
     43  private:
     44   friend class ThrottlingResourceHandler;
     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