Home | History | Annotate | Download | only in http
      1 // Copyright (c) 2006-2008 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 NET_HTTP_HTTP_NETWORK_LAYER_H_
      6 #define NET_HTTP_HTTP_NETWORK_LAYER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/ref_counted.h"
     11 #include "base/scoped_ptr.h"
     12 #include "net/http/http_transaction_factory.h"
     13 
     14 namespace net {
     15 
     16 class ClientSocketFactory;
     17 class FlipSessionPool;
     18 class HostResolver;
     19 class HttpNetworkSession;
     20 class NetworkChangeNotifier;
     21 class ProxyInfo;
     22 class ProxyService;
     23 class SSLConfigService;
     24 
     25 class HttpNetworkLayer : public HttpTransactionFactory {
     26  public:
     27   // |socket_factory|, |network_change_notifier|, |proxy_service| and
     28   // |host_resolver| must remain valid for the lifetime of HttpNetworkLayer.
     29   HttpNetworkLayer(ClientSocketFactory* socket_factory,
     30                    NetworkChangeNotifier* network_change_notifier,
     31                    HostResolver* host_resolver, ProxyService* proxy_service,
     32                    SSLConfigService* ssl_config_service);
     33   // Construct a HttpNetworkLayer with an existing HttpNetworkSession which
     34   // contains a valid ProxyService.
     35   explicit HttpNetworkLayer(HttpNetworkSession* session);
     36   ~HttpNetworkLayer();
     37 
     38   // This function hides the details of how a network layer gets instantiated
     39   // and allows other implementations to be substituted.
     40   static HttpTransactionFactory* CreateFactory(
     41       NetworkChangeNotifier* network_change_notifier,
     42       HostResolver* host_resolver,
     43       ProxyService* proxy_service,
     44       SSLConfigService* ssl_config_service);
     45   // Create a transaction factory that instantiate a network layer over an
     46   // existing network session. Network session contains some valuable
     47   // information (e.g. authentication data) that we want to share across
     48   // multiple network layers. This method exposes the implementation details
     49   // of a network layer, use this method with an existing network layer only
     50   // when network session is shared.
     51   static HttpTransactionFactory* CreateFactory(HttpNetworkSession* session);
     52 
     53   // HttpTransactionFactory methods:
     54   virtual int CreateTransaction(scoped_ptr<HttpTransaction>* trans);
     55   virtual HttpCache* GetCache();
     56   virtual HttpNetworkSession* GetSession();
     57   virtual void Suspend(bool suspend);
     58 
     59   // Enable the flip protocol.
     60   // Without calling this function, FLIP is disabled.  The mode can be:
     61   //   ""            : (default) SSL and compression are enabled.
     62   //   "no-ssl"      : disables SSL.
     63   //   "no-compress" : disables compression.
     64   //   "none"        : disables both SSL and compression.
     65   static void EnableFlip(const std::string& mode);
     66 
     67  private:
     68   // The factory we will use to create network sockets.
     69   ClientSocketFactory* socket_factory_;
     70 
     71   NetworkChangeNotifier* network_change_notifier_;
     72 
     73   // The host resolver and proxy service that will be used when lazily
     74   // creating |session_|.
     75   scoped_refptr<HostResolver> host_resolver_;
     76   scoped_refptr<ProxyService> proxy_service_;
     77 
     78   // The SSL config service being used for the session.
     79   scoped_refptr<SSLConfigService> ssl_config_service_;
     80 
     81   scoped_refptr<HttpNetworkSession> session_;
     82   scoped_refptr<FlipSessionPool> flip_session_pool_;
     83 
     84   bool suspended_;
     85   static bool force_flip_;
     86 };
     87 
     88 }  // namespace net
     89 
     90 #endif  // NET_HTTP_HTTP_NETWORK_LAYER_H_
     91