| Index: net/quic/crypto/quic_crypto_server_config.cc
 | 
| diff --git a/net/quic/crypto/quic_crypto_server_config.cc b/net/quic/crypto/quic_crypto_server_config.cc
 | 
| index 8d8c203a2244d6b5a9f92c6e803b3150cb240cd1..e2b0583e052d2d586cfe23dea23b8839ed628605 100644
 | 
| --- a/net/quic/crypto/quic_crypto_server_config.cc
 | 
| +++ b/net/quic/crypto/quic_crypto_server_config.cc
 | 
| @@ -147,6 +147,11 @@ class VerifyNonceIsValidAndUniqueCallback
 | 
|  // static
 | 
|  const char QuicCryptoServerConfig::TESTING[] = "secret string for testing";
 | 
|  
 | 
| +PrimaryConfigChangedCallback::PrimaryConfigChangedCallback() {
 | 
| +}
 | 
| +
 | 
| +PrimaryConfigChangedCallback::~PrimaryConfigChangedCallback() {
 | 
| +}
 | 
|  
 | 
|  ValidateClientHelloResultCallback::ValidateClientHelloResultCallback() {
 | 
|  }
 | 
| @@ -416,6 +421,14 @@ bool QuicCryptoServerConfig::SetConfigs(
 | 
|    return ok;
 | 
|  }
 | 
|  
 | 
| +void QuicCryptoServerConfig::GetConfigIds(vector<string>* scids) const {
 | 
| +  base::AutoLock locked(configs_lock_);
 | 
| +  for (ConfigMap::const_iterator it = configs_.begin();
 | 
| +       it != configs_.end(); ++it) {
 | 
| +    scids->push_back(it->first);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  void QuicCryptoServerConfig::ValidateClientHello(
 | 
|      const CryptoHandshakeMessage& client_hello,
 | 
|      IPEndPoint client_ip,
 | 
| @@ -784,6 +797,9 @@ void QuicCryptoServerConfig::SelectNewPrimaryConfig(
 | 
|               << base::HexEncode(
 | 
|                   reinterpret_cast<const char*>(primary_config_->orbit),
 | 
|                   kOrbitSize);
 | 
| +    if (primary_config_changed_cb_.get() != NULL) {
 | 
| +      primary_config_changed_cb_->Run(primary_config_->id);
 | 
| +    }
 | 
|  
 | 
|      return;
 | 
|    }
 | 
| @@ -801,6 +817,9 @@ void QuicCryptoServerConfig::SelectNewPrimaryConfig(
 | 
|                 reinterpret_cast<const char*>(primary_config_->orbit),
 | 
|                 kOrbitSize);
 | 
|    next_config_promotion_time_ = QuicWallTime::Zero();
 | 
| +  if (primary_config_changed_cb_.get() != NULL) {
 | 
| +    primary_config_changed_cb_->Run(primary_config_->id);
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  void QuicCryptoServerConfig::EvaluateClientHello(
 | 
| @@ -1184,6 +1203,12 @@ void QuicCryptoServerConfig::set_server_nonce_strike_register_window_secs(
 | 
|    server_nonce_strike_register_window_secs_ = window_secs;
 | 
|  }
 | 
|  
 | 
| +void QuicCryptoServerConfig::AcquirePrimaryConfigChangedCb(
 | 
| +    PrimaryConfigChangedCallback* cb) {
 | 
| +  base::AutoLock locked(configs_lock_);
 | 
| +  primary_config_changed_cb_.reset(cb);
 | 
| +}
 | 
| +
 | 
|  string QuicCryptoServerConfig::NewSourceAddressToken(
 | 
|      const IPEndPoint& ip,
 | 
|      QuicRandom* rand,
 | 
| 
 |