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 NET_URL_REQUEST_URL_REQUEST_CONTEXT_GETTER_H_ 6#define NET_URL_REQUEST_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// For use in shimming a URLRequestContext into a URLRequestContextGetter. 57class NET_EXPORT TrivialURLRequestContextGetter 58 : public URLRequestContextGetter { 59public: 60 TrivialURLRequestContextGetter( 61 net::URLRequestContext* context, 62 const scoped_refptr<base::SingleThreadTaskRunner>& main_task_runner); 63 64 // net::URLRequestContextGetter implementation: 65 virtual net::URLRequestContext* GetURLRequestContext() OVERRIDE; 66 67 virtual scoped_refptr<base::SingleThreadTaskRunner> 68 GetNetworkTaskRunner() const OVERRIDE; 69 70private: 71 virtual ~TrivialURLRequestContextGetter(); 72 73 net::URLRequestContext* context_; 74 const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; 75 76 DISALLOW_COPY_AND_ASSIGN(TrivialURLRequestContextGetter); 77}; 78 79} // namespace net 80 81#endif // NET_URL_REQUEST_URL_REQUEST_CONTEXT_GETTER_H_ 82