url_request_context_getter.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 CHROME_COMMON_NET_URL_REQUEST_CONTEXT_GETTER_H_
6#define CHROME_COMMON_NET_URL_REQUEST_CONTEXT_GETTER_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/sequenced_task_runner_helpers.h"
10#include "net/base/net_export.h"
11
12namespace base {
13class SingleThreadTaskRunner;
14}  // namespace base
15
16namespace net {
17class CookieStore;
18class URLRequestContext;
19
20struct URLRequestContextGetterTraits;
21
22// Interface for retrieving an net::URLRequestContext.
23class NET_EXPORT URLRequestContextGetter
24    : public base::RefCountedThreadSafe<URLRequestContextGetter,
25                                        URLRequestContextGetterTraits> {
26 public:
27  virtual URLRequestContext* GetURLRequestContext() = 0;
28
29  // Returns a SingleThreadTaskRunner corresponding to the thread on
30  // which the network IO happens (the thread on which the returned
31  // net::URLRequestContext may be used).
32  virtual scoped_refptr<base::SingleThreadTaskRunner>
33      GetNetworkTaskRunner() const = 0;
34
35 protected:
36  friend class base::RefCountedThreadSafe<URLRequestContextGetter,
37                                          URLRequestContextGetterTraits>;
38  friend class base::DeleteHelper<URLRequestContextGetter>;
39  friend struct URLRequestContextGetterTraits;
40
41  URLRequestContextGetter();
42  virtual ~URLRequestContextGetter();
43
44 private:
45  // OnDestruct is meant to ensure deletion on the thread on which the request
46  // IO happens.
47  void OnDestruct() const;
48};
49
50struct URLRequestContextGetterTraits {
51  static void Destruct(const URLRequestContextGetter* context_getter) {
52    context_getter->OnDestruct();
53  }
54};
55
56}  // namespace net
57
58#endif  // CHROME_COMMON_NET_URL_REQUEST_CONTEXT_GETTER_H_
59