Home | History | Annotate | Download | only in url_request
      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