blob: 89e5329d5d99bece047b8e9823dd4e4219c49122 [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
7#include "base/bind.h"
8#include "base/compiler_specific.h"
skyostil4891b25b2015-06-11 11:43:459#include "base/location.h"
[email protected]dcbe3df2014-02-06 23:08:3710#include "base/logging.h"
skyostil4891b25b2015-06-11 11:43:4511#include "base/single_thread_task_runner.h"
12#include "base/thread_task_runner_handle.h"
[email protected]dcbe3df2014-02-06 23:08:3713#include "net/base/load_timing_info.h"
14#include "net/base/upload_progress.h"
ttuttlec0c828492015-05-15 01:25:5515#include "net/http/http_response_info.h"
ttuttle1f2d7e92015-04-28 16:17:4716#include "net/socket/connection_attempts.h"
[email protected]dcbe3df2014-02-06 23:08:3717
18namespace net {
19
20class AuthCredentials;
21class BoundNetLog;
22class HttpRequestHeaders;
23class IOBuffer;
24class X509Certificate;
25
[email protected]dcbe3df2014-02-06 23:08:3726namespace {
27
28// A simple class to interpose between the cache and network http layers.
29// These transactions can be generated by the FailingHttpTransactionFactory
30// to test interactions between cache and network.
31class FailingHttpTransaction : public HttpTransaction {
32 public:
33 explicit FailingHttpTransaction(Error error);
dchengb03027d2014-10-21 12:00:2034 ~FailingHttpTransaction() override;
[email protected]dcbe3df2014-02-06 23:08:3735
36 // HttpTransaction
dchengb03027d2014-10-21 12:00:2037 int Start(const HttpRequestInfo* request_info,
38 const CompletionCallback& callback,
39 const BoundNetLog& net_log) override;
40 int RestartIgnoringLastError(const CompletionCallback& callback) override;
41 int RestartWithCertificate(X509Certificate* client_cert,
42 const CompletionCallback& callback) override;
43 int RestartWithAuth(const AuthCredentials& credentials,
44 const CompletionCallback& callback) override;
45 bool IsReadyToRestartForAuth() override;
46 int Read(IOBuffer* buf,
47 int buf_len,
48 const CompletionCallback& callback) override;
49 void StopCaching() override;
50 bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override;
51 int64 GetTotalReceivedBytes() const override;
52 void DoneReading() override;
53 const HttpResponseInfo* GetResponseInfo() const override;
54 LoadState GetLoadState() const override;
55 UploadProgress GetUploadProgress() const override;
ttuttle859dc7a2015-04-23 19:42:2956 void SetQuicServerInfo(QuicServerInfo* quic_server_info) override;
dchengb03027d2014-10-21 12:00:2057 bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override;
58 void SetPriority(RequestPriority priority) override;
59 void SetWebSocketHandshakeStreamCreateHelper(
mostynbba063d6032014-10-09 11:01:1360 WebSocketHandshakeStreamBase::CreateHelper* create_helper) override;
dchengb03027d2014-10-21 12:00:2061 void SetBeforeNetworkStartCallback(
mostynbba063d6032014-10-09 11:01:1362 const BeforeNetworkStartCallback& callback) override;
dchengb03027d2014-10-21 12:00:2063 void SetBeforeProxyHeadersSentCallback(
mostynbba063d6032014-10-09 11:01:1364 const BeforeProxyHeadersSentCallback& callback) override;
dchengb03027d2014-10-21 12:00:2065 int ResumeNetworkStart() override;
ttuttle1f2d7e92015-04-28 16:17:4766 void GetConnectionAttempts(ConnectionAttempts* out) const override;
[email protected]dcbe3df2014-02-06 23:08:3767
68 private:
69 Error error_;
ttuttlec0c828492015-05-15 01:25:5570 HttpResponseInfo response_;
[email protected]dcbe3df2014-02-06 23:08:3771};
72
73FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) {
74 DCHECK_LT(error, OK);
75}
76
77FailingHttpTransaction::~FailingHttpTransaction() {}
78
79int FailingHttpTransaction::Start(const HttpRequestInfo* request_info,
80 const CompletionCallback& callback,
81 const BoundNetLog& net_log) {
skyostil4891b25b2015-06-11 11:43:4582 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
83 base::Bind(callback, error_));
[email protected]dcbe3df2014-02-06 23:08:3784 return ERR_IO_PENDING;
85}
86
87int FailingHttpTransaction::RestartIgnoringLastError(
88 const CompletionCallback& callback) {
89 return ERR_FAILED;
90}
91
92int FailingHttpTransaction::RestartWithCertificate(
93 X509Certificate* client_cert,
94 const CompletionCallback& callback) {
95 return ERR_FAILED;
96}
97
98int FailingHttpTransaction::RestartWithAuth(
99 const AuthCredentials& credentials,
100 const CompletionCallback& callback) {
101 return ERR_FAILED;
102}
103
104bool FailingHttpTransaction::IsReadyToRestartForAuth() {
105 return false;
106}
107
108int FailingHttpTransaction::Read(IOBuffer* buf, int buf_len,
109 const CompletionCallback& callback) {
110 NOTREACHED();
111 return ERR_FAILED;
112}
113
114void FailingHttpTransaction::StopCaching() {}
115
116bool FailingHttpTransaction::GetFullRequestHeaders(
117 HttpRequestHeaders* headers) const {
118 return false;
119}
120
121int64 FailingHttpTransaction::GetTotalReceivedBytes() const {
122 return 0;
123}
124
125void FailingHttpTransaction::DoneReading() {
126 NOTREACHED();
127}
128
129const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const {
ttuttlec0c828492015-05-15 01:25:55130 return &response_;
[email protected]dcbe3df2014-02-06 23:08:37131}
132
133LoadState FailingHttpTransaction::GetLoadState() const {
134 return LOAD_STATE_IDLE;
135}
136
137UploadProgress FailingHttpTransaction::GetUploadProgress() const {
138 return UploadProgress();
139}
140
141void FailingHttpTransaction::SetQuicServerInfo(
ttuttle859dc7a2015-04-23 19:42:29142 QuicServerInfo* quic_server_info) {
143}
[email protected]dcbe3df2014-02-06 23:08:37144
145bool FailingHttpTransaction::GetLoadTimingInfo(
146 LoadTimingInfo* load_timing_info) const {
147 return false;
148}
149
150void FailingHttpTransaction::SetPriority(RequestPriority priority) {}
151
152void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper(
153 WebSocketHandshakeStreamBase::CreateHelper* create_helper) {
154 NOTREACHED();
155}
156
157void FailingHttpTransaction::SetBeforeNetworkStartCallback(
158 const BeforeNetworkStartCallback& callback) {
159}
160
[email protected]597a1ab2014-06-26 08:12:27161void FailingHttpTransaction::SetBeforeProxyHeadersSentCallback(
162 const BeforeProxyHeadersSentCallback& callback) {
163}
164
[email protected]dcbe3df2014-02-06 23:08:37165int FailingHttpTransaction::ResumeNetworkStart() {
166 NOTREACHED();
167 return ERR_FAILED;
168}
169
ttuttle1f2d7e92015-04-28 16:17:47170void FailingHttpTransaction::GetConnectionAttempts(
171 ConnectionAttempts* out) const {
172 NOTIMPLEMENTED();
173}
174
[email protected]dcbe3df2014-02-06 23:08:37175} // namespace
176
177FailingHttpTransactionFactory::FailingHttpTransactionFactory(
178 HttpNetworkSession* session,
179 Error error) : session_(session), error_(error) {
180 DCHECK_LT(error, OK);
181}
182
183FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {}
184
185// HttpTransactionFactory:
186int FailingHttpTransactionFactory::CreateTransaction(
187 RequestPriority priority,
188 scoped_ptr<HttpTransaction>* trans) {
189 trans->reset(new FailingHttpTransaction(error_));
190 return OK;
191}
192
193HttpCache* FailingHttpTransactionFactory::GetCache() {
194 return NULL;
195}
196
197HttpNetworkSession* FailingHttpTransactionFactory::GetSession() {
198 return session_;
199}
200
201} // namespace net
202