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

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

Issue 2601303002: Wireup SafeBrowsingNavigationObserverManager to help PPAPI download attribution (Closed)
Patch Set: nit Created 3 years, 12 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/safe_browsing_navigation_observer_browsertest.cc
diff --git a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
index 0e4c257f67a5d036f56d4c4f81b0711ccfc24753..289ec776f7f2d5f6f07558c4c34741f407350831 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
@@ -250,14 +250,14 @@ class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
EXPECT_EQ(expected_is_retargeting, actual_entry.is_retargeting());
}
- std::vector<ReferrerChainEntry> IdentifyReferrerChain(
+ std::vector<ReferrerChainEntry> IdentifyReferrerChainForDownload(
DownloadItem* download) {
std::vector<ReferrerChainEntry> referrer_chain;
int download_tab_id =
SessionTabHelper::IdForTab(download->GetWebContents());
// IdentifyReferrerChain should return SUCCESS(1), SUCCESS_LANDING_PAGE(2),
// or SUCCESS_LANDING_REFERRER(3) in all these tests.
- EXPECT_LE(observer_manager_->IdentifyReferrerChain(
+ EXPECT_LE(observer_manager_->IdentifyReferrerChainForDownload(
download->GetURL(), download_tab_id,
2, // kDownloadAttributionUserGestureLimit
&referrer_chain),
@@ -265,6 +265,19 @@ class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
return referrer_chain;
}
+ std::vector<ReferrerChainEntry> IdentifyReferrerChainForPPAPIDownload(
+ const GURL& initiating_frame_url,
+ content::WebContents* web_contents) {
+ std::vector<ReferrerChainEntry> referrer_chain;
+ EXPECT_LE(observer_manager_->IdentifyReferrerChainForPPAPIDownload(
+ initiating_frame_url,
+ web_contents,
+ 2, // kDownloadAttributionUserGestureLimit)
+ &referrer_chain),
+ SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER);
+ return referrer_chain;
+ }
+
void VerifyHostToIpMap() {
// Since all testing pages have the same host, there is only one entry in
// host_to_ip_map_.
@@ -278,6 +291,12 @@ class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
ip_list.back().ip);
}
+ void SimulateUserGesture(){
+ observer_manager_->RecordUserGestureForWebContents(
+ browser()->tab_strip_model()->GetActiveWebContents(),
+ base::Time::Now());
+ }
+
SafeBrowsingNavigationObserverManager::NavigationMap* navigation_map() {
return observer_manager_->navigation_map();
}
@@ -324,7 +343,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, TypeInURLDownload) {
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(1U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -363,7 +382,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, DirectDownload) {
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -412,7 +431,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -475,7 +494,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(1));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -536,7 +555,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -613,7 +632,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -691,7 +710,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(std::size_t(4), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -753,7 +772,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
false, // has_server_redirect
nav_map->at(download_url).at(0));
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -812,7 +831,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, MixRedirects) {
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -891,7 +910,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, NewTabDownload) {
nav_map->at(download_url).at(0).target_tab_id);
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -972,7 +991,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0).target_tab_id);
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -1033,7 +1052,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -1117,7 +1136,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -1219,7 +1238,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
EXPECT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -1295,7 +1314,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, CompleteReferrerChain) {
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
EXPECT_EQ(std::size_t(4), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -1394,7 +1413,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
nav_map->at(download_url).at(0));
VerifyHostToIpMap();
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
EXPECT_EQ(std::size_t(3), referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type
@@ -1421,6 +1440,146 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
// page_before_landing_referrer_url is not in referrer chain.
}
+// Click a link which redirects to a PPAPI landing page.
+IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
+ PPAPIDownloadWithUserGestureOnHostingFrame) {
+ GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
+ ClickTestLink("complete_referrer_chain", 2, initial_url);
+ GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL);
+ GURL landing_url = embedded_test_server()->GetURL(kLandingURL);
+ std::string test_server_ip(embedded_test_server()->host_port_pair().host());
+
+ // Simulate a user gesture on landing page.
+ SimulateUserGesture();
+ auto nav_map = navigation_map();
+ ASSERT_TRUE(nav_map);
+ ASSERT_EQ(std::size_t(3), nav_map->size());
+ ASSERT_EQ(1U, nav_map->at(redirect_url).size());
+ ASSERT_EQ(1U, nav_map->at(landing_url).size());
+ ASSERT_EQ(1U, nav_map->at(initial_url).size());
+ VerifyNavigationEvent(GURL(), // source_url
+ GURL(), // source_main_frame_url
+ initial_url, // original_request_url
+ initial_url, // destination_url
+ true, // is_user_initiated,
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(initial_url).at(0));
+ VerifyNavigationEvent(initial_url, // source_url
+ initial_url, // source_main_frame_url
+ redirect_url, // original_request_url
+ redirect_url, // destination_url
+ true, // is_user_initiated,
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(redirect_url).at(0));
+ VerifyNavigationEvent(redirect_url, // source_url
+ redirect_url, // source_main_frame_url
+ landing_url, // original_request_url
+ landing_url, // destination_url
+ false, // is_user_initiated,
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(landing_url).at(0));
+ VerifyHostToIpMap();
+
+ auto referrer_chain = IdentifyReferrerChainForPPAPIDownload(
+ landing_url, browser()->tab_strip_model()->GetActiveWebContents());
+
+ EXPECT_EQ(std::size_t(3), referrer_chain.size());
+ VerifyReferrerChainEntry(landing_url, // url
+ ReferrerChainEntry::LANDING_PAGE, // type
+ test_server_ip, // ip_address
+ redirect_url, // referrer_url
+ redirect_url, // referrer_main_frame_url
+ false, // is_retargeting
+ referrer_chain[0]);
+ VerifyReferrerChainEntry(redirect_url, // url
+ ReferrerChainEntry::CLIENT_REDIRECT, // type
+ test_server_ip, // ip_address
+ initial_url, // referrer_url
+ initial_url, // referrer_main_frame_url
+ false, // is_retargeting
+ referrer_chain[1]);
+ VerifyReferrerChainEntry(
+ initial_url, // url
+ ReferrerChainEntry::LANDING_REFERRER, // type
+ test_server_ip, // ip_address
+ GURL(), // referrer_url is empty since this beyonds 2 clicks.
+ GURL(), // referrer_main_frame_url is empty for the same reason.
+ false, // is_retargeting
+ referrer_chain[2]);
+}
+
+// Click a link which redirects to a page that triggers PPAPI download without
+// user gesture (a.k.a not a landing page).
+IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
+ PPAPIDownloadWithoutUserGestureOnHostingFrame) {
+ GURL landing_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
+ ClickTestLink("complete_referrer_chain", 2, landing_url);
+ GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL);
+ GURL hosting_url = embedded_test_server()->GetURL(kLandingURL);
+ std::string test_server_ip(embedded_test_server()->host_port_pair().host());
+
+ auto nav_map = navigation_map();
+ ASSERT_TRUE(nav_map);
+ ASSERT_EQ(std::size_t(3), nav_map->size());
+ ASSERT_EQ(1U, nav_map->at(redirect_url).size());
+ ASSERT_EQ(1U, nav_map->at(hosting_url).size());
+ ASSERT_EQ(1U, nav_map->at(landing_url).size());
+ VerifyNavigationEvent(GURL(), // source_url
+ GURL(), // source_main_frame_url
+ landing_url, // original_request_url
+ landing_url, // destination_url
+ true, // is_user_initiated,
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(landing_url).at(0));
+ VerifyNavigationEvent(landing_url, // source_url
+ landing_url, // source_main_frame_url
+ redirect_url, // original_request_url
+ redirect_url, // destination_url
+ true, // is_user_initiated,
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(redirect_url).at(0));
+ VerifyNavigationEvent(redirect_url, // source_url
+ redirect_url, // source_main_frame_url
+ hosting_url, // original_request_url
+ hosting_url, // destination_url
+ false, // is_user_initiated,
+ true, // has_committed
+ false, // has_server_redirect
+ nav_map->at(hosting_url).at(0));
+ VerifyHostToIpMap();
+
+ auto referrer_chain = IdentifyReferrerChainForPPAPIDownload(
+ hosting_url, browser()->tab_strip_model()->GetActiveWebContents());
+
+ EXPECT_EQ(std::size_t(3), referrer_chain.size());
+ VerifyReferrerChainEntry(hosting_url, // url
+ ReferrerChainEntry::CLIENT_REDIRECT, // type
+ test_server_ip, // ip_address
+ redirect_url, // referrer_url
+ redirect_url, // referrer_main_frame_url
+ false, // is_retargeting
+ referrer_chain[0]);
+ VerifyReferrerChainEntry(redirect_url, // url
+ ReferrerChainEntry::CLIENT_REDIRECT, // type
+ test_server_ip, // ip_address
+ landing_url, // referrer_url
+ landing_url, // referrer_main_frame_url
+ false, // is_retargeting
+ referrer_chain[1]);
+ VerifyReferrerChainEntry(landing_url, // url
+ ReferrerChainEntry::LANDING_PAGE, // type
+ test_server_ip, // ip_address
+ GURL(), // no more referrer before landing_url
+ GURL(),
+ false, // is_retargeting
+ referrer_chain[2]);
+}
+
// Server-side redirect.
IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, ServerRedirect) {
GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
@@ -1451,7 +1610,7 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, ServerRedirect) {
true, // has_server_redirect
nav_map->at(download_url).at(0));
- auto referrer_chain = IdentifyReferrerChain(GetDownload());
+ auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload());
ASSERT_EQ(1U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
ReferrerChainEntry::DOWNLOAD_URL, // type

Powered by Google App Engine
This is Rietveld 408576698