Index: net/http/failing_http_transaction_factory.cc |
diff --git a/net/http/failing_http_transaction_factory.cc b/net/http/failing_http_transaction_factory.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d08e66e56ef5e26535c70f66a6c67a820f625efb |
--- /dev/null |
+++ b/net/http/failing_http_transaction_factory.cc |
@@ -0,0 +1,177 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "net/http/failing_http_transaction_factory.h" |
+ |
+#include "base/bind.h" |
+#include "base/logging.h" |
+#include "base/message_loop/message_loop.h" |
+#include "net/base/load_timing_info.h" |
+#include "net/base/upload_progress.h" |
+ |
+namespace net { |
+ |
+namespace { |
+ |
+// A simple class to interpose between the cache and network http layers. |
+// These transactions can be generated by the FailingHttpTransactionFactory |
+// to test interactions between cache and network. |
+class FailingHttpTransaction : public HttpTransaction { |
+ public: |
+ explicit FailingHttpTransaction(Error error); |
+ virtual ~FailingHttpTransaction(); |
+ |
+ // HttpTransaction |
+ virtual int Start(const HttpRequestInfo* request_info, |
+ const CompletionCallback& callback, |
+ const BoundNetLog& net_log) OVERRIDE; |
+ virtual int RestartIgnoringLastError( |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int RestartWithCertificate( |
+ X509Certificate* client_cert, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual int RestartWithAuth( |
+ const AuthCredentials& credentials, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual bool IsReadyToRestartForAuth() OVERRIDE; |
+ virtual int Read(IOBuffer* buf, int buf_len, |
+ const CompletionCallback& callback) OVERRIDE; |
+ virtual void StopCaching() OVERRIDE; |
+ virtual bool GetFullRequestHeaders( |
+ HttpRequestHeaders* headers) const OVERRIDE; |
+ virtual int64 GetTotalReceivedBytes() const OVERRIDE; |
+ virtual void DoneReading() OVERRIDE; |
+ virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE; |
+ virtual LoadState GetLoadState() const OVERRIDE; |
+ virtual UploadProgress GetUploadProgress() const OVERRIDE; |
+ virtual bool GetLoadTimingInfo( |
+ LoadTimingInfo* load_timing_info) const OVERRIDE; |
+ virtual void SetPriority(RequestPriority priority) OVERRIDE; |
+ virtual void SetWebSocketHandshakeStreamCreateHelper( |
+ WebSocketHandshakeStreamBase::CreateHelper* create_helper) OVERRIDE; |
+ virtual void SetBeforeNetworkStartCallback( |
+ const BeforeNetworkStartCallback& callback) OVERRIDE; |
+ virtual int ResumeNetworkStart() OVERRIDE; |
+ |
+ private: |
+ Error error_; |
+}; |
+ |
+FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) { |
+ DCHECK_LT(error, OK); |
+} |
+ |
+FailingHttpTransaction::~FailingHttpTransaction() {} |
+ |
+int FailingHttpTransaction::Start(const HttpRequestInfo* request_info, |
+ const CompletionCallback& callback, |
+ const BoundNetLog& net_log) { |
+ base::MessageLoop::current()->PostTask( |
+ FROM_HERE, base::Bind(callback, error_)); |
+ return ERR_IO_PENDING; |
+} |
+ |
+int FailingHttpTransaction::RestartIgnoringLastError( |
+ const CompletionCallback& callback) { |
+ return ERR_FAILED; |
+} |
+ |
+int FailingHttpTransaction::RestartWithCertificate( |
+ X509Certificate* client_cert, |
+ const CompletionCallback& callback) { |
+ return ERR_FAILED; |
+} |
+ |
+int FailingHttpTransaction::RestartWithAuth( |
+ const AuthCredentials& credentials, |
+ const CompletionCallback& callback) { |
+ return ERR_FAILED; |
+} |
+ |
+bool FailingHttpTransaction::IsReadyToRestartForAuth() { |
+ return false; |
+} |
+ |
+int FailingHttpTransaction::Read(IOBuffer* buf, int buf_len, |
+ const CompletionCallback& callback) { |
+ NOTREACHED(); |
+ return ERR_FAILED; |
+} |
+ |
+void FailingHttpTransaction::StopCaching() {} |
+ |
+bool FailingHttpTransaction::GetFullRequestHeaders( |
+ HttpRequestHeaders* headers) const { |
+ return false; |
+} |
+ |
+int64 FailingHttpTransaction::GetTotalReceivedBytes() const { |
+ return 0; |
+} |
+ |
+void FailingHttpTransaction::DoneReading() { |
+ NOTREACHED(); |
+} |
+ |
+const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const { |
+ return NULL; |
+} |
+ |
+LoadState FailingHttpTransaction::GetLoadState() const { |
+ return LOAD_STATE_IDLE; |
+} |
+ |
+UploadProgress FailingHttpTransaction::GetUploadProgress() const { |
+ return UploadProgress(); |
+} |
+ |
+bool FailingHttpTransaction::GetLoadTimingInfo( |
+ LoadTimingInfo* load_timing_info) const { |
+ return false; |
+} |
+ |
+void FailingHttpTransaction::SetPriority(RequestPriority priority) {} |
+ |
+void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper( |
+ WebSocketHandshakeStreamBase::CreateHelper* create_helper) { |
+ NOTREACHED(); |
+} |
+ |
+void FailingHttpTransaction::SetBeforeNetworkStartCallback( |
+ const BeforeNetworkStartCallback& callback) { |
+} |
+ |
+int FailingHttpTransaction::ResumeNetworkStart() { |
+ NOTREACHED(); |
+ return ERR_FAILED; |
+} |
+ |
+} // namespace |
+ |
+FailingHttpTransactionFactory::FailingHttpTransactionFactory( |
+ HttpNetworkSession* session, |
+ Error error) : session_(session), error_(error) { |
+ DCHECK_LT(error, OK); |
+} |
+ |
+FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {} |
+ |
+// HttpTransactionFactory: |
+int FailingHttpTransactionFactory::CreateTransaction( |
+ RequestPriority priority, |
+ scoped_ptr<HttpTransaction>* trans) { |
+ trans->reset(new FailingHttpTransaction(error_)); |
+ return OK; |
+} |
+ |
+HttpCache* FailingHttpTransactionFactory::GetCache() { |
+ return NULL; |
+} |
+ |
+HttpNetworkSession* FailingHttpTransactionFactory::GetSession() { |
+ return session_; |
+} |
+ |
+} // namespace net |
+ |