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 b8f9bc302cdfd24f93960755e01c73c81f16004b..f78c359b221e2a1d5181d10a3e7c4c59cadd0862 100644 |
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc |
@@ -28,6 +28,7 @@ |
#include "chrome/browser/profiles/startup_task_runner_service_factory.h" |
#include "chrome/browser/safe_browsing/client_side_detection_service.h" |
#include "chrome/browser/safe_browsing/database_manager.h" |
+#include "chrome/browser/safe_browsing/metadata.pb.h" |
#include "chrome/browser/safe_browsing/protocol_manager.h" |
#include "chrome/browser/safe_browsing/safe_browsing_database.h" |
#include "chrome/browser/safe_browsing/safe_browsing_service.h" |
@@ -501,32 +502,136 @@ class SafeBrowsingServiceTest : public InProcessBrowserTest { |
DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceTest); |
}; |
+enum MalwareMetadataTestType { |
+ METADATA_NONE, |
+ METADATA_LANDING, |
+ METADATA_DISTRIBUTION, |
+}; |
+ |
+class SafeBrowsingServiceMetadataTest |
+ : public SafeBrowsingServiceTest, |
+ public ::testing::WithParamInterface<MalwareMetadataTestType> { |
+ public: |
+ SafeBrowsingServiceMetadataTest() {} |
+ |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ SafeBrowsingServiceTest::SetUpOnMainThread(); |
+ g_browser_process->safe_browsing_service()->ui_manager()->AddObserver( |
+ &observer_); |
+ } |
+ |
+ virtual void TearDownOnMainThread() OVERRIDE { |
+ g_browser_process->safe_browsing_service()->ui_manager()->RemoveObserver( |
+ &observer_); |
+ SafeBrowsingServiceTest::TearDownOnMainThread(); |
+ } |
+ |
+ void GenUrlFullhashResultWithMetadata(const GURL& url, |
+ SBFullHashResult* full_hash) { |
+ GenUrlFullhashResult(url, safe_browsing_util::MALWARE, full_hash); |
+ |
+ safe_browsing::MalwarePatternType proto; |
+ switch (GetParam()) { |
+ case METADATA_NONE: |
+ full_hash->metadata = std::string(); |
+ break; |
+ case METADATA_LANDING: |
+ proto.set_pattern_type(safe_browsing::MalwarePatternType::LANDING); |
+ full_hash->metadata = proto.SerializeAsString(); |
+ break; |
+ case METADATA_DISTRIBUTION: |
+ proto.set_pattern_type(safe_browsing::MalwarePatternType::DISTRIBUTION); |
+ full_hash->metadata = proto.SerializeAsString(); |
+ break; |
+ } |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(SafeBrowsingServiceMetadataTest); |
+}; |
+ |
namespace { |
const char kEmptyPage[] = "files/empty.html"; |
const char kMalwareFile[] = "files/downloads/dangerous/dangerous.exe"; |
const char kMalwarePage[] = "files/safe_browsing/malware.html"; |
+const char kMalwareIFrame[] = "files/safe_browsing/malware_iframe.html"; |
+const char kMalwareImg[] = "files/safe_browsing/malware_image.png"; |
// This test goes through DownloadResourceHandler. |
-IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, Malware) { |
+IN_PROC_BROWSER_TEST_P(SafeBrowsingServiceMetadataTest, MalwareMainFrame) { |
GURL url = test_server()->GetURL(kEmptyPage); |
- g_browser_process->safe_browsing_service()-> |
- ui_manager()->AddObserver(&observer_); |
// After adding the url to safebrowsing database and getfullhash result, |
// we should see the interstitial page. |
SBFullHashResult malware_full_hash; |
- GenUrlFullhashResult(url, safe_browsing_util::MALWARE, &malware_full_hash); |
+ GenUrlFullhashResultWithMetadata(url, &malware_full_hash); |
EXPECT_CALL(observer_, |
OnSafeBrowsingMatch(IsUnsafeResourceFor(url))).Times(1); |
EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(url))).Times(1); |
SetupResponseForUrl(url, malware_full_hash); |
ui_test_utils::NavigateToURL(browser(), url); |
+ // All types should show the interstitial. |
EXPECT_TRUE(ShowingInterstitialPage()); |
- g_browser_process->safe_browsing_service()-> |
- ui_manager()->RemoveObserver(&observer_); |
} |
+IN_PROC_BROWSER_TEST_P(SafeBrowsingServiceMetadataTest, MalwareIFrame) { |
+ GURL main_url = test_server()->GetURL(kMalwarePage); |
+ GURL iframe_url = test_server()->GetURL(kMalwareIFrame); |
+ |
+ // Add the iframe url as malware and then load the parent page. |
+ SBFullHashResult malware_full_hash; |
+ GenUrlFullhashResultWithMetadata(iframe_url, &malware_full_hash); |
+ EXPECT_CALL(observer_, OnSafeBrowsingMatch(IsUnsafeResourceFor(iframe_url))) |
+ .Times(1); |
+ EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(iframe_url))) |
+ .Times(1); |
+ SetupResponseForUrl(iframe_url, malware_full_hash); |
+ ui_test_utils::NavigateToURL(browser(), main_url); |
+ // All types should show the interstitial. |
+ EXPECT_TRUE(ShowingInterstitialPage()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_P(SafeBrowsingServiceMetadataTest, MalwareImg) { |
+ GURL main_url = test_server()->GetURL(kMalwarePage); |
+ GURL img_url = test_server()->GetURL(kMalwareImg); |
+ |
+ // Add the img url as malware and then load the parent page. |
+ SBFullHashResult malware_full_hash; |
+ GenUrlFullhashResultWithMetadata(img_url, &malware_full_hash); |
+ switch (GetParam()) { |
+ case METADATA_NONE: |
+ case METADATA_DISTRIBUTION: |
+ EXPECT_CALL(observer_, OnSafeBrowsingMatch(IsUnsafeResourceFor(img_url))) |
+ .Times(1); |
+ EXPECT_CALL(observer_, OnSafeBrowsingHit(IsUnsafeResourceFor(img_url))) |
+ .Times(1); |
+ break; |
+ case METADATA_LANDING: |
+ // No interstitial shown, so no notifications expected. |
+ break; |
+ } |
+ SetupResponseForUrl(img_url, malware_full_hash); |
+ ui_test_utils::NavigateToURL(browser(), main_url); |
+ // Subresource which is tagged as a landing page should not show an |
+ // interstitial, the other types should. |
+ switch (GetParam()) { |
+ case METADATA_NONE: |
+ case METADATA_DISTRIBUTION: |
+ EXPECT_TRUE(ShowingInterstitialPage()); |
+ break; |
+ case METADATA_LANDING: |
+ EXPECT_FALSE(ShowingInterstitialPage()); |
+ break; |
+ } |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(MaybeSetMetadata, |
+ SafeBrowsingServiceMetadataTest, |
+ testing::Values(METADATA_NONE, |
+ METADATA_LANDING, |
+ METADATA_DISTRIBUTION)); |
+ |
IN_PROC_BROWSER_TEST_F(SafeBrowsingServiceTest, DISABLED_MalwareWithWhitelist) { |
GURL url = test_server()->GetURL(kEmptyPage); |
g_browser_process->safe_browsing_service()-> |