Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / content / public / browser / resource_throttle.h
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_