• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
NetLogObserver()31   explicit NetLogObserver() {}
32 
~NetLogObserver()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 
~URLRequestContextAdapterDelegate()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