Chromium Code Reviews| Index: chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
| diff --git a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
| index 3ce5f8a5ca7da4fb28a9a6e3ef6ecc2642f2c876..89ea148db28ad7c4f8f516b547150c113f320154 100644 |
| --- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
| +++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
| @@ -29,6 +29,7 @@ using ::testing::_; |
| using ::testing::DeleteArg; |
| using ::testing::DoAll; |
| using ::testing::Eq; |
| +using ::testing::IsNull; |
| using ::testing::Mock; |
| using ::testing::NiceMock; |
| using ::testing::NotNull; |
| @@ -161,11 +162,11 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { |
| ui_thread_.reset(); |
| } |
| - void OnDetectedPhishingSite(const std::string& verdict_str) { |
| + void OnPhishingDetectionDone(const std::string& verdict_str) { |
| // Make sure we have a valid BrowseInfo object set before we call this |
| // method. |
| csd_host_->browse_info_.reset(new BrowseInfo); |
| - csd_host_->OnDetectedPhishingSite(verdict_str); |
| + csd_host_->OnPhishingDetectionDone(verdict_str); |
| } |
| void FlushIOMessageLoop() { |
| @@ -225,6 +226,12 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { |
| csd_host_->feature_extractor_.reset(extractor); |
| } |
| + void SetUnsafeUniquePageIdToCurrent() { |
| + csd_host_->unsafe_unique_page_id_ = |
| + contents()->controller().GetActiveEntry()->unique_id(); |
| + ASSERT_TRUE(csd_host_->DidShowSBInterstitial()); |
| + } |
| + |
| protected: |
| scoped_ptr<ClientSideDetectionHost> csd_host_; |
| scoped_ptr<StrictMock<MockClientSideDetectionService> > csd_service_; |
| @@ -236,7 +243,7 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { |
| scoped_ptr<BrowserThread> io_thread_; |
| }; |
| -TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteInvalidVerdict) { |
| +TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneInvalidVerdict) { |
| // Case 0: renderer sends an invalid verdict string that we're unable to |
| // parse. |
| MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
| @@ -244,11 +251,11 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteInvalidVerdict) { |
| csd_service_.get()); |
| SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
| EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); |
| - OnDetectedPhishingSite("Invalid Protocol Buffer"); |
| + OnPhishingDetectionDone("Invalid Protocol Buffer"); |
| EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
| } |
| -TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) { |
| +TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneNotPhishing) { |
| // Case 1: client thinks the page is phishing. The server does not agree. |
| // No interstitial is shown. |
| ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; |
| @@ -261,7 +268,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) { |
| SendClientReportPhishingRequest( |
| Pointee(PartiallyEqualVerdict(verdict)), _)) |
| .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
| - OnDetectedPhishingSite(verdict.SerializeAsString()); |
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| MessageLoop::current()->Run(); |
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
| ASSERT_TRUE(cb); |
| @@ -274,7 +281,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) { |
| EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); |
| } |
| -TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) { |
| +TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) { |
| // Case 2: client thinks the page is phishing and so does the server but |
| // showing the interstitial is disabled => no interstitial is shown. |
| ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; |
| @@ -287,7 +294,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) { |
| SendClientReportPhishingRequest( |
| Pointee(PartiallyEqualVerdict(verdict)), _)) |
| .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
| - OnDetectedPhishingSite(verdict.SerializeAsString()); |
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| MessageLoop::current()->Run(); |
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
| ASSERT_TRUE(cb); |
| @@ -300,7 +307,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) { |
| EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get())); |
| } |
| -TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) { |
| +TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) { |
| // Case 3: client thinks the page is phishing and so does the server. |
| // We show an interstitial. |
| ClientSideDetectionService::ClientReportPhishingRequestCallback* cb; |
| @@ -314,7 +321,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) { |
| SendClientReportPhishingRequest( |
| Pointee(PartiallyEqualVerdict(verdict)), _)) |
| .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
| - OnDetectedPhishingSite(verdict.SerializeAsString()); |
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| MessageLoop::current()->Run(); |
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
| ASSERT_TRUE(cb); |
| @@ -351,7 +358,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) { |
| FlushIOMessageLoop(); |
| } |
| -TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) { |
| +TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) { |
| // Case 4 & 5: client thinks a page is phishing then navigates to |
| // another page which is also considered phishing by the client |
| // before the server responds with a verdict. After a while the |
| @@ -368,7 +375,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) { |
| SendClientReportPhishingRequest( |
| Pointee(PartiallyEqualVerdict(verdict)), _)) |
| .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
| - OnDetectedPhishingSite(verdict.SerializeAsString()); |
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| MessageLoop::current()->Run(); |
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
| ASSERT_TRUE(cb); |
| @@ -389,7 +396,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) { |
| .WillOnce(DoAll(DeleteArg<0>(), |
| SaveArg<1>(&cb_other), |
| QuitUIMessageLoop())); |
| - OnDetectedPhishingSite(verdict.SerializeAsString()); |
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| MessageLoop::current()->Run(); |
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
| ASSERT_TRUE(cb_other); |
| @@ -431,6 +438,49 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) { |
| FlushIOMessageLoop(); |
| } |
| +TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneVerdictNotPhishing) { |
| + // Case 6: renderer sends a verdict string that isn't phishing. |
| + MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
| + contents(), |
| + csd_service_.get()); |
| + SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
| + |
| + ClientPhishingRequest verdict; |
| + verdict.set_url("http://not-phishing.com/"); |
| + verdict.set_client_score(0.1f); |
| + verdict.set_is_phishing(false); |
| + |
| + EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _, _)).Times(0); |
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| + EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
| +} |
| + |
| +TEST_F(ClientSideDetectionHostTest, |
| + OnPhishingDetectionDoneVerdictNotPhishingButSBMatch) { |
| + // Case 7: renderer sends a verdict string that isn't phishing but the URL |
| + // was on the regular phishing or malware lists. |
| + GURL url("http://not-phishing.com/"); |
| + ClientPhishingRequest verdict; |
| + verdict.set_url(url.spec()); |
| + verdict.set_client_score(0.1f); |
| + verdict.set_is_phishing(false); |
| + |
| + // First we have to navigate to the URL to set the unique page ID. |
| + ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kFalse, |
| + &kFalse, &kFalse); |
| + NavigateAndCommit(url); |
| + WaitAndCheckPreClassificationChecks(); |
| + SetUnsafeUniquePageIdToCurrent(); |
| + |
| + EXPECT_CALL(*csd_service_, |
| + SendClientReportPhishingRequest( |
| + Pointee(PartiallyEqualVerdict(verdict)), IsNull())) |
| + .WillOnce(DoAll(DeleteArg<0>(), QuitUIMessageLoop())); |
|
Brian Ryner
2011/07/19 21:27:10
Is there an easy way to check that this situation
noelutz
2011/07/19 22:28:08
Well, I do check that NULL is passed for the callb
Brian Ryner
2011/07/19 22:35:24
Ah, I missed that. Seems reasonable.
|
| + OnPhishingDetectionDone(verdict.SerializeAsString()); |
| + MessageLoop::current()->Run(); |
| + EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
| +} |
| + |
| TEST_F(ClientSideDetectionHostTest, NavigationCancelsShouldClassifyUrl) { |
| // Test that canceling pending should classify requests works as expected. |