Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(612)

Side by Side Diff: chrome/browser/safe_browsing/incident_reporting_service_unittest.cc

Issue 379563006: Merge 281089 "Include the latest binary download info in safe br..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/2062/src/
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/safe_browsing/incident_reporting_service.h" 5 #include "chrome/browser/safe_browsing/incident_reporting_service.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/lazy_instance.h" 12 #include "base/lazy_instance.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "base/test/test_simple_task_runner.h" 14 #include "base/test/test_simple_task_runner.h"
15 #include "base/thread_task_runner_handle.h" 15 #include "base/thread_task_runner_handle.h"
16 #include "base/threading/thread_local.h" 16 #include "base/threading/thread_local.h"
17 #include "chrome/browser/prefs/browser_prefs.h" 17 #include "chrome/browser/prefs/browser_prefs.h"
18 #include "chrome/browser/safe_browsing/incident_report_uploader.h" 18 #include "chrome/browser/safe_browsing/incident_report_uploader.h"
19 #include "chrome/browser/safe_browsing/last_download_finder.h"
19 #include "chrome/common/pref_names.h" 20 #include "chrome/common/pref_names.h"
20 #include "chrome/common/safe_browsing/csd.pb.h" 21 #include "chrome/common/safe_browsing/csd.pb.h"
21 #include "chrome/test/base/testing_browser_process.h" 22 #include "chrome/test/base/testing_browser_process.h"
22 #include "chrome/test/base/testing_pref_service_syncable.h" 23 #include "chrome/test/base/testing_pref_service_syncable.h"
23 #include "chrome/test/base/testing_profile.h" 24 #include "chrome/test/base/testing_profile.h"
24 #include "chrome/test/base/testing_profile_manager.h" 25 #include "chrome/test/base/testing_profile_manager.h"
25 #include "net/url_request/url_request_context_getter.h" 26 #include "net/url_request/url_request_context_getter.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 28
28 // A test fixture that sets up a test task runner and makes it the thread's 29 // A test fixture that sets up a test task runner and makes it the thread's
29 // runner. The fixture implements a fake envrionment data collector and a fake 30 // runner. The fixture implements a fake envrionment data collector and a fake
30 // report uploader. 31 // report uploader.
31 class IncidentReportingServiceTest : public testing::Test { 32 class IncidentReportingServiceTest : public testing::Test {
32 protected: 33 protected:
33 // An IRS class that allows a test harness to provide a fake environment 34 // An IRS class that allows a test harness to provide a fake environment
34 // collector and report uploader via callbacks. 35 // collector and report uploader via callbacks.
35 class TestIncidentReportingService 36 class TestIncidentReportingService
36 : public safe_browsing::IncidentReportingService { 37 : public safe_browsing::IncidentReportingService {
37 public: 38 public:
38 typedef base::Callback<void(Profile*)> PreProfileCreateCallback; 39 typedef base::Callback<void(Profile*)> PreProfileAddCallback;
39 40
40 typedef base::Callback< 41 typedef base::Callback<
41 void(safe_browsing::ClientIncidentReport_EnvironmentData*)> 42 void(safe_browsing::ClientIncidentReport_EnvironmentData*)>
42 CollectEnvironmentCallback; 43 CollectEnvironmentCallback;
43 44
45 typedef base::Callback<scoped_ptr<safe_browsing::LastDownloadFinder>(
46 const safe_browsing::LastDownloadFinder::LastDownloadCallback&
47 callback)> CreateDownloadFinderCallback;
48
44 typedef base::Callback<scoped_ptr<safe_browsing::IncidentReportUploader>( 49 typedef base::Callback<scoped_ptr<safe_browsing::IncidentReportUploader>(
45 const safe_browsing::IncidentReportUploader::OnResultCallback&, 50 const safe_browsing::IncidentReportUploader::OnResultCallback&,
46 const safe_browsing::ClientIncidentReport& report)> StartUploadCallback; 51 const safe_browsing::ClientIncidentReport& report)> StartUploadCallback;
47 52
48 TestIncidentReportingService( 53 TestIncidentReportingService(
49 const scoped_refptr<base::TaskRunner>& task_runner, 54 const scoped_refptr<base::TaskRunner>& task_runner,
50 const PreProfileCreateCallback& pre_profile_create_callback, 55 const PreProfileAddCallback& pre_profile_add_callback,
51 const CollectEnvironmentCallback& collect_environment_callback, 56 const CollectEnvironmentCallback& collect_environment_callback,
57 const CreateDownloadFinderCallback& create_download_finder_callback,
52 const StartUploadCallback& start_upload_callback) 58 const StartUploadCallback& start_upload_callback)
53 : IncidentReportingService(NULL, NULL), 59 : IncidentReportingService(NULL, NULL),
54 pre_profile_create_callback_(pre_profile_create_callback), 60 pre_profile_add_callback_(pre_profile_add_callback),
55 collect_environment_callback_(collect_environment_callback), 61 collect_environment_callback_(collect_environment_callback),
62 create_download_finder_callback_(create_download_finder_callback),
56 start_upload_callback_(start_upload_callback) { 63 start_upload_callback_(start_upload_callback) {
57 SetCollectEnvironmentHook(&CollectEnvironmentData, task_runner); 64 SetCollectEnvironmentHook(&CollectEnvironmentData, task_runner);
58 test_instance_.Get().Set(this); 65 test_instance_.Get().Set(this);
59 } 66 }
60 67
61 virtual ~TestIncidentReportingService() { test_instance_.Get().Set(NULL); } 68 virtual ~TestIncidentReportingService() { test_instance_.Get().Set(NULL); }
62 69
63 protected: 70 protected:
64 virtual void OnProfileCreated(Profile* profile) OVERRIDE { 71 virtual void OnProfileAdded(Profile* profile) OVERRIDE {
65 pre_profile_create_callback_.Run(profile); 72 pre_profile_add_callback_.Run(profile);
66 safe_browsing::IncidentReportingService::OnProfileCreated(profile); 73 safe_browsing::IncidentReportingService::OnProfileAdded(profile);
74 }
75
76 virtual scoped_ptr<safe_browsing::LastDownloadFinder> CreateDownloadFinder(
77 const safe_browsing::LastDownloadFinder::LastDownloadCallback& callback)
78 OVERRIDE {
79 return create_download_finder_callback_.Run(callback);
67 } 80 }
68 81
69 virtual scoped_ptr<safe_browsing::IncidentReportUploader> StartReportUpload( 82 virtual scoped_ptr<safe_browsing::IncidentReportUploader> StartReportUpload(
70 const safe_browsing::IncidentReportUploader::OnResultCallback& callback, 83 const safe_browsing::IncidentReportUploader::OnResultCallback& callback,
71 const scoped_refptr<net::URLRequestContextGetter>& 84 const scoped_refptr<net::URLRequestContextGetter>&
72 request_context_getter, 85 request_context_getter,
73 const safe_browsing::ClientIncidentReport& report) OVERRIDE { 86 const safe_browsing::ClientIncidentReport& report) OVERRIDE {
74 return start_upload_callback_.Run(callback, report); 87 return start_upload_callback_.Run(callback, report);
75 } 88 }
76 89
77 private: 90 private:
78 static TestIncidentReportingService& current() { 91 static TestIncidentReportingService& current() {
79 return *test_instance_.Get().Get(); 92 return *test_instance_.Get().Get();
80 } 93 }
81 94
82 static void CollectEnvironmentData( 95 static void CollectEnvironmentData(
83 safe_browsing::ClientIncidentReport_EnvironmentData* data) { 96 safe_browsing::ClientIncidentReport_EnvironmentData* data) {
84 current().collect_environment_callback_.Run(data); 97 current().collect_environment_callback_.Run(data);
85 }; 98 };
86 99
87 static base::LazyInstance<base::ThreadLocalPointer< 100 static base::LazyInstance<base::ThreadLocalPointer<
88 TestIncidentReportingService> >::Leaky test_instance_; 101 TestIncidentReportingService> >::Leaky test_instance_;
89 102
90 PreProfileCreateCallback pre_profile_create_callback_; 103 PreProfileAddCallback pre_profile_add_callback_;
91 CollectEnvironmentCallback collect_environment_callback_; 104 CollectEnvironmentCallback collect_environment_callback_;
105 CreateDownloadFinderCallback create_download_finder_callback_;
92 StartUploadCallback start_upload_callback_; 106 StartUploadCallback start_upload_callback_;
93 }; 107 };
94 108
95 // A type for specifying whether or not a profile created by CreateProfile 109 // A type for specifying whether or not a profile created by CreateProfile
96 // participates in safe browsing. 110 // participates in safe browsing.
97 enum SafeBrowsingDisposition { 111 enum SafeBrowsingDisposition {
98 SAFE_BROWSING_OPT_OUT, 112 SAFE_BROWSING_OPT_OUT,
99 SAFE_BROWSING_OPT_IN, 113 SAFE_BROWSING_OPT_IN,
100 }; 114 };
101 115
102 // A type for specifying the action to be taken by the test fixture during 116 // A type for specifying the action to be taken by the test fixture during
103 // profile initialization (before NOTIFICATION_PROFILE_CREATED is sent). 117 // profile initialization (before NOTIFICATION_PROFILE_ADDED is sent).
104 enum OnProfileCreationAction { 118 enum OnProfileAdditionAction {
105 ON_PROFILE_CREATION_NO_ACTION, 119 ON_PROFILE_ADDITION_NO_ACTION,
106 ON_PROFILE_CREATION_ADD_INCIDENT, // Add an incident to the service. 120 ON_PROFILE_ADDITION_ADD_INCIDENT, // Add an incident to the service.
121 };
122
123 // A type for specifying the action to be taken by the test fixture when the
124 // service creates a LastDownloadFinder.
125 enum OnCreateDownloadFinderAction {
126 // Post a task that reports a download.
127 ON_CREATE_DOWNLOAD_FINDER_DOWNLOAD_FOUND,
128 // Post a task that reports no downloads found.
129 ON_CREATE_DOWNLOAD_FINDER_NO_DOWNLOADS,
130 // Immediately return due to a lack of eligible profiles.
131 ON_CREATE_DOWNLOAD_FINDER_NO_PROFILES,
107 }; 132 };
108 133
109 static const int64 kIncidentTimeMsec; 134 static const int64 kIncidentTimeMsec;
110 static const char kFakeOsName[]; 135 static const char kFakeOsName[];
136 static const char kFakeDownloadToken[];
111 137
112 IncidentReportingServiceTest() 138 IncidentReportingServiceTest()
113 : task_runner_(new base::TestSimpleTaskRunner), 139 : task_runner_(new base::TestSimpleTaskRunner),
114 thread_task_runner_handle_(task_runner_), 140 thread_task_runner_handle_(task_runner_),
115 profile_manager_(TestingBrowserProcess::GetGlobal()), 141 profile_manager_(TestingBrowserProcess::GetGlobal()),
116 instance_(new TestIncidentReportingService( 142 instance_(new TestIncidentReportingService(
117 task_runner_, 143 task_runner_,
118 base::Bind(&IncidentReportingServiceTest::PreProfileCreate, 144 base::Bind(&IncidentReportingServiceTest::PreProfileAdd,
119 base::Unretained(this)), 145 base::Unretained(this)),
120 base::Bind(&IncidentReportingServiceTest::CollectEnvironmentData, 146 base::Bind(&IncidentReportingServiceTest::CollectEnvironmentData,
121 base::Unretained(this)), 147 base::Unretained(this)),
148 base::Bind(&IncidentReportingServiceTest::CreateDownloadFinder,
149 base::Unretained(this)),
122 base::Bind(&IncidentReportingServiceTest::StartUpload, 150 base::Bind(&IncidentReportingServiceTest::StartUpload,
123 base::Unretained(this)))), 151 base::Unretained(this)))),
152 on_create_download_finder_action_(
153 ON_CREATE_DOWNLOAD_FINDER_DOWNLOAD_FOUND),
124 upload_result_(safe_browsing::IncidentReportUploader::UPLOAD_SUCCESS), 154 upload_result_(safe_browsing::IncidentReportUploader::UPLOAD_SUCCESS),
125 environment_collected_(), 155 environment_collected_(),
156 download_finder_created_(),
157 download_finder_destroyed_(),
126 uploader_destroyed_() {} 158 uploader_destroyed_() {}
127 159
128 virtual void SetUp() OVERRIDE { 160 virtual void SetUp() OVERRIDE {
129 testing::Test::SetUp(); 161 testing::Test::SetUp();
130 ASSERT_TRUE(profile_manager_.SetUp()); 162 ASSERT_TRUE(profile_manager_.SetUp());
131 } 163 }
132 164
165 // Sets the action to be taken by the test fixture when the service creates a
166 // LastDownloadFinder.
167 void SetCreateDownloadFinderAction(OnCreateDownloadFinderAction action) {
168 on_create_download_finder_action_ = action;
169 }
170
133 // Creates and returns a profile (owned by the profile manager) with or 171 // Creates and returns a profile (owned by the profile manager) with or
134 // without safe browsing enabled. An incident will be created within 172 // without safe browsing enabled. An incident will be created within
135 // PreProfileCreate if requested. 173 // PreProfileAdd if requested.
136 TestingProfile* CreateProfile(const std::string& profile_name, 174 TestingProfile* CreateProfile(const std::string& profile_name,
137 SafeBrowsingDisposition safe_browsing_opt_in, 175 SafeBrowsingDisposition safe_browsing_opt_in,
138 OnProfileCreationAction on_creation_action) { 176 OnProfileAdditionAction on_addition_action) {
139 // Create prefs for the profile with safe browsing enabled or not. 177 // Create prefs for the profile with safe browsing enabled or not.
140 scoped_ptr<TestingPrefServiceSyncable> prefs( 178 scoped_ptr<TestingPrefServiceSyncable> prefs(
141 new TestingPrefServiceSyncable); 179 new TestingPrefServiceSyncable);
142 chrome::RegisterUserProfilePrefs(prefs->registry()); 180 chrome::RegisterUserProfilePrefs(prefs->registry());
143 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, 181 prefs->SetBoolean(prefs::kSafeBrowsingEnabled,
144 safe_browsing_opt_in == SAFE_BROWSING_OPT_IN); 182 safe_browsing_opt_in == SAFE_BROWSING_OPT_IN);
145 183
146 // Remember whether or not to create an incident. 184 // Remember whether or not to create an incident.
147 profile_properties_[profile_name].on_creation_action = on_creation_action; 185 profile_properties_[profile_name].on_addition_action = on_addition_action;
148 186
149 // Boom (or fizzle). 187 // Boom (or fizzle).
150 return profile_manager_.CreateTestingProfile( 188 return profile_manager_.CreateTestingProfile(
151 profile_name, 189 profile_name,
152 prefs.PassAs<PrefServiceSyncable>(), 190 prefs.PassAs<PrefServiceSyncable>(),
153 base::ASCIIToUTF16(profile_name), 191 base::ASCIIToUTF16(profile_name),
154 0, // avatar_id (unused) 192 0, // avatar_id (unused)
155 std::string(), // supervised_user_id (unused) 193 std::string(), // supervised_user_id (unused)
156 TestingProfile::TestingFactories()); 194 TestingProfile::TestingFactories());
157 } 195 }
(...skipping 30 matching lines...) Expand all
188 ASSERT_TRUE(uploaded_report_); 226 ASSERT_TRUE(uploaded_report_);
189 ASSERT_EQ(1, uploaded_report_->incident_size()); 227 ASSERT_EQ(1, uploaded_report_->incident_size());
190 ASSERT_TRUE(uploaded_report_->incident(0).has_incident_time_msec()); 228 ASSERT_TRUE(uploaded_report_->incident(0).has_incident_time_msec());
191 ASSERT_EQ(kIncidentTimeMsec, 229 ASSERT_EQ(kIncidentTimeMsec,
192 uploaded_report_->incident(0).incident_time_msec()); 230 uploaded_report_->incident(0).incident_time_msec());
193 ASSERT_TRUE(uploaded_report_->has_environment()); 231 ASSERT_TRUE(uploaded_report_->has_environment());
194 ASSERT_TRUE(uploaded_report_->environment().has_os()); 232 ASSERT_TRUE(uploaded_report_->environment().has_os());
195 ASSERT_TRUE(uploaded_report_->environment().os().has_os_name()); 233 ASSERT_TRUE(uploaded_report_->environment().os().has_os_name());
196 ASSERT_EQ(std::string(kFakeOsName), 234 ASSERT_EQ(std::string(kFakeOsName),
197 uploaded_report_->environment().os().os_name()); 235 uploaded_report_->environment().os().os_name());
236 ASSERT_EQ(std::string(kFakeDownloadToken),
237 uploaded_report_->download().token());
198 238
199 uploaded_report_.reset(); 239 uploaded_report_.reset();
200 } 240 }
201 241
202 void ExpectNoUpload() { ASSERT_FALSE(uploaded_report_); } 242 void AssertNoUpload() { ASSERT_FALSE(uploaded_report_); }
203 243
204 bool HasCollectedEnvironmentData() const { return environment_collected_; } 244 bool HasCollectedEnvironmentData() const { return environment_collected_; }
245 bool HasCreatedDownloadFinder() const { return download_finder_created_; }
246 bool DownloadFinderDestroyed() const { return download_finder_destroyed_; }
205 bool UploaderDestroyed() const { return uploader_destroyed_; } 247 bool UploaderDestroyed() const { return uploader_destroyed_; }
206 248
207 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 249 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
208 base::ThreadTaskRunnerHandle thread_task_runner_handle_; 250 base::ThreadTaskRunnerHandle thread_task_runner_handle_;
209 TestingProfileManager profile_manager_; 251 TestingProfileManager profile_manager_;
210 scoped_ptr<safe_browsing::IncidentReportingService> instance_; 252 scoped_ptr<safe_browsing::IncidentReportingService> instance_;
211 base::Closure on_start_upload_callback_; 253 base::Closure on_start_upload_callback_;
254 OnCreateDownloadFinderAction on_create_download_finder_action_;
212 safe_browsing::IncidentReportUploader::Result upload_result_; 255 safe_browsing::IncidentReportUploader::Result upload_result_;
213 bool environment_collected_; 256 bool environment_collected_;
257 bool download_finder_created_;
214 scoped_ptr<safe_browsing::ClientIncidentReport> uploaded_report_; 258 scoped_ptr<safe_browsing::ClientIncidentReport> uploaded_report_;
259 bool download_finder_destroyed_;
215 bool uploader_destroyed_; 260 bool uploader_destroyed_;
216 261
217 private: 262 private:
218 // A fake IncidentReportUploader that posts a task to provide a given response 263 // A fake IncidentReportUploader that posts a task to provide a given response
219 // back to the incident reporting service. It also reports back to the test 264 // back to the incident reporting service. It also reports back to the test
220 // harness via a closure when it is deleted by the incident reporting service. 265 // harness via a closure when it is deleted by the incident reporting service.
221 class FakeUploader : public safe_browsing::IncidentReportUploader { 266 class FakeUploader : public safe_browsing::IncidentReportUploader {
222 public: 267 public:
223 FakeUploader( 268 FakeUploader(
224 const base::Closure& on_deleted, 269 const base::Closure& on_deleted,
(...skipping 16 matching lines...) Expand all
241 callback_.Run(result_, 286 callback_.Run(result_,
242 scoped_ptr<safe_browsing::ClientIncidentResponse>()); 287 scoped_ptr<safe_browsing::ClientIncidentResponse>());
243 } 288 }
244 289
245 base::Closure on_deleted_; 290 base::Closure on_deleted_;
246 safe_browsing::IncidentReportUploader::Result result_; 291 safe_browsing::IncidentReportUploader::Result result_;
247 292
248 DISALLOW_COPY_AND_ASSIGN(FakeUploader); 293 DISALLOW_COPY_AND_ASSIGN(FakeUploader);
249 }; 294 };
250 295
296 class FakeDownloadFinder : public safe_browsing::LastDownloadFinder {
297 public:
298 static scoped_ptr<safe_browsing::LastDownloadFinder> Create(
299 const base::Closure& on_deleted,
300 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails>
301 download,
302 const safe_browsing::LastDownloadFinder::LastDownloadCallback&
303 callback) {
304 // Post a task to run the callback.
305 base::ThreadTaskRunnerHandle::Get()->PostTask(
306 FROM_HERE, base::Bind(callback, base::Passed(&download)));
307 return scoped_ptr<safe_browsing::LastDownloadFinder>(
308 new FakeDownloadFinder(on_deleted));
309 }
310
311 virtual ~FakeDownloadFinder() { on_deleted_.Run(); }
312
313 private:
314 explicit FakeDownloadFinder(const base::Closure& on_deleted)
315 : on_deleted_(on_deleted) {}
316
317 base::Closure on_deleted_;
318
319 DISALLOW_COPY_AND_ASSIGN(FakeDownloadFinder);
320 };
321
251 // Properties for a profile that impact the behavior of the test. 322 // Properties for a profile that impact the behavior of the test.
252 struct ProfileProperties { 323 struct ProfileProperties {
253 ProfileProperties() : on_creation_action(ON_PROFILE_CREATION_NO_ACTION) {} 324 ProfileProperties() : on_addition_action(ON_PROFILE_ADDITION_NO_ACTION) {}
254 325
255 // The action taken by the test fixture during profile initialization 326 // The action taken by the test fixture during profile initialization
256 // (before NOTIFICATION_PROFILE_CREATED is sent). 327 // (before NOTIFICATION_PROFILE_ADDED is sent).
257 OnProfileCreationAction on_creation_action; 328 OnProfileAdditionAction on_addition_action;
258 }; 329 };
259 330
260 // Returns the name of a profile as provided to CreateProfile. 331 // Returns the name of a profile as provided to CreateProfile.
261 static std::string GetProfileName(Profile* profile) { 332 static std::string GetProfileName(Profile* profile) {
262 // Cannot reliably use profile->GetProfileName() since the test needs the 333 // Cannot reliably use profile->GetProfileName() since the test needs the
263 // name before the profile manager sets it (which happens after profile 334 // name before the profile manager sets it (which happens after profile
264 // creation). 335 // addition).
265 return profile->GetPath().BaseName().AsUTF8Unsafe(); 336 return profile->GetPath().BaseName().AsUTF8Unsafe();
266 } 337 }
267 338
268 // Posts a task to delete the profile. 339 // Posts a task to delete the profile.
269 void DelayedDeleteProfile(Profile* profile) { 340 void DelayedDeleteProfile(Profile* profile) {
270 base::ThreadTaskRunnerHandle::Get()->PostTask( 341 base::ThreadTaskRunnerHandle::Get()->PostTask(
271 FROM_HERE, 342 FROM_HERE,
272 base::Bind(&TestingProfileManager::DeleteTestingProfile, 343 base::Bind(&TestingProfileManager::DeleteTestingProfile,
273 base::Unretained(&profile_manager_), 344 base::Unretained(&profile_manager_),
274 GetProfileName(profile))); 345 GetProfileName(profile)));
275 } 346 }
276 347
277 // A callback run by the test fixture when a profile is created. An incident 348 // A callback run by the test fixture when a profile is added. An incident
278 // is added. 349 // is added.
279 void PreProfileCreate(Profile* profile) { 350 void PreProfileAdd(Profile* profile) {
280 // The instance must have already been created. 351 // The instance must have already been created.
281 ASSERT_TRUE(instance_); 352 ASSERT_TRUE(instance_);
282 // Add a test incident to the service if requested. 353 // Add a test incident to the service if requested.
283 switch (profile_properties_[GetProfileName(profile)].on_creation_action) { 354 switch (profile_properties_[GetProfileName(profile)].on_addition_action) {
284 case ON_PROFILE_CREATION_ADD_INCIDENT: 355 case ON_PROFILE_ADDITION_ADD_INCIDENT:
285 AddTestIncident(profile); 356 AddTestIncident(profile);
286 break; 357 break;
287 default: 358 default:
288 ASSERT_EQ( 359 ASSERT_EQ(
289 ON_PROFILE_CREATION_NO_ACTION, 360 ON_PROFILE_ADDITION_NO_ACTION,
290 profile_properties_[GetProfileName(profile)].on_creation_action); 361 profile_properties_[GetProfileName(profile)].on_addition_action);
291 break; 362 break;
292 } 363 }
293 } 364 }
294 365
295 // A fake CollectEnvironmentData implementation invoked by the service during 366 // A fake CollectEnvironmentData implementation invoked by the service during
296 // operation. 367 // operation.
297 void CollectEnvironmentData( 368 void CollectEnvironmentData(
298 safe_browsing::ClientIncidentReport_EnvironmentData* data) { 369 safe_browsing::ClientIncidentReport_EnvironmentData* data) {
299 ASSERT_NE( 370 ASSERT_NE(
300 static_cast<safe_browsing::ClientIncidentReport_EnvironmentData*>(NULL), 371 static_cast<safe_browsing::ClientIncidentReport_EnvironmentData*>(NULL),
301 data); 372 data);
302 data->mutable_os()->set_os_name(kFakeOsName); 373 data->mutable_os()->set_os_name(kFakeOsName);
303 environment_collected_ = true; 374 environment_collected_ = true;
304 } 375 }
305 376
377 // A fake CreateDownloadFinder implementation invoked by the service during
378 // operation.
379 scoped_ptr<safe_browsing::LastDownloadFinder> CreateDownloadFinder(
380 const safe_browsing::LastDownloadFinder::LastDownloadCallback& callback) {
381 download_finder_created_ = true;
382 scoped_ptr<safe_browsing::ClientIncidentReport_DownloadDetails> download;
383 if (on_create_download_finder_action_ ==
384 ON_CREATE_DOWNLOAD_FINDER_NO_PROFILES) {
385 return scoped_ptr<safe_browsing::LastDownloadFinder>();
386 }
387 if (on_create_download_finder_action_ ==
388 ON_CREATE_DOWNLOAD_FINDER_DOWNLOAD_FOUND) {
389 download.reset(new safe_browsing::ClientIncidentReport_DownloadDetails);
390 download->set_token(kFakeDownloadToken);
391 }
392 return scoped_ptr<safe_browsing::LastDownloadFinder>(
393 FakeDownloadFinder::Create(
394 base::Bind(&IncidentReportingServiceTest::OnDownloadFinderDestroyed,
395 base::Unretained(this)),
396 download.Pass(),
397 callback));
398 }
399
306 // A fake StartUpload implementation invoked by the service during operation. 400 // A fake StartUpload implementation invoked by the service during operation.
307 scoped_ptr<safe_browsing::IncidentReportUploader> StartUpload( 401 scoped_ptr<safe_browsing::IncidentReportUploader> StartUpload(
308 const safe_browsing::IncidentReportUploader::OnResultCallback& callback, 402 const safe_browsing::IncidentReportUploader::OnResultCallback& callback,
309 const safe_browsing::ClientIncidentReport& report) { 403 const safe_browsing::ClientIncidentReport& report) {
310 // Remember the report that is being uploaded. 404 // Remember the report that is being uploaded.
311 uploaded_report_.reset(new safe_browsing::ClientIncidentReport(report)); 405 uploaded_report_.reset(new safe_browsing::ClientIncidentReport(report));
312 // Run and clear the OnStartUpload callback, if provided. 406 // Run and clear the OnStartUpload callback, if provided.
313 if (!on_start_upload_callback_.is_null()) { 407 if (!on_start_upload_callback_.is_null()) {
314 on_start_upload_callback_.Run(); 408 on_start_upload_callback_.Run();
315 on_start_upload_callback_ = base::Closure(); 409 on_start_upload_callback_ = base::Closure();
316 } 410 }
317 return scoped_ptr<safe_browsing::IncidentReportUploader>(new FakeUploader( 411 return scoped_ptr<safe_browsing::IncidentReportUploader>(
318 base::Bind(&IncidentReportingServiceTest::OnUploaderDestroyed, 412 new FakeUploader(
319 base::Unretained(this)), 413 base::Bind(
320 callback, 414 &IncidentReportingServiceTest::OnUploaderDestroyed,
321 upload_result_)); 415 base::Unretained(this)),
416 callback,
417 upload_result_)).Pass();
322 } 418 }
323 419
420 void OnDownloadFinderDestroyed() { download_finder_destroyed_ = true; }
324 void OnUploaderDestroyed() { uploader_destroyed_ = true; } 421 void OnUploaderDestroyed() { uploader_destroyed_ = true; }
325 422
326 // A mapping of profile name to its corresponding properties. 423 // A mapping of profile name to its corresponding properties.
327 std::map<std::string, ProfileProperties> profile_properties_; 424 std::map<std::string, ProfileProperties> profile_properties_;
328 }; 425 };
329 426
330 // static 427 // static
331 base::LazyInstance<base::ThreadLocalPointer< 428 base::LazyInstance<base::ThreadLocalPointer<
332 IncidentReportingServiceTest::TestIncidentReportingService> >::Leaky 429 IncidentReportingServiceTest::TestIncidentReportingService> >::Leaky
333 IncidentReportingServiceTest::TestIncidentReportingService::test_instance_ = 430 IncidentReportingServiceTest::TestIncidentReportingService::test_instance_ =
334 LAZY_INSTANCE_INITIALIZER; 431 LAZY_INSTANCE_INITIALIZER;
335 432
336 const int64 IncidentReportingServiceTest::kIncidentTimeMsec = 47LL; 433 const int64 IncidentReportingServiceTest::kIncidentTimeMsec = 47LL;
337 const char IncidentReportingServiceTest::kFakeOsName[] = "fakedows"; 434 const char IncidentReportingServiceTest::kFakeOsName[] = "fakedows";
435 const char IncidentReportingServiceTest::kFakeDownloadToken[] = "fakedlt";
338 436
339 // Tests that an incident added during profile initialization when safe browsing 437 // Tests that an incident added during profile initialization when safe browsing
340 // is on is uploaded. 438 // is on is uploaded.
341 TEST_F(IncidentReportingServiceTest, AddIncident) { 439 TEST_F(IncidentReportingServiceTest, AddIncident) {
342 CreateProfile( 440 CreateProfile(
343 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_CREATION_ADD_INCIDENT); 441 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
344 442
345 // Let all tasks run. 443 // Let all tasks run.
346 task_runner_->RunUntilIdle(); 444 task_runner_->RunUntilIdle();
347 445
348 // Verify that environment collection took place. 446 // Verify that environment collection took place.
349 EXPECT_TRUE(HasCollectedEnvironmentData()); 447 EXPECT_TRUE(HasCollectedEnvironmentData());
350 448
351 // Verify that report upload took place and contained the incident and 449 // Verify that the most recent download was looked for.
352 // environment data. 450 EXPECT_TRUE(HasCreatedDownloadFinder());
451
452 // Verify that report upload took place and contained the incident,
453 // environment data, and download details.
353 ExpectTestIncidentUploaded(); 454 ExpectTestIncidentUploaded();
354 455
355 // Verify that the uploader was destroyed. 456 // Verify that the download finder and the uploader were destroyed.
457 ASSERT_TRUE(DownloadFinderDestroyed());
356 ASSERT_TRUE(UploaderDestroyed()); 458 ASSERT_TRUE(UploaderDestroyed());
357 } 459 }
358 460
359 // Tests that an incident added during profile initialization when safe browsing 461 // Tests that an incident added during profile initialization when safe browsing
360 // is off is not uploaded. 462 // is off is not uploaded.
361 TEST_F(IncidentReportingServiceTest, NoSafeBrowsing) { 463 TEST_F(IncidentReportingServiceTest, NoSafeBrowsing) {
362 // Create the profile, thereby causing the test to begin. 464 // Create the profile, thereby causing the test to begin.
363 CreateProfile( 465 CreateProfile(
364 "profile1", SAFE_BROWSING_OPT_OUT, ON_PROFILE_CREATION_ADD_INCIDENT); 466 "profile1", SAFE_BROWSING_OPT_OUT, ON_PROFILE_ADDITION_ADD_INCIDENT);
365 467
366 // Let all tasks run. 468 // Let all tasks run.
367 task_runner_->RunUntilIdle(); 469 task_runner_->RunUntilIdle();
368 470
369 // Verify that no report upload took place. 471 // Verify that no report upload took place.
370 ExpectNoUpload(); 472 AssertNoUpload();
473 }
474
475 // Tests that no incident report is uploaded if there is no recent download.
476 TEST_F(IncidentReportingServiceTest, NoDownloadNoUpload) {
477 // Tell the fixture to return no downloads found.
478 SetCreateDownloadFinderAction(ON_CREATE_DOWNLOAD_FINDER_NO_DOWNLOADS);
479
480 // Create the profile, thereby causing the test to begin.
481 CreateProfile(
482 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
483
484 // Let all tasks run.
485 task_runner_->RunUntilIdle();
486
487 // Verify that the download finder was run but that no report upload took
488 // place.
489 EXPECT_TRUE(HasCreatedDownloadFinder());
490 AssertNoUpload();
491 EXPECT_TRUE(DownloadFinderDestroyed());
492 }
493
494 // Tests that no incident report is uploaded if there is no recent download.
495 TEST_F(IncidentReportingServiceTest, NoProfilesNoUpload) {
496 // Tell the fixture to pretend there are no profiles eligible for finding
497 // downloads.
498 SetCreateDownloadFinderAction(ON_CREATE_DOWNLOAD_FINDER_NO_PROFILES);
499
500 // Create the profile, thereby causing the test to begin.
501 CreateProfile(
502 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
503
504 // Let all tasks run.
505 task_runner_->RunUntilIdle();
506
507 // Verify that the download finder was run but that no report upload took
508 // place.
509 EXPECT_TRUE(HasCreatedDownloadFinder());
510 AssertNoUpload();
511 // Although CreateDownloadFinder was called, no instance was returned so there
512 // is nothing to have been destroyed.
513 EXPECT_FALSE(DownloadFinderDestroyed());
371 } 514 }
372 515
373 // Tests that an incident added after upload is not uploaded again. 516 // Tests that an incident added after upload is not uploaded again.
374 TEST_F(IncidentReportingServiceTest, OnlyOneUpload) { 517 TEST_F(IncidentReportingServiceTest, OnlyOneUpload) {
375 // Create the profile, thereby causing the test to begin. 518 // Create the profile, thereby causing the test to begin.
376 Profile* profile = CreateProfile( 519 Profile* profile = CreateProfile(
377 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_CREATION_ADD_INCIDENT); 520 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
378 521
379 // Let all tasks run. 522 // Let all tasks run.
380 task_runner_->RunUntilIdle(); 523 task_runner_->RunUntilIdle();
381 524
382 // Verify that report upload took place and contained the incident and 525 // Verify that report upload took place and contained the incident and
383 // environment data. 526 // environment data.
384 ExpectTestIncidentUploaded(); 527 ExpectTestIncidentUploaded();
385 528
386 // Add the incident to the service again. 529 // Add the incident to the service again.
387 AddTestIncident(profile); 530 AddTestIncident(profile);
388 531
389 // Let all tasks run. 532 // Let all tasks run.
390 task_runner_->RunUntilIdle(); 533 task_runner_->RunUntilIdle();
391 534
392 // Verify that no additional report upload took place. 535 // Verify that no additional report upload took place.
393 ExpectNoUpload(); 536 AssertNoUpload();
394 } 537 }
395 538
396 // Tests that the same incident added for two different profiles in sequence 539 // Tests that the same incident added for two different profiles in sequence
397 // results in two uploads. 540 // results in two uploads.
398 TEST_F(IncidentReportingServiceTest, TwoProfilesTwoUploads) { 541 TEST_F(IncidentReportingServiceTest, TwoProfilesTwoUploads) {
399 // Create the profile, thereby causing the test to begin. 542 // Create the profile, thereby causing the test to begin.
400 CreateProfile( 543 CreateProfile(
401 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_CREATION_ADD_INCIDENT); 544 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
402 545
403 // Let all tasks run. 546 // Let all tasks run.
404 task_runner_->RunUntilIdle(); 547 task_runner_->RunUntilIdle();
405 548
406 // Verify that report upload took place and contained the incident and 549 // Verify that report upload took place and contained the incident and
407 // environment data. 550 // environment data.
408 ExpectTestIncidentUploaded(); 551 ExpectTestIncidentUploaded();
409 552
410 // Create a second profile with its own incident on creation. 553 // Create a second profile with its own incident on addition.
411 CreateProfile( 554 CreateProfile(
412 "profile2", SAFE_BROWSING_OPT_IN, ON_PROFILE_CREATION_ADD_INCIDENT); 555 "profile2", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
413 556
414 // Let all tasks run. 557 // Let all tasks run.
415 task_runner_->RunUntilIdle(); 558 task_runner_->RunUntilIdle();
416 559
417 // Verify that a second report upload took place. 560 // Verify that a second report upload took place.
418 ExpectTestIncidentUploaded(); 561 ExpectTestIncidentUploaded();
419 } 562 }
420 563
421 // Tests that an upload succeeds if the profile is destroyed while it is 564 // Tests that an upload succeeds if the profile is destroyed while it is
422 // pending. 565 // pending.
423 TEST_F(IncidentReportingServiceTest, ProfileDestroyedDuringUpload) { 566 TEST_F(IncidentReportingServiceTest, ProfileDestroyedDuringUpload) {
424 // Create a profile for which an incident will be added. 567 // Create a profile for which an incident will be added.
425 Profile* profile = CreateProfile( 568 Profile* profile = CreateProfile(
426 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_CREATION_ADD_INCIDENT); 569 "profile1", SAFE_BROWSING_OPT_IN, ON_PROFILE_ADDITION_ADD_INCIDENT);
427 570
428 // Hook up a callback to run when the upload is started that will post a task 571 // Hook up a callback to run when the upload is started that will post a task
429 // to delete the profile. This task will run before the upload finishes. 572 // to delete the profile. This task will run before the upload finishes.
430 DeleteProfileOnUpload(profile); 573 DeleteProfileOnUpload(profile);
431 574
432 // Let all tasks run. 575 // Let all tasks run.
433 task_runner_->RunUntilIdle(); 576 task_runner_->RunUntilIdle();
434 577
435 // Verify that report upload took place and contained the incident and 578 // Verify that report upload took place and contained the incident and
436 // environment data. 579 // environment data.
437 ExpectTestIncidentUploaded(); 580 ExpectTestIncidentUploaded();
438 581
439 // The lack of a crash indicates that the deleted profile was not accessed by 582 // The lack of a crash indicates that the deleted profile was not accessed by
440 // the service while handling the upload response. 583 // the service while handling the upload response.
441 } 584 }
442 585
443 // Parallel uploads 586 // Parallel uploads
444 // Shutdown during processing 587 // Shutdown during processing
445 // environment colection taking longer than incident delay timer 588 // environment colection taking longer than incident delay timer
446 // environment colection taking longer than incident delay timer, and then 589 // environment colection taking longer than incident delay timer, and then
447 // another incident arriving 590 // another incident arriving
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/incident_reporting_service.cc ('k') | chrome/browser/safe_browsing/last_download_finder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698