resource_throttle.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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
10class GURL;
11
12namespace content {
13
14class 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.
21class 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