OLD | NEW |
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/run_loop.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 private: | 132 private: |
133 DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingUIManager); | 133 DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingUIManager); |
134 }; | 134 }; |
135 | 135 |
136 class MockSafeBrowsingDatabaseManager : public SafeBrowsingDatabaseManager { | 136 class MockSafeBrowsingDatabaseManager : public SafeBrowsingDatabaseManager { |
137 public: | 137 public: |
138 explicit MockSafeBrowsingDatabaseManager(SafeBrowsingService* service) | 138 explicit MockSafeBrowsingDatabaseManager(SafeBrowsingService* service) |
139 : SafeBrowsingDatabaseManager(service) { } | 139 : SafeBrowsingDatabaseManager(service) { } |
140 | 140 |
141 MOCK_METHOD1(MatchCsdWhitelistUrl, bool(const GURL&)); | 141 MOCK_METHOD1(MatchCsdWhitelistUrl, bool(const GURL&)); |
| 142 MOCK_METHOD1(MatchMalwareIP, bool(const std::string& ip_address)); |
142 | 143 |
143 protected: | 144 protected: |
144 virtual ~MockSafeBrowsingDatabaseManager() {} | 145 virtual ~MockSafeBrowsingDatabaseManager() {} |
145 | 146 |
146 private: | 147 private: |
147 DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingDatabaseManager); | 148 DISALLOW_COPY_AND_ASSIGN(MockSafeBrowsingDatabaseManager); |
148 }; | 149 }; |
149 | 150 |
150 class MockTestingProfile : public TestingProfile { | 151 class MockTestingProfile : public TestingProfile { |
151 public: | 152 public: |
152 MockTestingProfile() {} | 153 MockTestingProfile() {} |
153 virtual ~MockTestingProfile() {} | 154 virtual ~MockTestingProfile() {} |
154 | 155 |
155 MOCK_CONST_METHOD0(IsOffTheRecord, bool()); | 156 MOCK_CONST_METHOD0(IsOffTheRecord, bool()); |
156 }; | 157 }; |
157 | 158 |
158 class MockBrowserFeatureExtractor : public BrowserFeatureExtractor { | 159 class MockBrowserFeatureExtractor : public BrowserFeatureExtractor { |
159 public: | 160 public: |
160 explicit MockBrowserFeatureExtractor( | 161 explicit MockBrowserFeatureExtractor( |
161 WebContents* tab, | 162 WebContents* tab, |
162 ClientSideDetectionService* service) | 163 ClientSideDetectionHost* host) |
163 : BrowserFeatureExtractor(tab, service) {} | 164 : BrowserFeatureExtractor(tab, host) {} |
164 virtual ~MockBrowserFeatureExtractor() {} | 165 virtual ~MockBrowserFeatureExtractor() {} |
165 | 166 |
166 MOCK_METHOD3(ExtractFeatures, | 167 MOCK_METHOD3(ExtractFeatures, |
167 void(const BrowseInfo* info, | 168 void(const BrowseInfo*, |
168 ClientPhishingRequest*, | 169 ClientPhishingRequest*, |
169 const BrowserFeatureExtractor::DoneCallback&)); | 170 const BrowserFeatureExtractor::DoneCallback&)); |
170 | 171 |
171 MOCK_METHOD2(ExtractMalwareFeatures, | 172 MOCK_METHOD3(ExtractMalwareFeatures, |
172 void(const BrowseInfo* info, | 173 void(const BrowseInfo&, |
173 ClientMalwareRequest*)); | 174 ClientMalwareRequest*, |
| 175 const BrowserFeatureExtractor::MalwareDoneCallback&)); |
174 }; | 176 }; |
175 | 177 |
176 } // namespace | 178 } // namespace |
177 | 179 |
178 class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { | 180 class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { |
179 public: | 181 public: |
180 typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; | 182 typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; |
181 | 183 |
182 virtual void SetUp() { | 184 virtual void SetUp() { |
183 ChromeRenderViewHostTestHarness::SetUp(); | 185 ChromeRenderViewHostTestHarness::SetUp(); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 // Crashes on Blink canary bots: http://crbug.com/299149 | 327 // Crashes on Blink canary bots: http://crbug.com/299149 |
326 TEST_F(ClientSideDetectionHostTest, | 328 TEST_F(ClientSideDetectionHostTest, |
327 DISABLED_OnPhishingDetectionDoneInvalidVerdict) { | 329 DISABLED_OnPhishingDetectionDoneInvalidVerdict) { |
328 #else | 330 #else |
329 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneInvalidVerdict) { | 331 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneInvalidVerdict) { |
330 #endif | 332 #endif |
331 // Case 0: renderer sends an invalid verdict string that we're unable to | 333 // Case 0: renderer sends an invalid verdict string that we're unable to |
332 // parse. | 334 // parse. |
333 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 335 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
334 web_contents(), | 336 web_contents(), |
335 csd_service_.get()); | 337 csd_host_.get()); |
336 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 338 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
337 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); | 339 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); |
338 OnPhishingDetectionDone("Invalid Protocol Buffer"); | 340 OnPhishingDetectionDone("Invalid Protocol Buffer"); |
339 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); | 341 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
340 } | 342 } |
341 | 343 |
342 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneNotPhishing) { | 344 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneNotPhishing) { |
343 // Case 1: client thinks the page is phishing. The server does not agree. | 345 // Case 1: client thinks the page is phishing. The server does not agree. |
344 // No interstitial is shown. | 346 // No interstitial is shown. |
345 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 347 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
346 web_contents(), | 348 web_contents(), |
347 csd_service_.get()); | 349 csd_host_.get()); |
348 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 350 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
349 | 351 |
350 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; | 352 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; |
351 ClientPhishingRequest verdict; | 353 ClientPhishingRequest verdict; |
352 verdict.set_url("http://phishingurl.com/"); | 354 verdict.set_url("http://phishingurl.com/"); |
353 verdict.set_client_score(1.0f); | 355 verdict.set_client_score(1.0f); |
354 verdict.set_is_phishing(true); | 356 verdict.set_is_phishing(true); |
355 | 357 |
356 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) | 358 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) |
357 .WillOnce(DoAll(DeleteArg<1>(), | 359 .WillOnce(DoAll(DeleteArg<1>(), |
358 InvokeCallbackArgument<2>(true, &verdict))); | 360 InvokeCallbackArgument<2>(true, &verdict))); |
359 EXPECT_CALL(*csd_service_, | 361 EXPECT_CALL(*csd_service_, |
360 SendClientReportPhishingRequest( | 362 SendClientReportPhishingRequest( |
361 Pointee(PartiallyEqualVerdict(verdict)), _)) | 363 Pointee(PartiallyEqualVerdict(verdict)), _)) |
362 .WillOnce(SaveArg<1>(&cb)); | 364 .WillOnce(SaveArg<1>(&cb)); |
363 OnPhishingDetectionDone(verdict.SerializeAsString()); | 365 OnPhishingDetectionDone(verdict.SerializeAsString()); |
364 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 366 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
365 ASSERT_FALSE(cb.is_null()); | 367 ASSERT_FALSE(cb.is_null()); |
366 | 368 |
367 // Make sure DoDisplayBlockingPage is not going to be called. | 369 // Make sure DoDisplayBlockingPage is not going to be called. |
368 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)).Times(0); | 370 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)).Times(0); |
369 cb.Run(GURL(verdict.url()), false); | 371 cb.Run(GURL(verdict.url()), false); |
370 base::RunLoop().RunUntilIdle(); | 372 base::RunLoop().RunUntilIdle(); |
371 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 373 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
372 } | 374 } |
373 | 375 |
374 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { | 376 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { |
375 // Case 2: client thinks the page is phishing and so does the server but | 377 // Case 2: client thinks the page is phishing and so does the server but |
376 // showing the interstitial is disabled => no interstitial is shown. | 378 // showing the interstitial is disabled => no interstitial is shown. |
377 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 379 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
378 web_contents(), | 380 web_contents(), |
379 csd_service_.get()); | 381 csd_host_.get()); |
380 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 382 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
381 | 383 |
382 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; | 384 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; |
383 ClientPhishingRequest verdict; | 385 ClientPhishingRequest verdict; |
384 verdict.set_url("http://phishingurl.com/"); | 386 verdict.set_url("http://phishingurl.com/"); |
385 verdict.set_client_score(1.0f); | 387 verdict.set_client_score(1.0f); |
386 verdict.set_is_phishing(true); | 388 verdict.set_is_phishing(true); |
387 | 389 |
388 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) | 390 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) |
389 .WillOnce(DoAll(DeleteArg<1>(), | 391 .WillOnce(DoAll(DeleteArg<1>(), |
390 InvokeCallbackArgument<2>(true, &verdict))); | 392 InvokeCallbackArgument<2>(true, &verdict))); |
391 EXPECT_CALL(*csd_service_, | 393 EXPECT_CALL(*csd_service_, |
392 SendClientReportPhishingRequest( | 394 SendClientReportPhishingRequest( |
393 Pointee(PartiallyEqualVerdict(verdict)), _)) | 395 Pointee(PartiallyEqualVerdict(verdict)), _)) |
394 .WillOnce(SaveArg<1>(&cb)); | 396 .WillOnce(SaveArg<1>(&cb)); |
395 OnPhishingDetectionDone(verdict.SerializeAsString()); | 397 OnPhishingDetectionDone(verdict.SerializeAsString()); |
396 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 398 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
397 ASSERT_FALSE(cb.is_null()); | 399 ASSERT_FALSE(cb.is_null()); |
398 | 400 |
399 // Make sure DoDisplayBlockingPage is not going to be called. | 401 // Make sure DoDisplayBlockingPage is not going to be called. |
400 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)).Times(0); | 402 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)).Times(0); |
401 cb.Run(GURL(verdict.url()), false); | 403 cb.Run(GURL(verdict.url()), false); |
402 base::RunLoop().RunUntilIdle(); | 404 base::RunLoop().RunUntilIdle(); |
403 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 405 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
404 } | 406 } |
405 | 407 |
406 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { | 408 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { |
407 // Case 3: client thinks the page is phishing and so does the server. | 409 // Case 3: client thinks the page is phishing and so does the server. |
408 // We show an interstitial. | 410 // We show an interstitial. |
409 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 411 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
410 web_contents(), | 412 web_contents(), |
411 csd_service_.get()); | 413 csd_host_.get()); |
412 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 414 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
413 | 415 |
414 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; | 416 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; |
415 GURL phishing_url("http://phishingurl.com/"); | 417 GURL phishing_url("http://phishingurl.com/"); |
416 ClientPhishingRequest verdict; | 418 ClientPhishingRequest verdict; |
417 verdict.set_url(phishing_url.spec()); | 419 verdict.set_url(phishing_url.spec()); |
418 verdict.set_client_score(1.0f); | 420 verdict.set_client_score(1.0f); |
419 verdict.set_is_phishing(true); | 421 verdict.set_is_phishing(true); |
420 | 422 |
421 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) | 423 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) |
422 .WillOnce(DoAll(DeleteArg<1>(), | 424 .WillOnce(DoAll(DeleteArg<1>(), |
423 InvokeCallbackArgument<2>(true, &verdict))); | 425 InvokeCallbackArgument<2>(true, &verdict))); |
424 EXPECT_CALL(*csd_service_, | 426 EXPECT_CALL(*csd_service_, |
425 SendClientReportPhishingRequest( | 427 SendClientReportPhishingRequest( |
426 Pointee(PartiallyEqualVerdict(verdict)), _)) | 428 Pointee(PartiallyEqualVerdict(verdict)), _)) |
427 .WillOnce(SaveArg<1>(&cb)); | 429 .WillOnce(SaveArg<1>(&cb)); |
428 OnPhishingDetectionDone(verdict.SerializeAsString()); | 430 OnPhishingDetectionDone(verdict.SerializeAsString()); |
| 431 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
429 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 432 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
430 ASSERT_FALSE(cb.is_null()); | 433 ASSERT_FALSE(cb.is_null()); |
431 | 434 |
432 UnsafeResource resource; | 435 UnsafeResource resource; |
433 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) | 436 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) |
434 .WillOnce(SaveArg<0>(&resource)); | 437 .WillOnce(SaveArg<0>(&resource)); |
435 cb.Run(phishing_url, true); | 438 cb.Run(phishing_url, true); |
436 | 439 |
437 base::RunLoop().RunUntilIdle(); | 440 base::RunLoop().RunUntilIdle(); |
438 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 441 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
(...skipping 15 matching lines...) Expand all Loading... |
454 } | 457 } |
455 | 458 |
456 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { | 459 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { |
457 // Case 4 & 5: client thinks a page is phishing then navigates to | 460 // Case 4 & 5: client thinks a page is phishing then navigates to |
458 // another page which is also considered phishing by the client | 461 // another page which is also considered phishing by the client |
459 // before the server responds with a verdict. After a while the | 462 // before the server responds with a verdict. After a while the |
460 // server responds for both requests with a phishing verdict. Only | 463 // server responds for both requests with a phishing verdict. Only |
461 // a single interstitial is shown for the second URL. | 464 // a single interstitial is shown for the second URL. |
462 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 465 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
463 web_contents(), | 466 web_contents(), |
464 csd_service_.get()); | 467 csd_host_.get()); |
465 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 468 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
466 | 469 |
467 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; | 470 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; |
468 GURL phishing_url("http://phishingurl.com/"); | 471 GURL phishing_url("http://phishingurl.com/"); |
469 ClientPhishingRequest verdict; | 472 ClientPhishingRequest verdict; |
470 verdict.set_url(phishing_url.spec()); | 473 verdict.set_url(phishing_url.spec()); |
471 verdict.set_client_score(1.0f); | 474 verdict.set_client_score(1.0f); |
472 verdict.set_is_phishing(true); | 475 verdict.set_is_phishing(true); |
473 | 476 |
474 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) | 477 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) |
475 .WillOnce(DoAll(DeleteArg<1>(), | 478 .WillOnce(DoAll(DeleteArg<1>(), |
476 InvokeCallbackArgument<2>(true, &verdict))); | 479 InvokeCallbackArgument<2>(true, &verdict))); |
477 EXPECT_CALL(*csd_service_, | 480 EXPECT_CALL(*csd_service_, |
478 SendClientReportPhishingRequest( | 481 SendClientReportPhishingRequest( |
479 Pointee(PartiallyEqualVerdict(verdict)), _)) | 482 Pointee(PartiallyEqualVerdict(verdict)), _)) |
480 .WillOnce(SaveArg<1>(&cb)); | 483 .WillOnce(SaveArg<1>(&cb)); |
481 OnPhishingDetectionDone(verdict.SerializeAsString()); | 484 OnPhishingDetectionDone(verdict.SerializeAsString()); |
| 485 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
482 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 486 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
483 ASSERT_FALSE(cb.is_null()); | 487 ASSERT_FALSE(cb.is_null()); |
484 | 488 |
485 // Set this back to a normal browser feature extractor since we're using | 489 // Set this back to a normal browser feature extractor since we're using |
486 // NavigateAndCommit() and it's easier to use the real thing than setting up | 490 // NavigateAndCommit() and it's easier to use the real thing than setting up |
487 // mock expectations. | 491 // mock expectations. |
488 SetFeatureExtractor(new BrowserFeatureExtractor(web_contents(), | 492 SetFeatureExtractor(new BrowserFeatureExtractor(web_contents(), |
489 csd_service_.get())); | 493 csd_host_.get())); |
490 GURL other_phishing_url("http://other_phishing_url.com/bla"); | 494 GURL other_phishing_url("http://other_phishing_url.com/bla"); |
491 ExpectPreClassificationChecks(other_phishing_url, &kFalse, &kFalse, &kFalse, | 495 ExpectPreClassificationChecks(other_phishing_url, &kFalse, &kFalse, &kFalse, |
492 &kFalse, &kFalse, &kFalse); | 496 &kFalse, &kFalse, &kFalse); |
493 // We navigate away. The callback cb should be revoked. | 497 // We navigate away. The callback cb should be revoked. |
494 NavigateAndCommit(other_phishing_url); | 498 NavigateAndCommit(other_phishing_url); |
495 // Wait for the pre-classification checks to finish for other_phishing_url. | 499 // Wait for the pre-classification checks to finish for other_phishing_url. |
496 WaitAndCheckPreClassificationChecks(); | 500 WaitAndCheckPreClassificationChecks(); |
497 | 501 |
498 ClientSideDetectionService::ClientReportPhishingRequestCallback cb_other; | 502 ClientSideDetectionService::ClientReportPhishingRequestCallback cb_other; |
499 verdict.set_url(other_phishing_url.spec()); | 503 verdict.set_url(other_phishing_url.spec()); |
500 verdict.set_client_score(0.8f); | 504 verdict.set_client_score(0.8f); |
501 EXPECT_CALL(*csd_service_, | 505 EXPECT_CALL(*csd_service_, |
502 SendClientReportPhishingRequest( | 506 SendClientReportPhishingRequest( |
503 Pointee(PartiallyEqualVerdict(verdict)), _)) | 507 Pointee(PartiallyEqualVerdict(verdict)), _)) |
504 .WillOnce(DoAll(DeleteArg<0>(), | 508 .WillOnce(DoAll(DeleteArg<0>(), |
505 SaveArg<1>(&cb_other), | 509 SaveArg<1>(&cb_other), |
506 QuitUIMessageLoop())); | 510 QuitUIMessageLoop())); |
507 std::vector<GURL> redirect_chain; | 511 std::vector<GURL> redirect_chain; |
508 redirect_chain.push_back(other_phishing_url); | 512 redirect_chain.push_back(other_phishing_url); |
509 SetRedirectChain(redirect_chain); | 513 SetRedirectChain(redirect_chain); |
510 OnPhishingDetectionDone(verdict.SerializeAsString()); | 514 OnPhishingDetectionDone(verdict.SerializeAsString()); |
511 base::MessageLoop::current()->Run(); | 515 base::MessageLoop::current()->Run(); |
| 516 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
512 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 517 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
513 ASSERT_FALSE(cb_other.is_null()); | 518 ASSERT_FALSE(cb_other.is_null()); |
514 | 519 |
515 // We expect that the interstitial is shown for the second phishing URL and | 520 // We expect that the interstitial is shown for the second phishing URL and |
516 // not for the first phishing URL. | 521 // not for the first phishing URL. |
517 UnsafeResource resource; | 522 UnsafeResource resource; |
518 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) | 523 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) |
519 .WillOnce(SaveArg<0>(&resource)); | 524 .WillOnce(SaveArg<0>(&resource)); |
520 | 525 |
521 cb.Run(phishing_url, true); // Should have no effect. | 526 cb.Run(phishing_url, true); // Should have no effect. |
(...skipping 16 matching lines...) Expand all Loading... |
538 FROM_HERE, | 543 FROM_HERE, |
539 base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete, | 544 base::Bind(&MockSafeBrowsingUIManager::InvokeOnBlockingPageComplete, |
540 ui_manager_, resource.callback)); | 545 ui_manager_, resource.callback)); |
541 } | 546 } |
542 | 547 |
543 TEST_F(ClientSideDetectionHostTest, | 548 TEST_F(ClientSideDetectionHostTest, |
544 OnPhishingDetectionDoneVerdictNotPhishing) { | 549 OnPhishingDetectionDoneVerdictNotPhishing) { |
545 // Case 6: renderer sends a verdict string that isn't phishing. | 550 // Case 6: renderer sends a verdict string that isn't phishing. |
546 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 551 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
547 web_contents(), | 552 web_contents(), |
548 csd_service_.get()); | 553 csd_host_.get()); |
549 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 554 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
550 | 555 |
551 ClientPhishingRequest verdict; | 556 ClientPhishingRequest verdict; |
552 verdict.set_url("http://not-phishing.com/"); | 557 verdict.set_url("http://not-phishing.com/"); |
553 verdict.set_client_score(0.1f); | 558 verdict.set_client_score(0.1f); |
554 verdict.set_is_phishing(false); | 559 verdict.set_is_phishing(false); |
555 | 560 |
556 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); | 561 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); |
557 OnPhishingDetectionDone(verdict.SerializeAsString()); | 562 OnPhishingDetectionDone(verdict.SerializeAsString()); |
558 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); | 563 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
(...skipping 18 matching lines...) Expand all Loading... |
577 | 582 |
578 EXPECT_CALL(*csd_service_, | 583 EXPECT_CALL(*csd_service_, |
579 SendClientReportPhishingRequest( | 584 SendClientReportPhishingRequest( |
580 Pointee(PartiallyEqualVerdict(verdict)), CallbackIsNull())) | 585 Pointee(PartiallyEqualVerdict(verdict)), CallbackIsNull())) |
581 .WillOnce(DoAll(DeleteArg<0>(), QuitUIMessageLoop())); | 586 .WillOnce(DoAll(DeleteArg<0>(), QuitUIMessageLoop())); |
582 std::vector<GURL> redirect_chain; | 587 std::vector<GURL> redirect_chain; |
583 redirect_chain.push_back(url); | 588 redirect_chain.push_back(url); |
584 SetRedirectChain(redirect_chain); | 589 SetRedirectChain(redirect_chain); |
585 OnPhishingDetectionDone(verdict.SerializeAsString()); | 590 OnPhishingDetectionDone(verdict.SerializeAsString()); |
586 base::MessageLoop::current()->Run(); | 591 base::MessageLoop::current()->Run(); |
587 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 592 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
588 } | 593 } |
589 | 594 |
590 TEST_F(ClientSideDetectionHostTest, UpdateIPUrlMap) { | 595 TEST_F(ClientSideDetectionHostTest, UpdateIPUrlMap) { |
591 BrowseInfo* browse_info = GetBrowseInfo(); | 596 BrowseInfo* browse_info = GetBrowseInfo(); |
592 | 597 |
593 // Empty IP or host are skipped | 598 // Empty IP or host are skipped |
594 UpdateIPUrlMap("250.10.10.10", std::string()); | 599 UpdateIPUrlMap("250.10.10.10", std::string()); |
595 ASSERT_EQ(0U, browse_info->ips.size()); | 600 ASSERT_EQ(0U, browse_info->ips.size()); |
596 UpdateIPUrlMap(std::string(), "http://google.com/a"); | 601 UpdateIPUrlMap(std::string(), "http://google.com/a"); |
597 ASSERT_EQ(0U, browse_info->ips.size()); | 602 ASSERT_EQ(0U, browse_info->ips.size()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 expected_urls.insert("more.com/"); | 644 expected_urls.insert("more.com/"); |
640 EXPECT_EQ(expected_urls, browse_info->ips["100.100.100.256"]); | 645 EXPECT_EQ(expected_urls, browse_info->ips["100.100.100.256"]); |
641 } | 646 } |
642 | 647 |
643 TEST_F(ClientSideDetectionHostTest, | 648 TEST_F(ClientSideDetectionHostTest, |
644 OnPhishingDetectionDoneVerdictNotPhishingNotMalwareIP) { | 649 OnPhishingDetectionDoneVerdictNotPhishingNotMalwareIP) { |
645 // Case 7: renderer sends a verdict string that isn't phishing and not matches | 650 // Case 7: renderer sends a verdict string that isn't phishing and not matches |
646 // malware bad IP list | 651 // malware bad IP list |
647 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 652 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
648 web_contents(), | 653 web_contents(), |
649 csd_service_.get()); | 654 csd_host_.get()); |
650 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 655 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
651 | 656 |
652 ClientPhishingRequest verdict; | 657 ClientPhishingRequest verdict; |
653 verdict.set_url("http://not-phishing.com/"); | 658 verdict.set_url("http://not-phishing.com/"); |
654 verdict.set_client_score(0.1f); | 659 verdict.set_client_score(0.1f); |
655 verdict.set_is_phishing(false); | 660 verdict.set_is_phishing(false); |
656 | 661 |
657 ClientMalwareRequest malware_verdict; | 662 ClientMalwareRequest malware_verdict; |
658 malware_verdict.set_url("http://not-phishing.com/"); | 663 malware_verdict.set_url("http://not-phishing.com/"); |
659 | 664 |
660 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _)) | 665 // That is a special case. If there were no IP matches or if feature |
661 .WillOnce(SetArgumentPointee<1>(malware_verdict)); | 666 // extraction failed the callback will delete the malware_verdict. |
| 667 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _, _)) |
| 668 .WillOnce(DoAll( |
| 669 DeleteArg<1>(), |
| 670 InvokeCallbackArgument<2>( |
| 671 true, |
| 672 new ClientMalwareRequest(malware_verdict)))); |
662 EXPECT_CALL(*csd_service_, | 673 EXPECT_CALL(*csd_service_, |
663 SendClientReportMalwareRequest(_, _)).Times(0); | 674 SendClientReportMalwareRequest(_, _)).Times(0); |
664 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); | 675 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); |
665 | 676 |
666 OnPhishingDetectionDone(verdict.SerializeAsString()); | 677 OnPhishingDetectionDone(verdict.SerializeAsString()); |
667 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); | 678 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
668 } | 679 } |
669 | 680 |
670 TEST_F(ClientSideDetectionHostTest, | 681 TEST_F(ClientSideDetectionHostTest, |
671 OnPhishingDetectionDoneVerdictNotPhishingButMalwareIP) { | 682 OnPhishingDetectionDoneVerdictNotPhishingButMalwareIP) { |
672 // Case 8: renderer sends a verdict string that isn't phishing but matches | 683 // Case 8: renderer sends a verdict string that isn't phishing but matches |
673 // malware bad IP list | 684 // malware bad IP list |
674 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 685 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
675 web_contents(), | 686 web_contents(), |
676 csd_service_.get()); | 687 csd_host_.get()); |
677 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 688 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
678 | 689 |
679 ClientPhishingRequest verdict; | 690 ClientPhishingRequest verdict; |
680 verdict.set_url("http://not-phishing.com/"); | 691 verdict.set_url("http://not-phishing.com/"); |
681 verdict.set_client_score(0.1f); | 692 verdict.set_client_score(0.1f); |
682 verdict.set_is_phishing(false); | 693 verdict.set_is_phishing(false); |
683 | 694 |
684 ClientMalwareRequest malware_verdict; | 695 ClientMalwareRequest malware_verdict; |
685 malware_verdict.set_url("http://not-phishing.com/"); | 696 malware_verdict.set_url("http://not-phishing.com/"); |
686 ClientMalwareRequest::Feature* feature = malware_verdict.add_feature_map(); | 697 ClientMalwareRequest::Feature* feature = malware_verdict.add_feature_map(); |
687 feature->set_name("malwareip1.2.3.4"); | 698 feature->set_name("malwareip1.2.3.4"); |
688 feature->set_value(1.0); | 699 feature->set_value(1.0); |
689 feature->add_metainfo("badip.com"); | 700 feature->add_metainfo("badip.com"); |
690 | 701 |
691 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _)) | 702 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _, _)) |
692 .WillOnce(SetArgumentPointee<1>(malware_verdict)); | 703 .WillOnce(DoAll(DeleteArg<1>(), |
| 704 InvokeCallbackArgument<2>(true, &malware_verdict))); |
693 EXPECT_CALL(*csd_service_, | 705 EXPECT_CALL(*csd_service_, |
694 SendClientReportMalwareRequest( | 706 SendClientReportMalwareRequest( |
695 Pointee(PartiallyEqualMalwareVerdict(malware_verdict)), _)) | 707 Pointee(PartiallyEqualMalwareVerdict(malware_verdict)), _)) |
696 .WillOnce(DeleteArg<0>()); | 708 .Times(1); |
697 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); | 709 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); |
698 | 710 |
699 OnPhishingDetectionDone(verdict.SerializeAsString()); | 711 OnPhishingDetectionDone(verdict.SerializeAsString()); |
700 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); | 712 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
701 } | 713 } |
702 | 714 |
703 TEST_F(ClientSideDetectionHostTest, | 715 TEST_F(ClientSideDetectionHostTest, |
704 OnPhishingDetectionDoneVerdictPhishingAndMalwareIP) { | 716 OnPhishingDetectionDoneVerdictPhishingAndMalwareIP) { |
705 // Case 9: renderer sends a verdict string that is phishing and matches | 717 // Case 9: renderer sends a verdict string that is phishing and matches |
706 // malware bad IP list | 718 // malware bad IP list |
707 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 719 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
708 web_contents(), | 720 web_contents(), |
709 csd_service_.get()); | 721 csd_host_.get()); |
710 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 722 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
711 | 723 |
712 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; | 724 ClientSideDetectionService::ClientReportPhishingRequestCallback cb; |
713 ClientPhishingRequest verdict; | 725 ClientPhishingRequest verdict; |
714 verdict.set_url("http://not-phishing.com/"); | 726 verdict.set_url("http://not-phishing.com/"); |
715 verdict.set_client_score(0.1f); | 727 verdict.set_client_score(0.1f); |
716 verdict.set_is_phishing(true); | 728 verdict.set_is_phishing(true); |
717 | 729 |
718 ClientMalwareRequest malware_verdict; | 730 ClientMalwareRequest malware_verdict; |
719 malware_verdict.set_url("http://not-phishing.com/"); | 731 malware_verdict.set_url("http://not-phishing.com/"); |
720 ClientMalwareRequest::Feature* feature = malware_verdict.add_feature_map(); | 732 ClientMalwareRequest::Feature* feature = malware_verdict.add_feature_map(); |
721 feature->set_name("malwareip1.2.3.4"); | 733 feature->set_name("malwareip1.2.3.4"); |
722 feature->set_value(1.0); | 734 feature->set_value(1.0); |
723 feature->add_metainfo("badip.com"); | 735 feature->add_metainfo("badip.com"); |
724 | 736 |
725 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _)) | 737 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _, _)) |
726 .WillOnce(SetArgumentPointee<1>(malware_verdict)); | 738 .WillOnce(DoAll(DeleteArg<1>(), |
| 739 InvokeCallbackArgument<2>(true, &malware_verdict))); |
727 EXPECT_CALL(*csd_service_, | 740 EXPECT_CALL(*csd_service_, |
728 SendClientReportMalwareRequest( | 741 SendClientReportMalwareRequest( |
729 Pointee(PartiallyEqualMalwareVerdict(malware_verdict)), _)) | 742 Pointee(PartiallyEqualMalwareVerdict(malware_verdict)), _)) |
730 .WillOnce(DeleteArg<0>()); | 743 .Times(1); |
731 | 744 |
732 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) | 745 EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)) |
733 .WillOnce(DoAll(DeleteArg<1>(), | 746 .WillOnce(DoAll(DeleteArg<1>(), |
734 InvokeCallbackArgument<2>(true, &verdict))); | 747 InvokeCallbackArgument<2>(true, &verdict))); |
735 | 748 |
736 EXPECT_CALL(*csd_service_, | 749 EXPECT_CALL(*csd_service_, |
737 SendClientReportPhishingRequest( | 750 SendClientReportPhishingRequest( |
738 Pointee(PartiallyEqualVerdict(verdict)), _)) | 751 Pointee(PartiallyEqualVerdict(verdict)), _)) |
739 .WillOnce(SaveArg<1>(&cb)); | 752 .WillOnce(SaveArg<1>(&cb)); |
740 OnPhishingDetectionDone(verdict.SerializeAsString()); | 753 OnPhishingDetectionDone(verdict.SerializeAsString()); |
741 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); | 754 EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
| 755 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
742 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 756 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
743 ASSERT_FALSE(cb.is_null()); | 757 ASSERT_FALSE(cb.is_null()); |
744 } | 758 } |
745 | 759 |
746 TEST_F(ClientSideDetectionHostTest, | 760 TEST_F(ClientSideDetectionHostTest, |
747 OnPhishingDetectionDoneShowMalwareInterstitial) { | 761 OnPhishingDetectionDoneShowMalwareInterstitial) { |
748 // Case 10: client thinks the page match malware IP and so does the server. | 762 // Case 10: client thinks the page match malware IP and so does the server. |
749 // We show an sub-resource malware interstitial. | 763 // We show an sub-resource malware interstitial. |
750 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 764 MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
751 web_contents(), | 765 web_contents(), |
752 csd_service_.get()); | 766 csd_host_.get()); |
753 SetFeatureExtractor(mock_extractor); // The host class takes ownership. | 767 SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
754 | 768 |
755 ClientPhishingRequest verdict; | 769 ClientPhishingRequest verdict; |
756 verdict.set_url("http://not-phishing.com/"); | 770 verdict.set_url("http://not-phishing.com/"); |
757 verdict.set_client_score(0.1f); | 771 verdict.set_client_score(0.1f); |
758 verdict.set_is_phishing(false); | 772 verdict.set_is_phishing(false); |
759 | 773 |
760 ClientSideDetectionService::ClientReportMalwareRequestCallback cb; | 774 ClientSideDetectionService::ClientReportMalwareRequestCallback cb; |
761 GURL malware_landing_url("http://malware.com/"); | 775 GURL malware_landing_url("http://malware.com/"); |
762 GURL malware_ip_url("http://badip.com"); | 776 GURL malware_ip_url("http://badip.com"); |
763 ClientMalwareRequest malware_verdict; | 777 ClientMalwareRequest malware_verdict; |
764 malware_verdict.set_url("http://malware.com/"); | 778 malware_verdict.set_url("http://malware.com/"); |
765 ClientMalwareRequest::Feature* feature = malware_verdict.add_feature_map(); | 779 ClientMalwareRequest::Feature* feature = malware_verdict.add_feature_map(); |
766 feature->set_name("malwareip1.2.3.4"); | 780 feature->set_name("malwareip1.2.3.4"); |
767 feature->set_value(1.0); | 781 feature->set_value(1.0); |
768 feature->add_metainfo("http://badip.com"); | 782 feature->add_metainfo("http://badip.com"); |
769 | 783 |
770 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _)) | 784 EXPECT_CALL(*mock_extractor, ExtractMalwareFeatures(_, _, _)) |
771 .WillOnce(SetArgumentPointee<1>(malware_verdict)); | 785 .WillOnce(DoAll(DeleteArg<1>(), |
| 786 InvokeCallbackArgument<2>(true, &malware_verdict))); |
772 EXPECT_CALL(*csd_service_, | 787 EXPECT_CALL(*csd_service_, |
773 SendClientReportMalwareRequest( | 788 SendClientReportMalwareRequest( |
774 Pointee(PartiallyEqualMalwareVerdict(malware_verdict)), _)) | 789 Pointee(PartiallyEqualMalwareVerdict(malware_verdict)), _)) |
775 .WillOnce(DoAll(DeleteArg<0>(), | 790 .WillOnce(SaveArg<1>(&cb)); |
776 SaveArg<1>(&cb))); | |
777 OnPhishingDetectionDone(verdict.SerializeAsString()); | 791 OnPhishingDetectionDone(verdict.SerializeAsString()); |
| 792 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
778 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 793 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
779 ASSERT_FALSE(cb.is_null()); | 794 ASSERT_FALSE(cb.is_null()); |
780 | 795 |
781 UnsafeResource resource; | 796 UnsafeResource resource; |
782 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) | 797 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) |
783 .WillOnce(SaveArg<0>(&resource)); | 798 .WillOnce(SaveArg<0>(&resource)); |
784 cb.Run(malware_landing_url, malware_ip_url, true); | 799 cb.Run(malware_landing_url, malware_ip_url, true); |
785 | 800 |
786 base::RunLoop().RunUntilIdle(); | 801 base::RunLoop().RunUntilIdle(); |
787 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 802 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 | 978 |
964 UnsafeResource resource; | 979 UnsafeResource resource; |
965 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) | 980 EXPECT_CALL(*ui_manager_.get(), DoDisplayBlockingPage(_)) |
966 .WillOnce(SaveArg<0>(&resource)); | 981 .WillOnce(SaveArg<0>(&resource)); |
967 | 982 |
968 NavigateAndCommit(url); | 983 NavigateAndCommit(url); |
969 // Wait for CheckCsdWhitelist and CheckCache() to be called. | 984 // Wait for CheckCsdWhitelist and CheckCache() to be called. |
970 base::RunLoop().RunUntilIdle(); | 985 base::RunLoop().RunUntilIdle(); |
971 // Now we check that all expected functions were indeed called on the two | 986 // Now we check that all expected functions were indeed called on the two |
972 // service objects. | 987 // service objects. |
973 EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 988 EXPECT_TRUE(Mock::VerifyAndClear(csd_host_.get())); |
974 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 989 EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); |
975 EXPECT_EQ(url, resource.url); | 990 EXPECT_EQ(url, resource.url); |
976 EXPECT_EQ(url, resource.original_url); | 991 EXPECT_EQ(url, resource.original_url); |
977 resource.callback.Reset(); | 992 resource.callback.Reset(); |
978 msg = process()->sink().GetFirstMessageMatching( | 993 msg = process()->sink().GetFirstMessageMatching( |
979 SafeBrowsingMsg_StartPhishingDetection::ID); | 994 SafeBrowsingMsg_StartPhishingDetection::ID); |
980 ASSERT_FALSE(msg); | 995 ASSERT_FALSE(msg); |
981 } | 996 } |
982 | 997 |
| 998 TEST_F(ClientSideDetectionHostTest, IsBadIpAddress) { |
| 999 EXPECT_CALL(*database_manager_.get(), MatchMalwareIP("1.2.3.4")) |
| 1000 .WillOnce(Return(false)); |
| 1001 EXPECT_FALSE(csd_host_->IsBadIpAddress("1.2.3.4")); |
| 1002 EXPECT_CALL(*database_manager_.get(), MatchMalwareIP("2.3.4.5")) |
| 1003 .WillOnce(Return(true)); |
| 1004 EXPECT_TRUE(csd_host_->IsBadIpAddress("2.3.4.5")); |
| 1005 } |
| 1006 |
983 } // namespace safe_browsing | 1007 } // namespace safe_browsing |
OLD | NEW |