• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
12 namespace crypto {
13 class ECPrivateKey;
14 }  // namespace crypto
15 
16 namespace net {
17 
18 class ChannelIDService;
19 
20 class 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.
35 class ChannelIDSourceChromium : public ChannelIDSource {
36  public:
37   explicit ChannelIDSourceChromium(
38       ChannelIDService* channel_id_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   ChannelIDService* const channel_id_service_;
58 
59   DISALLOW_COPY_AND_ASSIGN(ChannelIDSourceChromium);
60 };
61 
62 }  // namespace net
63 
64 #endif  // NET_QUIC_CRYPTO_CHANNEL_ID_CHROMIUM_H_
65