Index: components/variations/variations_seed_store.cc |
diff --git a/components/variations/variations_seed_store.cc b/components/variations/variations_seed_store.cc |
index e20b0560069cc23ebc1c66e028fe3bc652734ad0..53280244650d9810619beb94260317aa147f3282 100644 |
--- a/components/variations/variations_seed_store.cc |
+++ b/components/variations/variations_seed_store.cc |
@@ -91,6 +91,9 @@ enum VariationsSeedStoreResult { |
VARIATIONS_SEED_STORE_FAILED_DELTA_READ_SEED, |
VARIATIONS_SEED_STORE_FAILED_DELTA_APPLY, |
VARIATIONS_SEED_STORE_FAILED_DELTA_STORE, |
+ VARIATIONS_SEED_STORE_FAILED_UNGZIP, |
+ VARIATIONS_SEED_STORE_FAILED_EMPTY_GZIP_CONTENTS, |
+ VARIATIONS_SEED_STORE_FAILED_UNSUPPORTED_SEED_FORMAT, |
VARIATIONS_SEED_STORE_RESULT_ENUM_SIZE, |
}; |
@@ -194,14 +197,37 @@ bool VariationsSeedStore::StoreSeedData( |
const std::string& country_code, |
const base::Time& date_fetched, |
bool is_delta_compressed, |
+ bool is_gzip_compressed, |
variations::VariationsSeed* parsed_seed) { |
+ // If the data is gzip compressed, first uncompress it. |
+ std::string ungzipped_data; |
+ if (is_gzip_compressed) { |
+ if (compression::GzipUncompress(data, &ungzipped_data)) { |
+ if (ungzipped_data.empty()) { |
+ RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_EMPTY); |
+ return false; |
+ } |
+ |
+ int size_reduction = ungzipped_data.length() - data.length(); |
+ UMA_HISTOGRAM_PERCENTAGE("Variations.StoreSeed.GzipSize.ReductionPercent", |
+ 100 * size_reduction / ungzipped_data.length()); |
+ UMA_HISTOGRAM_COUNTS_1000("Variations.StoreSeed.GzipSize", |
+ data.length() / 1024); |
+ } else { |
+ RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_UNGZIP); |
+ return false; |
+ } |
+ } else { |
+ ungzipped_data = data; |
+ } |
+ |
if (!is_delta_compressed) { |
const bool result = |
- StoreSeedDataNoDelta(data, base64_seed_signature, country_code, |
- date_fetched, parsed_seed); |
+ StoreSeedDataNoDelta(ungzipped_data, base64_seed_signature, |
+ country_code, date_fetched, parsed_seed); |
if (result) { |
UMA_HISTOGRAM_COUNTS_1000("Variations.StoreSeed.Size", |
- data.length() / 1024); |
+ ungzipped_data.length() / 1024); |
} |
return result; |
} |
@@ -216,7 +242,8 @@ bool VariationsSeedStore::StoreSeedData( |
RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_DELTA_READ_SEED); |
return false; |
} |
- if (!ApplyDeltaPatch(existing_seed_data, data, &updated_seed_data)) { |
+ if (!ApplyDeltaPatch(existing_seed_data, ungzipped_data, |
+ &updated_seed_data)) { |
RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_DELTA_APPLY); |
return false; |
} |
@@ -227,11 +254,11 @@ bool VariationsSeedStore::StoreSeedData( |
if (result) { |
// Note: |updated_seed_data.length()| is guaranteed to be non-zero, else |
// result would be false. |
- int size_reduction = updated_seed_data.length() - data.length(); |
+ int size_reduction = updated_seed_data.length() - ungzipped_data.length(); |
UMA_HISTOGRAM_PERCENTAGE("Variations.StoreSeed.DeltaSize.ReductionPercent", |
100 * size_reduction / updated_seed_data.length()); |
UMA_HISTOGRAM_COUNTS_1000("Variations.StoreSeed.DeltaSize", |
- data.length() / 1024); |
+ ungzipped_data.length() / 1024); |
} else { |
RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_DELTA_STORE); |
} |
@@ -347,7 +374,7 @@ bool VariationsSeedStore::StoreSeedDataNoDelta( |
const base::Time& date_fetched, |
variations::VariationsSeed* parsed_seed) { |
if (seed_data.empty()) { |
- RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_EMPTY); |
+ RecordSeedStoreHistogram(VARIATIONS_SEED_STORE_FAILED_EMPTY_GZIP_CONTENTS); |
return false; |
} |
@@ -450,4 +477,10 @@ bool VariationsSeedStore::ApplyDeltaPatch(const std::string& existing_data, |
return true; |
} |
+void VariationsSeedStore::ReportUnsupportedSeedFormatError() { |
+ RecordSeedStoreHistogram( |
+ VARIATIONS_SEED_STORE_FAILED_UNSUPPORTED_SEED_FORMAT); |
+} |
+ |
Alexei Svitkine (slow)
2015/10/16 21:10:36
Nit: Remove extra blank line.
veranika
2015/10/16 21:42:59
Done.
|
+ |
} // namespace variations |