Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Unified Diff: chrome/browser/safe_browsing/client_side_detection_host_unittest.cc

Issue 7080034: Currently, there is a bug in the way we show the csd phishing interstitial. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Address Brian's comments. Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 2599b95bd3c68365c2893ade81f6fe31cfc9f0b7..5e64d4e51463b2447b958c6a51c55e2e4709359a 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_host_unittest.cc
@@ -73,9 +73,7 @@ class MockSafeBrowsingService : public SafeBrowsingService {
MockSafeBrowsingService() {}
virtual ~MockSafeBrowsingService() {}
- MOCK_METHOD8(DisplayBlockingPage,
- void(const GURL&, const GURL&, const std::vector<GURL>&,
- ResourceType::Type, UrlCheckResult, Client*, int, int));
+ MOCK_METHOD1(DoDisplayBlockingPage, void(const UnsafeResource& resource));
MOCK_METHOD1(MatchCsdWhitelistUrl, bool(const GURL&));
// Helper function which calls OnBlockingPageComplete for this client
@@ -242,18 +240,11 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteNotPhishing) {
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
ASSERT_TRUE(cb);
- // Make sure DisplayBlockingPage is not going to be called.
- EXPECT_CALL(*sb_service_,
- DisplayBlockingPage(_, _, _, _, _, _, _, _)).Times(0);
+ // Make sure DoDisplayBlockingPage is not going to be called.
+ EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
cb->Run(GURL(verdict.url()), false);
delete cb;
- // If there was a message posted on the IO thread to display the
- // interstitial page we know that it would have been posted before
- // we put the quit message there.
- BrowserThread::PostTask(BrowserThread::IO,
- FROM_HERE,
- NewRunnableFunction(&QuitUIMessageLoop));
- MessageLoop::current()->Run();
+ MessageLoop::current()->RunAllPending();
EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
}
@@ -273,13 +264,11 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteDisabled) {
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
ASSERT_TRUE(cb);
- // Make sure DisplayBlockingPage is not going to be called.
- EXPECT_CALL(*sb_service_,
- DisplayBlockingPage(_, _, _, _, _, _, _, _)).Times(0);
+ // Make sure DoDisplayBlockingPage is not going to be called.
+ EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_)).Times(0);
cb->Run(GURL(verdict.url()), false);
delete cb;
-
- FlushIOMessageLoop();
+ MessageLoop::current()->RunAllPending();
EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
}
@@ -303,24 +292,23 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) {
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
ASSERT_TRUE(cb);
- SafeBrowsingService::Client* client;
- EXPECT_CALL(*sb_service_,
- DisplayBlockingPage(
- phishing_url,
- phishing_url,
- _,
- ResourceType::MAIN_FRAME,
- SafeBrowsingService::CLIENT_SIDE_PHISHING_URL,
- _ /* a CsdClient object */,
- contents()->GetRenderProcessHost()->id(),
- contents()->render_view_host()->routing_id()))
- .WillOnce(SaveArg<5>(&client));
-
+ SafeBrowsingService::UnsafeResource resource;
+ EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
+ .WillOnce(SaveArg<0>(&resource));
cb->Run(phishing_url, true);
delete cb;
- FlushIOMessageLoop();
+ MessageLoop::current()->RunAllPending();
EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
+ EXPECT_EQ(phishing_url, resource.url);
+ EXPECT_EQ(phishing_url, resource.original_url);
+ EXPECT_EQ(ResourceType::MAIN_FRAME, resource.resource_type);
+ EXPECT_EQ(SafeBrowsingService::CLIENT_SIDE_PHISHING_URL,
+ resource.threat_type);
+ EXPECT_EQ(contents()->GetRenderProcessHost()->id(),
+ resource.render_process_host_id);
+ EXPECT_EQ(contents()->render_view_host()->routing_id(),
+ resource.render_view_id);
// Make sure the client object will be deleted.
BrowserThread::PostTask(
@@ -329,7 +317,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteShowInterstitial) {
NewRunnableMethod(
sb_service_.get(),
&MockSafeBrowsingService::InvokeOnBlockingPageComplete,
- client));
+ 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.
@@ -378,29 +366,25 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) {
// We expect that the interstitial is shown for the second phishing URL and
// not for the first phishing URL.
- EXPECT_CALL(*sb_service_,
- DisplayBlockingPage(phishing_url, phishing_url,_, _, _, _, _, _))
- .Times(0);
- SafeBrowsingService::Client* client;
- EXPECT_CALL(*sb_service_,
- DisplayBlockingPage(
- other_phishing_url,
- other_phishing_url,
- _,
- ResourceType::MAIN_FRAME,
- SafeBrowsingService::CLIENT_SIDE_PHISHING_URL,
- _ /* a CsdClient object */,
- contents()->GetRenderProcessHost()->id(),
- contents()->render_view_host()->routing_id()))
- .WillOnce(SaveArg<5>(&client));
-
+ SafeBrowsingService::UnsafeResource resource;
+ 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;
- FlushIOMessageLoop();
+ MessageLoop::current()->RunAllPending();
EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
+ EXPECT_EQ(other_phishing_url, resource.url);
+ EXPECT_EQ(other_phishing_url, resource.original_url);
+ EXPECT_EQ(ResourceType::MAIN_FRAME, resource.resource_type);
+ EXPECT_EQ(SafeBrowsingService::CLIENT_SIDE_PHISHING_URL,
+ resource.threat_type);
+ EXPECT_EQ(contents()->GetRenderProcessHost()->id(),
+ resource.render_process_host_id);
+ EXPECT_EQ(contents()->render_view_host()->routing_id(),
+ resource.render_view_id);
// Make sure the client object will be deleted.
BrowserThread::PostTask(
@@ -409,7 +393,7 @@ TEST_F(ClientSideDetectionHostTest, OnDetectedPhishingSiteMultiplePings) {
NewRunnableMethod(
sb_service_.get(),
&MockSafeBrowsingService::InvokeOnBlockingPageComplete,
- client));
+ 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.
@@ -583,20 +567,23 @@ TEST_F(ClientSideDetectionHostTest, ShouldClassifyUrl) {
url = GURL("http://host8.com/");
ExpectPreClassificationChecks(url, &kFalse, &kFalse, &kFalse, &kTrue, NULL,
NULL);
- EXPECT_CALL(*sb_service_,
- DisplayBlockingPage(Eq(url), Eq(url), _, _, _, _, _, _))
- .WillOnce(DeleteArg<5>());
+
+ SafeBrowsingService::UnsafeResource resource;
+ EXPECT_CALL(*sb_service_, DoDisplayBlockingPage(_))
+ .WillOnce(SaveArg<0>(&resource));
+
NavigateAndCommit(url);
// Wait for CheckCsdWhitelist to be called on the IO thread.
FlushIOMessageLoop();
// Wait for CheckCache() to be called on the UI thread.
MessageLoop::current()->RunAllPending();
- // Wait for DisplayBlockingPage to be called on the IO thread.
- FlushIOMessageLoop();
// Now we check that all expected functions were indeed called on the two
// service objects.
EXPECT_TRUE(Mock::VerifyAndClear(csd_service_.get()));
EXPECT_TRUE(Mock::VerifyAndClear(sb_service_.get()));
+ EXPECT_EQ(url, resource.url);
+ EXPECT_EQ(url, resource.original_url);
+ delete resource.client;
msg = process()->sink().GetFirstMessageMatching(
SafeBrowsingMsg_StartPhishingDetection::ID);
ASSERT_FALSE(msg);

Powered by Google App Engine
This is Rietveld 408576698