blob: be824076278bc7eb0a7689de1747701ec3f812d9 [file] [log] [blame]
[email protected]dcbe3df2014-02-06 23:08:371// 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
sclittlefb249892015-09-10 21:33:227#include <stdint.h>
8
[email protected]dcbe3df2014-02-06 23:08:379#include "base/bind.h"
10#include "base/compiler_specific.h"
skyostil4891b25b2015-06-11 11:43:4511#include "base/location.h"
[email protected]dcbe3df2014-02-06 23:08:3712#include "base/logging.h"
skyostil4891b25b2015-06-11 11:43:4513#include "base/single_thread_task_runner.h"
14#include "base/thread_task_runner_handle.h"
[email protected]dcbe3df2014-02-06 23:08:3715#include "net/base/load_timing_info.h"
zhongyi48704c182015-12-07 07:52:0216#include "net/base/net_error_details.h"
[email protected]dcbe3df2014-02-06 23:08:3717#include "net/base/upload_progress.h"
ttuttlec0c828492015-05-15 01:25:5518#include "net/http/http_response_info.h"
ttuttle1f2d7e92015-04-28 16:17:4719#include "net/socket/connection_attempts.h"
[email protected]dcbe3df2014-02-06 23:08:3720
21namespace net {
22
23class AuthCredentials;
24class BoundNetLog;
25class HttpRequestHeaders;
26class IOBuffer;
svaldez7872fd02015-11-19 21:10:5427class SSLPrivateKey;
[email protected]dcbe3df2014-02-06 23:08:3728class X509Certificate;
29
[email protected]dcbe3df2014-02-06 23:08:3730namespace {
31
32// A simple class to interpose between the cache and network http layers.
33// These transactions can be generated by the FailingHttpTransactionFactory
34// to test interactions between cache and network.
35class FailingHttpTransaction : public HttpTransaction {
36 public:
37 explicit FailingHttpTransaction(Error error);
dchengb03027d2014-10-21 12:00:2038 ~FailingHttpTransaction() override;
[email protected]dcbe3df2014-02-06 23:08:3739
40 // HttpTransaction
dchengb03027d2014-10-21 12:00:2041 int Start(const HttpRequestInfo* request_info,
42 const CompletionCallback& callback,
43 const BoundNetLog& net_log) override;
44 int RestartIgnoringLastError(const CompletionCallback& callback) override;
45 int RestartWithCertificate(X509Certificate* client_cert,
svaldez7872fd02015-11-19 21:10:5446 SSLPrivateKey* client_private_key,
dchengb03027d2014-10-21 12:00:2047 const CompletionCallback& callback) override;
48 int RestartWithAuth(const AuthCredentials& credentials,
49 const CompletionCallback& callback) override;
50 bool IsReadyToRestartForAuth() override;
51 int Read(IOBuffer* buf,
52 int buf_len,
53 const CompletionCallback& callback) override;
54 void StopCaching() override;
55 bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
sclittle4de1bab92015-09-22 21:28:2456 int64_t GetTotalReceivedBytes() const override;
sclittlefb249892015-09-10 21:33:2257 int64_t GetTotalSentBytes() const override;
dchengb03027d2014-10-21 12:00:2058 void DoneReading() override;
59 const HttpResponseInfo* GetResponseInfo() const override;
60 LoadState GetLoadState() const override;
61 UploadProgress GetUploadProgress() const override;
ttuttle859dc7a2015-04-23 19:42:2962 void SetQuicServerInfo(QuicServerInfo* quic_server_info) override;
dchengb03027d2014-10-21 12:00:2063 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override;
ttuttled9dbc652015-09-29 20:00:5964 bool GetRemoteEndpoint(IPEndPoint* endpoint) const override;
zhongyi48704c182015-12-07 07:52:0265 void PopulateNetErrorDetails(NetErrorDetails* details) const override;
dchengb03027d2014-10-21 12:00:2066 void SetPriority(RequestPriority priority) override;
67 void SetWebSocketHandshakeStreamCreateHelper(
mostynbba063d6032014-10-09 11:01:1368 WebSocketHandshakeStreamBase::CreateHelper* create_helper) override;
dchengb03027d2014-10-21 12:00:2069 void SetBeforeNetworkStartCallback(
mostynbba063d6032014-10-09 11:01:1370 const BeforeNetworkStartCallback& callback) override;
dchengb03027d2014-10-21 12:00:2071 void SetBeforeProxyHeadersSentCallback(
mostynbba063d6032014-10-09 11:01:1372 const BeforeProxyHeadersSentCallback& callback) override;
dchengb03027d2014-10-21 12:00:2073 int ResumeNetworkStart() override;
ttuttle1f2d7e92015-04-28 16:17:4774 void GetConnectionAttempts(ConnectionAttempts* out) const override;
[email protected]dcbe3df2014-02-06 23:08:3775
76 private:
77 Error error_;
ttuttlec0c828492015-05-15 01:25:5578 HttpResponseInfo response_;
[email protected]dcbe3df2014-02-06 23:08:3779};
80
81FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) {
82 DCHECK_LT(error, OK);
83}
84
85FailingHttpTransaction::~FailingHttpTransaction() {}
86
87int FailingHttpTransaction::Start(const HttpRequestInfo* request_info,
88 const CompletionCallback& callback,
89 const BoundNetLog& net_log) {
skyostil4891b25b2015-06-11 11:43:4590 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
91 base::Bind(callback, error_));
[email protected]dcbe3df2014-02-06 23:08:3792 return ERR_IO_PENDING;
93}
94
95int FailingHttpTransaction::RestartIgnoringLastError(
96 const CompletionCallback& callback) {
97 return ERR_FAILED;
98}
99
100int FailingHttpTransaction::RestartWithCertificate(
101 X509Certificate* client_cert,
svaldez7872fd02015-11-19 21:10:54102 SSLPrivateKey* client_private_key,
103 const CompletionCallback& callback) {
[email protected]dcbe3df2014-02-06 23:08:37104 return ERR_FAILED;
105}
106
107int FailingHttpTransaction::RestartWithAuth(
108 const AuthCredentials& credentials,
109 const CompletionCallback& callback) {
110 return ERR_FAILED;
111}
112
113bool FailingHttpTransaction::IsReadyToRestartForAuth() {
114 return false;
115}
116
117int FailingHttpTransaction::Read(IOBuffer* buf, int buf_len,
118 const CompletionCallback& callback) {
119 NOTREACHED();
120 return ERR_FAILED;
121}
122
123void FailingHttpTransaction::StopCaching() {}
124
125bool FailingHttpTransaction::GetFullRequestHeaders(
126 HttpRequestHeaders* headers) const {
127 return false;
128}
129
Avi Drissman13fc8932015-12-20 04:40:46130int64_t FailingHttpTransaction::GetTotalReceivedBytes() const {
[email protected]dcbe3df2014-02-06 23:08:37131 return 0;
132}
133
sclittlefb249892015-09-10 21:33:22134int64_t FailingHttpTransaction::GetTotalSentBytes() const {
135 return 0;
136}
137
[email protected]dcbe3df2014-02-06 23:08:37138void FailingHttpTransaction::DoneReading() {
139 NOTREACHED();
140}
141
142const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const {
ttuttlec0c828492015-05-15 01:25:55143 return &response_;
[email protected]dcbe3df2014-02-06 23:08:37144}
145
146LoadState FailingHttpTransaction::GetLoadState() const {
147 return LOAD_STATE_IDLE;
148}
149
150UploadProgress FailingHttpTransaction::GetUploadProgress() const {
151 return UploadProgress();
152}
153
154void FailingHttpTransaction::SetQuicServerInfo(
ttuttle859dc7a2015-04-23 19:42:29155 QuicServerInfo* quic_server_info) {
156}
[email protected]dcbe3df2014-02-06 23:08:37157
158bool FailingHttpTransaction::GetLoadTimingInfo(
159 LoadTimingInfo* load_timing_info) const {
160 return false;
161}
162
ttuttled9dbc652015-09-29 20:00:59163bool FailingHttpTransaction::GetRemoteEndpoint(IPEndPoint* endpoint) const {
164 return false;
165}
166
zhongyi48704c182015-12-07 07:52:02167void FailingHttpTransaction::PopulateNetErrorDetails(
zhongyica364fbb2015-12-12 03:39:12168 NetErrorDetails* /*details*/) const {
zhongyi48704c182015-12-07 07:52:02169 return;
170}
171
[email protected]dcbe3df2014-02-06 23:08:37172void FailingHttpTransaction::SetPriority(RequestPriority priority) {}
173
174void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper(
175 WebSocketHandshakeStreamBase::CreateHelper* create_helper) {
176 NOTREACHED();
177}
178
179void FailingHttpTransaction::SetBeforeNetworkStartCallback(
180 const BeforeNetworkStartCallback& callback) {
181}
182
[email protected]597a1ab2014-06-26 08:12:27183void FailingHttpTransaction::SetBeforeProxyHeadersSentCallback(
184 const BeforeProxyHeadersSentCallback& callback) {
185}
186
[email protected]dcbe3df2014-02-06 23:08:37187int FailingHttpTransaction::ResumeNetworkStart() {
188 NOTREACHED();
189 return ERR_FAILED;
190}
191
ttuttle1f2d7e92015-04-28 16:17:47192void FailingHttpTransaction::GetConnectionAttempts(
193 ConnectionAttempts* out) const {
194 NOTIMPLEMENTED();
195}
196
[email protected]dcbe3df2014-02-06 23:08:37197} // namespace
198
199FailingHttpTransactionFactory::FailingHttpTransactionFactory(
200 HttpNetworkSession* session,
201 Error error) : session_(session), error_(error) {
202 DCHECK_LT(error, OK);
203}
204
205FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {}
206
207// HttpTransactionFactory:
208int FailingHttpTransactionFactory::CreateTransaction(
209 RequestPriority priority,
210 scoped_ptr<HttpTransaction>* trans) {
211 trans->reset(new FailingHttpTransaction(error_));
212 return OK;
213}
214
215HttpCache* FailingHttpTransactionFactory::GetCache() {
216 return NULL;
217}
218
219HttpNetworkSession* FailingHttpTransactionFactory::GetSession() {
220 return session_;
221}
222
223} // namespace net