spdy_test_util_common.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef NET_SPDY_SPDY_TEST_UTIL_COMMON_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define NET_SPDY_SPDY_TEST_UTIL_COMMON_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "crypto/ec_private_key.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "crypto/ec_signature_creator.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/completion_callback.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/request_priority.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/test_completion_callback.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cert/cert_verifier.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/http/http_auth_handler_factory.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/http/http_network_session.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/http/http_server_properties_impl.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/proxy/proxy_service.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/socket/next_proto.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/socket/socket_test_util.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/spdy/spdy_protocol.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/ssl/ssl_config_service_defaults.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request_context.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request_context_storage.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GURL; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace net { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BoundNetLog; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdySession; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyStream; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SpdyStreamRequest; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Default upload data used by both, mock objects and framer when creating 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// data frames. 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kDefaultURL[] = "http://www.google.com"; 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kUploadData[] = "hello!"; 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const int kUploadDataSize = arraysize(kUploadData)-1; 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Chop a frame into an array of MockWrites. 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |data| is the frame to chop. 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |length| is the length of the frame to chop. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |num_chunks| is the number of chunks to create. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockWrite* ChopWriteFrame(const char* data, int length, int num_chunks); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Chop a SpdyFrame into an array of MockWrites. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |frame| is the frame to chop. 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |num_chunks| is the number of chunks to create. 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockWrite* ChopWriteFrame(const SpdyFrame& frame, int num_chunks); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Chop a frame into an array of MockReads. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |data| is the frame to chop. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |length| is the length of the frame to chop. 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |num_chunks| is the number of chunks to create. 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockRead* ChopReadFrame(const char* data, int length, int num_chunks); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Chop a SpdyFrame into an array of MockReads. 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |frame| is the frame to chop. 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |num_chunks| is the number of chunks to create. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockRead* ChopReadFrame(const SpdyFrame& frame, int num_chunks); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Adds headers and values to a map. 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |extra_headers| is an array of { name, value } pairs, arranged as strings 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// where the even entries are the header names, and the odd entries are the 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// header values. 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// |headers| gets filled in from |extra_headers|. 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AppendToHeaderBlock(const char* const extra_headers[], 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int extra_header_count, 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyHeaderBlock* headers); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Writes |str| of the given |len| to the buffer pointed to by |buffer_handle|. 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Uses a template so buffer_handle can be a char* or an unsigned char*. 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Updates the |*buffer_handle| pointer by |len| 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Returns the number of bytes written into *|buffer_handle| 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)template<class T> 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int AppendToBuffer(const char* str, 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int len, 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) T** buffer_handle, 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int* buffer_len_remaining) { 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GT(len, 0); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(NULL != buffer_handle) << "NULL buffer handle"; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(NULL != *buffer_handle) << "NULL pointer"; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(NULL != buffer_len_remaining) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << "NULL buffer remainder length pointer"; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_GE(*buffer_len_remaining, len) << "Insufficient buffer size"; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) memcpy(*buffer_handle, str, len); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *buffer_handle += len; 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *buffer_len_remaining -= len; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return len; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Writes |val| to a location of size |len|, in big-endian format. 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// in the buffer pointed to by |buffer_handle|. 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Updates the |*buffer_handle| pointer by |len| 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Returns the number of bytes written 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int AppendToBuffer(int val, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int len, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) unsigned char** buffer_handle, 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int* buffer_len_remaining); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Create an async MockWrite from the given SpdyFrame. 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockWrite CreateMockWrite(const SpdyFrame& req); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Create an async MockWrite from the given SpdyFrame and sequence number. 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockWrite CreateMockWrite(const SpdyFrame& req, int seq); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockWrite CreateMockWrite(const SpdyFrame& req, int seq, IoMode mode); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Create a MockRead from the given SpdyFrame. 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockRead CreateMockRead(const SpdyFrame& resp); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Create a MockRead from the given SpdyFrame and sequence number. 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockRead CreateMockRead(const SpdyFrame& resp, int seq); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MockRead CreateMockRead(const SpdyFrame& resp, int seq, IoMode mode); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Combines the given SpdyFrames into the given char array and returns 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// the total length. 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int CombineFrames(const SpdyFrame** frames, int num_frames, 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) char* buff, int buff_len); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Returns the SpdyPriority embedded in the given frame. Returns true 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and fills in |priority| on success. 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool GetSpdyPriority(int version, 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SpdyFrame& frame, 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyPriority* priority); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tries to create a stream in |session| synchronously. Returns NULL 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// on failure. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<SpdyStream> CreateStreamSynchronously( 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const scoped_refptr<SpdySession>& session, 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RequestPriority priority, 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const BoundNetLog& net_log); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Helper class used by some tests to release two streams as soon as 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// one is created. 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StreamReleaserCallback : public TestCompletionCallbackBase { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StreamReleaserCallback(SpdySession* session, 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SpdyStream* first_stream); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~StreamReleaserCallback(); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns a callback that releases |request|'s stream as well as 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |first_stream|. 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CompletionCallback MakeCallback(SpdyStreamRequest* request); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnComplete(SpdyStreamRequest* request, int result); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<SpdySession> session_; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<SpdyStream> first_stream_; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const size_t kSpdyCredentialSlotUnused = 0; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This struct holds information used to construct spdy control and data frames. 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct SpdyHeaderInfo { 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyFrameType kind; 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyStreamId id; 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyStreamId assoc_id; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyPriority priority; 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t credential_slot; // SPDY3 only 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyControlFlags control_flags; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool compressed; 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyRstStreamStatus status; 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* data; 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint32 data_length; 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdyDataFlags data_flags; 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// An ECSignatureCreator that returns deterministic signatures. 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockECSignatureCreator : public crypto::ECSignatureCreator { 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit MockECSignatureCreator(crypto::ECPrivateKey* key); 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // crypto::ECSignatureCreator 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool Sign(const uint8* data, 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int data_len, 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<uint8>* signature) OVERRIDE; 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool DecodeSignature(const std::vector<uint8>& signature, 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<uint8>* out_raw_sig) OVERRIDE; 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) crypto::ECPrivateKey* key_; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockECSignatureCreator); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// An ECSignatureCreatorFactory creates MockECSignatureCreator. 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockECSignatureCreatorFactory : public crypto::ECSignatureCreatorFactory { 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockECSignatureCreatorFactory(); 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~MockECSignatureCreatorFactory(); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // crypto::ECSignatureCreatorFactory 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual crypto::ECSignatureCreator* Create( 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) crypto::ECPrivateKey* key) OVERRIDE; 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MockECSignatureCreatorFactory); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Helper to manage the lifetimes of the dependencies for a 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// HttpNetworkTransaction. 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct SpdySessionDependencies { 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Default set of dependencies -- "null" proxy service. 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit SpdySessionDependencies(NextProto protocol); 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Custom proxy service dependency. 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdySessionDependencies(NextProto protocol, ProxyService* proxy_service); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ~SpdySessionDependencies(); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static HttpNetworkSession* SpdyCreateSession( 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdySessionDependencies* session_deps); 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static HttpNetworkSession* SpdyCreateSessionDeterministic( 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdySessionDependencies* session_deps); 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static HttpNetworkSession::Params CreateSessionParams( 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdySessionDependencies* session_deps); 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // NOTE: host_resolver must be ordered before http_auth_handler_factory. 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<MockHostResolverBase> host_resolver; 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<CertVerifier> cert_verifier; 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ProxyService> proxy_service; 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<SSLConfigService> ssl_config_service; 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<MockClientSocketFactory> socket_factory; 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<DeterministicMockClientSocketFactory> deterministic_socket_factory; 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) HttpServerPropertiesImpl http_server_properties; 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_ip_pooling; 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_compression; 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_ping; 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_user_alternate_protocol_ports; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NextProto protocol; 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t stream_initial_recv_window_size; 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdySession::TimeFunc time_func; 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string trusted_spdy_proxy; 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NetLog* net_log; 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SpdyURLRequestContext : public URLRequestContext { 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit SpdyURLRequestContext(NextProto protocol); 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SpdyURLRequestContext(); 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockClientSocketFactory& socket_factory() { return socket_factory_; } 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MockClientSocketFactory socket_factory_; 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::URLRequestContextStorage storage_; 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class SpdySessionPoolPeer { 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit SpdySessionPoolPeer(SpdySessionPool* pool);;;; 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddAlias(const IPEndPoint& address, const HostPortProxyPair& pair); 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveAliases(const HostPortProxyPair& pair); 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveSpdySession(const scoped_refptr<SpdySession>& session); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DisableDomainAuthenticationVerification(); 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void EnableSendingInitialSettings(bool enabled); 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SpdySessionPool* const pool_; 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SpdySessionPoolPeer); 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace net 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // NET_SPDY_SPDY_TEST_UTIL_COMMON_H_ 277