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