Home | History | Annotate | Download | only in http
      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 #include "net/http/failing_http_transaction_factory.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/compiler_specific.h"
      9 #include "base/logging.h"
     10 #include "base/message_loop/message_loop.h"
     11 #include "net/base/load_timing_info.h"
     12 #include "net/base/upload_progress.h"
     13 
     14 namespace net {
     15 
     16 class AuthCredentials;
     17 class BoundNetLog;
     18 class HttpRequestHeaders;
     19 class IOBuffer;
     20 class X509Certificate;
     21 
     22 struct HttpRequestInfo;
     23 
     24 namespace {
     25 
     26 // A simple class to interpose between the cache and network http layers.
     27 // These transactions can be generated by the FailingHttpTransactionFactory
     28 // to test interactions between cache and network.
     29 class FailingHttpTransaction : public HttpTransaction {
     30  public:
     31   explicit FailingHttpTransaction(Error error);
     32   virtual ~FailingHttpTransaction();
     33 
     34   // HttpTransaction
     35   virtual int Start(const HttpRequestInfo* request_info,
     36                     const CompletionCallback& callback,
     37                     const BoundNetLog& net_log) OVERRIDE;
     38   virtual int RestartIgnoringLastError(
     39       const CompletionCallback& callback) OVERRIDE;
     40   virtual int RestartWithCertificate(
     41       X509Certificate* client_cert,
     42       const CompletionCallback& callback) OVERRIDE;
     43   virtual int RestartWithAuth(
     44       const AuthCredentials& credentials,
     45       const CompletionCallback& callback) OVERRIDE;
     46   virtual bool IsReadyToRestartForAuth() OVERRIDE;
     47   virtual int Read(IOBuffer* buf, int buf_len,
     48                    const CompletionCallback& callback) OVERRIDE;
     49   virtual void StopCaching() OVERRIDE;
     50   virtual bool GetFullRequestHeaders(
     51       HttpRequestHeaders* headers) const OVERRIDE;
     52   virtual int64 GetTotalReceivedBytes() const OVERRIDE;
     53   virtual void DoneReading() OVERRIDE;
     54   virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE;
     55   virtual LoadState GetLoadState() const OVERRIDE;
     56   virtual UploadProgress GetUploadProgress() const OVERRIDE;
     57   virtual void SetQuicServerInfo(
     58       net::QuicServerInfo* quic_server_info) OVERRIDE;
     59   virtual bool GetLoadTimingInfo(
     60       LoadTimingInfo* load_timing_info) const OVERRIDE;
     61   virtual void SetPriority(RequestPriority priority) OVERRIDE;
     62   virtual void SetWebSocketHandshakeStreamCreateHelper(
     63       WebSocketHandshakeStreamBase::CreateHelper* create_helper) OVERRIDE;
     64   virtual void SetBeforeNetworkStartCallback(
     65       const BeforeNetworkStartCallback& callback) OVERRIDE;
     66   virtual int ResumeNetworkStart() OVERRIDE;
     67 
     68  private:
     69   Error error_;
     70 };
     71 
     72 FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) {
     73   DCHECK_LT(error, OK);
     74 }
     75 
     76 FailingHttpTransaction::~FailingHttpTransaction() {}
     77 
     78 int FailingHttpTransaction::Start(const HttpRequestInfo* request_info,
     79                                   const CompletionCallback& callback,
     80                                   const BoundNetLog& net_log)  {
     81   base::MessageLoop::current()->PostTask(
     82       FROM_HERE, base::Bind(callback, error_));
     83   return ERR_IO_PENDING;
     84 }
     85 
     86 int FailingHttpTransaction::RestartIgnoringLastError(
     87     const CompletionCallback& callback)  {
     88   return ERR_FAILED;
     89 }
     90 
     91 int FailingHttpTransaction::RestartWithCertificate(
     92     X509Certificate* client_cert,
     93     const CompletionCallback& callback)  {
     94   return ERR_FAILED;
     95 }
     96 
     97 int FailingHttpTransaction::RestartWithAuth(
     98     const AuthCredentials& credentials,
     99     const CompletionCallback& callback)  {
    100   return ERR_FAILED;
    101 }
    102 
    103 bool FailingHttpTransaction::IsReadyToRestartForAuth()  {
    104   return false;
    105 }
    106 
    107 int FailingHttpTransaction::Read(IOBuffer* buf, int buf_len,
    108                                  const CompletionCallback& callback)  {
    109   NOTREACHED();
    110   return ERR_FAILED;
    111 }
    112 
    113 void FailingHttpTransaction::StopCaching()  {}
    114 
    115 bool FailingHttpTransaction::GetFullRequestHeaders(
    116     HttpRequestHeaders* headers) const  {
    117   return false;
    118 }
    119 
    120 int64 FailingHttpTransaction::GetTotalReceivedBytes() const  {
    121   return 0;
    122 }
    123 
    124 void FailingHttpTransaction::DoneReading()  {
    125   NOTREACHED();
    126 }
    127 
    128 const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const  {
    129   return NULL;
    130 }
    131 
    132 LoadState FailingHttpTransaction::GetLoadState() const  {
    133   return LOAD_STATE_IDLE;
    134 }
    135 
    136 UploadProgress FailingHttpTransaction::GetUploadProgress() const  {
    137   return UploadProgress();
    138 }
    139 
    140 void FailingHttpTransaction::SetQuicServerInfo(
    141     net::QuicServerInfo* quic_server_info) {}
    142 
    143 bool FailingHttpTransaction::GetLoadTimingInfo(
    144     LoadTimingInfo* load_timing_info) const  {
    145   return false;
    146 }
    147 
    148 void FailingHttpTransaction::SetPriority(RequestPriority priority)  {}
    149 
    150 void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper(
    151     WebSocketHandshakeStreamBase::CreateHelper* create_helper)  {
    152   NOTREACHED();
    153 }
    154 
    155 void FailingHttpTransaction::SetBeforeNetworkStartCallback(
    156     const BeforeNetworkStartCallback& callback)  {
    157 }
    158 
    159 int FailingHttpTransaction::ResumeNetworkStart()  {
    160   NOTREACHED();
    161   return ERR_FAILED;
    162 }
    163 
    164 }  // namespace
    165 
    166 FailingHttpTransactionFactory::FailingHttpTransactionFactory(
    167     HttpNetworkSession* session,
    168     Error error) : session_(session), error_(error) {
    169   DCHECK_LT(error, OK);
    170 }
    171 
    172 FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {}
    173 
    174 // HttpTransactionFactory:
    175 int FailingHttpTransactionFactory::CreateTransaction(
    176     RequestPriority priority,
    177     scoped_ptr<HttpTransaction>* trans) {
    178   trans->reset(new FailingHttpTransaction(error_));
    179   return OK;
    180 }
    181 
    182 HttpCache* FailingHttpTransactionFactory::GetCache() {
    183   return NULL;
    184 }
    185 
    186 HttpNetworkSession* FailingHttpTransactionFactory::GetSession() {
    187   return session_;
    188 }
    189 
    190 }  // namespace net
    191 
    192