most_visited_iframe_source_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Copyright 2013 The Chromium Authors. All rights reserved. 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Use of this source code is governed by a BSD-style license that can be 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// found in the LICENSE file. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/bind.h" 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/metrics/histogram.h" 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/metrics/statistics_recorder.h" 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "base/strings/stringprintf.h" 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "chrome/browser/search/most_visited_iframe_source.h" 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "testing/gtest/include/gtest/gtest.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass MostVisitedIframeSourceTest : public testing::Test { 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org public: 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void ExpectNullData(base::RefCountedMemory* data) { 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(NULL, data); 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org protected: 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MostVisitedIframeSource* source() { return source_.get(); } 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org private: 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void SetUp() { source_.reset(new MostVisitedIframeSource()); } 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<MostVisitedIframeSource> source_; 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTEST_F(MostVisitedIframeSourceTest, LogEndpointIsValidNoProvider) { 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::URLDataSource::GotDataCallback callback = base::Bind( 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &MostVisitedIframeSourceTest::ExpectNullData, base::Unretained(this)); 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::StatisticsRecorder::Initialize(); 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Making sure the histogram is created. 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UMA_HISTOGRAM_ENUMERATION(MostVisitedIframeSource::kMostVisitedHistogramName, 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, MostVisitedIframeSource::kNumMostVisited); 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MostVisitedIframeSource::kMostVisitedHistogramName); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<base::HistogramSamples> samples1(histogram->SnapshotSamples()); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // The dummy value got logged. 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples1->TotalCount()); 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples1->GetCount(0)); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Test the method. 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=1", 0, 0, callback); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<base::HistogramSamples> samples2(histogram->SnapshotSamples()); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount()); 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples2->GetCount(1)); 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Counts accumulate and behave as expected. 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=5", 0, 0, callback); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=1", 0, 0, callback); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<base::HistogramSamples> samples3(histogram->SnapshotSamples()); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount()); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples3->GetCount(5)); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(2, samples3->GetCount(1)); 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // If 'pos' is unspecified or invalid, callback still gets called but values 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // are not incremented. 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=", 0, 0, callback); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html", 0, 0, callback); 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Total count hasn't changed. 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount()); 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTEST_F(MostVisitedIframeSourceTest, LogEndpointIsValidWithProvider) { 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org content::URLDataSource::GotDataCallback callback = base::Bind( 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org &MostVisitedIframeSourceTest::ExpectNullData, base::Unretained(this)); 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::StatisticsRecorder::Initialize(); 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Making sure a test histogram with provider is created by logging a dummy 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // value. 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const std::string histogram_name = 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MostVisitedIframeSource::GetHistogramNameForProvider("foobar"); 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UMA_HISTOGRAM_ENUMERATION(histogram_name, 0, 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org MostVisitedIframeSource::kNumMostVisited); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram( 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org histogram_name); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<base::HistogramSamples> samples1(histogram->SnapshotSamples()); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // The dummy value got logged. 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples1->TotalCount()); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples1->GetCount(0)); 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Test the method. 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=1&pr=foobar", 0, 0, callback); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<base::HistogramSamples> samples2(histogram->SnapshotSamples()); 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount()); 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples2->GetCount(1)); 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Counts accumulate and behave as expected. 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=5&pr=foobar", 0, 0, callback); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=1&pr=foobar", 0, 0, callback); 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // This should have no effect for the "foobar" histogram. 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org source()->StartDataRequest("log.html?pos=1&pr=nofoo", 0, 0, callback); 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org scoped_ptr<base::HistogramSamples> samples3(histogram->SnapshotSamples()); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount()); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(1, samples3->GetCount(5)); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org EXPECT_EQ(2, samples3->GetCount(1)); 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org