Home | History | Annotate | Download | only in activity_log
      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
     93