Home | History | Annotate | Download | only in android
      1 // Copyright 2014 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 COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_ADAPTER_H_
      6 #define COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_ADAPTER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/macros.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "base/memory/scoped_ptr.h"
     14 #include "base/threading/thread.h"
     15 #include "net/base/net_log.h"
     16 #include "net/base/network_change_notifier.h"
     17 #include "net/url_request/url_request_context.h"
     18 #include "net/url_request/url_request_context_getter.h"
     19 
     20 namespace net {
     21 class NetLogLogger;
     22 }  // namespace net
     23 
     24 namespace cronet {
     25 
     26 struct URLRequestContextConfig;
     27 
     28 // Implementation of the Chromium NetLog observer interface.
     29 class NetLogObserver : public net::NetLog::ThreadSafeObserver {
     30  public:
     31   explicit NetLogObserver() {}
     32 
     33   virtual ~NetLogObserver() {}
     34 
     35   virtual void OnAddEntry(const net::NetLog::Entry& entry) OVERRIDE;
     36 
     37  private:
     38   DISALLOW_COPY_AND_ASSIGN(NetLogObserver);
     39 };
     40 
     41 // Fully configured |URLRequestContext|.
     42 class URLRequestContextAdapter : public net::URLRequestContextGetter {
     43  public:
     44   class URLRequestContextAdapterDelegate
     45       : public base::RefCountedThreadSafe<URLRequestContextAdapterDelegate> {
     46    public:
     47     virtual void OnContextInitialized(URLRequestContextAdapter* context) = 0;
     48 
     49    protected:
     50     friend class base::RefCountedThreadSafe<URLRequestContextAdapterDelegate>;
     51 
     52     virtual ~URLRequestContextAdapterDelegate() {}
     53   };
     54 
     55   URLRequestContextAdapter(URLRequestContextAdapterDelegate* delegate,
     56                            std::string user_agent);
     57   void Initialize(scoped_ptr<URLRequestContextConfig> config);
     58 
     59   const std::string& GetUserAgent(const GURL& url) const;
     60 
     61   // net::URLRequestContextGetter implementation:
     62   virtual net::URLRequestContext* GetURLRequestContext() OVERRIDE;
     63   virtual scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner()
     64       const OVERRIDE;
     65 
     66   void StartNetLogToFile(const std::string& file_name);
     67   void StopNetLog();
     68 
     69  private:
     70   scoped_refptr<URLRequestContextAdapterDelegate> delegate_;
     71   scoped_ptr<net::URLRequestContext> context_;
     72   std::string user_agent_;
     73   base::Thread* network_thread_;
     74   scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
     75   scoped_ptr<NetLogObserver> net_log_observer_;
     76   scoped_ptr<net::NetLogLogger> net_log_logger_;
     77 
     78   virtual ~URLRequestContextAdapter();
     79 
     80   // Initializes |context_| on the Network thread.
     81   void InitializeURLRequestContext(scoped_ptr<URLRequestContextConfig> config);
     82 
     83   DISALLOW_COPY_AND_ASSIGN(URLRequestContextAdapter);
     84 };
     85 
     86 }  // namespace cronet
     87 
     88 #endif  // COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_ADAPTER_H_
     89