Home | History | Annotate | Download | only in http
      1 // Copyright (c) 2011 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 #pragma once
      8 
      9 #include <string>
     10 
     11 #include "base/memory/ref_counted.h"
     12 #include "base/memory/scoped_ptr.h"
     13 #include "base/threading/non_thread_safe.h"
     14 #include "net/base/net_export.h"
     15 #include "net/http/http_transaction_factory.h"
     16 
     17 namespace net {
     18 
     19 class CertVerifier;
     20 class ClientSocketFactory;
     21 class DnsCertProvenanceChecker;
     22 class DnsRRResolver;
     23 class HostResolver;
     24 class HttpAuthHandlerFactory;
     25 class HttpNetworkSession;
     26 class NetLog;
     27 class NetworkDelegate;
     28 class ProxyService;
     29 class SpdySessionPool;
     30 class SSLConfigService;
     31 class SSLHostInfoFactory;
     32 
     33 class NET_EXPORT HttpNetworkLayer : public HttpTransactionFactory,
     34                                     public base::NonThreadSafe {
     35  public:
     36   // Construct a HttpNetworkLayer with an existing HttpNetworkSession which
     37   // contains a valid ProxyService.
     38   explicit HttpNetworkLayer(HttpNetworkSession* session);
     39   virtual ~HttpNetworkLayer();
     40 
     41   // Create a transaction factory that instantiate a network layer over an
     42   // existing network session. Network session contains some valuable
     43   // information (e.g. authentication data) that we want to share across
     44   // multiple network layers. This method exposes the implementation details
     45   // of a network layer, use this method with an existing network layer only
     46   // when network session is shared.
     47   static HttpTransactionFactory* CreateFactory(HttpNetworkSession* session);
     48 
     49   // Enable the spdy protocol.
     50   // Without calling this function, SPDY is disabled.  The mode can be:
     51   //   ""            : (default) SSL and compression are enabled, flow
     52   //                   control disabled.
     53   //   "no-ssl"      : disables SSL.
     54   //   "no-compress" : disables compression.
     55   //   "flow-control": enables flow control.
     56   //   "none"        : disables both SSL and compression.
     57   static void EnableSpdy(const std::string& mode);
     58 
     59   // HttpTransactionFactory methods:
     60   virtual int CreateTransaction(scoped_ptr<HttpTransaction>* trans);
     61   virtual HttpCache* GetCache();
     62   virtual HttpNetworkSession* GetSession();
     63   virtual void Suspend(bool suspend);
     64 
     65  private:
     66   const scoped_refptr<HttpNetworkSession> session_;
     67   bool suspended_;
     68 };
     69 
     70 }  // namespace net
     71 
     72 #endif  // NET_HTTP_HTTP_NETWORK_LAYER_H_
     73