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