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.
5 #ifndef NET_URL_REQUEST_URL_REQUEST_CONTEXT_GETTER_H_
6 #define NET_URL_REQUEST_URL_REQUEST_CONTEXT_GETTER_H_
8 #include "base/memory/ref_counted.h"
9 #include "base/sequenced_task_runner_helpers.h"
10 #include "net/base/net_export.h"
13 class SingleThreadTaskRunner
;
18 class URLRequestContext
;
20 struct URLRequestContextGetterTraits
;
22 // Interface for retrieving an net::URLRequestContext.
23 class NET_EXPORT URLRequestContextGetter
24 : public base::RefCountedThreadSafe
<URLRequestContextGetter
,
25 URLRequestContextGetterTraits
> {
27 virtual URLRequestContext
* GetURLRequestContext() = 0;
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;
36 friend class base::RefCountedThreadSafe
<URLRequestContextGetter
,
37 URLRequestContextGetterTraits
>;
38 friend class base::DeleteHelper
<URLRequestContextGetter
>;
39 friend struct URLRequestContextGetterTraits
;
41 URLRequestContextGetter();
42 virtual ~URLRequestContextGetter();
45 // OnDestruct is meant to ensure deletion on the thread on which the request
47 void OnDestruct() const;
50 struct URLRequestContextGetterTraits
{
51 static void Destruct(const URLRequestContextGetter
* context_getter
) {
52 context_getter
->OnDestruct();
56 // For use in shimming a URLRequestContext into a URLRequestContextGetter.
57 class NET_EXPORT TrivialURLRequestContextGetter
58 : public URLRequestContextGetter
{
60 TrivialURLRequestContextGetter(
61 net::URLRequestContext
* context
,
62 const scoped_refptr
<base::SingleThreadTaskRunner
>& main_task_runner
);
64 // net::URLRequestContextGetter implementation:
65 virtual net::URLRequestContext
* GetURLRequestContext() OVERRIDE
;
67 virtual scoped_refptr
<base::SingleThreadTaskRunner
>
68 GetNetworkTaskRunner() const OVERRIDE
;
71 virtual ~TrivialURLRequestContextGetter();
73 net::URLRequestContext
* context_
;
74 const scoped_refptr
<base::SingleThreadTaskRunner
> main_task_runner_
;
76 DISALLOW_COPY_AND_ASSIGN(TrivialURLRequestContextGetter
);
81 #endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_GETTER_H_