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 8311dc016870ccfe8a29af365b5ae44f919f19f6..7ad5d463515dc28aab4de92ccca4d6a0478245f0 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
@@ -24,10 +24,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: |
@@ -251,6 +256,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); |
+} |
+ |
// Tests the safe browsing blocking page in a browser. |
class SafeBrowsingServiceTest : public InProcessBrowserTest { |
public: |
@@ -362,6 +380,9 @@ class SafeBrowsingServiceTest : public InProcessBrowserTest { |
sb_service->download_hashcheck_timeout_ms_ = ms; |
} |
+ protected: |
+ StrictMock<MockObserver> observer_; |
+ |
private: |
TestSafeBrowsingDatabaseFactory db_factory_; |
TestSBProtocolManagerFactory pm_factory_; |
@@ -379,6 +400,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. |
@@ -386,9 +408,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"; |
@@ -398,6 +422,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: |
@@ -426,13 +451,19 @@ IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, Prefetch) { |
GenUrlFullhashResult(malware_url, safe_browsing_util::kMalwareList, |
chunk_id, &malware_full_hash); |
SetupResponseForUrl(malware_url, malware_full_hash); |
+ EXPECT_CALL(observer_, OnSafeBrowsingHit(_)).Times(0); |
mattm
2011/07/19 21:25:55
Is this unnecessary due to using StrictMock?
noelutz
2011/07/19 22:28:08
Done.
|
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 |