| 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/stringprintf.h" | 8 #include "base/stringprintf.h" | 
| 9 #include "base/synchronization/waitable_event.h" | 9 #include "base/synchronization/waitable_event.h" | 
| 10 #include "chrome/browser/safe_browsing/browser_feature_extractor.h" | 10 #include "chrome/browser/safe_browsing/browser_feature_extractor.h" | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 67           other.feature_map_size() == arg.feature_map_size()); | 67           other.feature_map_size() == arg.feature_map_size()); | 
| 68 } | 68 } | 
| 69 | 69 | 
| 70 // Test that the callback is NULL when the verdict is not phishing. | 70 // Test that the callback is NULL when the verdict is not phishing. | 
| 71 MATCHER(CallbackIsNull, "") { | 71 MATCHER(CallbackIsNull, "") { | 
| 72   return arg.is_null(); | 72   return arg.is_null(); | 
| 73 } | 73 } | 
| 74 | 74 | 
| 75 ACTION(QuitUIMessageLoop) { | 75 ACTION(QuitUIMessageLoop) { | 
| 76   EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 76   EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
| 77   MessageLoopForUI::current()->Quit(); | 77   base::MessageLoopForUI::current()->Quit(); | 
| 78 } | 78 } | 
| 79 | 79 | 
| 80 // It's kind of insane that InvokeArgument doesn't work with callbacks, but it | 80 // It's kind of insane that InvokeArgument doesn't work with callbacks, but it | 
| 81 // doesn't seem like it. | 81 // doesn't seem like it. | 
| 82 ACTION_TEMPLATE(InvokeCallbackArgument, | 82 ACTION_TEMPLATE(InvokeCallbackArgument, | 
| 83                 HAS_1_TEMPLATE_PARAMS(int, k), | 83                 HAS_1_TEMPLATE_PARAMS(int, k), | 
| 84                 AND_2_VALUE_PARAMS(p0, p1)) { | 84                 AND_2_VALUE_PARAMS(p0, p1)) { | 
| 85   ::std::tr1::get<k>(args).Run(p0, p1); | 85   ::std::tr1::get<k>(args).Run(p0, p1); | 
| 86 } | 86 } | 
| 87 | 87 | 
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 170   MOCK_METHOD2(ExtractMalwareFeatures, | 170   MOCK_METHOD2(ExtractMalwareFeatures, | 
| 171                void(const BrowseInfo* info, | 171                void(const BrowseInfo* info, | 
| 172                     ClientMalwareRequest*)); | 172                     ClientMalwareRequest*)); | 
| 173 }; | 173 }; | 
| 174 | 174 | 
| 175 // Helper function which quits the UI message loop from the IO message loop. | 175 // Helper function which quits the UI message loop from the IO message loop. | 
| 176 void QuitUIMessageLoopFromIO() { | 176 void QuitUIMessageLoopFromIO() { | 
| 177   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 177   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 
| 178   BrowserThread::PostTask(BrowserThread::UI, | 178   BrowserThread::PostTask(BrowserThread::UI, | 
| 179                           FROM_HERE, | 179                           FROM_HERE, | 
| 180                           MessageLoop::QuitClosure()); | 180                           base::MessageLoop::QuitClosure()); | 
| 181 } | 181 } | 
| 182 }  // namespace | 182 }  // namespace | 
| 183 | 183 | 
| 184 class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { | 184 class ClientSideDetectionHostTest : public ChromeRenderViewHostTestHarness { | 
| 185  public: | 185  public: | 
| 186   typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; | 186   typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; | 
| 187 | 187 | 
| 188   virtual void SetUp() { | 188   virtual void SetUp() { | 
| 189     // Set custom profile object so that we can mock calls to IsOffTheRecord. | 189     // 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 | 190     // This needs to happen before we call the parent SetUp() function.  We use | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 215     csd_host_.reset(safe_browsing::ClientSideDetectionHost::Create( | 215     csd_host_.reset(safe_browsing::ClientSideDetectionHost::Create( | 
| 216         web_contents())); | 216         web_contents())); | 
| 217     csd_host_->set_client_side_detection_service(csd_service_.get()); | 217     csd_host_->set_client_side_detection_service(csd_service_.get()); | 
| 218     csd_host_->set_safe_browsing_managers(ui_manager_, database_manager_); | 218     csd_host_->set_safe_browsing_managers(ui_manager_, database_manager_); | 
| 219     // We need to create this here since we don't call | 219     // We need to create this here since we don't call | 
| 220     // DidNavigateMainFramePostCommit in this test. | 220     // DidNavigateMainFramePostCommit in this test. | 
| 221     csd_host_->browse_info_.reset(new BrowseInfo); | 221     csd_host_->browse_info_.reset(new BrowseInfo); | 
| 222   } | 222   } | 
| 223 | 223 | 
| 224   static void RunAllPendingOnIO(base::WaitableEvent* event) { | 224   static void RunAllPendingOnIO(base::WaitableEvent* event) { | 
| 225     MessageLoop::current()->RunUntilIdle(); | 225     base::MessageLoop::current()->RunUntilIdle(); | 
| 226     event->Signal(); | 226     event->Signal(); | 
| 227   } | 227   } | 
| 228 | 228 | 
| 229   virtual void TearDown() { | 229   virtual void TearDown() { | 
| 230     // Delete the host object on the UI thread and release the | 230     // Delete the host object on the UI thread and release the | 
| 231     // SafeBrowsingService. | 231     // SafeBrowsingService. | 
| 232     BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, | 232     BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, | 
| 233                               csd_host_.release()); | 233                               csd_host_.release()); | 
| 234     database_manager_ = NULL; | 234     database_manager_ = NULL; | 
| 235     ui_manager_ = NULL; | 235     ui_manager_ = NULL; | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 259     return csd_host_->browse_info_.get(); | 259     return csd_host_->browse_info_.get(); | 
| 260   } | 260   } | 
| 261 | 261 | 
| 262   void FlushIOMessageLoop() { | 262   void FlushIOMessageLoop() { | 
| 263     // If there was a message posted on the IO thread to display the | 263     // If there was a message posted on the IO thread to display the | 
| 264     // interstitial page we know that it would have been posted before | 264     // interstitial page we know that it would have been posted before | 
| 265     // we put the quit message there. | 265     // we put the quit message there. | 
| 266     BrowserThread::PostTask(BrowserThread::IO, | 266     BrowserThread::PostTask(BrowserThread::IO, | 
| 267                             FROM_HERE, | 267                             FROM_HERE, | 
| 268                             base::Bind(&QuitUIMessageLoopFromIO)); | 268                             base::Bind(&QuitUIMessageLoopFromIO)); | 
| 269     MessageLoop::current()->Run(); | 269     base::MessageLoop::current()->Run(); | 
| 270   } | 270   } | 
| 271 | 271 | 
| 272   void ExpectPreClassificationChecks(const GURL& url, | 272   void ExpectPreClassificationChecks(const GURL& url, | 
| 273                                      const bool* is_private, | 273                                      const bool* is_private, | 
| 274                                      const bool* is_incognito, | 274                                      const bool* is_incognito, | 
| 275                                      const bool* match_csd_whitelist, | 275                                      const bool* match_csd_whitelist, | 
| 276                                      const bool* get_valid_cached_result, | 276                                      const bool* get_valid_cached_result, | 
| 277                                      const bool* is_in_cache, | 277                                      const bool* is_in_cache, | 
| 278                                      const bool* over_report_limit) { | 278                                      const bool* over_report_limit) { | 
| 279     if (is_private) { | 279     if (is_private) { | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 299     if (over_report_limit) { | 299     if (over_report_limit) { | 
| 300       EXPECT_CALL(*csd_service_, OverPhishingReportLimit()) | 300       EXPECT_CALL(*csd_service_, OverPhishingReportLimit()) | 
| 301           .WillOnce(Return(*over_report_limit)); | 301           .WillOnce(Return(*over_report_limit)); | 
| 302     } | 302     } | 
| 303   } | 303   } | 
| 304 | 304 | 
| 305   void WaitAndCheckPreClassificationChecks() { | 305   void WaitAndCheckPreClassificationChecks() { | 
| 306     // Wait for CheckCsdWhitelist to be called if at all. | 306     // Wait for CheckCsdWhitelist to be called if at all. | 
| 307     FlushIOMessageLoop(); | 307     FlushIOMessageLoop(); | 
| 308     // Checks for CheckCache() to be called if at all. | 308     // Checks for CheckCache() to be called if at all. | 
| 309     MessageLoop::current()->RunUntilIdle(); | 309     base::MessageLoop::current()->RunUntilIdle(); | 
| 310     EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 310     EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 311     EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 311     EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 
| 312     EXPECT_TRUE(Mock::VerifyAndClear(database_manager_.get())); | 312     EXPECT_TRUE(Mock::VerifyAndClear(database_manager_.get())); | 
| 313     EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_)); | 313     EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_)); | 
| 314   } | 314   } | 
| 315 | 315 | 
| 316   void SetFeatureExtractor(BrowserFeatureExtractor* extractor) { | 316   void SetFeatureExtractor(BrowserFeatureExtractor* extractor) { | 
| 317     csd_host_->feature_extractor_.reset(extractor); | 317     csd_host_->feature_extractor_.reset(extractor); | 
| 318   } | 318   } | 
| 319 | 319 | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 396               SendClientReportPhishingRequest( | 396               SendClientReportPhishingRequest( | 
| 397                   Pointee(PartiallyEqualVerdict(verdict)), _)) | 397                   Pointee(PartiallyEqualVerdict(verdict)), _)) | 
| 398       .WillOnce(SaveArg<1>(&cb)); | 398       .WillOnce(SaveArg<1>(&cb)); | 
| 399   OnPhishingDetectionDone(verdict.SerializeAsString()); | 399   OnPhishingDetectionDone(verdict.SerializeAsString()); | 
| 400   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 400   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 401   ASSERT_FALSE(cb.is_null()); | 401   ASSERT_FALSE(cb.is_null()); | 
| 402 | 402 | 
| 403   // Make sure DoDisplayBlockingPage is not going to be called. | 403   // Make sure DoDisplayBlockingPage is not going to be called. | 
| 404   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0); | 404   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0); | 
| 405   cb.Run(GURL(verdict.url()), false); | 405   cb.Run(GURL(verdict.url()), false); | 
| 406   MessageLoop::current()->RunUntilIdle(); | 406   base::MessageLoop::current()->RunUntilIdle(); | 
| 407   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 407   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 
| 408 } | 408 } | 
| 409 | 409 | 
| 410 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { | 410 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { | 
| 411   // Case 2: client thinks the page is phishing and so does the server but | 411   // Case 2: client thinks the page is phishing and so does the server but | 
| 412   // showing the interstitial is disabled => no interstitial is shown. | 412   // showing the interstitial is disabled => no interstitial is shown. | 
| 413   MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 413   MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 
| 414       web_contents(), | 414       web_contents(), | 
| 415       csd_service_.get()); | 415       csd_service_.get()); | 
| 416   SetFeatureExtractor(mock_extractor);  // The host class takes ownership. | 416   SetFeatureExtractor(mock_extractor);  // The host class takes ownership. | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 428               SendClientReportPhishingRequest( | 428               SendClientReportPhishingRequest( | 
| 429                   Pointee(PartiallyEqualVerdict(verdict)), _)) | 429                   Pointee(PartiallyEqualVerdict(verdict)), _)) | 
| 430       .WillOnce(SaveArg<1>(&cb)); | 430       .WillOnce(SaveArg<1>(&cb)); | 
| 431   OnPhishingDetectionDone(verdict.SerializeAsString()); | 431   OnPhishingDetectionDone(verdict.SerializeAsString()); | 
| 432   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 432   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 433   ASSERT_FALSE(cb.is_null()); | 433   ASSERT_FALSE(cb.is_null()); | 
| 434 | 434 | 
| 435   // Make sure DoDisplayBlockingPage is not going to be called. | 435   // Make sure DoDisplayBlockingPage is not going to be called. | 
| 436   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0); | 436   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)).Times(0); | 
| 437   cb.Run(GURL(verdict.url()), false); | 437   cb.Run(GURL(verdict.url()), false); | 
| 438   MessageLoop::current()->RunUntilIdle(); | 438   base::MessageLoop::current()->RunUntilIdle(); | 
| 439   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 439   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 
| 440 } | 440 } | 
| 441 | 441 | 
| 442 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { | 442 TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { | 
| 443   // Case 3: client thinks the page is phishing and so does the server. | 443   // Case 3: client thinks the page is phishing and so does the server. | 
| 444   // We show an interstitial. | 444   // We show an interstitial. | 
| 445   MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 445   MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( | 
| 446       web_contents(), | 446       web_contents(), | 
| 447       csd_service_.get()); | 447       csd_service_.get()); | 
| 448   SetFeatureExtractor(mock_extractor);  // The host class takes ownership. | 448   SetFeatureExtractor(mock_extractor);  // The host class takes ownership. | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 463       .WillOnce(SaveArg<1>(&cb)); | 463       .WillOnce(SaveArg<1>(&cb)); | 
| 464   OnPhishingDetectionDone(verdict.SerializeAsString()); | 464   OnPhishingDetectionDone(verdict.SerializeAsString()); | 
| 465   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 465   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 466   ASSERT_FALSE(cb.is_null()); | 466   ASSERT_FALSE(cb.is_null()); | 
| 467 | 467 | 
| 468   UnsafeResource resource; | 468   UnsafeResource resource; | 
| 469   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) | 469   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) | 
| 470       .WillOnce(SaveArg<0>(&resource)); | 470       .WillOnce(SaveArg<0>(&resource)); | 
| 471   cb.Run(phishing_url, true); | 471   cb.Run(phishing_url, true); | 
| 472 | 472 | 
| 473   MessageLoop::current()->RunUntilIdle(); | 473   base::MessageLoop::current()->RunUntilIdle(); | 
| 474   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 474   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 
| 475   EXPECT_EQ(phishing_url, resource.url); | 475   EXPECT_EQ(phishing_url, resource.url); | 
| 476   EXPECT_EQ(phishing_url, resource.original_url); | 476   EXPECT_EQ(phishing_url, resource.original_url); | 
| 477   EXPECT_FALSE(resource.is_subresource); | 477   EXPECT_FALSE(resource.is_subresource); | 
| 478   EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type); | 478   EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type); | 
| 479   EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(), | 479   EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(), | 
| 480             resource.render_process_host_id); | 480             resource.render_process_host_id); | 
| 481   EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(), | 481   EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(), | 
| 482             resource.render_view_id); | 482             resource.render_view_id); | 
| 483 | 483 | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 541   EXPECT_CALL(*csd_service_, | 541   EXPECT_CALL(*csd_service_, | 
| 542               SendClientReportPhishingRequest( | 542               SendClientReportPhishingRequest( | 
| 543                   Pointee(PartiallyEqualVerdict(verdict)), _)) | 543                   Pointee(PartiallyEqualVerdict(verdict)), _)) | 
| 544       .WillOnce(DoAll(DeleteArg<0>(), | 544       .WillOnce(DoAll(DeleteArg<0>(), | 
| 545                       SaveArg<1>(&cb_other), | 545                       SaveArg<1>(&cb_other), | 
| 546                       QuitUIMessageLoop())); | 546                       QuitUIMessageLoop())); | 
| 547   std::vector<GURL> redirect_chain; | 547   std::vector<GURL> redirect_chain; | 
| 548   redirect_chain.push_back(other_phishing_url); | 548   redirect_chain.push_back(other_phishing_url); | 
| 549   SetRedirectChain(redirect_chain); | 549   SetRedirectChain(redirect_chain); | 
| 550   OnPhishingDetectionDone(verdict.SerializeAsString()); | 550   OnPhishingDetectionDone(verdict.SerializeAsString()); | 
| 551   MessageLoop::current()->Run(); | 551   base::MessageLoop::current()->Run(); | 
| 552   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 552   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 553   ASSERT_FALSE(cb_other.is_null()); | 553   ASSERT_FALSE(cb_other.is_null()); | 
| 554 | 554 | 
| 555   // We expect that the interstitial is shown for the second phishing URL and | 555   // We expect that the interstitial is shown for the second phishing URL and | 
| 556   // not for the first phishing URL. | 556   // not for the first phishing URL. | 
| 557   UnsafeResource resource; | 557   UnsafeResource resource; | 
| 558   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) | 558   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) | 
| 559       .WillOnce(SaveArg<0>(&resource)); | 559       .WillOnce(SaveArg<0>(&resource)); | 
| 560 | 560 | 
| 561   cb.Run(phishing_url, true);  // Should have no effect. | 561   cb.Run(phishing_url, true);  // Should have no effect. | 
| 562   cb_other.Run(other_phishing_url, true);  // Should show interstitial. | 562   cb_other.Run(other_phishing_url, true);  // Should show interstitial. | 
| 563 | 563 | 
| 564   MessageLoop::current()->RunUntilIdle(); | 564   base::MessageLoop::current()->RunUntilIdle(); | 
| 565   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 565   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 
| 566   EXPECT_EQ(other_phishing_url, resource.url); | 566   EXPECT_EQ(other_phishing_url, resource.url); | 
| 567   EXPECT_EQ(other_phishing_url, resource.original_url); | 567   EXPECT_EQ(other_phishing_url, resource.original_url); | 
| 568   EXPECT_FALSE(resource.is_subresource); | 568   EXPECT_FALSE(resource.is_subresource); | 
| 569   EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type); | 569   EXPECT_EQ(SB_THREAT_TYPE_CLIENT_SIDE_PHISHING_URL, resource.threat_type); | 
| 570   EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(), | 570   EXPECT_EQ(web_contents()->GetRenderProcessHost()->GetID(), | 
| 571             resource.render_process_host_id); | 571             resource.render_process_host_id); | 
| 572   EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(), | 572   EXPECT_EQ(web_contents()->GetRenderViewHost()->GetRoutingID(), | 
| 573             resource.render_view_id); | 573             resource.render_view_id); | 
| 574 | 574 | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 620   SetUnsafeResourceToCurrent(); | 620   SetUnsafeResourceToCurrent(); | 
| 621 | 621 | 
| 622   EXPECT_CALL(*csd_service_, | 622   EXPECT_CALL(*csd_service_, | 
| 623               SendClientReportPhishingRequest( | 623               SendClientReportPhishingRequest( | 
| 624                   Pointee(PartiallyEqualVerdict(verdict)), CallbackIsNull())) | 624                   Pointee(PartiallyEqualVerdict(verdict)), CallbackIsNull())) | 
| 625       .WillOnce(DoAll(DeleteArg<0>(), QuitUIMessageLoop())); | 625       .WillOnce(DoAll(DeleteArg<0>(), QuitUIMessageLoop())); | 
| 626   std::vector<GURL> redirect_chain; | 626   std::vector<GURL> redirect_chain; | 
| 627   redirect_chain.push_back(url); | 627   redirect_chain.push_back(url); | 
| 628   SetRedirectChain(redirect_chain); | 628   SetRedirectChain(redirect_chain); | 
| 629   OnPhishingDetectionDone(verdict.SerializeAsString()); | 629   OnPhishingDetectionDone(verdict.SerializeAsString()); | 
| 630   MessageLoop::current()->Run(); | 630   base::MessageLoop::current()->Run(); | 
| 631   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 631   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 632 } | 632 } | 
| 633 | 633 | 
| 634 TEST_F(ClientSideDetectionHostTest, UpdateIPHostMap) { | 634 TEST_F(ClientSideDetectionHostTest, UpdateIPHostMap) { | 
| 635   BrowseInfo* browse_info = GetBrowseInfo(); | 635   BrowseInfo* browse_info = GetBrowseInfo(); | 
| 636 | 636 | 
| 637   // Empty IP or host are skipped | 637   // Empty IP or host are skipped | 
| 638   UpdateIPHostMap("250.10.10.10", std::string()); | 638   UpdateIPHostMap("250.10.10.10", std::string()); | 
| 639   ASSERT_EQ(0U, browse_info->ips.size()); | 639   ASSERT_EQ(0U, browse_info->ips.size()); | 
| 640   UpdateIPHostMap(std::string(), "google.com/"); | 640   UpdateIPHostMap(std::string(), "google.com/"); | 
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 947                                 NULL); | 947                                 NULL); | 
| 948 | 948 | 
| 949   UnsafeResource resource; | 949   UnsafeResource resource; | 
| 950   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) | 950   EXPECT_CALL(*ui_manager_, DoDisplayBlockingPage(_)) | 
| 951       .WillOnce(SaveArg<0>(&resource)); | 951       .WillOnce(SaveArg<0>(&resource)); | 
| 952 | 952 | 
| 953   NavigateAndCommit(url); | 953   NavigateAndCommit(url); | 
| 954   // Wait for CheckCsdWhitelist to be called on the IO thread. | 954   // Wait for CheckCsdWhitelist to be called on the IO thread. | 
| 955   FlushIOMessageLoop(); | 955   FlushIOMessageLoop(); | 
| 956   // Wait for CheckCache() to be called on the UI thread. | 956   // Wait for CheckCache() to be called on the UI thread. | 
| 957   MessageLoop::current()->RunUntilIdle(); | 957   base::MessageLoop::current()->RunUntilIdle(); | 
| 958   // Now we check that all expected functions were indeed called on the two | 958   // Now we check that all expected functions were indeed called on the two | 
| 959   // service objects. | 959   // service objects. | 
| 960   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 960   EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); | 
| 961   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 961   EXPECT_TRUE(Mock::VerifyAndClear(ui_manager_.get())); | 
| 962   EXPECT_EQ(url, resource.url); | 962   EXPECT_EQ(url, resource.url); | 
| 963   EXPECT_EQ(url, resource.original_url); | 963   EXPECT_EQ(url, resource.original_url); | 
| 964   resource.callback.Reset(); | 964   resource.callback.Reset(); | 
| 965   msg = process()->sink().GetFirstMessageMatching( | 965   msg = process()->sink().GetFirstMessageMatching( | 
| 966       SafeBrowsingMsg_StartPhishingDetection::ID); | 966       SafeBrowsingMsg_StartPhishingDetection::ID); | 
| 967   ASSERT_FALSE(msg); | 967   ASSERT_FALSE(msg); | 
| 968 } | 968 } | 
| 969 | 969 | 
| 970 }  // namespace safe_browsing | 970 }  // namespace safe_browsing | 
| OLD | NEW | 
|---|