| Index: chrome/browser/extensions/install_signer.cc
|
| diff --git a/chrome/browser/extensions/install_signer.cc b/chrome/browser/extensions/install_signer.cc
|
| index 8e6da408cfe385614c3656a898b27f153c84560a..d7f74c01740528db33f354c3a8a52c21ca2c53e4 100644
|
| --- a/chrome/browser/extensions/install_signer.cc
|
| +++ b/chrome/browser/extensions/install_signer.cc
|
| @@ -48,6 +48,7 @@ const char kInvalidIdsKey[] = "invalid_ids";
|
| const char kProtocolVersionKey[] = "protocol_version";
|
| const char kSaltKey[] = "salt";
|
| const char kSignatureKey[] = "signature";
|
| +const char kTimestampKey[] = "timestamp";
|
|
|
| const size_t kSaltBytes = 32;
|
|
|
| @@ -133,6 +134,8 @@ void InstallSignature::ToValue(base::DictionaryValue* value) const {
|
| base::Base64Encode(signature, &signature_base64);
|
| value->SetString(kSaltKey, salt_base64);
|
| value->SetString(kSignatureKey, signature_base64);
|
| + value->SetString(kTimestampKey,
|
| + base::Int64ToString(timestamp.ToInternalValue()));
|
| }
|
|
|
| // static
|
| @@ -152,6 +155,19 @@ scoped_ptr<InstallSignature> InstallSignature::FromValue(
|
| return result.Pass();
|
| }
|
|
|
| + // Note: earlier versions of the code did not write out a timestamp value
|
| + // so older entries will not necessarily have this.
|
| + if (value.HasKey(kTimestampKey)) {
|
| + std::string timestamp;
|
| + int64 timestamp_value = 0;
|
| + if (!value.GetString(kTimestampKey, ×tamp) ||
|
| + !base::StringToInt64(timestamp, ×tamp_value)) {
|
| + result.reset();
|
| + return result.Pass();
|
| + }
|
| + result->timestamp = base::Time::FromInternalValue(timestamp_value);
|
| + }
|
| +
|
| const base::ListValue* ids = NULL;
|
| if (!value.GetList(kIdsKey, &ids)) {
|
| result.reset();
|
| @@ -343,6 +359,7 @@ void InstallSigner::GetSignature(const SignatureCallback& callback) {
|
| }
|
| url_fetcher_->SetUploadData("application/json", json);
|
| LogRequestStartHistograms();
|
| + request_start_time_ = base::Time::Now();
|
| url_fetcher_->Start();
|
| }
|
|
|
| @@ -437,6 +454,7 @@ void InstallSigner::HandleSignatureResult(const std::string& signature,
|
| result->salt = salt_;
|
| result->signature = signature;
|
| result->expire_date = expire_date;
|
| + result->timestamp = request_start_time_;
|
| bool verified = VerifySignature(*result);
|
| UMA_HISTOGRAM_BOOLEAN("ExtensionInstallSigner.ResultWasValid", verified);
|
| UMA_HISTOGRAM_COUNTS_100("ExtensionInstallSigner.InvalidCount",
|
|
|