1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_ADAPTER_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_ADAPTER_H_ 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <string> 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/compiler_specific.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/macros.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/ref_counted.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/threading/thread.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/base/net_log.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/base/network_change_notifier.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/url_request/url_request_context.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace net { 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass NetLogLogger; 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace net 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace cronet { 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)struct URLRequestContextConfig; 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Implementation of the Chromium NetLog observer interface. 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class NetLogObserver : public net::NetLog::ThreadSafeObserver { 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) explicit NetLogObserver() {} 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual ~NetLogObserver() {} 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void OnAddEntry(const net::NetLog::Entry& entry) OVERRIDE; 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetLogObserver); 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Fully configured |URLRequestContext|. 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class URLRequestContextAdapter : public net::URLRequestContextGetter { 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) class URLRequestContextAdapterDelegate 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) : public base::RefCountedThreadSafe<URLRequestContextAdapterDelegate> { 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public: 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnContextInitialized(URLRequestContextAdapter* context) = 0; 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protected: 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) friend class base::RefCountedThreadSafe<URLRequestContextAdapterDelegate>; 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~URLRequestContextAdapterDelegate() {} 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) }; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) URLRequestContextAdapter(URLRequestContextAdapterDelegate* delegate, 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string user_agent); 57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Initialize(scoped_ptr<URLRequestContextConfig> config); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& GetUserAgent(const GURL& url) const; 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // net::URLRequestContextGetter implementation: 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual net::URLRequestContext* GetURLRequestContext() OVERRIDE; 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const OVERRIDE; 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void StartNetLogToFile(const std::string& file_name); 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void StopNetLog(); 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private: 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<URLRequestContextAdapterDelegate> delegate_; 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<net::URLRequestContext> context_; 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) std::string user_agent_; 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Thread* network_thread_; 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<NetLogObserver> net_log_observer_; 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<net::NetLogLogger> net_log_logger_; 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~URLRequestContextAdapter(); 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Initializes |context_| on the Network thread. 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void InitializeURLRequestContext(scoped_ptr<URLRequestContextConfig> config); 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(URLRequestContextAdapter); 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace cronet 870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // COMPONENTS_CRONET_ANDROID_URL_REQUEST_CONTEXT_ADAPTER_H_ 89