Chromium Code Reviews| 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 |