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