1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/prefs/testing_pref_service.h"
6 #include "base/time/time.h"
7 #include "chrome/browser/extensions/activity_log/activity_actions.h"
8 #include "components/rappor/byte_vector_utils.h"
9 #include "components/rappor/proto/rappor_metric.pb.h"
10 #include "components/rappor/rappor_service.h"
11 #include "extensions/common/value_builder.h"
12 #include "testing/gtest/include/gtest/gtest.h"
14 namespace extensions {
18 scoped_refptr<Action> CreateAction(const std::string& api_name,
19 const std::string& element,
20 const std::string& attr) {
21 scoped_refptr<Action> action = new Action("id",
23 Action::ACTION_DOM_ACCESS,
25 action->set_args(ListBuilder()
28 .Append("http://www.google.co.uk")
29 .Append("http://www.google.co.uk")
36 class TestRapporService : public rappor::RapporService {
39 virtual ~TestRapporService();
41 // Returns the active reports. This also clears the internal map of metrics
42 // as a biproduct, so if comparing numbers of reports, the comparison should
43 // be from the last time GetReports() was called (not from the beginning of
45 rappor::RapporReports GetReports();
48 TestingPrefServiceSimple prefs_;
51 TestRapporService::TestRapporService()
52 : rappor::RapporService(&prefs_) {
53 // Initialize the RapporService for testing.
54 SetCohortForTesting(0);
55 SetSecretForTesting(rappor::HmacByteVectorGenerator::GenerateEntropyInput());
58 TestRapporService::~TestRapporService() {}
60 rappor::RapporReports TestRapporService::GetReports() {
61 rappor::RapporReports result;
62 rappor::RapporService::ExportMetrics(&result);
66 // Test that the actions properly upload the URLs to the RAPPOR service if
67 // the action may have injected the ad.
68 TEST(AdInjectionUnittest, CheckActionForAdInjectionTest) {
69 TestRapporService rappor_service;
70 rappor::RapporReports reports = rappor_service.GetReports();
71 EXPECT_EQ(0, reports.report_size());
73 scoped_refptr<Action> modify_iframe_src =
74 CreateAction("blinkSetAttribute", "iframe", "src");
75 modify_iframe_src->DidInjectAd(&rappor_service);
76 reports = rappor_service.GetReports();
77 EXPECT_EQ(1, reports.report_size());
79 scoped_refptr<Action> modify_anchor_href =
80 CreateAction("blinkSetAttribute", "a", "href");
81 modify_anchor_href->DidInjectAd(&rappor_service);
82 reports = rappor_service.GetReports();
83 EXPECT_EQ(1, reports.report_size());
85 scoped_refptr<Action> harmless_action =
86 CreateAction("Location.replace", "", "");
87 harmless_action->DidInjectAd(&rappor_service);
88 reports = rappor_service.GetReports();
89 EXPECT_EQ(0, reports.report_size());
92 } // namespace extensions