| // 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 <utility> |
| |
| #include "base/bind.h" |
| #include "base/compiler_specific.h" |
| #include "base/location.h" |
| #include "base/logging.h" |
| #include "base/single_thread_task_runner.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "net/base/completion_once_callback.h" |
| #include "net/base/load_timing_info.h" |
| #include "net/base/net_error_details.h" |
| #include "net/http/http_response_info.h" |
| #include "net/socket/connection_attempts.h" |
| #include "starboard/types.h" |
| |
| namespace net { |
| |
| class AuthCredentials; |
| class HttpRequestHeaders; |
| class IOBuffer; |
| class NetLogWithSource; |
| class SSLPrivateKey; |
| class X509Certificate; |
| |
| 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); |
| ~FailingHttpTransaction() override; |
| |
| // HttpTransaction |
| int Start(const HttpRequestInfo* request_info, |
| CompletionOnceCallback callback, |
| const NetLogWithSource& net_log) override; |
| int RestartIgnoringLastError(CompletionOnceCallback callback) override; |
| int RestartWithCertificate(scoped_refptr<X509Certificate> client_cert, |
| scoped_refptr<SSLPrivateKey> client_private_key, |
| CompletionOnceCallback callback) override; |
| int RestartWithAuth(const AuthCredentials& credentials, |
| CompletionOnceCallback callback) override; |
| bool IsReadyToRestartForAuth() override; |
| int Read(IOBuffer* buf, |
| int buf_len, |
| CompletionOnceCallback callback) override; |
| void StopCaching() override; |
| bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override; |
| int64_t GetTotalReceivedBytes() const override; |
| int64_t GetTotalSentBytes() const override; |
| void DoneReading() override; |
| const HttpResponseInfo* GetResponseInfo() const override; |
| LoadState GetLoadState() const override; |
| void SetQuicServerInfo(QuicServerInfo* quic_server_info) override; |
| bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; |
| bool GetRemoteEndpoint(IPEndPoint* endpoint) const override; |
| void PopulateNetErrorDetails(NetErrorDetails* details) const override; |
| void SetPriority(RequestPriority priority) override; |
| void SetWebSocketHandshakeStreamCreateHelper( |
| WebSocketHandshakeStreamBase::CreateHelper* create_helper) override; |
| void SetBeforeNetworkStartCallback( |
| const BeforeNetworkStartCallback& callback) override; |
| void SetBeforeHeadersSentCallback( |
| const BeforeHeadersSentCallback& callback) override; |
| int ResumeNetworkStart() override; |
| void GetConnectionAttempts(ConnectionAttempts* out) const override; |
| void SetRequestHeadersCallback(RequestHeadersCallback) override {} |
| void SetResponseHeadersCallback(ResponseHeadersCallback) override {} |
| |
| private: |
| Error error_; |
| HttpResponseInfo response_; |
| }; |
| |
| FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) { |
| DCHECK_LT(error, OK); |
| } |
| |
| FailingHttpTransaction::~FailingHttpTransaction() = default; |
| |
| int FailingHttpTransaction::Start(const HttpRequestInfo* request_info, |
| CompletionOnceCallback callback, |
| const NetLogWithSource& net_log) { |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| FROM_HERE, base::BindOnce(std::move(callback), error_)); |
| return ERR_IO_PENDING; |
| } |
| |
| int FailingHttpTransaction::RestartIgnoringLastError( |
| CompletionOnceCallback callback) { |
| return ERR_FAILED; |
| } |
| |
| int FailingHttpTransaction::RestartWithCertificate( |
| scoped_refptr<X509Certificate> client_cert, |
| scoped_refptr<SSLPrivateKey> client_private_key, |
| CompletionOnceCallback callback) { |
| return ERR_FAILED; |
| } |
| |
| int FailingHttpTransaction::RestartWithAuth(const AuthCredentials& credentials, |
| CompletionOnceCallback callback) { |
| return ERR_FAILED; |
| } |
| |
| bool FailingHttpTransaction::IsReadyToRestartForAuth() { |
| return false; |
| } |
| |
| int FailingHttpTransaction::Read(IOBuffer* buf, |
| int buf_len, |
| CompletionOnceCallback callback) { |
| NOTREACHED(); |
| return ERR_FAILED; |
| } |
| |
| void FailingHttpTransaction::StopCaching() {} |
| |
| bool FailingHttpTransaction::GetFullRequestHeaders( |
| HttpRequestHeaders* headers) const { |
| return false; |
| } |
| |
| int64_t FailingHttpTransaction::GetTotalReceivedBytes() const { |
| return 0; |
| } |
| |
| int64_t FailingHttpTransaction::GetTotalSentBytes() const { |
| return 0; |
| } |
| |
| void FailingHttpTransaction::DoneReading() { |
| NOTREACHED(); |
| } |
| |
| const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const { |
| return &response_; |
| } |
| |
| LoadState FailingHttpTransaction::GetLoadState() const { |
| return LOAD_STATE_IDLE; |
| } |
| |
| void FailingHttpTransaction::SetQuicServerInfo( |
| QuicServerInfo* quic_server_info) { |
| } |
| |
| bool FailingHttpTransaction::GetLoadTimingInfo( |
| LoadTimingInfo* load_timing_info) const { |
| return false; |
| } |
| |
| bool FailingHttpTransaction::GetRemoteEndpoint(IPEndPoint* endpoint) const { |
| return false; |
| } |
| |
| void FailingHttpTransaction::PopulateNetErrorDetails( |
| NetErrorDetails* /*details*/) const { |
| return; |
| } |
| |
| void FailingHttpTransaction::SetPriority(RequestPriority priority) {} |
| |
| void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper( |
| WebSocketHandshakeStreamBase::CreateHelper* create_helper) { |
| NOTREACHED(); |
| } |
| |
| void FailingHttpTransaction::SetBeforeNetworkStartCallback( |
| const BeforeNetworkStartCallback& callback) { |
| } |
| |
| void FailingHttpTransaction::SetBeforeHeadersSentCallback( |
| const BeforeHeadersSentCallback& callback) {} |
| |
| int FailingHttpTransaction::ResumeNetworkStart() { |
| NOTREACHED(); |
| return ERR_FAILED; |
| } |
| |
| void FailingHttpTransaction::GetConnectionAttempts( |
| ConnectionAttempts* out) const { |
| NOTIMPLEMENTED(); |
| } |
| |
| } // namespace |
| |
| FailingHttpTransactionFactory::FailingHttpTransactionFactory( |
| HttpNetworkSession* session, |
| Error error) : session_(session), error_(error) { |
| DCHECK_LT(error, OK); |
| } |
| |
| FailingHttpTransactionFactory::~FailingHttpTransactionFactory() = default; |
| |
| // HttpTransactionFactory: |
| int FailingHttpTransactionFactory::CreateTransaction( |
| RequestPriority priority, |
| std::unique_ptr<HttpTransaction>* trans) { |
| trans->reset(new FailingHttpTransaction(error_)); |
| return OK; |
| } |
| |
| HttpCache* FailingHttpTransactionFactory::GetCache() { |
| return NULL; |
| } |
| |
| HttpNetworkSession* FailingHttpTransactionFactory::GetSession() { |
| return session_; |
| } |
| |
| } // namespace net |