• 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 #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 
FailingHttpTransaction(Error error)72 FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) {
73   DCHECK_LT(error, OK);
74 }
75 
~FailingHttpTransaction()76 FailingHttpTransaction::~FailingHttpTransaction() {}
77 
Start(const HttpRequestInfo * request_info,const CompletionCallback & callback,const BoundNetLog & net_log)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 
RestartIgnoringLastError(const CompletionCallback & callback)86 int FailingHttpTransaction::RestartIgnoringLastError(
87     const CompletionCallback& callback)  {
88   return ERR_FAILED;
89 }
90 
RestartWithCertificate(X509Certificate * client_cert,const CompletionCallback & callback)91 int FailingHttpTransaction::RestartWithCertificate(
92     X509Certificate* client_cert,
93     const CompletionCallback& callback)  {
94   return ERR_FAILED;
95 }
96 
RestartWithAuth(const AuthCredentials & credentials,const CompletionCallback & callback)97 int FailingHttpTransaction::RestartWithAuth(
98     const AuthCredentials& credentials,
99     const CompletionCallback& callback)  {
100   return ERR_FAILED;
101 }
102 
IsReadyToRestartForAuth()103 bool FailingHttpTransaction::IsReadyToRestartForAuth()  {
104   return false;
105 }
106 
Read(IOBuffer * buf,int buf_len,const CompletionCallback & callback)107 int FailingHttpTransaction::Read(IOBuffer* buf, int buf_len,
108                                  const CompletionCallback& callback)  {
109   NOTREACHED();
110   return ERR_FAILED;
111 }
112 
StopCaching()113 void FailingHttpTransaction::StopCaching()  {}
114 
GetFullRequestHeaders(HttpRequestHeaders * headers) const115 bool FailingHttpTransaction::GetFullRequestHeaders(
116     HttpRequestHeaders* headers) const  {
117   return false;
118 }
119 
GetTotalReceivedBytes() const120 int64 FailingHttpTransaction::GetTotalReceivedBytes() const  {
121   return 0;
122 }
123 
DoneReading()124 void FailingHttpTransaction::DoneReading()  {
125   NOTREACHED();
126 }
127 
GetResponseInfo() const128 const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const  {
129   return NULL;
130 }
131 
GetLoadState() const132 LoadState FailingHttpTransaction::GetLoadState() const  {
133   return LOAD_STATE_IDLE;
134 }
135 
GetUploadProgress() const136 UploadProgress FailingHttpTransaction::GetUploadProgress() const  {
137   return UploadProgress();
138 }
139 
SetQuicServerInfo(net::QuicServerInfo * quic_server_info)140 void FailingHttpTransaction::SetQuicServerInfo(
141     net::QuicServerInfo* quic_server_info) {}
142 
GetLoadTimingInfo(LoadTimingInfo * load_timing_info) const143 bool FailingHttpTransaction::GetLoadTimingInfo(
144     LoadTimingInfo* load_timing_info) const  {
145   return false;
146 }
147 
SetPriority(RequestPriority priority)148 void FailingHttpTransaction::SetPriority(RequestPriority priority)  {}
149 
SetWebSocketHandshakeStreamCreateHelper(WebSocketHandshakeStreamBase::CreateHelper * create_helper)150 void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper(
151     WebSocketHandshakeStreamBase::CreateHelper* create_helper)  {
152   NOTREACHED();
153 }
154 
SetBeforeNetworkStartCallback(const BeforeNetworkStartCallback & callback)155 void FailingHttpTransaction::SetBeforeNetworkStartCallback(
156     const BeforeNetworkStartCallback& callback)  {
157 }
158 
ResumeNetworkStart()159 int FailingHttpTransaction::ResumeNetworkStart()  {
160   NOTREACHED();
161   return ERR_FAILED;
162 }
163 
164 }  // namespace
165 
FailingHttpTransactionFactory(HttpNetworkSession * session,Error error)166 FailingHttpTransactionFactory::FailingHttpTransactionFactory(
167     HttpNetworkSession* session,
168     Error error) : session_(session), error_(error) {
169   DCHECK_LT(error, OK);
170 }
171 
~FailingHttpTransactionFactory()172 FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {}
173 
174 // HttpTransactionFactory:
CreateTransaction(RequestPriority priority,scoped_ptr<HttpTransaction> * trans)175 int FailingHttpTransactionFactory::CreateTransaction(
176     RequestPriority priority,
177     scoped_ptr<HttpTransaction>* trans) {
178   trans->reset(new FailingHttpTransaction(error_));
179   return OK;
180 }
181 
GetCache()182 HttpCache* FailingHttpTransactionFactory::GetCache() {
183   return NULL;
184 }
185 
GetSession()186 HttpNetworkSession* FailingHttpTransactionFactory::GetSession() {
187   return session_;
188 }
189 
190 }  // namespace net
191 
192