Index: chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
index 8c6af429a2204973c8e0f5e12c6bfa9eff0fa7ed..8e66f1b8cfde00893ee03884cbb4bf1847c38968 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
@@ -28,10 +28,15 @@ |
#include "content/browser/renderer_host/resource_dispatcher_host.h" |
#include "content/browser/tab_contents/tab_contents.h" |
#include "content/browser/tab_contents/tab_contents_view.h" |
+#include "testing/gmock/include/gmock/gmock.h" |
using base::Histogram; |
using base::StatisticsRecorder; |
+using ::testing::_; |
+using ::testing::Mock; |
+using ::testing::StrictMock; |
+ |
// A SafeBrowingDatabase class that allows us to inject the malicious URLs. |
class TestSafeBrowsingDatabase : public SafeBrowsingDatabase { |
public: |
@@ -255,6 +260,19 @@ class TestSBProtocolManagerFactory : public SBProtocolManagerFactory { |
TestProtocolManager* pm_; |
}; |
+class MockObserver : public SafeBrowsingService::Observer { |
+ public: |
+ MockObserver() {} |
+ virtual ~MockObserver() {} |
+ MOCK_METHOD1(OnSafeBrowsingHit, |
+ void(const SafeBrowsingService::UnsafeResource&)); |
+}; |
+ |
+MATCHER_P(IsUnsafeResourceFor, url, "") { |
+ return (arg.url.spec() == url.spec() && |
+ arg.threat_type != SafeBrowsingService::SAFE); |
+} |
+ |
namespace { |
void QuitUIThread() { |
@@ -379,6 +397,9 @@ class SafeBrowsingServiceTest : public InProcessBrowserTest { |
sb_service->download_hashcheck_timeout_ms_ = ms; |
} |
+ protected: |
+ StrictMock<MockObserver> observer_; |
+ |
// Waits for pending tasks on the IO thread to complete. This is useful |
// to wait for the SafeBrowsingService to finish loading/stopping. |
void WaitForIOThread() { |
@@ -404,6 +425,7 @@ const char kMalwarePage[] = "files/safe_browsing/malware.html"; |
// This test goes through DownloadResourceHandler. |
IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, Malware) { |
GURL url = test_server()->GetURL(kEmptyPage); |
+ g_browser_process->safe_browsing_service()->AddObserver(&observer_); |
// After adding the url to safebrowsing database and getfullhash result, |
// we should see the interstitial page. |
@@ -411,9 +433,11 @@ IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, Malware) { |
int chunk_id = 0; |
GenUrlFullhashResult(url, safe_browsing_util::kMalwareList, chunk_id, |
&malware_full_hash); |
+ EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1); |
SetupResponseForUrl(url, malware_full_hash); |
ui_test_utils::NavigateToURL(browser(), url); |
EXPECT_TRUE(ShowingInterstitialPage()); |
+ g_browser_process->safe_browsing_service()->RemoveObserver(&observer_); |
} |
const char kPrefetchMalwarePage[] = "files/safe_browsing/prefetch_malware.html"; |
@@ -423,6 +447,7 @@ const char kPrefetchMalwarePage[] = "files/safe_browsing/prefetch_malware.html"; |
IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, Prefetch) { |
GURL url = test_server()->GetURL(kPrefetchMalwarePage); |
GURL malware_url = test_server()->GetURL(kMalwarePage); |
+ g_browser_process->safe_browsing_service()->AddObserver(&observer_); |
class SetPrefetchForTest { |
public: |
@@ -453,11 +478,16 @@ IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, Prefetch) { |
SetupResponseForUrl(malware_url, malware_full_hash); |
ui_test_utils::NavigateToURL(browser(), url); |
EXPECT_FALSE(ShowingInterstitialPage()); |
+ Mock::VerifyAndClear(&observer_); |
// However, when we navigate to the malware page, we should still get |
// the interstitial. |
+ EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(malware_url))) |
+ .Times(1); |
ui_test_utils::NavigateToURL(browser(), malware_url); |
EXPECT_TRUE(ShowingInterstitialPage()); |
+ Mock::VerifyAndClear(&observer_); |
+ g_browser_process->safe_browsing_service()->RemoveObserver(&observer_); |
} |
} // namespace |