channel_id_chromium.h revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
6#define NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
7
8#include <set>
9
10#include "net/quic/crypto/channel_id.h"
11
12namespace crypto {
13class ECPrivateKey;
14}  // namespace crypto
15
16namespace net {
17
18class ServerBoundCertService;
19
20class NET_EXPORT_PRIVATE ChannelIDKeyChromium: public ChannelIDKey {
21 public:
22  explicit ChannelIDKeyChromium(crypto::ECPrivateKey* ec_private_key);
23  virtual ~ChannelIDKeyChromium();
24
25  // ChannelIDKey interface
26  virtual bool Sign(base::StringPiece signed_data,
27                    std::string* out_signature) const OVERRIDE;
28  virtual std::string SerializeKey() const OVERRIDE;
29
30 private:
31  scoped_ptr<crypto::ECPrivateKey> ec_private_key_;
32};
33
34// ChannelIDSourceChromium implements the QUIC ChannelIDSource interface.
35class ChannelIDSourceChromium : public ChannelIDSource {
36 public:
37  explicit ChannelIDSourceChromium(
38      ServerBoundCertService* server_bound_cert_service);
39  virtual ~ChannelIDSourceChromium();
40
41  // ChannelIDSource interface
42  virtual QuicAsyncStatus GetChannelIDKey(
43      const std::string& hostname,
44      scoped_ptr<ChannelIDKey>* channel_id_key,
45      ChannelIDSourceCallback* callback) OVERRIDE;
46
47 private:
48  class Job;
49  typedef std::set<Job*> JobSet;
50
51  void OnJobComplete(Job* job);
52
53  // Set owning pointers to active jobs.
54  JobSet active_jobs_;
55
56  // The service for retrieving Channel ID keys.
57  ServerBoundCertService* const server_bound_cert_service_;
58
59  DISALLOW_COPY_AND_ASSIGN(ChannelIDSourceChromium);
60};
61
62}  // namespace net
63
64#endif  // NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
65