1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/basictypes.h" 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/compiler_specific.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/scoped_ptr.h" 968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/prefs/pref_service.h" 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/prefs/testing_pref_service.h" 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/test/test_simple_task_runner.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h" 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "components/data_reduction_proxy/browser/data_reduction_proxy_metrics.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/data_reduction_proxy/browser/data_reduction_proxy_statistics_prefs.h" 17a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "components/data_reduction_proxy/common/data_reduction_proxy_pref_names.h" 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace { 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const size_t kNumDaysInHistory = 60; 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)int64 GetListPrefInt64Value( 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::ListValue& list_update, size_t index) { 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string string_value; 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(list_update.GetString(index, &string_value)); 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 value = 0; 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_TRUE(base::StringToInt64(string_value, &value)); 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return value; 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 34a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace 35a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 36a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace data_reduction_proxy { 37a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Test UpdateContentLengthPrefs. 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ChromeNetworkDataSavingMetricsTest : public testing::Test { 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) protected: 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ChromeNetworkDataSavingMetricsTest() {} 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetUp() OVERRIDE { 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci statistics_prefs_.reset(new DataReductionProxyStatisticsPrefs( 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &pref_service_, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::TestSimpleTaskRunner>( 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new base::TestSimpleTaskRunner()), 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta())); 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PrefRegistrySimple* registry = pref_service_.registry(); 50a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch registry->RegisterInt64Pref( 51a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kHttpReceivedContentLength, 0); 52a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch registry->RegisterInt64Pref( 53a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kHttpOriginalContentLength, 0); 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 55a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch registry->RegisterListPref(data_reduction_proxy::prefs:: 56a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyHttpOriginalContentLength); 57a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch registry->RegisterListPref(data_reduction_proxy::prefs:: 58a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyHttpReceivedContentLength); 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) registry->RegisterListPref( 60a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 61a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyOriginalContentLengthWithDataReductionProxyEnabled); 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) registry->RegisterListPref( 63a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 64a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthWithDataReductionProxyEnabled); 6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) registry->RegisterListPref( 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 67a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthHttpsWithDataReductionProxyEnabled); 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) registry->RegisterListPref( 69a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 70a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthShortBypassWithDataReductionProxyEnabled); 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) registry->RegisterListPref( 72a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 73a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthLongBypassWithDataReductionProxyEnabled); 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) registry->RegisterListPref( 75a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 76a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthUnknownWithDataReductionProxyEnabled); 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) registry->RegisterListPref( 78a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 79a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyOriginalContentLengthViaDataReductionProxy); 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) registry->RegisterListPref( 81a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 82a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthViaDataReductionProxy); 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) registry->RegisterInt64Pref( 84a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 85a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyHttpContentLengthLastUpdateDate, 0L); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci registry->RegisterBooleanPref( 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy::prefs::kDataReductionProxyEnabled, false); 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 8968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TestingPrefServiceSimple pref_service_; 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<DataReductionProxyStatisticsPrefs> statistics_prefs_; 9268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 9368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 9468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDataSavingMetricsTest, TotalLengths) { 9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 9668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 98a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefs( 9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &pref_service_, UNKNOWN_TYPE, statistics_prefs_.get()); 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(kReceivedLength, 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci statistics_prefs_->GetInt64( 104a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kHttpReceivedContentLength)); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(pref_service_.GetBoolean( 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy::prefs::kDataReductionProxyEnabled)); 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(kOriginalLength, 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci statistics_prefs_->GetInt64( 109a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kHttpOriginalContentLength)); 11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Record the same numbers again, and total lengths should be doubled. 112a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefs( 11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &pref_service_, UNKNOWN_TYPE, statistics_prefs_.get()); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(kReceivedLength * 2, 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci statistics_prefs_->GetInt64( 118a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kHttpReceivedContentLength)); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(pref_service_.GetBoolean( 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy::prefs::kDataReductionProxyEnabled)); 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(kOriginalLength * 2, 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci statistics_prefs_->GetInt64( 123a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kHttpOriginalContentLength)); 12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// The initial last update time used in test. There is no leap second a few 12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// days around this time used in the test. 12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Note: No time zone is specified. Local time will be assumed by 12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// base::Time::FromString below. 13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const char kLastUpdateTime[] = "Wed, 18 Sep 2013 03:45:26"; 13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class ChromeNetworkDailyDataSavingMetricsTest 13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) : public ChromeNetworkDataSavingMetricsTest { 13468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) protected: 13568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ChromeNetworkDailyDataSavingMetricsTest() { 13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::Time::FromString(kLastUpdateTime, &now_); 13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void SetUp() OVERRIDE { 14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ChromeNetworkDataSavingMetricsTest::SetUp(); 14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Only create two lists in Setup to test that adding new lists is fine. 143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CreatePrefList( 144a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kDailyHttpOriginalContentLength); 145a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch CreatePrefList( 146a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs::kDailyHttpReceivedContentLength); 14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 14868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::Time FakeNow() const { 15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return now_ + now_delta_; 15168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void SetFakeTimeDeltaInHours(int hours) { 15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) now_delta_ = base::TimeDelta::FromHours(hours); 15568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 15668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void AddFakeTimeDeltaInHours(int hours) { 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) now_delta_ += base::TimeDelta::FromHours(hours); 15968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Create daily pref list of |kNumDaysInHistory| zero values. 16268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void CreatePrefList(const char* pref) { 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue* update = statistics_prefs_->GetList(pref); 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) update->Clear(); 16568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (size_t i = 0; i < kNumDaysInHistory; ++i) { 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) update->Insert(0, new base::StringValue(base::Int64ToString(0))); 16768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 16968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 17068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Verify the pref list values are equal to the given values. 17168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // If the count of values is less than kNumDaysInHistory, zeros are assumed 17268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // at the beginning. 17368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) void VerifyPrefList(const char* pref, const int64* values, size_t count) { 17468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_GE(kNumDaysInHistory, count); 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::ListValue* update = statistics_prefs_->GetList(pref); 17668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ASSERT_EQ(kNumDaysInHistory, update->GetSize()) << "Pref: " << pref; 17768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 17868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (size_t i = 0; i < count; ++i) { 17968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ( 18068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) values[i], 18168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) GetListPrefInt64Value(*update, kNumDaysInHistory - count + i)) 18268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) << "index=" << (kNumDaysInHistory - count + i); 18368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 18468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (size_t i = 0; i < kNumDaysInHistory - count; ++i) { 18568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) EXPECT_EQ(0, GetListPrefInt64Value(*update, i)) << "index=" << i; 18668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 18768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 18868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Verify all daily data saving pref list values. 190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void VerifyDailyDataSavingContentLengthPrefLists( 19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64* original_values, size_t original_count, 19268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64* received_values, size_t received_count, 19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64* original_with_data_reduction_proxy_enabled_values, 19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) size_t original_with_data_reduction_proxy_enabled_count, 19568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64* received_with_data_reduction_proxy_enabled_values, 19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) size_t received_with_data_reduction_proxy_count, 19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64* original_via_data_reduction_proxy_values, 19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) size_t original_via_data_reduction_proxy_count, 19968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64* received_via_data_reduction_proxy_values, 20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) size_t received_via_data_reduction_proxy_count) { 201a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpOriginalContentLength, 20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_values, original_count); 203a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpReceivedContentLength, 20468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_values, received_count); 20568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) VerifyPrefList( 206a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyOriginalContentLengthWithDataReductionProxyEnabled, 20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled_values, 20968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled_count); 21068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) VerifyPrefList( 211a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthWithDataReductionProxyEnabled, 21368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_enabled_values, 21468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_count); 21568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) VerifyPrefList( 216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyOriginalContentLengthViaDataReductionProxy, 21868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_data_reduction_proxy_values, 21968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_data_reduction_proxy_count); 22068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) VerifyPrefList( 221a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 222a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthViaDataReductionProxy, 22368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_via_data_reduction_proxy_values, 22468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_via_data_reduction_proxy_count); 22568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 22668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Verify daily data saving pref for request types. 228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void VerifyDailyRequestTypeContentLengthPrefLists( 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* original_values, size_t original_count, 230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* received_values, size_t received_count, 231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* original_with_data_reduction_proxy_enabled_values, 232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t original_with_data_reduction_proxy_enabled_count, 233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* received_with_data_reduction_proxy_enabled_values, 234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t received_with_data_reduction_proxy_count, 235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* https_with_data_reduction_proxy_enabled_values, 236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t https_with_data_reduction_proxy_enabled_count, 237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* short_bypass_with_data_reduction_proxy_enabled_values, 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t short_bypass_with_data_reduction_proxy_enabled_count, 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* long_bypass_with_data_reduction_proxy_enabled_values, 240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t long_bypass_with_data_reduction_proxy_enabled_count, 241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64* unknown_with_data_reduction_proxy_enabled_values, 242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t unknown_with_data_reduction_proxy_enabled_count) { 243a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpOriginalContentLength, 244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) original_values, original_count); 245a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch VerifyPrefList(data_reduction_proxy::prefs::kDailyHttpReceivedContentLength, 246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received_values, received_count); 247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyPrefList( 248a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 249a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyOriginalContentLengthWithDataReductionProxyEnabled, 250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) original_with_data_reduction_proxy_enabled_values, 251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) original_with_data_reduction_proxy_enabled_count); 252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyPrefList( 253a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 254a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthWithDataReductionProxyEnabled, 255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received_with_data_reduction_proxy_enabled_values, 256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received_with_data_reduction_proxy_count); 257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyPrefList( 258a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 259a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthHttpsWithDataReductionProxyEnabled, 260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_with_data_reduction_proxy_enabled_values, 261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_with_data_reduction_proxy_enabled_count); 262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyPrefList( 263a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 264a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthShortBypassWithDataReductionProxyEnabled, 265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) short_bypass_with_data_reduction_proxy_enabled_values, 266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) short_bypass_with_data_reduction_proxy_enabled_count); 267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyPrefList( 268a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 269a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthLongBypassWithDataReductionProxyEnabled, 270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) long_bypass_with_data_reduction_proxy_enabled_values, 271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) long_bypass_with_data_reduction_proxy_enabled_count); 272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyPrefList( 273a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch data_reduction_proxy::prefs:: 274a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch kDailyContentLengthUnknownWithDataReductionProxyEnabled, 275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) unknown_with_data_reduction_proxy_enabled_values, 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) unknown_with_data_reduction_proxy_enabled_count); 277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 27968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 28068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::Time now_; 28168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::TimeDelta now_delta_; 28268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 28368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 28468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, OneResponse) { 28568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 28668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 28768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {kOriginalLength}; 28868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {kReceivedLength}; 28968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 290a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 29168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 292a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 29568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 29668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 29768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1); 29868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 29968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 30068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, MultipleResponses) { 30168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 150; 30268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 30368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {kOriginalLength}; 30468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {kReceivedLength}; 305a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 30668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 307a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, UNKNOWN_TYPE, 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 309a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 31068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 31168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) NULL, 0, NULL, 0, NULL, 0, NULL, 0); 31268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 313a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 31468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 315a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, UNKNOWN_TYPE, 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 31768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[0] += kOriginalLength; 31868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[0] += kReceivedLength; 31968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original_proxy_enabled[] = {kOriginalLength}; 32068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received_proxy_enabled[] = {kReceivedLength}; 321a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 32268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 32368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_proxy_enabled, 1, received_proxy_enabled, 1, 32468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) NULL, 0, NULL, 0); 32568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 326a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 32768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 328a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 33068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[0] += kOriginalLength; 33168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[0] += kReceivedLength; 33268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_proxy_enabled[0] += kOriginalLength; 33368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_proxy_enabled[0] += kReceivedLength; 33468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original_via_proxy[] = {kOriginalLength}; 33568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received_via_proxy[] = {kReceivedLength}; 336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 33768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 33868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_proxy_enabled, 1, received_proxy_enabled, 1, 33968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_proxy, 1, received_via_proxy, 1); 34068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 341a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 34268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true, UNKNOWN_TYPE, FakeNow(), statistics_prefs_.get()); 34468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[0] += kOriginalLength; 34568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[0] += kReceivedLength; 34668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_proxy_enabled[0] += kOriginalLength; 34768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_proxy_enabled[0] += kReceivedLength; 348a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 34968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 35068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_proxy_enabled, 1, received_proxy_enabled, 1, 35168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_proxy, 1, received_via_proxy, 1); 35268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 353a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 35468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false, UNKNOWN_TYPE, FakeNow(), statistics_prefs_.get()); 35668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[0] += kOriginalLength; 35768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[0] += kReceivedLength; 358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 35968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 36068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_proxy_enabled, 1, received_proxy_enabled, 1, 36168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_proxy, 1, received_via_proxy, 1); 36268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 36368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 364a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, RequestType) { 365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64 kContentLength = 200; 366a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 received[] = {0}; 367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 https_received[] = {0}; 368a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 total_received[] = {0}; 369a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int64 proxy_enabled_received[] = {0}; 370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 371a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kContentLength, kContentLength, 373a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, HTTPS, 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received[0] += kContentLength; 376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received[0] += kContentLength; 377a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received[0] += kContentLength; 378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyRequestTypeContentLengthPrefLists( 379a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received, 1, total_received, 1, 380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received, 1, proxy_enabled_received, 1, 381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received, 1, 382a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // short bypass 383a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // long bypass 384a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0); // unknown 385a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 386a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Data reduction proxy is not enabled. 387a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 388a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kContentLength, kContentLength, 389a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch false, HTTPS, 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received[0] += kContentLength; 392a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyRequestTypeContentLengthPrefLists( 393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received, 1, total_received, 1, 394a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received, 1, proxy_enabled_received, 1, 395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received, 1, 396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // short bypass 397a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // long bypass 398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0); // unknown 399a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 400a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kContentLength, kContentLength, 402a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, HTTPS, 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 404a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received[0] += kContentLength; 405a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received[0] += kContentLength; 406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received[0] += kContentLength; 407a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyRequestTypeContentLengthPrefLists( 408a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received, 1, total_received, 1, 409a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received, 1, proxy_enabled_received, 1, 410a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received, 1, 411a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // short bypass 412a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // long bypass 413a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0); // unknown 414a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 415a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 416a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kContentLength, kContentLength, 417a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, SHORT_BYPASS, 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 419a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received[0] += kContentLength; 420a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received[0] += kContentLength; 421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received[0] += kContentLength; 422a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyRequestTypeContentLengthPrefLists( 423a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received, 1, total_received, 1, 424a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received, 1, proxy_enabled_received, 1, 425a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received, 1, 426a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 1, // short bypass 427a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0, // long bypass 428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0); // unknown 429a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 430a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 431a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kContentLength, kContentLength, 432a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, LONG_BYPASS, 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 434a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received[0] += kContentLength; 435a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received[0] += kContentLength; 436a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyRequestTypeContentLengthPrefLists( 437a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received, 1, total_received, 1, // total 438a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received, 1, proxy_enabled_received, 1, 439a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received, 1, 440a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 1, // short bypass 441a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 1, // long bypass 442a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 0); // unknown 443a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 444a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 445a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) kContentLength, kContentLength, 446a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, UNKNOWN_TYPE, 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 448a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received[0] += kContentLength; 449a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received[0] += kContentLength; 450a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyRequestTypeContentLengthPrefLists( 451a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) total_received, 1, total_received, 1, 452a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) proxy_enabled_received, 1, proxy_enabled_received, 1, 453a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) https_received, 1, 454a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 1, // short bypass 455a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 1, // long bypass 456a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) received, 1); // unknown 457a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 458a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 45968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, ForwardOneDay) { 46068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 46168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 46268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 463a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 46468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 465a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 46768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 46868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward one day. 46968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetFakeTimeDeltaInHours(24); 47068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 47168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Proxy not enabled. Not via proxy. 472a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 47368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false, UNKNOWN_TYPE, FakeNow(), statistics_prefs_.get()); 47568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {kOriginalLength, kOriginalLength}; 47768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {kReceivedLength, kReceivedLength}; 47868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original_with_data_reduction_proxy_enabled[] = {kOriginalLength, 0}; 47968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received_with_data_reduction_proxy_enabled[] = {kReceivedLength, 0}; 48068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original_via_data_reduction_proxy[] = {kOriginalLength, 0}; 48168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received_via_data_reduction_proxy[] = {kReceivedLength, 0}; 482a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 48368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, 48468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received, 2, 48568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled, 2, 48668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_enabled, 2, 48768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_data_reduction_proxy, 2, 48868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_via_data_reduction_proxy, 2); 48968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 49068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Proxy enabled. Not via proxy. 491a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 49268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci true, UNKNOWN_TYPE, FakeNow(), statistics_prefs_.get()); 49468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[1] += kOriginalLength; 49568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[1] += kReceivedLength; 49668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled[1] += kOriginalLength; 49768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_enabled[1] += kReceivedLength; 498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 49968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, 50068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received, 2, 50168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled, 2, 50268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_enabled, 2, 50368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_data_reduction_proxy, 2, 50468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_via_data_reduction_proxy, 2); 50568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 50668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Proxy enabled and via proxy. 507a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 50868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 509a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 51168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[1] += kOriginalLength; 51268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[1] += kReceivedLength; 51368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled[1] += kOriginalLength; 51468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_enabled[1] += kReceivedLength; 51568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_data_reduction_proxy[1] += kOriginalLength; 51668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_via_data_reduction_proxy[1] += kReceivedLength; 517a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 51868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, 51968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received, 2, 52068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_with_data_reduction_proxy_enabled, 2, 52168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_with_data_reduction_proxy_enabled, 2, 52268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original_via_data_reduction_proxy, 2, 52368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received_via_data_reduction_proxy, 2); 52468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 52568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 52668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, PartialDayTimeChange) { 52768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 52868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 52968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {0, kOriginalLength}; 53068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {0, kReceivedLength}; 53168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 532a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 53368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 534a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 536a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 53768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, received, 2, 53868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, received, 2, 53968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, received, 2); 54068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 54168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward 10 hours, stay in the same day. 54268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // See kLastUpdateTime: "Now" in test is 03:45am. 54368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetFakeTimeDeltaInHours(10); 544a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 54568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 546a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 54868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[1] += kOriginalLength; 54968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[1] += kReceivedLength; 550a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 55168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, received, 2, 55268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, received, 2, 55368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 2, received, 2); 55468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 55568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward 11 more hours, comes to tomorrow. 55668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddFakeTimeDeltaInHours(11); 557a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 55868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 559a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 56168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original2[] = {kOriginalLength * 2, kOriginalLength}; 56268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received2[] = {kReceivedLength * 2, kReceivedLength}; 563a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 56468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 2, received2, 2, 56568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 2, received2, 2, 56668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 2, received2, 2); 56768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 56868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 56968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, ForwardMultipleDays) { 57068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 57168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 572a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 57368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 574a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 57668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 57768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward three days. 57868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetFakeTimeDeltaInHours(3 * 24); 57968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 580a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 58168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 582a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 58468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 58568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {kOriginalLength, 0, 0, kOriginalLength}; 58668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {kReceivedLength, 0, 0, kReceivedLength}; 587a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 58868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 4, received, 4, 58968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 4, received, 4, 59068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 4, received, 4); 59168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 59268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward four more days. 59368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddFakeTimeDeltaInHours(4 * 24); 594a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 59568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 596a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 59868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original2[] = { 59968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kOriginalLength, 0, 0, kOriginalLength, 0, 0, 0, kOriginalLength, 60068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) }; 60168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received2[] = { 60268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, 0, 0, kReceivedLength, 0, 0, 0, kReceivedLength, 60368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) }; 604a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 60568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 8, received2, 8, 60668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 8, received2, 8, 60768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 8, received2, 8); 60868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 60968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward |kNumDaysInHistory| more days. 61068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddFakeTimeDeltaInHours(kNumDaysInHistory * 24); 611a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 61268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 613a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 61568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original3[] = {kOriginalLength}; 61668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received3[] = {kReceivedLength}; 617a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 61868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original3, 1, received3, 1, 61968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original3, 1, received3, 1, 62068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original3, 1, received3, 1); 62168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 62268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Forward |kNumDaysInHistory| + 1 more days. 62368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddFakeTimeDeltaInHours((kNumDaysInHistory + 1)* 24); 624a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 62568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 626a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 628a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 62968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original3, 1, received3, 1, 63068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original3, 1, received3, 1, 63168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original3, 1, received3, 1); 63268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 63368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 63468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, BackwardAndForwardOneDay) { 63568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 63668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 63768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {kOriginalLength}; 63868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {kReceivedLength}; 63968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 640a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 64168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 642a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 64468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 64568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Backward one day. 64668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetFakeTimeDeltaInHours(-24); 647a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 64868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 649a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 65168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original[0] += kOriginalLength; 65268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) received[0] += kReceivedLength; 653a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 65468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 65568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 65668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1); 65768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 65868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Then, Forward one day 65968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AddFakeTimeDeltaInHours(24); 660a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 66168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 662a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 66468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original2[] = {kOriginalLength * 2, kOriginalLength}; 66568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received2[] = {kReceivedLength * 2, kReceivedLength}; 666a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 66768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 2, received2, 2, 66868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 2, received2, 2, 66968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original2, 2, received2, 2); 67068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 67168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 67268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)TEST_F(ChromeNetworkDailyDataSavingMetricsTest, BackwardTwoDays) { 67368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kOriginalLength = 200; 67468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const int64 kReceivedLength = 100; 67568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 original[] = {kOriginalLength}; 67668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int64 received[] = {kReceivedLength}; 67768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 678a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 67968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 680a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 68268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Backward two days. 68368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SetFakeTimeDeltaInHours(-2 * 24); 684a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch UpdateContentLengthPrefsForDataReductionProxy( 68568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kReceivedLength, kOriginalLength, 686a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch true, VIA_DATA_REDUCTION_PROXY, 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FakeNow(), statistics_prefs_.get()); 688a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VerifyDailyDataSavingContentLengthPrefLists( 68968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 69068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1, 69168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) original, 1, received, 1); 69268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 69368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 694a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace data_reduction_proxy 695