| 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 c9d64dba299a97ccb97e93277154744b0a6159b7..59beabd42d84667553455f46059d1f28aa5b492b 100644
|
| --- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
|
| +++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
|
| @@ -57,6 +57,11 @@ MATCHER_P(PartiallyEqualVerdict, other, "") {
|
| other.is_phishing() == arg.is_phishing());
|
| }
|
|
|
| +// Test that the callback is NULL when the verdict is not phishing.
|
| +MATCHER(CallbackIsNull, "") {
|
| + return arg.is_null();
|
| +}
|
| +
|
| ACTION(QuitUIMessageLoop) {
|
| EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| MessageLoopForUI::current()->Quit();
|
| @@ -67,9 +72,7 @@ ACTION(QuitUIMessageLoop) {
|
| ACTION_TEMPLATE(InvokeCallbackArgument,
|
| HAS_1_TEMPLATE_PARAMS(int, k),
|
| AND_2_VALUE_PARAMS(p0, p1)) {
|
| - ::std::tr1::get<k>(args)->Run(p0, p1);
|
| - // This is an old callback, so it needs to be deleted explicitly.
|
| - delete ::std::tr1::get<k>(args);
|
| + ::std::tr1::get<k>(args).Run(p0, p1);
|
| }
|
|
|
| class MockClientSideDetectionService : public ClientSideDetectionService {
|
| @@ -79,7 +82,7 @@ class MockClientSideDetectionService : public ClientSideDetectionService {
|
|
|
| MOCK_METHOD2(SendClientReportPhishingRequest,
|
| void(ClientPhishingRequest*,
|
| - ClientReportPhishingRequestCallback*));
|
| + const ClientReportPhishingRequestCallback&));
|
| MOCK_CONST_METHOD1(IsPrivateIPAddress, bool(const std::string&));
|
| MOCK_METHOD2(GetValidCachedResult, bool(const GURL&, bool*));
|
| MOCK_METHOD1(IsInCache, bool(const GURL&));
|
| @@ -127,9 +130,10 @@ class MockBrowserFeatureExtractor : public BrowserFeatureExtractor {
|
| : BrowserFeatureExtractor(tab, service) {}
|
| virtual ~MockBrowserFeatureExtractor() {}
|
|
|
| - MOCK_METHOD3(ExtractFeatures, void(const BrowseInfo* info,
|
| - ClientPhishingRequest*,
|
| - BrowserFeatureExtractor::DoneCallback*));
|
| + MOCK_METHOD3(ExtractFeatures,
|
| + void(const BrowseInfo* info,
|
| + ClientPhishingRequest*,
|
| + const BrowserFeatureExtractor::DoneCallback&));
|
| };
|
|
|
| // Helper function which quits the UI message loop from the IO message loop.
|
| @@ -195,7 +199,7 @@ class ClientSideDetectionHostTest : public TabContentsWrapperTestHarness {
|
| // we put the quit message there.
|
| BrowserThread::PostTask(BrowserThread::IO,
|
| FROM_HERE,
|
| - NewRunnableFunction(&QuitUIMessageLoopFromIO));
|
| + base::Bind(&QuitUIMessageLoopFromIO));
|
| MessageLoop::current()->Run();
|
| }
|
|
|
| @@ -316,7 +320,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneNotPhishing) {
|
| csd_service_.get());
|
| SetFeatureExtractor(mock_extractor); // The host class takes ownership.
|
|
|
| - ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
|
| + ClientSideDetectionService::ClientReportPhishingRequestCallback cb;
|
| ClientPhishingRequest verdict;
|
| verdict.set_url("http://phishingurl.com/");
|
| verdict.set_client_score(1.0f);
|
| @@ -331,12 +335,11 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneNotPhishing) {
|
| .WillOnce(SaveArg<1>(&cb));
|
| OnPhishingDetectionDone(verdict.SerializeAsString());
|
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
|
| - ASSERT_TRUE(cb);
|
| + ASSERT_FALSE(cb.is_null());
|
|
|
| // Make sure DoDisplayBlockingPage is not going to be called.
|
| EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
|
| - cb->Run(GURL(verdict.url()), false);
|
| - delete cb;
|
| + cb.Run(GURL(verdict.url()), false);
|
| MessageLoop::current()->RunAllPending();
|
| EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
|
| }
|
| @@ -349,7 +352,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) {
|
| csd_service_.get());
|
| SetFeatureExtractor(mock_extractor); // The host class takes ownership.
|
|
|
| - ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
|
| + ClientSideDetectionService::ClientReportPhishingRequestCallback cb;
|
| ClientPhishingRequest verdict;
|
| verdict.set_url("http://phishingurl.com/");
|
| verdict.set_client_score(1.0f);
|
| @@ -364,12 +367,11 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneDisabled) {
|
| .WillOnce(SaveArg<1>(&cb));
|
| OnPhishingDetectionDone(verdict.SerializeAsString());
|
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
|
| - ASSERT_TRUE(cb);
|
| + ASSERT_FALSE(cb.is_null());
|
|
|
| // Make sure DoDisplayBlockingPage is not going to be called.
|
| EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
|
| - cb->Run(GURL(verdict.url()), false);
|
| - delete cb;
|
| + cb.Run(GURL(verdict.url()), false);
|
| MessageLoop::current()->RunAllPending();
|
| EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
|
| }
|
| @@ -382,7 +384,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) {
|
| csd_service_.get());
|
| SetFeatureExtractor(mock_extractor); // The host class takes ownership.
|
|
|
| - ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
|
| + ClientSideDetectionService::ClientReportPhishingRequestCallback cb;
|
| GURL phishing_url("http://phishingurl.com/");
|
| ClientPhishingRequest verdict;
|
| verdict.set_url(phishing_url.spec());
|
| @@ -398,13 +400,12 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) {
|
| .WillOnce(SaveArg<1>(&cb));
|
| OnPhishingDetectionDone(verdict.SerializeAsString());
|
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
|
| - ASSERT_TRUE(cb);
|
| + ASSERT_FALSE(cb.is_null());
|
|
|
| SafeBrowsingService::UnsafeResource resource;
|
| EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
|
| .WillOnce(SaveArg<0>(&resource));
|
| - cb->Run(phishing_url, true);
|
| - delete cb;
|
| + cb.Run(phishing_url, true);
|
|
|
| MessageLoop::current()->RunAllPending();
|
| EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
|
| @@ -422,10 +423,8 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneShowInterstitial) {
|
| BrowserThread::PostTask(
|
| BrowserThread::IO,
|
| FROM_HERE,
|
| - NewRunnableMethod(
|
| - sb_service_.get(),
|
| - &MockSafeBrowsingService::InvokeOnBlockingPageComplete,
|
| - resource.client));
|
| + base::Bind(&MockSafeBrowsingService::InvokeOnBlockingPageComplete,
|
| + sb_service_.get(), resource.client));
|
| // Since the CsdClient object will be deleted on the UI thread I need
|
| // to run the UI message loop. Post a task to stop the UI message loop
|
| // after the client object destructor is called.
|
| @@ -443,7 +442,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
|
| csd_service_.get());
|
| SetFeatureExtractor(mock_extractor); // The host class takes ownership.
|
|
|
| - ClientSideDetectionService::ClientReportPhishingRequestCallback* cb;
|
| + ClientSideDetectionService::ClientReportPhishingRequestCallback cb;
|
| GURL phishing_url("http://phishingurl.com/");
|
| ClientPhishingRequest verdict;
|
| verdict.set_url(phishing_url.spec());
|
| @@ -459,7 +458,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
|
| .WillOnce(SaveArg<1>(&cb));
|
| OnPhishingDetectionDone(verdict.SerializeAsString());
|
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
|
| - ASSERT_TRUE(cb);
|
| + ASSERT_FALSE(cb.is_null());
|
|
|
| // Set this back to a normal browser feature extractor since we're using
|
| // NavigateAndCommit() and it's easier to use the real thing than setting up
|
| @@ -474,7 +473,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
|
| // Wait for the pre-classification checks to finish for other_phishing_url.
|
| WaitAndCheckPreClassificationChecks();
|
|
|
| - ClientSideDetectionService::ClientReportPhishingRequestCallback* cb_other;
|
| + ClientSideDetectionService::ClientReportPhishingRequestCallback cb_other;
|
| verdict.set_url(other_phishing_url.spec());
|
| verdict.set_client_score(0.8f);
|
| EXPECT_CALL(*csd_service_,
|
| @@ -489,7 +488,7 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
|
| OnPhishingDetectionDone(verdict.SerializeAsString());
|
| MessageLoop::current()->Run();
|
| EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
|
| - ASSERT_TRUE(cb_other);
|
| + ASSERT_FALSE(cb_other.is_null());
|
|
|
| // We expect that the interstitial is shown for the second phishing URL and
|
| // not for the first phishing URL.
|
| @@ -497,10 +496,8 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
|
| EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
|
| .WillOnce(SaveArg<0>(&resource));
|
|
|
| - cb->Run(phishing_url, true); // Should have no effect.
|
| - delete cb;
|
| - cb_other->Run(other_phishing_url, true); // Should show interstitial.
|
| - delete cb_other;
|
| + cb.Run(phishing_url, true); // Should have no effect.
|
| + cb_other.Run(other_phishing_url, true); // Should show interstitial.
|
|
|
| MessageLoop::current()->RunAllPending();
|
| EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
|
| @@ -518,10 +515,8 @@ TEST_F(ClientSideDetectionHostTest, OnPhishingDetectionDoneMultiplePings) {
|
| BrowserThread::PostTask(
|
| BrowserThread::IO,
|
| FROM_HERE,
|
| - NewRunnableMethod(
|
| - sb_service_.get(),
|
| - &MockSafeBrowsingService::InvokeOnBlockingPageComplete,
|
| - resource.client));
|
| + base::Bind(&MockSafeBrowsingService::InvokeOnBlockingPageComplete,
|
| + sb_service_.get(), resource.client));
|
| // Since the CsdClient object will be deleted on the UI thread I need
|
| // to run the UI message loop. Post a task to stop the UI message loop
|
| // after the client object destructor is called.
|
| @@ -564,7 +559,7 @@ TEST_F(ClientSideDetectionHostTest,
|
|
|
| EXPECT_CALL(*csd_service_,
|
| SendClientReportPhishingRequest(
|
| - Pointee(PartiallyEqualVerdict(verdict)), IsNull()))
|
| + Pointee(PartiallyEqualVerdict(verdict)), CallbackIsNull()))
|
| .WillOnce(DoAll(DeleteArg<0>(), QuitUIMessageLoop()));
|
| std::vector<GURL> redirect_chain;
|
| redirect_chain.push_back(url);
|
|
|