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 12 namespace base { 13 class SingleThreadTaskRunner; 14 } // namespace base 15 16 namespace net { 17 class CookieStore; 18 class URLRequestContext; 19 20 struct URLRequestContextGetterTraits; 21 22 // Interface for retrieving an net::URLRequestContext. 23 class 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 50 struct 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