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