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 c490bd1534a41a41e18362df57511ef1e4553488..a1c26049c02dd53e9ae4019260c7839ec22b49c1 100644 |
--- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
+++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc |
@@ -6,6 +6,7 @@ |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/task.h" |
+#include "chrome/browser/safe_browsing/browser_feature_extractor.h" |
#include "chrome/browser/safe_browsing/client_side_detection_host.h" |
#include "chrome/browser/safe_browsing/client_side_detection_service.h" |
#include "chrome/browser/safe_browsing/safe_browsing_service.h" |
@@ -48,6 +49,11 @@ MATCHER_P(EqualsProto, other, "") { |
return other.SerializeAsString() == arg.SerializeAsString(); |
} |
+ACTION(QuitUIMessageLoop) { |
+ EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ MessageLoopForUI::current()->Quit(); |
+} |
+ |
class MockClientSideDetectionService : public ClientSideDetectionService { |
public: |
MockClientSideDetectionService() : ClientSideDetectionService(NULL) {} |
@@ -95,8 +101,18 @@ class MockTestingProfile : public TestingProfile { |
MOCK_METHOD0(IsOffTheRecord, bool()); |
}; |
+class MockBrowserFeatureExtractor : public BrowserFeatureExtractor { |
+ public: |
+ explicit MockBrowserFeatureExtractor(TabContents* tab) |
+ : BrowserFeatureExtractor(tab) {} |
+ virtual ~MockBrowserFeatureExtractor() {} |
+ |
+ MOCK_METHOD2(ExtractFeatures, void(ClientPhishingRequest*, |
+ BrowserFeatureExtractor::DoneCallback*)); |
+}; |
+ |
// Helper function which quits the UI message loop from the IO message loop. |
-void QuitUIMessageLoop() { |
+void QuitUIMessageLoopFromIO() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
BrowserThread::PostTask(BrowserThread::UI, |
FROM_HERE, |
@@ -144,7 +160,7 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { |
// we put the quit message there. |
BrowserThread::PostTask(BrowserThread::IO, |
FROM_HERE, |
- NewRunnableFunction(&QuitUIMessageLoop)); |
+ NewRunnableFunction(&QuitUIMessageLoopFromIO)); |
MessageLoop::current()->Run(); |
} |
@@ -191,6 +207,10 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { |
EXPECT_TRUE(Mock::VerifyAndClear(mock_profile_)); |
} |
+ void SetFeatureExtractor(BrowserFeatureExtractor* extractor) { |
+ csd_host_->feature_extractor_.reset(extractor); |
+ } |
+ |
protected: |
ClientSideDetectionHost* csd_host_; |
scoped_ptr<StrictMock<MockClientSideDetectionService> > csd_service_; |
@@ -205,9 +225,12 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness { |
TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteInvalidVerdict) { |
// Case 0: renderer sends an invalid verdict string that we're unable to |
// parse. |
- EXPECT_CALL(*csd_service_, SendClientReportPhishingRequest(_, _)).Times(0); |
+ MockBrowserFeatureExtractor* mock_extractor = new MockBrowserFeatureExtractor( |
+ contents()); |
+ SetFeatureExtractor(mock_extractor); // The host class takes ownership. |
+ EXPECT_CALL(*mock_extractor, ExtractFeatures(_, _)).Times(0); |
OnDetectedPhishingSite("Invalid Protocol Buffer"); |
- EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
+ EXPECT_TRUE(Mock::VerifyAndClear(mock_extractor)); |
} |
TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) { |
@@ -221,8 +244,9 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) { |
EXPECT_CALL(*csd_service_, |
SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) |
- .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); |
+ .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
OnDetectedPhishingSite(verdict.SerializeAsString()); |
+ MessageLoop::current()->Run(); |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
ASSERT_TRUE(cb); |
@@ -245,8 +269,9 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) { |
EXPECT_CALL(*csd_service_, |
SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) |
- .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); |
+ .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
OnDetectedPhishingSite(verdict.SerializeAsString()); |
+ MessageLoop::current()->Run(); |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
ASSERT_TRUE(cb); |
@@ -270,8 +295,9 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) { |
EXPECT_CALL(*csd_service_, |
SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) |
- .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); |
+ .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
OnDetectedPhishingSite(verdict.SerializeAsString()); |
+ MessageLoop::current()->Run(); |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
ASSERT_TRUE(cb); |
@@ -322,8 +348,9 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) { |
EXPECT_CALL(*csd_service_, |
SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) |
- .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb))); |
+ .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb), QuitUIMessageLoop())); |
OnDetectedPhishingSite(verdict.SerializeAsString()); |
+ MessageLoop::current()->Run(); |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
ASSERT_TRUE(cb); |
GURL other_phishing_url("http://other_phishing_url.com/bla"); |
@@ -339,8 +366,11 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) { |
verdict.set_client_score(0.8f); |
EXPECT_CALL(*csd_service_, |
SendClientReportPhishingRequest(Pointee(EqualsProto(verdict)), _)) |
- .WillOnce(DoAll(DeleteArg<0>(), SaveArg<1>(&cb_other))); |
+ .WillOnce(DoAll(DeleteArg<0>(), |
+ SaveArg<1>(&cb_other), |
+ QuitUIMessageLoop())); |
OnDetectedPhishingSite(verdict.SerializeAsString()); |
+ MessageLoop::current()->Run(); |
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get())); |
ASSERT_TRUE(cb_other); |