| Index: chrome/browser/safe_browsing/incident_reporting_service_unittest.cc
|
| diff --git a/chrome/browser/safe_browsing/incident_reporting_service_unittest.cc b/chrome/browser/safe_browsing/incident_reporting_service_unittest.cc
|
| deleted file mode 100644
|
| index 903002a05bcdf43d75e7589dd1e99ab2d980d353..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/safe_browsing/incident_reporting_service_unittest.cc
|
| +++ /dev/null
|
| @@ -1,898 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/safe_browsing/incident_reporting_service.h"
|
| -
|
| -#include <map>
|
| -#include <string>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/callback.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/test/test_simple_task_runner.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "base/threading/thread_local.h"
|
| -#include "chrome/browser/prefs/browser_prefs.h"
|
| -#include "chrome/browser/safe_browsing/incident_report_uploader.h"
|
| -#include "chrome/browser/safe_browsing/last_download_finder.h"
|
| -#include "chrome/common/pref_names.h"
|
| -#include "chrome/common/safe_browsing/csd.pb.h"
|
| -#include "chrome/test/base/testing_browser_process.h"
|
| -#include "chrome/test/base/testing_pref_service_syncable.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "chrome/test/base/testing_profile_manager.h"
|
| -#include "net/url_request/url_request_context_getter.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -// A test fixture that sets up a test task runner and makes it the thread's
|
| -// runner. The fixture implements a fake envrionment data collector and a fake
|
| -// report uploader.
|
| -class IncidentReportingServiceTest : public testing::Test {
|
| - protected:
|
| - // An IRS class that allows a test harness to provide a fake environment
|
| - // collector and report uploader via callbacks.
|
| - class TestIncidentReportingService
|
| - : public safe_browsing::IncidentReportingService {
|
| - public:
|
| - typedef base::Callback<void(Profile*)> PreProfileAddCallback;
|
| -
|
| - typedef base::Callback<
|
| - void(safe_browsing::ClientIncidentReport_EnvironmentData*)>
|
| - CollectEnvironmentCallback;
|
| -
|
| - typedef base::Callback<scoped_ptr<safe_browsing::LastDownloadFinder>(
|
| - const safe_browsing::LastDownloadFinder::LastDownloadCallback&
|
| - callback)> CreateDownloadFinderCallback;
|
| -
|
| - typedef base::Callback<scoped_ptr<safe_browsing::IncidentReportUploader>(
|
| - const safe_browsing::IncidentReportUploader::OnResultCallback&,
|
| - const safe_browsing::ClientIncidentReport& report)> StartUploadCallback;
|
| -
|
| - TestIncidentReportingService(
|
| - const scoped_refptr<base::TaskRunner>& task_runner,
|
| - const PreProfileAddCallback& pre_profile_add_callback,
|
| - const CollectEnvironmentCallback& collect_environment_callback,
|
| - const CreateDownloadFinderCallback& create_download_finder_callback,
|
| - const StartUploadCallback& start_upload_callback)
|
| - : IncidentReportingService(NULL,
|
| - NULL,
|
| - base::TimeDelta::FromMilliseconds(5),
|
| - task_runner),
|
| - pre_profile_add_callback_(pre_profile_add_callback),
|
| - collect_environment_callback_(collect_environment_callback),
|
| - create_download_finder_callback_(create_download_finder_callback),
|
| - start_upload_callback_(start_upload_callback) {
|
| - SetCollectEnvironmentHook(&CollectEnvironmentData, task_runner);
|
| - test_instance_.Get().Set(this);
|
| - }
|
| -
|
| - virtual ~TestIncidentReportingService() { test_instance_.Get().Set(NULL); }
|
| -
|
| - protected:
|
| - virtual void OnProfileAdded(Profile* profile) OVERRIDE {
|
| - pre_profile_add_callback_.Run(profile);
|
| - safe_browsing::IncidentReportingService::OnProfileAdded(profile);
|
| - }
|
| -
|
| - virtual scoped_ptr<safe_browsing::LastDownloadFinder> CreateDownloadFinder(
|
| - const safe_browsing::LastDownloadFinder::LastDownloadCallback& callback)
|
| - OVERRIDE {
|
| - return create_download_finder_callback_.Run(callback);
|
| - }
|
| -
|
| - virtual scoped_ptr<safe_browsing::IncidentReportUploader> StartReportUpload(
|
| - const safe_browsing::IncidentReportUploader::OnResultCallback& callback,
|
| - const scoped_refptr<net::URLRequestContextGetter>&
|
| - request_context_getter,
|
| - const safe_browsing::ClientIncidentReport& report) OVERRIDE {
|
| - return start_upload_callback_.Run(callback, report);
|
| - }
|
| -
|
| - private:
|
| - static TestIncidentReportingService& current() {
|
| - return *test_instance_.Get().Get();
|
| - }
|
| -
|
| - static void CollectEnvironmentData(
|
| - safe_browsing::ClientIncidentReport_EnvironmentData* data) {
|
| - current().collect_environment_callback_.Run(data);
|
| - };
|
| -
|
| - static base::LazyInstance<base::ThreadLocalPointer<
|
| - TestIncidentReportingService> >::Leaky test_instance_;
|
| -
|
| - PreProfileAddCallback pre_profile_add_callback_;
|
| - CollectEnvironmentCallback collect_environment_callback_;
|
| - CreateDownloadFinderCallback create_download_finder_callback_;
|
| - StartUploadCallback start_upload_callback_;
|
| - };
|
| -
|
| - // A type for specifying whether or not a profile created by CreateProfile
|
| - // participates in safe browsing.
|
| - enum SafeBrowsingDisposition {
|
| - SAFE_BROWSING_OPT_OUT,
|
| - SAFE_BROWSING_OPT_IN,
|
| - };
|
| -
|
| - // A type for specifying the action to be taken by the test fixture during
|
| - // profile initialization (before NOTIFICATION_PROFILE_ADDED is sent).
|
| - enum OnProfileAdditionAction {
|
| - ON_PROFILE_ADDITION_NO_ACTION,
|
| - ON_PROFILE_ADDITION_ADD_INCIDENT, // Add an incident to the service.
|
| - ON_PROFILE_ADDITION_ADD_TWO_INCIDENTS, // Add two incidents to the service.
|
| - };
|
| -
|
| - // A type for specifying the action to be taken by the test fixture when the
|
| - // service creates a LastDownloadFinder.
|
| - enum OnCreateDownloadFinderAction {
|
| - // Post a task that reports a download.
|
| - ON_CREATE_DOWNLOAD_FINDER_DOWNLOAD_FOUND,
|
| - // Post a task that reports no downloads found.
|
| - ON_CREATE_DOWNLOAD_FINDER_NO_DOWNLOADS,
|
| - // Immediately return due to a lack of eligible profiles.
|
| - ON_CREATE_DOWNLOAD_FINDER_NO_PROFILES,
|
| - };
|
| -
|
| - // A type for specifying the action to be taken by the test fixture when its
|
| - // delayed analysis callback is run.
|
| - enum OnDelayedAnalysisAction {
|
| - ON_DELAYED_ANALYSIS_NO_ACTION,
|
| - ON_DELAYED_ANALYSIS_ADD_INCIDENT, // Add an incident to the service.
|
| - };
|
| -
|
| - static const int64 kIncidentTimeMsec;
|
| - static const char kFakeOsName[];
|
| - static const char kFakeDownloadToken[];
|
| - static const char kTestTrackedPrefPath[];
|
| -
|
| - IncidentReportingServiceTest()
|
| - : task_runner_(new base::TestSimpleTaskRunner),
|
| - thread_task_runner_handle_(task_runner_),
|
| - profile_manager_(TestingBrowserProcess::GetGlobal()),
|
| - instance_(new TestIncidentReportingService(
|
| - task_runner_,
|
| - base::Bind(&IncidentReportingServiceTest::PreProfileAdd,
|
| - base::Unretained(this)),
|
| - base::Bind(&IncidentReportingServiceTest::CollectEnvironmentData,
|
| - base::Unretained(this)),
|
| - base::Bind(&IncidentReportingServiceTest::CreateDownloadFinder,
|
| - base::Unretained(this)),
|
| - base::Bind(&IncidentReportingServiceTest::StartUpload,
|
| - base::Unretained(this)))),
|
| - on_create_download_finder_action_(
|
| - ON_CREATE_DOWNLOAD_FINDER_DOWNLOAD_FOUND),
|
| - on_delayed_analysis_action_(ON_DELAYED_ANALYSIS_NO_ACTION),
|
| - upload_result_(safe_browsing::IncidentReportUploader::UPLOAD_SUCCESS),
|
| - environment_collected_(),
|
| - download_finder_created_(),
|
| - download_finder_destroyed_(),
|
| - uploader_destroyed_(),
|
| - delayed_analysis_ran_() {}
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - testing::Test::SetUp();
|
| - ASSERT_TRUE(profile_manager_.SetUp());
|
| - }
|
| -
|
| - // Sets the action to be taken by the test fixture when the service creates a
|
| - // LastDownloadFinder.
|
| - void SetCreateDownloadFinderAction(OnCreateDownloadFinderAction action) {
|
| - on_create_download_finder_action_ = action;
|
| - }
|
| -
|
| - // Creates and returns a profile (owned by the profile manager) with or
|
| - // without safe browsing enabled. An incident will be created within
|
| - // PreProfileAdd if requested.
|
| - TestingProfile* CreateProfile(const std::string& profile_name,
|
| - SafeBrowsingDisposition safe_browsing_opt_in,
|
| - OnProfileAdditionAction on_addition_action) {
|
| - // Create prefs for the profile with safe browsing enabled or not.
|
| - scoped_ptr<TestingPrefServiceSyncable> prefs(
|
| - new TestingPrefServiceSyncable);
|
| - chrome::RegisterUserProfilePrefs(prefs->registry());
|
| - prefs->SetBoolean(prefs::kSafeBrowsingEnabled,
|
| - safe_browsing_opt_in == SAFE_BROWSING_OPT_IN);
|
| -
|
| - // Remember whether or not to create an incident.
|
| - profile_properties_[profile_name].on_addition_action = on_addition_action;
|
| -
|
| - // Boom (or fizzle).
|
| - return profile_manager_.CreateTestingProfile(
|
| - profile_name,
|
| - prefs.PassAs<PrefServiceSyncable>(),
|
| - base::ASCIIToUTF16(profile_name),
|
| - 0, // avatar_id (unused)
|
| - std::string(), // supervised_user_id (unused)
|
| - TestingProfile::TestingFactories());
|
| - }
|
| -
|
| - // Configures a callback to run when the next upload is started that will post
|
| - // a task to delete the profile. This task will run before the upload
|
| - // finishes.
|
| - void DeleteProfileOnUpload(Profile* profile) {
|
| - ASSERT_TRUE(on_start_upload_callback_.is_null());
|
| - on_start_upload_callback_ =
|
| - base::Bind(&IncidentReportingServiceTest::DelayedDeleteProfile,
|
| - base::Unretained(this),
|
| - profile);
|
| - }
|
| -
|
| - // Returns an incident suitable for testing.
|
| - scoped_ptr<safe_browsing::ClientIncidentReport_IncidentData>
|
| - MakeTestIncident() {
|
| - scoped_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident(
|
| - new safe_browsing::ClientIncidentReport_IncidentData());
|
| - incident->set_incident_time_msec(kIncidentTimeMsec);
|
| - safe_browsing::ClientIncidentReport_IncidentData_TrackedPreferenceIncident*
|
| - tp_incident = incident->mutable_tracked_preference();
|
| - tp_incident->set_path(kTestTrackedPrefPath);
|
| - return incident.Pass();
|
| - }
|
| -
|
| - // Adds a test incident to the service.
|
| - void AddTestIncident(Profile* profile) {
|
| - instance_->GetAddIncidentCallback(profile).Run(MakeTestIncident().Pass());
|
| - }
|
| -
|
| - // Registers the callback to be run for delayed analysis.
|
| - void RegisterAnalysis(OnDelayedAnalysisAction on_delayed_analysis_action) {
|
| - on_delayed_analysis_action_ = on_delayed_analysis_action;
|
| - instance_->RegisterDelayedAnalysisCallback(
|
| - base::Bind(&IncidentReportingServiceTest::OnDelayedAnalysis,
|
| - base::Unretained(this)));
|
| - }
|
| -
|
| - // Confirms that the test incident(s) was/were uploaded by the service, then
|
| - // clears the instance for subsequent incidents.
|
| - void ExpectTestIncidentUploaded(int incident_count) {
|
| - ASSERT_TRUE(uploaded_report_);
|
| - ASSERT_EQ(incident_count, uploaded_report_->incident_size());
|
| - for (int i = 0; i < incident_count; ++i) {
|
| - ASSERT_TRUE(uploaded_report_->incident(i).has_incident_time_msec());
|
| - ASSERT_EQ(kIncidentTimeMsec,
|
| - uploaded_report_->incident(i).incident_time_msec());
|
| - ASSERT_TRUE(uploaded_report_->incident(i).has_tracked_preference());
|
| - ASSERT_TRUE(
|
| - uploaded_report_->incident(i).tracked_preference().has_path());
|
| - ASSERT_EQ(std::string(kTestTrackedPrefPath),
|
| - uploaded_report_->incident(i).tracked_preference().path());
|
| - }
|
| - ASSERT_TRUE(uploaded_report_->has_environment());
|
| - ASSERT_TRUE(uploaded_report_->environment().has_os());
|
| - ASSERT_TRUE(uploaded_report_->environment().os().has_os_name());
|
| - ASSERT_EQ(std::string(kFakeOsName),
|
| - uploaded_report_->environment().os().os_name());
|
| - ASSERT_EQ(std::string(kFakeDownloadToken),
|
| - uploaded_report_->download().token());
|
| -
|
| - uploaded_report_.reset();
|
| - }
|
| -
|
| - void AssertNoUpload() { ASSERT_FALSE(uploaded_report_); }
|
| -
|
| - bool HasCollectedEnvironmentData() const { return environment_collected_; }
|
| - bool HasCreatedDownloadFinder() const { return download_finder_created_; }
|
| - bool DownloadFinderDestroyed() const { return download_finder_destroyed_; }
|
| - bool UploaderDestroyed() const { return uploader_destroyed_; }
|
| - bool DelayedAnalysisRan() const { return delayed_analysis_ran_; }
|
| -
|
| - scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
|
| - base::ThreadTaskRunnerHandle thread_task_runner_handle_;
|
| - TestingProfileManager profile_manager_;
|
| - scoped_ptr<safe_browsing::IncidentReportingService> instance_;
|
| - base::Closure on_start_upload_callback_;
|
| - OnCreateDownloadFinderAction on_create_download_finder_action_;
|
| - OnDelayedAnalysisAction on_delayed_analysis_action_;
|
| - safe_browsing::IncidentReportUploader::Result upload_result_;
|
| - bool environment_collected_;
|
| - bool download_finder_created_;
|
| - scoped_ptr<safe_browsing::ClientIncidentReport> uploaded_report_;
|
| - bool download_finder_destroyed_;
|
| - bool uploader_destroyed_;
|
| - bool delayed_analysis_ran_;
|
| -
|
| - private:
|
| - // A fake IncidentReportUploader that posts a task to provide a given response
|
| - // back to the incident reporting service. It also reports back to the test
|
| - // harness via a closure when it is deleted by the incident reporting service.
|
| - class FakeUploader : public safe_browsing::IncidentReportUploader {
|
| - public:
|
| - FakeUploader(
|
| - const base::Closure& on_deleted,
|
| - const safe_browsing::IncidentReportUploader::OnResultCallback& callback,
|
| - safe_browsing::IncidentReportUploader::Result result)
|
| - : safe_browsing::IncidentReportUploader(callback),
|
| - on_deleted_(on_deleted),
|
| - result_(result) {
|
| - // Post a task that will provide the response.
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&FakeUploader::FinishUpload, base::Unretained(this)));
|
| - }
|
| - virtual ~FakeUploader() { on_deleted_.Run(); }
|
| -
|
| - private:
|
| - void FinishUpload() {
|
| - // Callbacks have a tendency to delete the uploader, so no touching
|
| - // anything after this.
|
| - callback_.Run(result_,
|
| - scoped_ptr<safe_browsing::ClientIncidentResponse>());
|
| - }
|
| -
|
| - base::Closure on_deleted_;
|
| - safe_browsing::IncidentReportUploader::Result result_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FakeUploader);
|
| - };
|
| -
|
| - class FakeDownloadFinder : public safe_browsing::LastDownloadFinder {
|
| - public:
|
| - static scoped_ptr<safe_browsing::LastDownloadFinder> Create(
|
| - const base::Closure& on_deleted,
|
| - scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails>
|
| - download,
|
| - const safe_browsing::LastDownloadFinder::LastDownloadCallback&
|
| - callback) {
|
| - // Post a task to run the callback.
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(callback, base::Passed(&download)));
|
| - return scoped_ptr<safe_browsing::LastDownloadFinder>(
|
| - new FakeDownloadFinder(on_deleted));
|
| - }
|
| -
|
| - virtual ~FakeDownloadFinder() { on_deleted_.Run(); }
|
| -
|
| - private:
|
| - explicit FakeDownloadFinder(const base::Closure& on_deleted)
|
| - : on_deleted_(on_deleted) {}
|
| -
|
| - base::Closure on_deleted_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(FakeDownloadFinder);
|
| - };
|
| -
|
| - // Properties for a profile that impact the behavior of the test.
|
| - struct ProfileProperties {
|
| - ProfileProperties() : on_addition_action(ON_PROFILE_ADDITION_NO_ACTION) {}
|
| -
|
| - // The action taken by the test fixture during profile initialization
|
| - // (before NOTIFICATION_PROFILE_ADDED is sent).
|
| - OnProfileAdditionAction on_addition_action;
|
| - };
|
| -
|
| - // Returns the name of a profile as provided to CreateProfile.
|
| - static std::string GetProfileName(Profile* profile) {
|
| - // Cannot reliably use profile->GetProfileName() since the test needs the
|
| - // name before the profile manager sets it (which happens after profile
|
| - // addition).
|
| - return profile->GetPath().BaseName().AsUTF8Unsafe();
|
| - }
|
| -
|
| - // Posts a task to delete the profile.
|
| - void DelayedDeleteProfile(Profile* profile) {
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&TestingProfileManager::DeleteTestingProfile,
|
| - base::Unretained(&profile_manager_),
|
| - GetProfileName(profile)));
|
| - }
|
| -
|
| - // A callback run by the test fixture when a profile is added. An incident
|
| - // is added.
|
| - void PreProfileAdd(Profile* profile) {
|
| - // The instance must have already been created.
|
| - ASSERT_TRUE(instance_);
|
| - // Add a test incident to the service if requested.
|
| - switch (profile_properties_[GetProfileName(profile)].on_addition_action) {
|
| - case ON_PROFILE_ADDITION_ADD_INCIDENT:
|
| - AddTestIncident(profile);
|
| - break;
|
| - case ON_PROFILE_ADDITION_ADD_TWO_INCIDENTS:
|
| - AddTestIncident(profile);
|
| - AddTestIncident(profile);
|
| - break;
|
| - default:
|
| - ASSERT_EQ(
|
| - ON_PROFILE_ADDITION_NO_ACTION,
|
| - profile_properties_[GetProfileName(profile)].on_addition_action);
|
| - break;
|
| - }
|
| - }
|
| -
|
| - // A fake CollectEnvironmentData implementation invoked by the service during
|
| - // operation.
|
| - void CollectEnvironmentData(
|
| - safe_browsing::ClientIncidentReport_EnvironmentData* data) {
|
| - ASSERT_NE(
|
| - static_cast<safe_browsing::ClientIncidentReport_EnvironmentData*>(NULL),
|
| - data);
|
| - data->mutable_os()->set_os_name(kFakeOsName);
|
| - environment_collected_ = true;
|
| - }
|
| -
|
| - // A fake CreateDownloadFinder implementation invoked by the service during
|
| - // operation.
|
| - scoped_ptr<safe_browsing::LastDownloadFinder> CreateDownloadFinder(
|
| - const safe_browsing::LastDownloadFinder::LastDownloadCallback& callback) {
|
| - download_finder_created_ = true;
|
| - scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails> download;
|
| - if (on_create_download_finder_action_ ==
|
| - ON_CREATE_DOWNLOAD_FINDER_NO_PROFILES) {
|
| - return scoped_ptr<safe_browsing::LastDownloadFinder>();
|
| - }
|
| - if (on_create_download_finder_action_ ==
|
| - ON_CREATE_DOWNLOAD_FINDER_DOWNLOAD_FOUND) {
|
| - download.reset(new safe_browsing::ClientIncidentReport_DownloadDetails);
|
| - download->set_token(kFakeDownloadToken);
|
| - }
|
| - return scoped_ptr<safe_browsing::LastDownloadFinder>(
|
| - FakeDownloadFinder::Create(
|
| - base::Bind(&IncidentReportingServiceTest::OnDownloadFinderDestroyed,
|
| - base::Unretained(this)),
|
| - download.Pass(),
|
| - callback));
|
| - }
|
| -
|
| - // A fake StartUpload implementation invoked by the service during operation.
|
| - scoped_ptr<safe_browsing::IncidentReportUploader> StartUpload(
|
| - const safe_browsing::IncidentReportUploader::OnResultCallback& callback,
|
| - const safe_browsing::ClientIncidentReport& report) {
|
| - // Remember the report that is being uploaded.
|
| - uploaded_report_.reset(new safe_browsing::ClientIncidentReport(report));
|
| - // Run and clear the OnStartUpload callback, if provided.
|
| - if (!on_start_upload_callback_.is_null()) {
|
| - on_start_upload_callback_.Run();
|
| - on_start_upload_callback_ = base::Closure();
|
| - }
|
| - return scoped_ptr<safe_browsing::IncidentReportUploader>(
|
| - new FakeUploader(
|
| - base::Bind(
|
| - &IncidentReportingServiceTest::OnUploaderDestroyed,
|
| - base::Unretained(this)),
|
| - callback,
|
| - upload_result_)).Pass();
|
| - }
|
| -
|
| - void OnDownloadFinderDestroyed() { download_finder_destroyed_ = true; }
|
| - void OnUploaderDestroyed() { uploader_destroyed_ = true; }
|
| -
|
| - void OnDelayedAnalysis(const safe_browsing::AddIncidentCallback& callback) {
|
| - delayed_analysis_ran_ = true;
|
| - if (on_delayed_analysis_action_ == ON_DELAYED_ANALYSIS_ADD_INCIDENT)
|
| - callback.Run(MakeTestIncident().Pass());
|
| - }
|
| -
|
| - // A mapping of profile name to its corresponding properties.
|
| - std::map<std::string, ProfileProperties> profile_properties_;
|
| -};
|
| -
|
| -// static
|
| -base::LazyInstance<base::ThreadLocalPointer<
|
| - IncidentReportingServiceTest::TestIncidentReportingService> >::Leaky
|
| - IncidentReportingServiceTest::TestIncidentReportingService::test_instance_ =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -const int64 IncidentReportingServiceTest::kIncidentTimeMsec = 47LL;
|
| -const char IncidentReportingServiceTest::kFakeOsName[] = "fakedows";
|
| -const char IncidentReportingServiceTest::kFakeDownloadToken[] = "fakedlt";
|
| -const char IncidentReportingServiceTest::kTestTrackedPrefPath[] = "some_pref";
|
| -
|
| -// Tests that an incident added during profile initialization when safe browsing
|
| -// is on is uploaded.
|
| -TEST_F(IncidentReportingServiceTest, AddIncident) {
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that environment collection took place.
|
| - EXPECT_TRUE(HasCollectedEnvironmentData());
|
| -
|
| - // Verify that the most recent download was looked for.
|
| - EXPECT_TRUE(HasCreatedDownloadFinder());
|
| -
|
| - // Verify that report upload took place and contained the incident,
|
| - // environment data, and download details.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Verify that the download finder and the uploader were destroyed.
|
| - ASSERT_TRUE(DownloadFinderDestroyed());
|
| - ASSERT_TRUE(UploaderDestroyed());
|
| -}
|
| -
|
| -// Tests that multiple incidents are coalesced into the same report.
|
| -TEST_F(IncidentReportingServiceTest, CoalesceIncidents) {
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_TWO_INCIDENTS);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that environment collection took place.
|
| - EXPECT_TRUE(HasCollectedEnvironmentData());
|
| -
|
| - // Verify that the most recent download was looked for.
|
| - EXPECT_TRUE(HasCreatedDownloadFinder());
|
| -
|
| - // Verify that report upload took place and contained the incident,
|
| - // environment data, and download details.
|
| - ExpectTestIncidentUploaded(2);
|
| -
|
| - // Verify that the download finder and the uploader were destroyed.
|
| - ASSERT_TRUE(DownloadFinderDestroyed());
|
| - ASSERT_TRUE(UploaderDestroyed());
|
| -}
|
| -
|
| -// Tests that an incident added during profile initialization when safe browsing
|
| -// is off is not uploaded.
|
| -TEST_F(IncidentReportingServiceTest, NoSafeBrowsing) {
|
| - // Create the profile, thereby causing the test to begin.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_OUT, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that no report upload took place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Tests that no incident report is uploaded if there is no recent download.
|
| -TEST_F(IncidentReportingServiceTest, NoDownloadNoUpload) {
|
| - // Tell the fixture to return no downloads found.
|
| - SetCreateDownloadFinderAction(ON_CREATE_DOWNLOAD_FINDER_NO_DOWNLOADS);
|
| -
|
| - // Create the profile, thereby causing the test to begin.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that the download finder was run but that no report upload took
|
| - // place.
|
| - EXPECT_TRUE(HasCreatedDownloadFinder());
|
| - AssertNoUpload();
|
| - EXPECT_TRUE(DownloadFinderDestroyed());
|
| -}
|
| -
|
| -// Tests that no incident report is uploaded if there is no recent download.
|
| -TEST_F(IncidentReportingServiceTest, NoProfilesNoUpload) {
|
| - // Tell the fixture to pretend there are no profiles eligible for finding
|
| - // downloads.
|
| - SetCreateDownloadFinderAction(ON_CREATE_DOWNLOAD_FINDER_NO_PROFILES);
|
| -
|
| - // Create the profile, thereby causing the test to begin.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that the download finder was run but that no report upload took
|
| - // place.
|
| - EXPECT_TRUE(HasCreatedDownloadFinder());
|
| - AssertNoUpload();
|
| - // Although CreateDownloadFinder was called, no instance was returned so there
|
| - // is nothing to have been destroyed.
|
| - EXPECT_FALSE(DownloadFinderDestroyed());
|
| -}
|
| -
|
| -// Tests that an identical incident added after upload is not uploaded again.
|
| -TEST_F(IncidentReportingServiceTest, OneIncidentOneUpload) {
|
| - // Create the profile, thereby causing the test to begin.
|
| - Profile* profile = CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that report upload took place and contained the incident and
|
| - // environment data.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Add the incident to the service again.
|
| - AddTestIncident(profile);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that no additional report upload took place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Tests that two incidents of the same type with different payloads lead to two
|
| -// uploads.
|
| -TEST_F(IncidentReportingServiceTest, TwoIncidentsTwoUploads) {
|
| - // Create the profile, thereby causing the test to begin.
|
| - Profile* profile = CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that report upload took place and contained the incident and
|
| - // environment data.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Add a variation on the incident to the service.
|
| - scoped_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident(
|
| - MakeTestIncident());
|
| - incident->mutable_tracked_preference()->set_atomic_value("leeches");
|
| - instance_->GetAddIncidentCallback(profile).Run(incident.Pass());
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that an additional report upload took place.
|
| - ExpectTestIncidentUploaded(1);
|
| -}
|
| -
|
| -// Tests that the same incident added for two different profiles in sequence
|
| -// results in two uploads.
|
| -TEST_F(IncidentReportingServiceTest, TwoProfilesTwoUploads) {
|
| - // Create the profile, thereby causing the test to begin.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that report upload took place and contained the incident and
|
| - // environment data.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Create a second profile with its own incident on addition.
|
| - CreateProfile(
|
| - "profile2", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that a second report upload took place.
|
| - ExpectTestIncidentUploaded(1);
|
| -}
|
| -
|
| -// Tests that an upload succeeds if the profile is destroyed while it is
|
| -// pending.
|
| -TEST_F(IncidentReportingServiceTest, ProfileDestroyedDuringUpload) {
|
| - // Create a profile for which an incident will be added.
|
| - Profile* profile = CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
|
| -
|
| - // Hook up a callback to run when the upload is started that will post a task
|
| - // to delete the profile. This task will run before the upload finishes.
|
| - DeleteProfileOnUpload(profile);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that report upload took place and contained the incident and
|
| - // environment data.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // The lack of a crash indicates that the deleted profile was not accessed by
|
| - // the service while handling the upload response.
|
| -}
|
| -
|
| -// Tests that no upload takes place if the old pref was present.
|
| -TEST_F(IncidentReportingServiceTest, MigrateOldPref) {
|
| - Profile* profile = CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // This is a legacy profile.
|
| - profile->GetPrefs()->SetBoolean(prefs::kSafeBrowsingIncidentReportSent, true);
|
| -
|
| - // Add the test incident.
|
| - AddTestIncident(profile);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // No upload should have taken place.
|
| - AssertNoUpload();
|
| -
|
| - // The legacy pref should have been cleared.
|
| - ASSERT_FALSE(
|
| - profile->GetPrefs()->GetBoolean(prefs::kSafeBrowsingIncidentReportSent));
|
| -
|
| - // Adding the same incident again should still result in no upload.
|
| - AddTestIncident(profile);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // No upload should have taken place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Tests that no upload results from adding an incident that is not affiliated
|
| -// with a profile.
|
| -TEST_F(IncidentReportingServiceTest, ProcessWideNoProfileNoUpload) {
|
| - // Add the test incident.
|
| - AddTestIncident(NULL);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // No upload should have taken place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Tests that there is an upload when a profile is present for a proc-wide
|
| -// incident and that pruning works.
|
| -TEST_F(IncidentReportingServiceTest, ProcessWideOneUpload) {
|
| - // Add a profile that participates in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Add the test incident.
|
| - AddTestIncident(NULL);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // An upload should have taken place.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Add the incident to the service again.
|
| - AddTestIncident(NULL);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that no additional report upload took place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Tests that two process-wide incidents of the same type with different
|
| -// payloads added via the same callback lead to two uploads.
|
| -TEST_F(IncidentReportingServiceTest, ProcessWideTwoUploads) {
|
| - // Add a profile that participates in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Add the test incident.
|
| - safe_browsing::AddIncidentCallback add_incident(
|
| - instance_->GetAddIncidentCallback(NULL));
|
| - add_incident.Run(MakeTestIncident().Pass());
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // An upload should have taken place.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Add a variation on the incident to the service.
|
| - scoped_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident(
|
| - MakeTestIncident());
|
| - incident->mutable_tracked_preference()->set_atomic_value("leeches");
|
| - add_incident.Run(incident.Pass());
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that an additional report upload took place.
|
| - ExpectTestIncidentUploaded(1);
|
| -}
|
| -
|
| -// Tests that there is an upload when a profile appears after a proc-wide
|
| -// incident.
|
| -TEST_F(IncidentReportingServiceTest, ProcessWideOneUploadAfterProfile) {
|
| - // Add the test incident.
|
| - AddTestIncident(NULL);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that no report upload took place.
|
| - AssertNoUpload();
|
| -
|
| - // Add a profile that participates in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // An upload should have taken place.
|
| - ExpectTestIncidentUploaded(1);
|
| -}
|
| -
|
| -// Tests that delayed analysis callbacks are called following the addition of a
|
| -// profile that participates in safe browsing.
|
| -TEST_F(IncidentReportingServiceTest, AnalysisAfterProfile) {
|
| - // Register a callback.
|
| - RegisterAnalysis(ON_DELAYED_ANALYSIS_NO_ACTION);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Not run yet.
|
| - ASSERT_FALSE(DelayedAnalysisRan());
|
| -
|
| - // Add a profile that participates in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // And now they have.
|
| - ASSERT_TRUE(DelayedAnalysisRan());
|
| -}
|
| -
|
| -// Tests that delayed analysis callbacks are called following their registration
|
| -// when a profile that participates in safe browsing is already present.
|
| -TEST_F(IncidentReportingServiceTest, AnalysisWhenRegisteredWithProfile) {
|
| - // Add a profile that participates in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Register a callback.
|
| - RegisterAnalysis(ON_DELAYED_ANALYSIS_NO_ACTION);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Confirm that the callbacks were run.
|
| - ASSERT_TRUE(DelayedAnalysisRan());
|
| -}
|
| -
|
| -// Tests that no upload results from a delayed analysis incident when no
|
| -// safe browsing profile is present.
|
| -TEST_F(IncidentReportingServiceTest, DelayedAnalysisNoProfileNoUpload) {
|
| - // Register a callback that will add an incident.
|
| - RegisterAnalysis(ON_DELAYED_ANALYSIS_ADD_INCIDENT);
|
| -
|
| - // Add a profile that does not participate in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_OUT, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // The callback should not have been run.
|
| - ASSERT_FALSE(DelayedAnalysisRan());
|
| -
|
| - // No upload should have taken place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Tests that there is an upload when a profile is present for a delayed
|
| -// analysis incident and that pruning works.
|
| -TEST_F(IncidentReportingServiceTest, DelayedAnalysisOneUpload) {
|
| - // Register a callback that will add an incident.
|
| - RegisterAnalysis(ON_DELAYED_ANALYSIS_ADD_INCIDENT);
|
| -
|
| - // Add a profile that participates in safe browsing.
|
| - CreateProfile(
|
| - "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_NO_ACTION);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // The callback should have been run.
|
| - ASSERT_TRUE(DelayedAnalysisRan());
|
| -
|
| - // An upload should have taken place.
|
| - ExpectTestIncidentUploaded(1);
|
| -
|
| - // Add the incident to the service again.
|
| - AddTestIncident(NULL);
|
| -
|
| - // Let all tasks run.
|
| - task_runner_->RunUntilIdle();
|
| -
|
| - // Verify that no additional report upload took place.
|
| - AssertNoUpload();
|
| -}
|
| -
|
| -// Parallel uploads
|
| -// Shutdown during processing
|
| -// environment colection taking longer than incident delay timer
|
| -// environment colection taking longer than incident delay timer, and then
|
| -// another incident arriving
|
|
|