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

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

Issue 14197014: Add TestBrowserThreadBundle into RenderViewHostTestHarness. Kill some unnecessary real threads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge to head, address jyasskin's comments. Created 7 years, 6 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/files/file_path.h" 5 #include "base/files/file_path.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/run_loop.h"
8 #include "base/stringprintf.h" 9 #include "base/stringprintf.h"
9 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
10 #include "chrome/browser/safe_browsing/browser_feature_extractor.h" 11 #include "chrome/browser/safe_browsing/browser_feature_extractor.h"
11 #include "chrome/browser/safe_browsing/client_side_detection_host.h" 12 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
12 #include "chrome/browser/safe_browsing/client_side_detection_service.h" 13 #include "chrome/browser/safe_browsing/client_side_detection_service.h"
13 #include "chrome/browser/safe_browsing/database_manager.h" 14 #include "chrome/browser/safe_browsing/database_manager.h"
14 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 15 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
15 #include "chrome/browser/safe_browsing/ui_manager.h" 16 #include "chrome/browser/safe_browsing/ui_manager.h"
16 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
17 #include "chrome/common/safe_browsing/csd.pb.h" 18 #include "chrome/common/safe_browsing/csd.pb.h"
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 public: 186 public:
186 typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; 187 typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource;
187 188
188 virtual void SetUp() { 189 virtual void SetUp() {
189 // Set custom profile object so that we can mock calls to IsOffTheRecord. 190 // Set custom profile object so that we can mock calls to IsOffTheRecord.
190 // This needs to happen before we call the parent SetUp() function. We use 191 // This needs to happen before we call the parent SetUp() function. We use
191 // a nice mock because other parts of the code are calling IsOffTheRecord. 192 // a nice mock because other parts of the code are calling IsOffTheRecord.
192 mock_profile_ = new NiceMock<MockTestingProfile>(); 193 mock_profile_ = new NiceMock<MockTestingProfile>();
193 browser_context_.reset(mock_profile_); 194 browser_context_.reset(mock_profile_);
194 195
195 ui_thread_.reset(new content::TestBrowserThread(BrowserThread::UI,
196 &message_loop_));
197 file_user_blocking_thread_.reset(
198 new content::TestBrowserThread(BrowserThread::FILE_USER_BLOCKING,
199 &message_loop_));
200 // Note: we're starting a real IO thread to make sure our DCHECKs that
201 // verify which thread is running are actually tested.
202 io_thread_.reset(new content::TestBrowserThread(BrowserThread::IO));
203 ASSERT_TRUE(io_thread_->Start());
204
205 ChromeRenderViewHostTestHarness::SetUp(); 196 ChromeRenderViewHostTestHarness::SetUp();
206 197
207 // Inject service classes. 198 // Inject service classes.
208 csd_service_.reset(new StrictMock<MockClientSideDetectionService>()); 199 csd_service_.reset(new StrictMock<MockClientSideDetectionService>());
209 // Only used for initializing mock objects. 200 // Only used for initializing mock objects.
210 SafeBrowsingService* sb_service = 201 SafeBrowsingService* sb_service =
211 SafeBrowsingService::CreateSafeBrowsingService(); 202 SafeBrowsingService::CreateSafeBrowsingService();
212 database_manager_ = 203 database_manager_ =
213 new StrictMock<MockSafeBrowsingDatabaseManager>(sb_service); 204 new StrictMock<MockSafeBrowsingDatabaseManager>(sb_service);
214 ui_manager_ = new StrictMock<MockSafeBrowsingUIManager>(sb_service); 205 ui_manager_ = new StrictMock<MockSafeBrowsingUIManager>(sb_service);
215 csd_host_.reset(safe_browsing::ClientSideDetectionHost::Create( 206 csd_host_.reset(safe_browsing::ClientSideDetectionHost::Create(
216 web_contents())); 207 web_contents()));
217 csd_host_->set_client_side_detection_service(csd_service_.get()); 208 csd_host_->set_client_side_detection_service(csd_service_.get());
218 csd_host_->set_safe_browsing_managers(ui_manager_, database_manager_); 209 csd_host_->set_safe_browsing_managers(ui_manager_, database_manager_);
219 // We need to create this here since we don't call 210 // We need to create this here since we don't call
220 // DidNavigateMainFramePostCommit in this test. 211 // DidNavigateMainFramePostCommit in this test.
221 csd_host_->browse_info_.reset(new BrowseInfo); 212 csd_host_->browse_info_.reset(new BrowseInfo);
222 213
223 // By default this is set to false. Turn it on as if we are in canary or 214 // By default this is set to false. Turn it on as if we are in canary or
224 // dev channel 215 // dev channel
225 csd_host_->malware_report_enabled_ = true; 216 csd_host_->malware_report_enabled_ = true;
226 } 217 }
227 218
228 static void RunAllPendingOnIO(base::WaitableEvent* event) {
229 base::MessageLoop::current()->RunUntilIdle();
230 event->Signal();
231 }
232
233 virtual void TearDown() { 219 virtual void TearDown() {
234 // Delete the host object on the UI thread and release the 220 // Delete the host object on the UI thread and release the
235 // SafeBrowsingService. 221 // SafeBrowsingService.
236 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, 222 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE,
237 csd_host_.release()); 223 csd_host_.release());
238 database_manager_ = NULL; 224 database_manager_ = NULL;
239 ui_manager_ = NULL; 225 ui_manager_ = NULL;
240 message_loop_.RunUntilIdle(); 226 base::RunLoop().RunUntilIdle();
241 ChromeRenderViewHostTestHarness::TearDown(); 227 ChromeRenderViewHostTestHarness::TearDown();
242
243 // Let the tasks on the IO thread run to avoid memory leaks.
244 base::WaitableEvent done(false, false);
245 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
246 base::Bind(RunAllPendingOnIO, &done));
247 done.Wait();
248 io_thread_.reset();
249 message_loop_.RunUntilIdle();
250 file_user_blocking_thread_.reset();
251 ui_thread_.reset();
252 } 228 }
253 229
254 void OnPhishingDetectionDone(const std::string& verdict_str) { 230 void OnPhishingDetectionDone(const std::string& verdict_str) {
255 csd_host_->OnPhishingDetectionDone(verdict_str); 231 csd_host_->OnPhishingDetectionDone(verdict_str);
256 } 232 }
257 233
258 void UpdateIPHostMap(const std::string& ip, const std::string& host) { 234 void UpdateIPHostMap(const std::string& ip, const std::string& host) {
259 csd_host_->UpdateIPHostMap(ip, host); 235 csd_host_->UpdateIPHostMap(ip, host);
260 } 236 }
261 237
262 BrowseInfo* GetBrowseInfo() { 238 BrowseInfo* GetBrowseInfo() {
263 return csd_host_->browse_info_.get(); 239 return csd_host_->browse_info_.get();
264 } 240 }
265 241
266 void FlushIOMessageLoop() {
267 // If there was a message posted on the IO thread to display the
268 // interstitial page we know that it would have been posted before
269 // we put the quit message there.
270 BrowserThread::PostTask(BrowserThread::IO,
271 FROM_HERE,
272 base::Bind(&QuitUIMessageLoopFromIO));
273 base::MessageLoop::current()->Run();
274 }
275
276 void ExpectPreClassificationChecks(const GURL& url, 242 void ExpectPreClassificationChecks(const GURL& url,
277 const bool* is_private, 243 const bool* is_private,
278 const bool* is_incognito, 244 const bool* is_incognito,
279 const bool* match_csd_whitelist, 245 const bool* match_csd_whitelist,
280 const bool* get_valid_cached_result, 246 const bool* get_valid_cached_result,
281 const bool* is_in_cache, 247 const bool* is_in_cache,
282 const bool* over_report_limit) { 248 const bool* over_report_limit) {
283 if (is_private) { 249 if (is_private) {
284 EXPECT_CALL(*csd_service_, IsPrivateIPAddress(_)) 250 EXPECT_CALL(*csd_service_, IsPrivateIPAddress(_))
285 .WillOnce(Return(*is_private)); 251 .WillOnce(Return(*is_private));
(...skipping 14 matching lines...) Expand all
300 if (is_in_cache) { 266 if (is_in_cache) {
301 EXPECT_CALL(*csd_service_, IsInCache(url)).WillOnce(Return(*is_in_cache)); 267 EXPECT_CALL(*csd_service_, IsInCache(url)).WillOnce(Return(*is_in_cache));
302 } 268 }
303 if (over_report_limit) { 269 if (over_report_limit) {
304 EXPECT_CALL(*csd_service_, OverPhishingReportLimit()) 270 EXPECT_CALL(*csd_service_, OverPhishingReportLimit())
305 .WillOnce(Return(*over_report_limit)); 271 .WillOnce(Return(*over_report_limit));
306 } 272 }
307 } 273 }
308 274
309 void WaitAndCheckPreClassificationChecks() { 275 void WaitAndCheckPreClassificationChecks() {
310 // Wait for CheckCsdWhitelist to be called if at all. 276 // Wait for CheckCsdWhitelist and CheckCache() to be called if at all.
311 FlushIOMessageLoop(); 277 base::RunLoop().RunUntilIdle();
312 // Checks for CheckCache() to be called if at all.
313 base::MessageLoop::current()->RunUntilIdle();
314 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 278 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
315 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); 279 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get()));
316 EXPECT_TRUE(Mock::VerifyAndClear(database_manager_.get())); 280 EXPECT_TRUE(Mock::VerifyAndClear(database_manager_.get()));
317 EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_)); 281 EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_));
318 } 282 }
319 283
320 void SetFeatureExtractor(BrowserFeatureExtractor* extractor) { 284 void SetFeatureExtractor(BrowserFeatureExtractor* extractor) {
321 csd_host_->feature_extractor_.reset(extractor); 285 csd_host_->feature_extractor_.reset(extractor);
322 } 286 }
323 287
(...skipping 28 matching lines...) Expand all
352 EXPECT_EQ(resource.render_view_id, 316 EXPECT_EQ(resource.render_view_id,
353 csd_host_->unsafe_resource_->render_view_id); 317 csd_host_->unsafe_resource_->render_view_id);
354 } 318 }
355 319
356 protected: 320 protected:
357 scoped_ptr<ClientSideDetectionHost> csd_host_; 321 scoped_ptr<ClientSideDetectionHost> csd_host_;
358 scoped_ptr<StrictMock<MockClientSideDetectionService> > csd_service_; 322 scoped_ptr<StrictMock<MockClientSideDetectionService> > csd_service_;
359 scoped_refptr<StrictMock<MockSafeBrowsingUIManager> > ui_manager_; 323 scoped_refptr<StrictMock<MockSafeBrowsingUIManager> > ui_manager_;
360 scoped_refptr<StrictMock<MockSafeBrowsingDatabaseManager> > database_manager_; 324 scoped_refptr<StrictMock<MockSafeBrowsingDatabaseManager> > database_manager_;
361 MockTestingProfile* mock_profile_; // We don't own this object 325 MockTestingProfile* mock_profile_; // We don't own this object
362
363 private:
364 scoped_ptr<content::TestBrowserThread> ui_thread_;
365 scoped_ptr<content::TestBrowserThread> file_user_blocking_thread_;
366 scoped_ptr<content::TestBrowserThread> io_thread_;
367 }; 326 };
368 327
369 328
370 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneInvalidVerdict) { 329 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneInvalidVerdict) {
371 // Case 0: renderer sends an invalid verdict string that we're unable to 330 // Case 0: renderer sends an invalid verdict string that we're unable to
372 // parse. 331 // parse.
373 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( 332 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor(
374 web_contents(), 333 web_contents(),
375 csd_service_.get()); 334 csd_service_.get());
376 SetFeatureExtractor(mock_extractor); // The host class takes ownership. 335 SetFeatureExtractor(mock_extractor); // The host class takes ownership.
(...skipping 23 matching lines...) Expand all
400 SendClientReportPhishingRequest( 359 SendClientReportPhishingRequest(
401 Pointee(PartiallyEqualVerdict(verdict)), _)) 360 Pointee(PartiallyEqualVerdict(verdict)), _))
402 .WillOnce(SaveArg<1>(&cb)); 361 .WillOnce(SaveArg<1>(&cb));
403 OnPhishingDetectionDone(verdict.SerializeAsString()); 362 OnPhishingDetectionDone(verdict.SerializeAsString());
404 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 363 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
405 ASSERT_FALSE(cb.is_null()); 364 ASSERT_FALSE(cb.is_null());
406 365
407 // Make sure DoDisplayBlockingPage is not going to be called. 366 // Make sure DoDisplayBlockingPage is not going to be called.
408 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0); 367 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0);
409 cb.Run(GURL(verdict.url()), false); 368 cb.Run(GURL(verdict.url()), false);
410 base::MessageLoop::current()->RunUntilIdle(); 369 base::RunLoop().RunUntilIdle();
411 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); 370 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get()));
412 } 371 }
413 372
414 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { 373 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) {
415 // Case 2: client thinks the page is phishing and so does the server but 374 // Case 2: client thinks the page is phishing and so does the server but
416 // showing the interstitial is disabled => no interstitial is shown. 375 // showing the interstitial is disabled => no interstitial is shown.
417 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( 376 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor(
418 web_contents(), 377 web_contents(),
419 csd_service_.get()); 378 csd_service_.get());
420 SetFeatureExtractor(mock_extractor); // The host class takes ownership. 379 SetFeatureExtractor(mock_extractor); // The host class takes ownership.
(...skipping 11 matching lines...) Expand all
432 SendClientReportPhishingRequest( 391 SendClientReportPhishingRequest(
433 Pointee(PartiallyEqualVerdict(verdict)), _)) 392 Pointee(PartiallyEqualVerdict(verdict)), _))
434 .WillOnce(SaveArg<1>(&cb)); 393 .WillOnce(SaveArg<1>(&cb));
435 OnPhishingDetectionDone(verdict.SerializeAsString()); 394 OnPhishingDetectionDone(verdict.SerializeAsString());
436 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 395 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
437 ASSERT_FALSE(cb.is_null()); 396 ASSERT_FALSE(cb.is_null());
438 397
439 // Make sure DoDisplayBlockingPage is not going to be called. 398 // Make sure DoDisplayBlockingPage is not going to be called.
440 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0); 399 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0);
441 cb.Run(GURL(verdict.url()), false); 400 cb.Run(GURL(verdict.url()), false);
442 base::MessageLoop::current()->RunUntilIdle(); 401 base::RunLoop().RunUntilIdle();
443 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); 402 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get()));
444 } 403 }
445 404
446 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { 405 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) {
447 // Case 3: client thinks the page is phishing and so does the server. 406 // Case 3: client thinks the page is phishing and so does the server.
448 // We show an interstitial. 407 // We show an interstitial.
449 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( 408 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor(
450 web_contents(), 409 web_contents(),
451 csd_service_.get()); 410 csd_service_.get());
452 SetFeatureExtractor(mock_extractor); // The host class takes ownership. 411 SetFeatureExtractor(mock_extractor); // The host class takes ownership.
(...skipping 14 matching lines...) Expand all
467 .WillOnce(SaveArg<1>(&cb)); 426 .WillOnce(SaveArg<1>(&cb));
468 OnPhishingDetectionDone(verdict.SerializeAsString()); 427 OnPhishingDetectionDone(verdict.SerializeAsString());
469 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 428 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
470 ASSERT_FALSE(cb.is_null()); 429 ASSERT_FALSE(cb.is_null());
471 430
472 UnsafeResource resource; 431 UnsafeResource resource;
473 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) 432 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_))
474 .WillOnce(SaveArg<0>(&resource)); 433 .WillOnce(SaveArg<0>(&resource));
475 cb.Run(phishing_url, true); 434 cb.Run(phishing_url, true);
476 435
477 base::MessageLoop::current()->RunUntilIdle(); 436 base::RunLoop().RunUntilIdle();
478 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); 437 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get()));
479 EXPECT_EQ(phishing_url, resource.url); 438 EXPECT_EQ(phishing_url, resource.url);
480 EXPECT_EQ(phishing_url, resource.original_url); 439 EXPECT_EQ(phishing_url, resource.original_url);
481 EXPECT_FALSE(resource.is_subresource); 440 EXPECT_FALSE(resource.is_subresource);
482 EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type); 441 EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type);
483 EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(), 442 EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(),
484 resource.render_process_host_id); 443 resource.render_process_host_id);
485 EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(), 444 EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(),
486 resource.render_view_id); 445 resource.render_view_id);
487 446
488 // Make sure the client object will be deleted. 447 // Make sure the client object will be deleted.
489 BrowserThread::PostTask( 448 BrowserThread::PostTask(
490 BrowserThread::IO, 449 BrowserThread::IO,
491 FROM_HERE, 450 FROM_HERE,
492 base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete, 451 base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete,
493 ui_manager_, resource.callback)); 452 ui_manager_, resource.callback));
494 // Since the CsdClient object will be deleted on the UI thread I need
495 // to run the UI message loop. Post a task to stop the UI message loop
496 // after the client object destructor is called.
497 FlushIOMessageLoop();
498 } 453 }
499 454
500 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { 455 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
501 // Case 4 & 5: client thinks a page is phishing then navigates to 456 // Case 4 & 5: client thinks a page is phishing then navigates to
502 // another page which is also considered phishing by the client 457 // another page which is also considered phishing by the client
503 // before the server responds with a verdict. After a while the 458 // before the server responds with a verdict. After a while the
504 // server responds for both requests with a phishing verdict. Only 459 // server responds for both requests with a phishing verdict. Only
505 // a single interstitial is shown for the second URL. 460 // a single interstitial is shown for the second URL.
506 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( 461 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor(
507 web_contents(), 462 web_contents(),
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
558 513
559 // We expect that the interstitial is shown for the second phishing URL and 514 // We expect that the interstitial is shown for the second phishing URL and
560 // not for the first phishing URL. 515 // not for the first phishing URL.
561 UnsafeResource resource; 516 UnsafeResource resource;
562 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) 517 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_))
563 .WillOnce(SaveArg<0>(&resource)); 518 .WillOnce(SaveArg<0>(&resource));
564 519
565 cb.Run(phishing_url, true); // Should have no effect. 520 cb.Run(phishing_url, true); // Should have no effect.
566 cb_other.Run(other_phishing_url, true); // Should show interstitial. 521 cb_other.Run(other_phishing_url, true); // Should show interstitial.
567 522
568 base::MessageLoop::current()->RunUntilIdle(); 523 base::RunLoop().RunUntilIdle();
569 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); 524 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get()));
570 EXPECT_EQ(other_phishing_url, resource.url); 525 EXPECT_EQ(other_phishing_url, resource.url);
571 EXPECT_EQ(other_phishing_url, resource.original_url); 526 EXPECT_EQ(other_phishing_url, resource.original_url);
572 EXPECT_FALSE(resource.is_subresource); 527 EXPECT_FALSE(resource.is_subresource);
573 EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type); 528 EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type);
574 EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(), 529 EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(),
575 resource.render_process_host_id); 530 resource.render_process_host_id);
576 EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(), 531 EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(),
577 resource.render_view_id); 532 resource.render_view_id);
578 533
579 // Make sure the client object will be deleted. 534 // Make sure the client object will be deleted.
580 BrowserThread::PostTask( 535 BrowserThread::PostTask(
581 BrowserThread::IO, 536 BrowserThread::IO,
582 FROM_HERE, 537 FROM_HERE,
583 base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete, 538 base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete,
584 ui_manager_, resource.callback)); 539 ui_manager_, resource.callback));
585 // Since the CsdClient object will be deleted on the UI thread I need
586 // to run the UI message loop. Post a task to stop the UI message loop
587 // after the client object destructor is called.
588 FlushIOMessageLoop();
589 } 540 }
590 541
591 TEST_F(ClientSideDetectionHostTest, 542 TEST_F(ClientSideDetectionHostTest,
592 OnPhishingDetectionDoneVerdictNotPhishing) { 543 OnPhishingDetectionDoneVerdictNotPhishing) {
593 // Case 6: renderer sends a verdict string that isn't phishing. 544 // Case 6: renderer sends a verdict string that isn't phishing.
594 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( 545 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor(
595 web_contents(), 546 web_contents(),
596 csd_service_.get()); 547 csd_service_.get());
597 SetFeatureExtractor(mock_extractor); // The host class takes ownership. 548 SetFeatureExtractor(mock_extractor); // The host class takes ownership.
598 549
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 // with no start classification message. 899 // with no start classification message.
949 url = GURL("http://host8.com/"); 900 url = GURL("http://host8.com/");
950 ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kTrue, NULL, 901 ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kTrue, NULL,
951 NULL); 902 NULL);
952 903
953 UnsafeResource resource; 904 UnsafeResource resource;
954 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) 905 EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_))
955 .WillOnce(SaveArg<0>(&resource)); 906 .WillOnce(SaveArg<0>(&resource));
956 907
957 NavigateAndCommit(url); 908 NavigateAndCommit(url);
958 // Wait for CheckCsdWhitelist to be called on the IO thread. 909 // Wait for CheckCsdWhitelist and CheckCache() to be called.
959 FlushIOMessageLoop(); 910 base::RunLoop().RunUntilIdle();
960 // Wait for CheckCache() to be called on the UI thread.
961 base::MessageLoop::current()->RunUntilIdle();
962 // Now we check that all expected functions were indeed called on the two 911 // Now we check that all expected functions were indeed called on the two
963 // service objects. 912 // service objects.
964 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); 913 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
965 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); 914 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get()));
966 EXPECT_EQ(url, resource.url); 915 EXPECT_EQ(url, resource.url);
967 EXPECT_EQ(url, resource.original_url); 916 EXPECT_EQ(url, resource.original_url);
968 resource.callback.Reset(); 917 resource.callback.Reset();
969 msg = process()->sink().GetFirstMessageMatching( 918 msg = process()->sink().GetFirstMessageMatching(
970 SafeBrowsingMsg_StartPhishingDetection::ID); 919 SafeBrowsingMsg_StartPhishingDetection::ID);
971 ASSERT_FALSE(msg); 920 ASSERT_FALSE(msg);
972 } 921 }
973 922
974 } // namespace safe_browsing 923 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698