// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef NET_QUIC_QUIC_CHROMIUM_CLIENT_SESSION_PEER_H_
#define NET_QUIC_QUIC_CHROMIUM_CLIENT_SESSION_PEER_H_

#include <string>

#include "base/macros.h"
#include "net/third_party/quic/core/quic_packets.h"
#include "starboard/types.h"

namespace net {

class QuicChromiumClientSession;
class QuicChromiumClientStream;

namespace test {

class QuicChromiumClientSessionPeer {
 public:
  static void SetHostname(QuicChromiumClientSession* session,
                          const std::string& hostname);

  static uint64_t GetPushedBytesCount(QuicChromiumClientSession* session);

  static uint64_t GetPushedAndUnclaimedBytesCount(
      QuicChromiumClientSession* session);

  static QuicChromiumClientStream* CreateOutgoingStream(
      QuicChromiumClientSession* session);

 private:
  DISALLOW_COPY_AND_ASSIGN(QuicChromiumClientSessionPeer);
};

}  // namespace test
}  // namespace net

#endif  // NET_QUIC_QUIC_CHROMIUM_CLIENT_SESSION_PEER_H_
