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

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

Issue 2644133005: Include all server redirects in referrer chain (Closed)
Patch Set: proto change and adding two histograms Created 3 years, 11 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 974b1e475845a2dac5923e6398d639c593b0516c..13f399bce6ffaf272cf3b296a814d68b8b082c32 100644
--- a/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc
@@ -223,21 +223,31 @@ class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
actual_nav_event.source_main_frame_url);
EXPECT_EQ(expected_original_request_url,
actual_nav_event.original_request_url);
- EXPECT_EQ(expected_destination_url, actual_nav_event.destination_url);
+ EXPECT_EQ(expected_destination_url, actual_nav_event.GetDestinationUrl());
EXPECT_EQ(expected_is_user_initiated, actual_nav_event.is_user_initiated);
EXPECT_EQ(expected_has_committed, actual_nav_event.has_committed);
EXPECT_EQ(expected_has_server_redirect,
- actual_nav_event.has_server_redirect);
+ !actual_nav_event.server_redirect_urls.empty());
}
- void VerifyReferrerChainEntry(const GURL& expected_url,
- ReferrerChainEntry::URLType expected_type,
- const std::string& expected_ip_address,
- const GURL& expected_referrer_url,
- const GURL& expected_referrer_main_frame_url,
- bool expected_is_retargeting,
- ReferrerChainEntry* actual_entry) {
+ void VerifyReferrerChainEntry(
+ const GURL& expected_url,
+ const GURL& expected_main_frame_url,
+ ReferrerChainEntry::URLType expected_type,
+ const std::string& expected_ip_address,
+ const GURL& expected_referrer_url,
+ const GURL& expected_referrer_main_frame_url,
+ bool expected_is_retargeting,
+ const std::vector<GURL>& expected_server_redirects,
+ ReferrerChainEntry* actual_entry) {
EXPECT_EQ(expected_url.spec(), actual_entry->url());
+ if (expected_main_frame_url.is_valid()) {
Nathan Parker 2017/01/27 22:53:37 nit: some of these if()'s start with the populated
Jialiu Lin 2017/01/27 23:25:06 You're right. Let me rotate them.
+ // main_frame_url only set if it is different from url.
+ EXPECT_EQ(expected_main_frame_url.spec(), actual_entry->main_frame_url());
+ EXPECT_NE(expected_main_frame_url.spec(), actual_entry->url());
+ } else {
+ EXPECT_FALSE(actual_entry->has_main_frame_url());
+ }
EXPECT_EQ(expected_type, actual_entry->type());
if (expected_ip_address.empty()) {
ASSERT_EQ(0, actual_entry->ip_addresses_size());
@@ -246,9 +256,26 @@ class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
EXPECT_EQ(expected_ip_address, actual_entry->ip_addresses(0));
}
EXPECT_EQ(expected_referrer_url.spec(), actual_entry->referrer_url());
- EXPECT_EQ(expected_referrer_main_frame_url.spec(),
- actual_entry->referrer_main_frame_url());
+ if (expected_referrer_main_frame_url.is_valid()) {
+ // referrer_main_frame_url only set if it is different from referrer_url.
+ EXPECT_EQ(expected_referrer_main_frame_url.spec(),
+ actual_entry->referrer_main_frame_url());
+ EXPECT_NE(expected_referrer_main_frame_url.spec(),
+ actual_entry->referrer_url());
+ } else {
+ EXPECT_FALSE(actual_entry->has_referrer_main_frame_url());
+ }
EXPECT_EQ(expected_is_retargeting, actual_entry->is_retargeting());
+ if (expected_server_redirects.empty()) {
+ EXPECT_EQ(0, actual_entry->server_redirect_chain_size());
+ } else {
+ ASSERT_EQ(static_cast<int>(expected_server_redirects.size()),
+ actual_entry->server_redirect_chain_size());
+ for (int i = 0; i<actual_entry->server_redirect_chain_size(); i++) {
Nathan Parker 2017/01/27 22:53:38 nit: spaces around <
Jialiu Lin 2017/01/27 23:25:06 Done.
+ EXPECT_EQ(expected_server_redirects[i].spec(),
+ actual_entry->server_redirect_chain(i).url());
+ }
+ }
}
// Identify referrer chain of a DownloadItem and populate |referrer_chain|.
@@ -276,6 +303,7 @@ class SBNavigationObserverBrowserTest : public InProcessBrowserTest {
observer_manager_->OnUserGestureConsumed(web_contents, base::Time::Now());
EXPECT_LE(observer_manager_->IdentifyReferrerChainForPPAPIDownload(
initiating_frame_url,
+ web_contents->GetLastCommittedURL(),
tab_id,
has_user_gesture,
2, // kDownloadAttributionUserGestureLimit)
@@ -352,11 +380,13 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, TypeInURLDownload) {
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(1U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
}
// Click on a link and start download on the same page.
@@ -392,18 +422,22 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, DirectDownload) {
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
Nathan Parker 2017/01/27 22:53:37 (I don't know how to validate if these are correct
Jialiu Lin 2017/01/27 23:25:06 I don't think it is impossible to have a invalid m
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
}
@@ -442,18 +476,22 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
}
@@ -506,18 +544,22 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- true, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ true, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
}
@@ -568,25 +610,31 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
redirect_url, // referrer_url
- redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -646,25 +694,31 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
redirect_url, // referrer_url
- redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- true, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ true, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -725,32 +779,40 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(4U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
second_redirect_url, // referrer_url
- second_redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(second_redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
first_redirect_url, // referrer_url
- first_redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(first_redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[3].get());
}
@@ -788,18 +850,22 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
}
@@ -848,25 +914,31 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, MixRedirects) {
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
redirect_url, // referrer_url
- redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -928,25 +1000,31 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, NewTabDownload) {
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
blank_url, // referrer_url
- blank_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(blank_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
"", // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- true, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ true, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -1010,25 +1088,31 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
"", // ip_address
blank_url, // referrer_url
- blank_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(blank_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
"", // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- true, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ true, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -1072,18 +1156,22 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
"", // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
}
@@ -1156,32 +1244,40 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(4U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
iframe_url, // referrer_url
multi_frame_test_url, // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(iframe_url, // url
+ multi_frame_test_url, // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
multi_frame_test_url, // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(multi_frame_test_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_REFERRER, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
- false, // is_retargeting
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[3].get());
}
@@ -1272,39 +1368,49 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
EXPECT_EQ(5U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
blank_url, // referrer_url
- blank_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(blank_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
"", // ip_address
iframe_retargeting_url, // referrer_url
multi_frame_test_url, // referrer_main_frame_url
true, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(iframe_retargeting_url, // url
+ multi_frame_test_url, // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
multi_frame_test_url, // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
VerifyReferrerChainEntry(multi_frame_test_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[3].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_REFERRER, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
- false, // is_retargeting
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[4].get());
}
@@ -1363,33 +1469,41 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, CompleteReferrerChain) {
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
EXPECT_EQ(4U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
landing_url, // referrer_url
- landing_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(landing_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
redirect_url, // referrer_url
- redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
VerifyReferrerChainEntry(
initial_url, // url
+ GURL(), // main_frame_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
+ std::vector<GURL>(), // server redirects
referrer_chain[3].get());
}
@@ -1463,26 +1577,32 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
EXPECT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
landing_url, // referrer_url
- landing_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(landing_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
landing_referrer_url, // referrer_url
- landing_referrer_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(
landing_referrer_url, // url
+ GURL(), // main_frame_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
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
// page_before_landing_referrer_url is not in referrer chain.
}
@@ -1537,26 +1657,32 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
&referrer_chain);
EXPECT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(landing_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
redirect_url, // referrer_url
- redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(
initial_url, // url
+ GURL(), // main_frame_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
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -1609,25 +1735,31 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
&referrer_chain);
EXPECT_EQ(3U, referrer_chain.size());
VerifyReferrerChainEntry(hosting_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
redirect_url, // referrer_url
- redirect_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(redirect_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::CLIENT_REDIRECT, // type
test_server_ip, // ip_address
landing_url, // referrer_url
- landing_url, // referrer_main_frame_url
- false, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
VerifyReferrerChainEntry(landing_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // no more referrer before landing_url
GURL(),
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[2].get());
}
@@ -1665,11 +1797,66 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, ServerRedirect) {
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(1U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
+ ReferrerChainEntry::DOWNLOAD_URL, // type
+ test_server_ip, // ip_address
+ GURL(), // referrer_url
+ GURL(), // referrer_main_frame_url
+ false, // is_retargeting
+ {request_url, download_url}, // server redirects
+ referrer_chain[0].get());
+}
+
+// 2 consecutive server-side redirects.
+IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, TwoServerRedirects) {
+ GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL);
+ GURL destination_url = embedded_test_server()->GetURL(kDownloadItemURL);
+ GURL redirect_url =
+ embedded_test_server()->GetURL("/server-redirect?" +
+ destination_url.spec());
+ GURL request_url =
+ embedded_test_server()->GetURL("/server-redirect?" +
+ redirect_url.spec());
+ ui_test_utils::NavigateToURL(browser(), request_url);
+ std::string test_server_ip(embedded_test_server()->host_port_pair().host());
+ auto nav_map = navigation_map();
+ ASSERT_TRUE(nav_map);
+ ASSERT_EQ(2U, nav_map->size());
+ ASSERT_EQ(1U, nav_map->at(destination_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(GURL(), // source_url
+ GURL(), // source_main_frame_url
+ request_url, // original_request_url
+ destination_url, // destination_url
+ true, // is_user_initiated,
+ false, // has_committed
+ true, // has_server_redirect
+ nav_map->at(destination_url).at(0));
+ const auto redirect_vector =
+ nav_map->at(destination_url).at(0).server_redirect_urls;
+ ASSERT_EQ(2U, redirect_vector.size());
+ EXPECT_EQ(redirect_url, redirect_vector.at(0));
+ EXPECT_EQ(destination_url, redirect_vector.at(1));
+
+ ReferrerChain referrer_chain;
+ IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
+ ASSERT_EQ(1U, referrer_chain.size());
+ VerifyReferrerChainEntry(destination_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ {request_url, redirect_url, destination_url},
referrer_chain[0].get());
}
@@ -1717,18 +1904,22 @@ IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest,
IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain);
ASSERT_EQ(2U, referrer_chain.size());
VerifyReferrerChainEntry(download_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::DOWNLOAD_URL, // type
test_server_ip, // ip_address
initial_url, // referrer_url
- initial_url, // referrer_main_frame_url
- true, // is_retargeting
+ GURL(), // referrer_main_frame_url
+ true, // is_retargeting
+ {request_url, download_url}, // server redirects
referrer_chain[0].get());
VerifyReferrerChainEntry(initial_url, // url
+ GURL(), // main_frame_url
ReferrerChainEntry::LANDING_PAGE, // type
test_server_ip, // ip_address
GURL(), // referrer_url
GURL(), // referrer_main_frame_url
false, // is_retargeting
+ std::vector<GURL>(), // server redirects
referrer_chain[1].get());
}

Powered by Google App Engine
This is Rietveld 408576698