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