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 20namespace net { 21class NetLogLogger; 22} // namespace net 23 24namespace cronet { 25 26struct URLRequestContextConfig; 27 28// Implementation of the Chromium NetLog observer interface. 29class 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|. 42class 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