http_transaction_unittest.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_HTTP_HTTP_TRANSACTION_UNITTEST_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_HTTP_HTTP_TRANSACTION_UNITTEST_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_transaction.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/string16.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/io_buffer.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/load_flags.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/test_completion_callback.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/disk_cache/disk_cache.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_cache.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_request_info.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_response_headers.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/http/http_response_info.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IOBuffer;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mock transaction data
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// these flags may be combined to form the test_mode field
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_NORMAL = 0,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_SYNC_NET_START = 1 << 0,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_SYNC_NET_READ  = 1 << 1,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_SYNC_CACHE_START = 1 << 2,
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_SYNC_CACHE_READ  = 1 << 3,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_SYNC_CACHE_WRITE  = 1 << 4,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TEST_MODE_SYNC_ALL = (TEST_MODE_SYNC_NET_START | TEST_MODE_SYNC_NET_READ |
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        TEST_MODE_SYNC_CACHE_START | TEST_MODE_SYNC_CACHE_READ |
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        TEST_MODE_SYNC_CACHE_WRITE)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef void (*MockTransactionHandler)(const net::HttpRequestInfo* request,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       std::string* response_status,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       std::string* response_headers,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       std::string* response_data);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MockTransaction {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* url;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* method;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |request_time| is unspecified, the current time will be used.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time request_time;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* request_headers;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int load_flags;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* status;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* response_headers;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |response_time| is unspecified, the current time will be used.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::Time response_time;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char* data;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int test_mode;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockTransactionHandler handler;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::CertStatus cert_status;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const MockTransaction kSimpleGET_Transaction;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const MockTransaction kSimplePOST_Transaction;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const MockTransaction kTypicalGET_Transaction;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const MockTransaction kETagGET_Transaction;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern const MockTransaction kRangeGET_Transaction;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// returns the mock transaction for the given URL
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const MockTransaction* FindMockTransaction(const GURL& url);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Add/Remove a mock transaction that can be accessed via FindMockTransaction.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// There can be only one MockTransaction associated with a given URL.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AddMockTransaction(const MockTransaction* trans);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RemoveMockTransaction(const MockTransaction* trans);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ScopedMockTransaction : MockTransaction {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ScopedMockTransaction() {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddMockTransaction(this);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ScopedMockTransaction(const MockTransaction& t)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      : MockTransaction(t) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AddMockTransaction(this);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~ScopedMockTransaction() {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RemoveMockTransaction(this);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mock http request
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockHttpRequest : public net::HttpRequestInfo {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit MockHttpRequest(const MockTransaction& t);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// use this class to test completely consuming a transaction
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestTransactionConsumer {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit TestTransactionConsumer(net::HttpTransactionFactory* factory);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestTransactionConsumer();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Start(const net::HttpRequestInfo* request,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             const net::BoundNetLog& net_log);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_done() const { return state_ == DONE; }
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int error() const { return error_; }
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const net::HttpResponseInfo* response_info() const {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return trans_->GetResponseInfo();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string& content() const { return content_; }
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum State {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    IDLE,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    STARTING,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    READING,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DONE
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidStart(int result);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidRead(int result);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void DidFinish(int result);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Read();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnIOComplete(int result);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  State state_;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<net::HttpTransaction> trans_;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string content_;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<net::IOBuffer> read_buf_;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int error_;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static int quit_counter_;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// mock network layer
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockNetworkLayer;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This transaction class inspects the available set of mock transactions to
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// find data for the request URL.  It supports IO operations that complete
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// synchronously or asynchronously to help exercise different code paths in the
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HttpCache implementation.
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockNetworkTransaction : public net::HttpTransaction {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit MockNetworkTransaction(MockNetworkLayer* factory);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MockNetworkTransaction();
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int Start(const net::HttpRequestInfo* request,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const net::CompletionCallback& callback,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    const net::BoundNetLog& net_log) OVERRIDE;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int RestartIgnoringLastError(
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const net::CompletionCallback& callback) OVERRIDE;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int RestartWithCertificate(
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::X509Certificate* client_cert,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const net::CompletionCallback& callback) OVERRIDE;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int RestartWithAuth(
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const net::AuthCredentials& credentials,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const net::CompletionCallback& callback) OVERRIDE;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsReadyToRestartForAuth() OVERRIDE;
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int Read(net::IOBuffer* buf, int buf_len,
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const net::CompletionCallback& callback) OVERRIDE;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void StopCaching() OVERRIDE;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DoneReading() OVERRIDE;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const net::HttpResponseInfo* GetResponseInfo() const OVERRIDE;
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::LoadState GetLoadState() const OVERRIDE;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::UploadProgress GetUploadProgress() const OVERRIDE;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CallbackLater(const net::CompletionCallback& callback, int result);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RunCallback(const net::CompletionCallback& callback, int result);
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtrFactory<MockNetworkTransaction> weak_factory_;
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::HttpResponseInfo response_;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string data_;
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int data_cursor_;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int test_mode_;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::WeakPtr<MockNetworkLayer> transaction_factory_;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MockNetworkLayer : public net::HttpTransactionFactory,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         public base::SupportsWeakPtr<MockNetworkLayer> {
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MockNetworkLayer();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~MockNetworkLayer();
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int transaction_count() const { return transaction_count_; }
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool done_reading_called() const { return done_reading_called_; }
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void TransactionDoneReading();
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // net::HttpTransactionFactory:
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int CreateTransaction(
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      scoped_ptr<net::HttpTransaction>* trans,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::HttpTransactionDelegate* delegate) OVERRIDE;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::HttpCache* GetCache() OVERRIDE;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual net::HttpNetworkSession* GetSession() OVERRIDE;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int transaction_count_;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool done_reading_called_;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//-----------------------------------------------------------------------------
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// helpers
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// read the transaction completely
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ReadTransaction(net::HttpTransaction* trans, std::string* result);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // NET_HTTP_HTTP_TRANSACTION_UNITTEST_H_
230