Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / activity_log / ad_injection_unittest.cc
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.
4
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"
13
14 namespace extensions {
15
16 namespace {
17
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",
22                                             base::Time::Now(),
23                                             Action::ACTION_DOM_ACCESS,
24                                             api_name);
25   action->set_args(ListBuilder()
26                    .Append(element)
27                    .Append(attr)
28                    .Append("http://www.google.co.uk")
29                    .Append("http://www.google.co.uk")
30                    .Build());
31   return action;
32 }
33
34 }  // namespace
35
36 class TestRapporService : public rappor::RapporService {
37  public:
38   TestRapporService();
39   virtual ~TestRapporService();
40
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
44   // the test).
45   rappor::RapporReports GetReports();
46
47  protected:
48   TestingPrefServiceSimple prefs_;
49 };
50
51 TestRapporService::TestRapporService()
52   : rappor::RapporService(&prefs_) {
53   // Initialize the RapporService for testing.
54   SetCohortForTesting(0);
55   SetSecretForTesting(rappor::HmacByteVectorGenerator::GenerateEntropyInput());
56 }
57
58 TestRapporService::~TestRapporService() {}
59
60 rappor::RapporReports TestRapporService::GetReports() {
61   rappor::RapporReports result;
62   rappor::RapporService::ExportMetrics(&result);
63   return result;
64 }
65
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());
72
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());
78
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());
84
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());
90 }
91
92 }  // namespace extensions