failing_http_transaction_factory.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/http/failing_http_transaction_factory.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/bind.h"
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/logging.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/message_loop/message_loop.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/base/load_timing_info.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/base/upload_progress.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace net {
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class AuthCredentials;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BoundNetLog;
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class HttpRequestHeaders;
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class IOBuffer;
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class X509Certificate;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct HttpRequestInfo;
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace {
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A simple class to interpose between the cache and network http layers.
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// These transactions can be generated by the FailingHttpTransactionFactory
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// to test interactions between cache and network.
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FailingHttpTransaction : public HttpTransaction {
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit FailingHttpTransaction(Error error);
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~FailingHttpTransaction();
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // HttpTransaction
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int Start(const HttpRequestInfo* request_info,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const CompletionCallback& callback,
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const BoundNetLog& net_log) OVERRIDE;
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int RestartIgnoringLastError(
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const CompletionCallback& callback) OVERRIDE;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int RestartWithCertificate(
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      X509Certificate* client_cert,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const CompletionCallback& callback) OVERRIDE;
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int RestartWithAuth(
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const AuthCredentials& credentials,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const CompletionCallback& callback) OVERRIDE;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool IsReadyToRestartForAuth() OVERRIDE;
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int Read(IOBuffer* buf, int buf_len,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                   const CompletionCallback& callback) OVERRIDE;
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void StopCaching() OVERRIDE;
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool GetFullRequestHeaders(
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      HttpRequestHeaders* headers) const OVERRIDE;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int64 GetTotalReceivedBytes() const OVERRIDE;
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DoneReading() OVERRIDE;
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const HttpResponseInfo* GetResponseInfo() const OVERRIDE;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual LoadState GetLoadState() const OVERRIDE;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual UploadProgress GetUploadProgress() const OVERRIDE;
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetQuicServerInfo(
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      net::QuicServerInfo* quic_server_info) OVERRIDE;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool GetLoadTimingInfo(
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      LoadTimingInfo* load_timing_info) const OVERRIDE;
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetPriority(RequestPriority priority) OVERRIDE;
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetWebSocketHandshakeStreamCreateHelper(
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      WebSocketHandshakeStreamBase::CreateHelper* create_helper) OVERRIDE;
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetBeforeNetworkStartCallback(
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const BeforeNetworkStartCallback& callback) OVERRIDE;
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual int ResumeNetworkStart() OVERRIDE;
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  Error error_;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FailingHttpTransaction::FailingHttpTransaction(Error error) : error_(error) {
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK_LT(error, OK);
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FailingHttpTransaction::~FailingHttpTransaction() {}
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransaction::Start(const HttpRequestInfo* request_info,
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  const CompletionCallback& callback,
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  const BoundNetLog& net_log)  {
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::MessageLoop::current()->PostTask(
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      FROM_HERE, base::Bind(callback, error_));
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ERR_IO_PENDING;
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransaction::RestartIgnoringLastError(
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const CompletionCallback& callback)  {
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ERR_FAILED;
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransaction::RestartWithCertificate(
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    X509Certificate* client_cert,
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const CompletionCallback& callback)  {
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ERR_FAILED;
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransaction::RestartWithAuth(
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const AuthCredentials& credentials,
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const CompletionCallback& callback)  {
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ERR_FAILED;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FailingHttpTransaction::IsReadyToRestartForAuth()  {
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransaction::Read(IOBuffer* buf, int buf_len,
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                 const CompletionCallback& callback)  {
1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NOTREACHED();
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ERR_FAILED;
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FailingHttpTransaction::StopCaching()  {}
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FailingHttpTransaction::GetFullRequestHeaders(
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    HttpRequestHeaders* headers) const  {
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int64 FailingHttpTransaction::GetTotalReceivedBytes() const  {
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return 0;
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FailingHttpTransaction::DoneReading()  {
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NOTREACHED();
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const HttpResponseInfo* FailingHttpTransaction::GetResponseInfo() const  {
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)LoadState FailingHttpTransaction::GetLoadState() const  {
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return LOAD_STATE_IDLE;
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)UploadProgress FailingHttpTransaction::GetUploadProgress() const  {
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return UploadProgress();
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FailingHttpTransaction::SetQuicServerInfo(
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    net::QuicServerInfo* quic_server_info) {}
1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FailingHttpTransaction::GetLoadTimingInfo(
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    LoadTimingInfo* load_timing_info) const  {
1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FailingHttpTransaction::SetPriority(RequestPriority priority)  {}
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FailingHttpTransaction::SetWebSocketHandshakeStreamCreateHelper(
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    WebSocketHandshakeStreamBase::CreateHelper* create_helper)  {
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NOTREACHED();
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FailingHttpTransaction::SetBeforeNetworkStartCallback(
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const BeforeNetworkStartCallback& callback)  {
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransaction::ResumeNetworkStart()  {
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  NOTREACHED();
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return ERR_FAILED;
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FailingHttpTransactionFactory::FailingHttpTransactionFactory(
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    HttpNetworkSession* session,
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Error error) : session_(session), error_(error) {
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DCHECK_LT(error, OK);
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FailingHttpTransactionFactory::~FailingHttpTransactionFactory() {}
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// HttpTransactionFactory:
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FailingHttpTransactionFactory::CreateTransaction(
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    RequestPriority priority,
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    scoped_ptr<HttpTransaction>* trans) {
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  trans->reset(new FailingHttpTransaction(error_));
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return OK;
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)HttpCache* FailingHttpTransactionFactory::GetCache() {
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)HttpNetworkSession* FailingHttpTransactionFactory::GetSession() {
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return session_;
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace net
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
192