OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/strings/stringprintf.h" | 5 #include "base/strings/stringprintf.h" |
6 #include "chrome/browser/chrome_notification_types.h" | 6 #include "chrome/browser/chrome_notification_types.h" |
7 #include "chrome/browser/download/download_prefs.h" | 7 #include "chrome/browser/download/download_prefs.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/browser/safe_browsing/download_protection_service.h" | 9 #include "chrome/browser/safe_browsing/download_protection_service.h" |
10 #include "chrome/browser/safe_browsing/safe_browsing_navigation_observer.h" | 10 #include "chrome/browser/safe_browsing/safe_browsing_navigation_observer.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 #include "content/public/test/test_utils.h" | 26 #include "content/public/test/test_utils.h" |
27 #include "net/dns/mock_host_resolver.h" | 27 #include "net/dns/mock_host_resolver.h" |
28 #include "net/test/embedded_test_server/embedded_test_server.h" | 28 #include "net/test/embedded_test_server/embedded_test_server.h" |
29 #include "url/gurl.h" | 29 #include "url/gurl.h" |
30 #include "url/url_canon.h" | 30 #include "url/url_canon.h" |
31 | 31 |
32 using content::DownloadItem; | 32 using content::DownloadItem; |
33 | 33 |
34 namespace safe_browsing { | 34 namespace safe_browsing { |
35 | 35 |
| 36 typedef SafeBrowsingNavigationObserverManager::ReferrerChain ReferrerChain; |
| 37 |
36 const char kSingleFrameTestURL[] = | 38 const char kSingleFrameTestURL[] = |
37 "/safe_browsing/download_protection/navigation_observer/" | 39 "/safe_browsing/download_protection/navigation_observer/" |
38 "navigation_observer_tests.html"; | 40 "navigation_observer_tests.html"; |
39 const char kMultiFrameTestURL[] = | 41 const char kMultiFrameTestURL[] = |
40 "/safe_browsing/download_protection/navigation_observer/" | 42 "/safe_browsing/download_protection/navigation_observer/" |
41 "navigation_observer_multi_frame_tests.html"; | 43 "navigation_observer_multi_frame_tests.html"; |
42 const char kRedirectURL[] = | 44 const char kRedirectURL[] = |
43 "/safe_browsing/download_protection/navigation_observer/redirect.html"; | 45 "/safe_browsing/download_protection/navigation_observer/redirect.html"; |
44 const char kDownloadDataURL[] = | 46 const char kDownloadDataURL[] = |
45 "data:application/octet-stream;base64,a2poYWxrc2hkbGtoYXNka2xoYXNsa2RoYWxra" | 47 "data:application/octet-stream;base64,a2poYWxrc2hkbGtoYXNka2xoYXNsa2RoYWxra" |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 EXPECT_EQ(expected_has_server_redirect, | 229 EXPECT_EQ(expected_has_server_redirect, |
228 actual_nav_event.has_server_redirect); | 230 actual_nav_event.has_server_redirect); |
229 } | 231 } |
230 | 232 |
231 void VerifyReferrerChainEntry(const GURL& expected_url, | 233 void VerifyReferrerChainEntry(const GURL& expected_url, |
232 ReferrerChainEntry::URLType expected_type, | 234 ReferrerChainEntry::URLType expected_type, |
233 const std::string& expected_ip_address, | 235 const std::string& expected_ip_address, |
234 const GURL& expected_referrer_url, | 236 const GURL& expected_referrer_url, |
235 const GURL& expected_referrer_main_frame_url, | 237 const GURL& expected_referrer_main_frame_url, |
236 bool expected_is_retargeting, | 238 bool expected_is_retargeting, |
237 ReferrerChainEntry actual_entry) { | 239 ReferrerChainEntry* actual_entry) { |
238 EXPECT_EQ(expected_url.spec(), actual_entry.url()); | 240 EXPECT_EQ(expected_url.spec(), actual_entry->url()); |
239 EXPECT_EQ(expected_type, actual_entry.type()); | 241 EXPECT_EQ(expected_type, actual_entry->type()); |
240 if (expected_ip_address.empty()) { | 242 if (expected_ip_address.empty()) { |
241 ASSERT_EQ(0, actual_entry.ip_addresses_size()); | 243 ASSERT_EQ(0, actual_entry->ip_addresses_size()); |
242 } else { | 244 } else { |
243 ASSERT_EQ(1, actual_entry.ip_addresses_size()); | 245 ASSERT_EQ(1, actual_entry->ip_addresses_size()); |
244 EXPECT_EQ(expected_ip_address, actual_entry.ip_addresses(0)); | 246 EXPECT_EQ(expected_ip_address, actual_entry->ip_addresses(0)); |
245 } | 247 } |
246 EXPECT_EQ(expected_referrer_url.spec(), actual_entry.referrer_url()); | 248 EXPECT_EQ(expected_referrer_url.spec(), actual_entry->referrer_url()); |
247 EXPECT_EQ(expected_referrer_main_frame_url.spec(), | 249 EXPECT_EQ(expected_referrer_main_frame_url.spec(), |
248 actual_entry.referrer_main_frame_url()); | 250 actual_entry->referrer_main_frame_url()); |
249 EXPECT_EQ(expected_is_retargeting, actual_entry.is_retargeting()); | 251 EXPECT_EQ(expected_is_retargeting, actual_entry->is_retargeting()); |
250 } | 252 } |
251 | 253 |
252 std::vector<ReferrerChainEntry> IdentifyReferrerChainForDownload( | 254 // Identify referrer chain of a DownloadItem and populate |referrer_chain|. |
253 DownloadItem* download) { | 255 void IdentifyReferrerChainForDownload( |
254 std::vector<ReferrerChainEntry> referrer_chain; | 256 DownloadItem* download, |
| 257 ReferrerChain* referrer_chain) { |
255 int download_tab_id = | 258 int download_tab_id = |
256 SessionTabHelper::IdForTab(download->GetWebContents()); | 259 SessionTabHelper::IdForTab(download->GetWebContents()); |
257 // IdentifyReferrerChain should return SUCCESS(1), SUCCESS_LANDING_PAGE(2), | 260 // IdentifyReferrerChain should return SUCCESS(1), SUCCESS_LANDING_PAGE(2), |
258 // or SUCCESS_LANDING_REFERRER(3) in all these tests. | 261 // or SUCCESS_LANDING_REFERRER(3) in all these tests. |
259 EXPECT_LE(observer_manager_->IdentifyReferrerChainForDownload( | 262 EXPECT_LE(observer_manager_->IdentifyReferrerChainForDownload( |
260 download->GetURL(), download_tab_id, | 263 download->GetURL(), download_tab_id, |
261 2, // kDownloadAttributionUserGestureLimit | 264 2, // kDownloadAttributionUserGestureLimit |
262 &referrer_chain), | 265 referrer_chain), |
263 SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER); | 266 SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER); |
264 return referrer_chain; | |
265 } | 267 } |
266 | 268 |
267 std::vector<ReferrerChainEntry> IdentifyReferrerChainForPPAPIDownload( | 269 // Identify referrer chain of a PPAPI download and populate |referrer_chain|. |
| 270 void IdentifyReferrerChainForPPAPIDownload( |
268 const GURL& initiating_frame_url, | 271 const GURL& initiating_frame_url, |
269 content::WebContents* web_contents) { | 272 content::WebContents* web_contents, |
270 std::vector<ReferrerChainEntry> referrer_chain; | 273 ReferrerChain* referrer_chain) { |
271 int tab_id = SessionTabHelper::IdForTab(web_contents); | 274 int tab_id = SessionTabHelper::IdForTab(web_contents); |
272 bool has_user_gesture = observer_manager_->HasUserGesture(web_contents); | 275 bool has_user_gesture = observer_manager_->HasUserGesture(web_contents); |
273 observer_manager_->OnUserGestureConsumed(web_contents, base::Time::Now()); | 276 observer_manager_->OnUserGestureConsumed(web_contents, base::Time::Now()); |
274 EXPECT_LE(observer_manager_->IdentifyReferrerChainForPPAPIDownload( | 277 EXPECT_LE(observer_manager_->IdentifyReferrerChainForPPAPIDownload( |
275 initiating_frame_url, | 278 initiating_frame_url, |
276 tab_id, | 279 tab_id, |
277 has_user_gesture, | 280 has_user_gesture, |
278 2, // kDownloadAttributionUserGestureLimit) | 281 2, // kDownloadAttributionUserGestureLimit) |
279 &referrer_chain), | 282 referrer_chain), |
280 SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER); | 283 SafeBrowsingNavigationObserverManager::SUCCESS_LANDING_REFERRER); |
281 return referrer_chain; | |
282 } | 284 } |
283 | 285 |
284 void VerifyHostToIpMap() { | 286 void VerifyHostToIpMap() { |
285 // Since all testing pages have the same host, there is only one entry in | 287 // Since all testing pages have the same host, there is only one entry in |
286 // host_to_ip_map_. | 288 // host_to_ip_map_. |
287 SafeBrowsingNavigationObserverManager::HostToIpMap* actual_host_ip_map = | 289 SafeBrowsingNavigationObserverManager::HostToIpMap* actual_host_ip_map = |
288 host_to_ip_map(); | 290 host_to_ip_map(); |
289 ASSERT_EQ(1U, actual_host_ip_map->size()); | 291 ASSERT_EQ(1U, actual_host_ip_map->size()); |
290 auto ip_list = | 292 auto ip_list = |
291 actual_host_ip_map->at(embedded_test_server()->base_url().host()); | 293 actual_host_ip_map->at(embedded_test_server()->base_url().host()); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 VerifyNavigationEvent(GURL(), // source_url | 341 VerifyNavigationEvent(GURL(), // source_url |
340 GURL(), // source_main_frame_url | 342 GURL(), // source_main_frame_url |
341 download_url, // original_request_url | 343 download_url, // original_request_url |
342 download_url, // destination_url | 344 download_url, // destination_url |
343 true, // is_user_initiated, | 345 true, // is_user_initiated, |
344 false, // has_committed | 346 false, // has_committed |
345 false, // has_server_redirect | 347 false, // has_server_redirect |
346 nav_map->at(download_url).at(0)); | 348 nav_map->at(download_url).at(0)); |
347 VerifyHostToIpMap(); | 349 VerifyHostToIpMap(); |
348 | 350 |
349 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 351 ReferrerChain referrer_chain; |
| 352 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
350 ASSERT_EQ(1U, referrer_chain.size()); | 353 ASSERT_EQ(1U, referrer_chain.size()); |
351 VerifyReferrerChainEntry(download_url, // url | 354 VerifyReferrerChainEntry(download_url, // url |
352 ReferrerChainEntry::DOWNLOAD_URL, // type | 355 ReferrerChainEntry::DOWNLOAD_URL, // type |
353 test_server_ip, // ip_address | 356 test_server_ip, // ip_address |
354 GURL(), // referrer_url | 357 GURL(), // referrer_url |
355 GURL(), // referrer_main_frame_url | 358 GURL(), // referrer_main_frame_url |
356 false, // is_retargeting | 359 false, // is_retargeting |
357 referrer_chain[0]); | 360 referrer_chain[0].get()); |
358 } | 361 } |
359 // Click on a link and start download on the same page. | 362 // Click on a link and start download on the same page. |
360 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, DirectDownload) { | 363 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, DirectDownload) { |
361 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 364 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
362 ClickTestLink("direct_download", 1, initial_url); | 365 ClickTestLink("direct_download", 1, initial_url); |
363 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 366 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
364 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 367 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
365 auto nav_map = navigation_map(); | 368 auto nav_map = navigation_map(); |
366 ASSERT_TRUE(nav_map); | 369 ASSERT_TRUE(nav_map); |
367 ASSERT_EQ(2U, nav_map->size()); | 370 ASSERT_EQ(2U, nav_map->size()); |
(...skipping 10 matching lines...) Expand all Loading... |
378 VerifyNavigationEvent(initial_url, // source_url | 381 VerifyNavigationEvent(initial_url, // source_url |
379 initial_url, // source_main_frame_url | 382 initial_url, // source_main_frame_url |
380 download_url, // original_request_url | 383 download_url, // original_request_url |
381 download_url, // destination_url | 384 download_url, // destination_url |
382 true, // is_user_initiated, | 385 true, // is_user_initiated, |
383 false, // has_committed | 386 false, // has_committed |
384 false, // has_server_redirect | 387 false, // has_server_redirect |
385 nav_map->at(download_url).at(0)); | 388 nav_map->at(download_url).at(0)); |
386 VerifyHostToIpMap(); | 389 VerifyHostToIpMap(); |
387 | 390 |
388 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 391 ReferrerChain referrer_chain; |
| 392 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
389 ASSERT_EQ(2U, referrer_chain.size()); | 393 ASSERT_EQ(2U, referrer_chain.size()); |
390 VerifyReferrerChainEntry(download_url, // url | 394 VerifyReferrerChainEntry(download_url, // url |
391 ReferrerChainEntry::DOWNLOAD_URL, // type | 395 ReferrerChainEntry::DOWNLOAD_URL, // type |
392 test_server_ip, // ip_address | 396 test_server_ip, // ip_address |
393 initial_url, // referrer_url | 397 initial_url, // referrer_url |
394 initial_url, // referrer_main_frame_url | 398 initial_url, // referrer_main_frame_url |
395 false, // is_retargeting | 399 false, // is_retargeting |
396 referrer_chain[0]); | 400 referrer_chain[0].get()); |
397 VerifyReferrerChainEntry(initial_url, // url | 401 VerifyReferrerChainEntry(initial_url, // url |
398 ReferrerChainEntry::LANDING_PAGE, // type | 402 ReferrerChainEntry::LANDING_PAGE, // type |
399 test_server_ip, // ip_address | 403 test_server_ip, // ip_address |
400 GURL(), // referrer_url | 404 GURL(), // referrer_url |
401 GURL(), // referrer_main_frame_url | 405 GURL(), // referrer_main_frame_url |
402 false, // is_retargeting | 406 false, // is_retargeting |
403 referrer_chain[1]); | 407 referrer_chain[1].get()); |
404 } | 408 } |
405 | 409 |
406 // Click on a link with rel="noreferrer" attribute, and start download on the | 410 // Click on a link with rel="noreferrer" attribute, and start download on the |
407 // same page. | 411 // same page. |
408 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 412 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
409 DirectDownloadNoReferrer) { | 413 DirectDownloadNoReferrer) { |
410 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 414 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
411 ClickTestLink("direct_download_noreferrer", 1, initial_url); | 415 ClickTestLink("direct_download_noreferrer", 1, initial_url); |
412 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 416 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
413 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 417 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
(...skipping 13 matching lines...) Expand all Loading... |
427 VerifyNavigationEvent(initial_url, // source_url | 431 VerifyNavigationEvent(initial_url, // source_url |
428 initial_url, // source_main_frame_url | 432 initial_url, // source_main_frame_url |
429 download_url, // original_request_url | 433 download_url, // original_request_url |
430 download_url, // destination_url | 434 download_url, // destination_url |
431 true, // is_user_initiated, | 435 true, // is_user_initiated, |
432 false, // has_committed | 436 false, // has_committed |
433 false, // has_server_redirect | 437 false, // has_server_redirect |
434 nav_map->at(download_url).at(0)); | 438 nav_map->at(download_url).at(0)); |
435 VerifyHostToIpMap(); | 439 VerifyHostToIpMap(); |
436 | 440 |
437 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 441 ReferrerChain referrer_chain; |
| 442 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
438 ASSERT_EQ(2U, referrer_chain.size()); | 443 ASSERT_EQ(2U, referrer_chain.size()); |
439 VerifyReferrerChainEntry(download_url, // url | 444 VerifyReferrerChainEntry(download_url, // url |
440 ReferrerChainEntry::DOWNLOAD_URL, // type | 445 ReferrerChainEntry::DOWNLOAD_URL, // type |
441 test_server_ip, // ip_address | 446 test_server_ip, // ip_address |
442 initial_url, // referrer_url | 447 initial_url, // referrer_url |
443 initial_url, // referrer_main_frame_url | 448 initial_url, // referrer_main_frame_url |
444 false, // is_retargeting | 449 false, // is_retargeting |
445 referrer_chain[0]); | 450 referrer_chain[0].get()); |
446 VerifyReferrerChainEntry(initial_url, // url | 451 VerifyReferrerChainEntry(initial_url, // url |
447 ReferrerChainEntry::LANDING_PAGE, // type | 452 ReferrerChainEntry::LANDING_PAGE, // type |
448 test_server_ip, // ip_address | 453 test_server_ip, // ip_address |
449 GURL(), // referrer_url | 454 GURL(), // referrer_url |
450 GURL(), // referrer_main_frame_url | 455 GURL(), // referrer_main_frame_url |
451 false, // is_retargeting | 456 false, // is_retargeting |
452 referrer_chain[1]); | 457 referrer_chain[1].get()); |
453 } | 458 } |
454 | 459 |
455 // Click on a link with rel="noreferrer" attribute, and start download in a | 460 // Click on a link with rel="noreferrer" attribute, and start download in a |
456 // new tab using target=_blank. | 461 // new tab using target=_blank. |
457 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 462 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
458 DirectDownloadNoReferrerTargetBlank) { | 463 DirectDownloadNoReferrerTargetBlank) { |
459 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 464 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
460 ClickTestLink("direct_download_noreferrer_target_blank", 1, initial_url); | 465 ClickTestLink("direct_download_noreferrer_target_blank", 1, initial_url); |
461 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 466 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
462 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 467 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
(...skipping 27 matching lines...) Expand all Loading... |
490 VerifyNavigationEvent(GURL(), // source_url | 495 VerifyNavigationEvent(GURL(), // source_url |
491 GURL(), // source_main_frame_url | 496 GURL(), // source_main_frame_url |
492 download_url, // original_request_url | 497 download_url, // original_request_url |
493 download_url, // destination_url | 498 download_url, // destination_url |
494 false, // is_user_initiated, | 499 false, // is_user_initiated, |
495 false, // has_committed | 500 false, // has_committed |
496 false, // has_server_redirect | 501 false, // has_server_redirect |
497 nav_map->at(download_url).at(1)); | 502 nav_map->at(download_url).at(1)); |
498 VerifyHostToIpMap(); | 503 VerifyHostToIpMap(); |
499 | 504 |
500 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 505 ReferrerChain referrer_chain; |
| 506 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
501 ASSERT_EQ(2U, referrer_chain.size()); | 507 ASSERT_EQ(2U, referrer_chain.size()); |
502 VerifyReferrerChainEntry(download_url, // url | 508 VerifyReferrerChainEntry(download_url, // url |
503 ReferrerChainEntry::DOWNLOAD_URL, // type | 509 ReferrerChainEntry::DOWNLOAD_URL, // type |
504 test_server_ip, // ip_address | 510 test_server_ip, // ip_address |
505 initial_url, // referrer_url | 511 initial_url, // referrer_url |
506 initial_url, // referrer_main_frame_url | 512 initial_url, // referrer_main_frame_url |
507 true, // is_retargeting | 513 true, // is_retargeting |
508 referrer_chain[0]); | 514 referrer_chain[0].get()); |
509 VerifyReferrerChainEntry(initial_url, // url | 515 VerifyReferrerChainEntry(initial_url, // url |
510 ReferrerChainEntry::LANDING_PAGE, // type | 516 ReferrerChainEntry::LANDING_PAGE, // type |
511 test_server_ip, // ip_address | 517 test_server_ip, // ip_address |
512 GURL(), // referrer_url | 518 GURL(), // referrer_url |
513 GURL(), // referrer_main_frame_url | 519 GURL(), // referrer_main_frame_url |
514 false, // is_retargeting | 520 false, // is_retargeting |
515 referrer_chain[1]); | 521 referrer_chain[1].get()); |
516 } | 522 } |
517 | 523 |
518 // Click on a link which navigates to a page then redirects to a download using | 524 // Click on a link which navigates to a page then redirects to a download using |
519 // META HTTP-EQUIV="refresh". All transitions happen in the same tab. | 525 // META HTTP-EQUIV="refresh". All transitions happen in the same tab. |
520 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 526 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
521 SingleMetaRefreshRedirect) { | 527 SingleMetaRefreshRedirect) { |
522 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 528 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
523 ClickTestLink("single_meta_refresh_redirect", 2, initial_url); | 529 ClickTestLink("single_meta_refresh_redirect", 2, initial_url); |
524 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL); | 530 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL); |
525 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 531 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
526 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 532 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
527 auto nav_map = navigation_map(); | 533 auto nav_map = navigation_map(); |
528 ASSERT_TRUE(nav_map); | 534 ASSERT_TRUE(nav_map); |
529 // Since unlike server redirects client redirects commit and then generate a | 535 // Since unlike server redirects client redirects commit and then generate a |
530 // second navigation, our observer records two NavigationEvents for this test. | 536 // second navigation, our observer records two NavigationEvents for this test. |
531 ASSERT_EQ(std::size_t(3), nav_map->size()); | 537 ASSERT_EQ(3U, nav_map->size()); |
532 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); | 538 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); |
533 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 539 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
534 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 540 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
535 VerifyNavigationEvent(GURL(), // source_url | 541 VerifyNavigationEvent(GURL(), // source_url |
536 GURL(), // source_main_frame_url | 542 GURL(), // source_main_frame_url |
537 initial_url, // original_request_url | 543 initial_url, // original_request_url |
538 initial_url, // destination_url | 544 initial_url, // destination_url |
539 true, // is_user_initiated, | 545 true, // is_user_initiated, |
540 true, // has_committed | 546 true, // has_committed |
541 false, // has_server_redirect | 547 false, // has_server_redirect |
542 nav_map->at(initial_url).at(0)); | 548 nav_map->at(initial_url).at(0)); |
543 VerifyNavigationEvent(initial_url, // source_url | 549 VerifyNavigationEvent(initial_url, // source_url |
544 initial_url, // source_main_frame_url | 550 initial_url, // source_main_frame_url |
545 redirect_url, // original_request_url | 551 redirect_url, // original_request_url |
546 redirect_url, // destination_url | 552 redirect_url, // destination_url |
547 true, // is_user_initiated, | 553 true, // is_user_initiated, |
548 true, // has_committed | 554 true, // has_committed |
549 false, // has_server_redirect | 555 false, // has_server_redirect |
550 nav_map->at(redirect_url).at(0)); | 556 nav_map->at(redirect_url).at(0)); |
551 VerifyNavigationEvent(redirect_url, // source_url | 557 VerifyNavigationEvent(redirect_url, // source_url |
552 redirect_url, // source_main_frame_url | 558 redirect_url, // source_main_frame_url |
553 download_url, // original_request_url | 559 download_url, // original_request_url |
554 download_url, // destination_url | 560 download_url, // destination_url |
555 false, // is_user_initiated, | 561 false, // is_user_initiated, |
556 false, // has_committed | 562 false, // has_committed |
557 false, // has_server_redirect | 563 false, // has_server_redirect |
558 nav_map->at(download_url).at(0)); | 564 nav_map->at(download_url).at(0)); |
559 VerifyHostToIpMap(); | 565 VerifyHostToIpMap(); |
560 | 566 |
561 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 567 ReferrerChain referrer_chain; |
562 ASSERT_EQ(std::size_t(3), referrer_chain.size()); | 568 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 569 ASSERT_EQ(3U, referrer_chain.size()); |
563 VerifyReferrerChainEntry(download_url, // url | 570 VerifyReferrerChainEntry(download_url, // url |
564 ReferrerChainEntry::DOWNLOAD_URL, // type | 571 ReferrerChainEntry::DOWNLOAD_URL, // type |
565 test_server_ip, // ip_address | 572 test_server_ip, // ip_address |
566 redirect_url, // referrer_url | 573 redirect_url, // referrer_url |
567 redirect_url, // referrer_main_frame_url | 574 redirect_url, // referrer_main_frame_url |
568 false, // is_retargeting | 575 false, // is_retargeting |
569 referrer_chain[0]); | 576 referrer_chain[0].get()); |
570 VerifyReferrerChainEntry(redirect_url, // url | 577 VerifyReferrerChainEntry(redirect_url, // url |
571 ReferrerChainEntry::CLIENT_REDIRECT, // type | 578 ReferrerChainEntry::CLIENT_REDIRECT, // type |
572 test_server_ip, // ip_address | 579 test_server_ip, // ip_address |
573 initial_url, // referrer_url | 580 initial_url, // referrer_url |
574 initial_url, // referrer_main_frame_url | 581 initial_url, // referrer_main_frame_url |
575 false, // is_retargeting | 582 false, // is_retargeting |
576 referrer_chain[1]); | 583 referrer_chain[1].get()); |
577 VerifyReferrerChainEntry(initial_url, // url | 584 VerifyReferrerChainEntry(initial_url, // url |
578 ReferrerChainEntry::LANDING_PAGE, // type | 585 ReferrerChainEntry::LANDING_PAGE, // type |
579 test_server_ip, // ip_address | 586 test_server_ip, // ip_address |
580 GURL(), // referrer_url | 587 GURL(), // referrer_url |
581 GURL(), // referrer_main_frame_url | 588 GURL(), // referrer_main_frame_url |
582 false, // is_retargeting | 589 false, // is_retargeting |
583 referrer_chain[2]); | 590 referrer_chain[2].get()); |
584 } | 591 } |
585 | 592 |
586 // Click on a link which navigates to a page then redirects to a download using | 593 // Click on a link which navigates to a page then redirects to a download using |
587 // META HTTP-EQUIV="refresh". First navigation happens in target blank. | 594 // META HTTP-EQUIV="refresh". First navigation happens in target blank. |
588 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 595 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
589 SingleMetaRefreshRedirectTargetBlank) { | 596 SingleMetaRefreshRedirectTargetBlank) { |
590 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 597 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
591 ClickTestLink("single_meta_refresh_redirect_target_blank", 2, initial_url); | 598 ClickTestLink("single_meta_refresh_redirect_target_blank", 2, initial_url); |
592 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL); | 599 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL); |
593 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 600 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
594 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 601 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
595 auto nav_map = navigation_map(); | 602 auto nav_map = navigation_map(); |
596 ASSERT_TRUE(nav_map); | 603 ASSERT_TRUE(nav_map); |
597 ASSERT_EQ(std::size_t(3), nav_map->size()); | 604 ASSERT_EQ(3U, nav_map->size()); |
598 ASSERT_EQ(2U, nav_map->at(redirect_url).size()); | 605 ASSERT_EQ(2U, nav_map->at(redirect_url).size()); |
599 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 606 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
600 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 607 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
601 VerifyNavigationEvent(GURL(), // source_url | 608 VerifyNavigationEvent(GURL(), // source_url |
602 GURL(), // source_main_frame_url | 609 GURL(), // source_main_frame_url |
603 initial_url, // original_request_url | 610 initial_url, // original_request_url |
604 initial_url, // destination_url | 611 initial_url, // destination_url |
605 true, // is_user_initiated, | 612 true, // is_user_initiated, |
606 true, // has_committed | 613 true, // has_committed |
607 false, // has_server_redirect | 614 false, // has_server_redirect |
(...skipping 20 matching lines...) Expand all Loading... |
628 VerifyNavigationEvent(redirect_url, // source_url | 635 VerifyNavigationEvent(redirect_url, // source_url |
629 redirect_url, // source_main_frame_url | 636 redirect_url, // source_main_frame_url |
630 download_url, // original_request_url | 637 download_url, // original_request_url |
631 download_url, // destination_url | 638 download_url, // destination_url |
632 false, // is_user_initiated, | 639 false, // is_user_initiated, |
633 false, // has_committed | 640 false, // has_committed |
634 false, // has_server_redirect | 641 false, // has_server_redirect |
635 nav_map->at(download_url).at(0)); | 642 nav_map->at(download_url).at(0)); |
636 VerifyHostToIpMap(); | 643 VerifyHostToIpMap(); |
637 | 644 |
638 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 645 ReferrerChain referrer_chain; |
639 ASSERT_EQ(std::size_t(3), referrer_chain.size()); | 646 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 647 ASSERT_EQ(3U, referrer_chain.size()); |
640 VerifyReferrerChainEntry(download_url, // url | 648 VerifyReferrerChainEntry(download_url, // url |
641 ReferrerChainEntry::DOWNLOAD_URL, // type | 649 ReferrerChainEntry::DOWNLOAD_URL, // type |
642 test_server_ip, // ip_address | 650 test_server_ip, // ip_address |
643 redirect_url, // referrer_url | 651 redirect_url, // referrer_url |
644 redirect_url, // referrer_main_frame_url | 652 redirect_url, // referrer_main_frame_url |
645 false, // is_retargeting | 653 false, // is_retargeting |
646 referrer_chain[0]); | 654 referrer_chain[0].get()); |
647 VerifyReferrerChainEntry(redirect_url, // url | 655 VerifyReferrerChainEntry(redirect_url, // url |
648 ReferrerChainEntry::CLIENT_REDIRECT, // type | 656 ReferrerChainEntry::CLIENT_REDIRECT, // type |
649 test_server_ip, // ip_address | 657 test_server_ip, // ip_address |
650 initial_url, // referrer_url | 658 initial_url, // referrer_url |
651 initial_url, // referrer_main_frame_url | 659 initial_url, // referrer_main_frame_url |
652 true, // is_retargeting | 660 true, // is_retargeting |
653 referrer_chain[1]); | 661 referrer_chain[1].get()); |
654 VerifyReferrerChainEntry(initial_url, // url | 662 VerifyReferrerChainEntry(initial_url, // url |
655 ReferrerChainEntry::LANDING_PAGE, // type | 663 ReferrerChainEntry::LANDING_PAGE, // type |
656 test_server_ip, // ip_address | 664 test_server_ip, // ip_address |
657 GURL(), // referrer_url | 665 GURL(), // referrer_url |
658 GURL(), // referrer_main_frame_url | 666 GURL(), // referrer_main_frame_url |
659 false, // is_retargeting | 667 false, // is_retargeting |
660 referrer_chain[2]); | 668 referrer_chain[2].get()); |
661 } | 669 } |
662 | 670 |
663 // Click on a link which redirects twice before reaching download using | 671 // Click on a link which redirects twice before reaching download using |
664 // META HTTP-EQUIV="refresh". All transitions happen in the same tab. | 672 // META HTTP-EQUIV="refresh". All transitions happen in the same tab. |
665 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 673 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
666 MultiMetaRefreshRedirects) { | 674 MultiMetaRefreshRedirects) { |
667 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 675 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
668 ClickTestLink("multiple_meta_refresh_redirects", 3, initial_url); | 676 ClickTestLink("multiple_meta_refresh_redirects", 3, initial_url); |
669 GURL first_redirect_url = embedded_test_server()->GetURL( | 677 GURL first_redirect_url = embedded_test_server()->GetURL( |
670 "/safe_browsing/download_protection/navigation_observer/" | 678 "/safe_browsing/download_protection/navigation_observer/" |
671 "double_redirect.html"); | 679 "double_redirect.html"); |
672 GURL second_redirect_url = embedded_test_server()->GetURL(kRedirectURL); | 680 GURL second_redirect_url = embedded_test_server()->GetURL(kRedirectURL); |
673 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 681 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
674 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 682 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
675 auto nav_map = navigation_map(); | 683 auto nav_map = navigation_map(); |
676 ASSERT_TRUE(nav_map); | 684 ASSERT_TRUE(nav_map); |
677 ASSERT_EQ(std::size_t(4), nav_map->size()); | 685 ASSERT_EQ(4U, nav_map->size()); |
678 ASSERT_EQ(1U, nav_map->at(first_redirect_url).size()); | 686 ASSERT_EQ(1U, nav_map->at(first_redirect_url).size()); |
679 ASSERT_EQ(1U, nav_map->at(second_redirect_url).size()); | 687 ASSERT_EQ(1U, nav_map->at(second_redirect_url).size()); |
680 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 688 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
681 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 689 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
682 VerifyNavigationEvent(GURL(), // source_url | 690 VerifyNavigationEvent(GURL(), // source_url |
683 GURL(), // source_main_frame_url | 691 GURL(), // source_main_frame_url |
684 initial_url, // original_request_url | 692 initial_url, // original_request_url |
685 initial_url, // destination_url | 693 initial_url, // destination_url |
686 true, // is_user_initiated, | 694 true, // is_user_initiated, |
687 true, // has_committed | 695 true, // has_committed |
(...skipping 18 matching lines...) Expand all Loading... |
706 VerifyNavigationEvent(second_redirect_url, // source_url | 714 VerifyNavigationEvent(second_redirect_url, // source_url |
707 second_redirect_url, // source_main_frame_url | 715 second_redirect_url, // source_main_frame_url |
708 download_url, // original_request_url | 716 download_url, // original_request_url |
709 download_url, // destination_url | 717 download_url, // destination_url |
710 false, // is_user_initiated, | 718 false, // is_user_initiated, |
711 false, // has_committed | 719 false, // has_committed |
712 false, // has_server_redirect | 720 false, // has_server_redirect |
713 nav_map->at(download_url).at(0)); | 721 nav_map->at(download_url).at(0)); |
714 VerifyHostToIpMap(); | 722 VerifyHostToIpMap(); |
715 | 723 |
716 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 724 ReferrerChain referrer_chain; |
717 ASSERT_EQ(std::size_t(4), referrer_chain.size()); | 725 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 726 ASSERT_EQ(4U, referrer_chain.size()); |
718 VerifyReferrerChainEntry(download_url, // url | 727 VerifyReferrerChainEntry(download_url, // url |
719 ReferrerChainEntry::DOWNLOAD_URL, // type | 728 ReferrerChainEntry::DOWNLOAD_URL, // type |
720 test_server_ip, // ip_address | 729 test_server_ip, // ip_address |
721 second_redirect_url, // referrer_url | 730 second_redirect_url, // referrer_url |
722 second_redirect_url, // referrer_main_frame_url | 731 second_redirect_url, // referrer_main_frame_url |
723 false, // is_retargeting | 732 false, // is_retargeting |
724 referrer_chain[0]); | 733 referrer_chain[0].get()); |
725 VerifyReferrerChainEntry(second_redirect_url, // url | 734 VerifyReferrerChainEntry(second_redirect_url, // url |
726 ReferrerChainEntry::CLIENT_REDIRECT, // type | 735 ReferrerChainEntry::CLIENT_REDIRECT, // type |
727 test_server_ip, // ip_address | 736 test_server_ip, // ip_address |
728 first_redirect_url, // referrer_url | 737 first_redirect_url, // referrer_url |
729 first_redirect_url, // referrer_main_frame_url | 738 first_redirect_url, // referrer_main_frame_url |
730 false, // is_retargeting | 739 false, // is_retargeting |
731 referrer_chain[1]); | 740 referrer_chain[1].get()); |
732 VerifyReferrerChainEntry(first_redirect_url, // url | 741 VerifyReferrerChainEntry(first_redirect_url, // url |
733 ReferrerChainEntry::CLIENT_REDIRECT, // type | 742 ReferrerChainEntry::CLIENT_REDIRECT, // type |
734 test_server_ip, // ip_address | 743 test_server_ip, // ip_address |
735 initial_url, // referrer_url | 744 initial_url, // referrer_url |
736 initial_url, // referrer_main_frame_url | 745 initial_url, // referrer_main_frame_url |
737 false, // is_retargeting | 746 false, // is_retargeting |
738 referrer_chain[2]); | 747 referrer_chain[2].get()); |
739 VerifyReferrerChainEntry(initial_url, // url | 748 VerifyReferrerChainEntry(initial_url, // url |
740 ReferrerChainEntry::LANDING_PAGE, // type | 749 ReferrerChainEntry::LANDING_PAGE, // type |
741 test_server_ip, // ip_address | 750 test_server_ip, // ip_address |
742 GURL(), // referrer_url | 751 GURL(), // referrer_url |
743 GURL(), // referrer_main_frame_url | 752 GURL(), // referrer_main_frame_url |
744 false, // is_retargeting | 753 false, // is_retargeting |
745 referrer_chain[3]); | 754 referrer_chain[3].get()); |
746 } | 755 } |
747 | 756 |
748 // Click on a link which redirects to download using window.location. | 757 // Click on a link which redirects to download using window.location. |
749 // All transitions happen in the same tab. | 758 // All transitions happen in the same tab. |
750 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 759 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
751 WindowLocationRedirect) { | 760 WindowLocationRedirect) { |
752 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 761 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
753 ClickTestLink("window_location_redirection", 1, initial_url); | 762 ClickTestLink("window_location_redirection", 1, initial_url); |
754 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 763 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
755 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 764 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
(...skipping 12 matching lines...) Expand all Loading... |
768 nav_map->at(initial_url).at(0)); | 777 nav_map->at(initial_url).at(0)); |
769 VerifyNavigationEvent(initial_url, // source_url | 778 VerifyNavigationEvent(initial_url, // source_url |
770 initial_url, // source_main_frame_url | 779 initial_url, // source_main_frame_url |
771 download_url, // original_request_url | 780 download_url, // original_request_url |
772 download_url, // destination_url | 781 download_url, // destination_url |
773 true, // is_user_initiated, | 782 true, // is_user_initiated, |
774 false, // has_committed | 783 false, // has_committed |
775 false, // has_server_redirect | 784 false, // has_server_redirect |
776 nav_map->at(download_url).at(0)); | 785 nav_map->at(download_url).at(0)); |
777 | 786 |
778 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 787 ReferrerChain referrer_chain; |
| 788 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
779 ASSERT_EQ(2U, referrer_chain.size()); | 789 ASSERT_EQ(2U, referrer_chain.size()); |
780 VerifyReferrerChainEntry(download_url, // url | 790 VerifyReferrerChainEntry(download_url, // url |
781 ReferrerChainEntry::DOWNLOAD_URL, // type | 791 ReferrerChainEntry::DOWNLOAD_URL, // type |
782 test_server_ip, // ip_address | 792 test_server_ip, // ip_address |
783 initial_url, // referrer_url | 793 initial_url, // referrer_url |
784 initial_url, // referrer_main_frame_url | 794 initial_url, // referrer_main_frame_url |
785 false, // is_retargeting | 795 false, // is_retargeting |
786 referrer_chain[0]); | 796 referrer_chain[0].get()); |
787 VerifyReferrerChainEntry(initial_url, // url | 797 VerifyReferrerChainEntry(initial_url, // url |
788 ReferrerChainEntry::LANDING_PAGE, // type | 798 ReferrerChainEntry::LANDING_PAGE, // type |
789 test_server_ip, // ip_address | 799 test_server_ip, // ip_address |
790 GURL(), // referrer_url | 800 GURL(), // referrer_url |
791 GURL(), // referrer_main_frame_url | 801 GURL(), // referrer_main_frame_url |
792 false, // is_retargeting | 802 false, // is_retargeting |
793 referrer_chain[1]); | 803 referrer_chain[1].get()); |
794 } | 804 } |
795 | 805 |
796 // Click on a link which redirects twice until it reaches download using a | 806 // Click on a link which redirects twice until it reaches download using a |
797 // mixture of meta refresh and window.location. All transitions happen in the | 807 // mixture of meta refresh and window.location. All transitions happen in the |
798 // same tab. | 808 // same tab. |
799 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, MixRedirects) { | 809 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, MixRedirects) { |
800 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 810 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
801 ClickTestLink("mix_redirects", 2, initial_url); | 811 ClickTestLink("mix_redirects", 2, initial_url); |
802 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL); | 812 GURL redirect_url = embedded_test_server()->GetURL(kRedirectURL); |
803 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 813 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
804 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 814 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
805 auto nav_map = navigation_map(); | 815 auto nav_map = navigation_map(); |
806 ASSERT_TRUE(nav_map); | 816 ASSERT_TRUE(nav_map); |
807 ASSERT_EQ(std::size_t(3), nav_map->size()); | 817 ASSERT_EQ(3U, nav_map->size()); |
808 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); | 818 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); |
809 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 819 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
810 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 820 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
811 VerifyNavigationEvent(GURL(), // source_url | 821 VerifyNavigationEvent(GURL(), // source_url |
812 GURL(), // source_main_frame_url | 822 GURL(), // source_main_frame_url |
813 initial_url, // original_request_url | 823 initial_url, // original_request_url |
814 initial_url, // destination_url | 824 initial_url, // destination_url |
815 true, // is_user_initiated, | 825 true, // is_user_initiated, |
816 true, // has_committed | 826 true, // has_committed |
817 false, // has_server_redirect | 827 false, // has_server_redirect |
818 nav_map->at(initial_url).at(0)); | 828 nav_map->at(initial_url).at(0)); |
819 VerifyNavigationEvent(initial_url, // source_url | 829 VerifyNavigationEvent(initial_url, // source_url |
820 initial_url, // source_main_frame_url | 830 initial_url, // source_main_frame_url |
821 redirect_url, // original_request_url | 831 redirect_url, // original_request_url |
822 redirect_url, // destination_url | 832 redirect_url, // destination_url |
823 true, // is_user_initiated, | 833 true, // is_user_initiated, |
824 true, // has_committed | 834 true, // has_committed |
825 false, // has_server_redirect | 835 false, // has_server_redirect |
826 nav_map->at(redirect_url).at(0)); | 836 nav_map->at(redirect_url).at(0)); |
827 VerifyNavigationEvent(redirect_url, // source_url | 837 VerifyNavigationEvent(redirect_url, // source_url |
828 redirect_url, // source_main_frame_url | 838 redirect_url, // source_main_frame_url |
829 download_url, // original_request_url | 839 download_url, // original_request_url |
830 download_url, // destination_url | 840 download_url, // destination_url |
831 false, // is_user_initiated, | 841 false, // is_user_initiated, |
832 false, // has_committed | 842 false, // has_committed |
833 false, // has_server_redirect | 843 false, // has_server_redirect |
834 nav_map->at(download_url).at(0)); | 844 nav_map->at(download_url).at(0)); |
835 VerifyHostToIpMap(); | 845 VerifyHostToIpMap(); |
836 | 846 |
837 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 847 ReferrerChain referrer_chain; |
838 ASSERT_EQ(std::size_t(3), referrer_chain.size()); | 848 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 849 ASSERT_EQ(3U, referrer_chain.size()); |
839 VerifyReferrerChainEntry(download_url, // url | 850 VerifyReferrerChainEntry(download_url, // url |
840 ReferrerChainEntry::DOWNLOAD_URL, // type | 851 ReferrerChainEntry::DOWNLOAD_URL, // type |
841 test_server_ip, // ip_address | 852 test_server_ip, // ip_address |
842 redirect_url, // referrer_url | 853 redirect_url, // referrer_url |
843 redirect_url, // referrer_main_frame_url | 854 redirect_url, // referrer_main_frame_url |
844 false, // is_retargeting | 855 false, // is_retargeting |
845 referrer_chain[0]); | 856 referrer_chain[0].get()); |
846 VerifyReferrerChainEntry(redirect_url, // url | 857 VerifyReferrerChainEntry(redirect_url, // url |
847 ReferrerChainEntry::CLIENT_REDIRECT, // type | 858 ReferrerChainEntry::CLIENT_REDIRECT, // type |
848 test_server_ip, // ip_address | 859 test_server_ip, // ip_address |
849 initial_url, // referrer_url | 860 initial_url, // referrer_url |
850 initial_url, // referrer_main_frame_url | 861 initial_url, // referrer_main_frame_url |
851 false, // is_retargeting | 862 false, // is_retargeting |
852 referrer_chain[1]); | 863 referrer_chain[1].get()); |
853 VerifyReferrerChainEntry(initial_url, // url | 864 VerifyReferrerChainEntry(initial_url, // url |
854 ReferrerChainEntry::LANDING_PAGE, // type | 865 ReferrerChainEntry::LANDING_PAGE, // type |
855 test_server_ip, // ip_address | 866 test_server_ip, // ip_address |
856 GURL(), // referrer_url | 867 GURL(), // referrer_url |
857 GURL(), // referrer_main_frame_url | 868 GURL(), // referrer_main_frame_url |
858 false, // is_retargeting | 869 false, // is_retargeting |
859 referrer_chain[2]); | 870 referrer_chain[2].get()); |
860 } | 871 } |
861 | 872 |
862 // Use javascript to open download in a new tab. | 873 // Use javascript to open download in a new tab. |
863 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, NewTabDownload) { | 874 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, NewTabDownload) { |
864 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 875 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
865 ClickTestLink("new_tab_download", 2, initial_url); | 876 ClickTestLink("new_tab_download", 2, initial_url); |
866 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 877 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
867 GURL blank_url = GURL(url::kAboutBlankURL); | 878 GURL blank_url = GURL(url::kAboutBlankURL); |
868 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 879 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
869 auto nav_map = navigation_map(); | 880 auto nav_map = navigation_map(); |
870 ASSERT_TRUE(nav_map); | 881 ASSERT_TRUE(nav_map); |
871 ASSERT_EQ(std::size_t(3), nav_map->size()); | 882 ASSERT_EQ(3U, nav_map->size()); |
872 ASSERT_EQ(2U, nav_map->at(blank_url).size()); | 883 ASSERT_EQ(2U, nav_map->at(blank_url).size()); |
873 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 884 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
874 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 885 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
875 VerifyNavigationEvent(GURL(), // source_url | 886 VerifyNavigationEvent(GURL(), // source_url |
876 GURL(), // source_main_frame_url | 887 GURL(), // source_main_frame_url |
877 initial_url, // original_request_url | 888 initial_url, // original_request_url |
878 initial_url, // destination_url | 889 initial_url, // destination_url |
879 true, // is_user_initiated, | 890 true, // is_user_initiated, |
880 true, // has_committed | 891 true, // has_committed |
881 false, // has_server_redirect | 892 false, // has_server_redirect |
(...skipping 24 matching lines...) Expand all Loading... |
906 download_url, // original_request_url | 917 download_url, // original_request_url |
907 download_url, // destination_url | 918 download_url, // destination_url |
908 false, // is_user_initiated, | 919 false, // is_user_initiated, |
909 false, // has_committed | 920 false, // has_committed |
910 false, // has_server_redirect | 921 false, // has_server_redirect |
911 nav_map->at(download_url).at(0)); | 922 nav_map->at(download_url).at(0)); |
912 EXPECT_EQ(nav_map->at(download_url).at(0).source_tab_id, | 923 EXPECT_EQ(nav_map->at(download_url).at(0).source_tab_id, |
913 nav_map->at(download_url).at(0).target_tab_id); | 924 nav_map->at(download_url).at(0).target_tab_id); |
914 VerifyHostToIpMap(); | 925 VerifyHostToIpMap(); |
915 | 926 |
916 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 927 ReferrerChain referrer_chain; |
917 ASSERT_EQ(std::size_t(3), referrer_chain.size()); | 928 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 929 ASSERT_EQ(3U, referrer_chain.size()); |
918 VerifyReferrerChainEntry(download_url, // url | 930 VerifyReferrerChainEntry(download_url, // url |
919 ReferrerChainEntry::DOWNLOAD_URL, // type | 931 ReferrerChainEntry::DOWNLOAD_URL, // type |
920 test_server_ip, // ip_address | 932 test_server_ip, // ip_address |
921 blank_url, // referrer_url | 933 blank_url, // referrer_url |
922 blank_url, // referrer_main_frame_url | 934 blank_url, // referrer_main_frame_url |
923 false, // is_retargeting | 935 false, // is_retargeting |
924 referrer_chain[0]); | 936 referrer_chain[0].get()); |
925 VerifyReferrerChainEntry(blank_url, // url | 937 VerifyReferrerChainEntry(blank_url, // url |
926 ReferrerChainEntry::CLIENT_REDIRECT, // type | 938 ReferrerChainEntry::CLIENT_REDIRECT, // type |
927 "", // ip_address | 939 "", // ip_address |
928 initial_url, // referrer_url | 940 initial_url, // referrer_url |
929 initial_url, // referrer_main_frame_url | 941 initial_url, // referrer_main_frame_url |
930 true, // is_retargeting | 942 true, // is_retargeting |
931 referrer_chain[1]); | 943 referrer_chain[1].get()); |
932 VerifyReferrerChainEntry(initial_url, // url | 944 VerifyReferrerChainEntry(initial_url, // url |
933 ReferrerChainEntry::LANDING_PAGE, // type | 945 ReferrerChainEntry::LANDING_PAGE, // type |
934 test_server_ip, // ip_address | 946 test_server_ip, // ip_address |
935 GURL(), // referrer_url | 947 GURL(), // referrer_url |
936 GURL(), // referrer_main_frame_url | 948 GURL(), // referrer_main_frame_url |
937 false, // is_retargeting | 949 false, // is_retargeting |
938 referrer_chain[2]); | 950 referrer_chain[2].get()); |
939 } | 951 } |
940 | 952 |
941 // Use javascript to open download in a new tab and download has a data url. | 953 // Use javascript to open download in a new tab and download has a data url. |
942 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 954 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
943 NewTabDownloadWithDataURL) { | 955 NewTabDownloadWithDataURL) { |
944 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 956 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
945 ClickTestLink("new_tab_download_with_data_url", 2, initial_url); | 957 ClickTestLink("new_tab_download_with_data_url", 2, initial_url); |
946 GURL download_url = GURL(kDownloadDataURL); | 958 GURL download_url = GURL(kDownloadDataURL); |
947 GURL blank_url = GURL(url::kAboutBlankURL); | 959 GURL blank_url = GURL(url::kAboutBlankURL); |
948 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 960 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
949 auto nav_map = navigation_map(); | 961 auto nav_map = navigation_map(); |
950 ASSERT_TRUE(nav_map); | 962 ASSERT_TRUE(nav_map); |
951 ASSERT_EQ(std::size_t(3), nav_map->size()); | 963 ASSERT_EQ(3U, nav_map->size()); |
952 ASSERT_EQ(2U, nav_map->at(blank_url).size()); | 964 ASSERT_EQ(2U, nav_map->at(blank_url).size()); |
953 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 965 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
954 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 966 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
955 VerifyNavigationEvent(GURL(), // source_url | 967 VerifyNavigationEvent(GURL(), // source_url |
956 GURL(), // source_main_frame_url | 968 GURL(), // source_main_frame_url |
957 initial_url, // original_request_url | 969 initial_url, // original_request_url |
958 initial_url, // destination_url | 970 initial_url, // destination_url |
959 true, // is_user_initiated, | 971 true, // is_user_initiated, |
960 true, // has_committed | 972 true, // has_committed |
961 false, // has_server_redirect | 973 false, // has_server_redirect |
(...skipping 25 matching lines...) Expand all Loading... |
987 download_url, // original_request_url | 999 download_url, // original_request_url |
988 download_url, // destination_url | 1000 download_url, // destination_url |
989 false, // is_user_initiated, | 1001 false, // is_user_initiated, |
990 false, // has_committed | 1002 false, // has_committed |
991 false, // has_server_redirect | 1003 false, // has_server_redirect |
992 nav_map->at(download_url).at(0)); | 1004 nav_map->at(download_url).at(0)); |
993 EXPECT_TRUE(nav_map->at(download_url).at(0).source_tab_id == | 1005 EXPECT_TRUE(nav_map->at(download_url).at(0).source_tab_id == |
994 nav_map->at(download_url).at(0).target_tab_id); | 1006 nav_map->at(download_url).at(0).target_tab_id); |
995 VerifyHostToIpMap(); | 1007 VerifyHostToIpMap(); |
996 | 1008 |
997 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1009 ReferrerChain referrer_chain; |
998 ASSERT_EQ(std::size_t(3), referrer_chain.size()); | 1010 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 1011 ASSERT_EQ(3U, referrer_chain.size()); |
999 VerifyReferrerChainEntry(download_url, // url | 1012 VerifyReferrerChainEntry(download_url, // url |
1000 ReferrerChainEntry::DOWNLOAD_URL, // type | 1013 ReferrerChainEntry::DOWNLOAD_URL, // type |
1001 "", // ip_address | 1014 "", // ip_address |
1002 blank_url, // referrer_url | 1015 blank_url, // referrer_url |
1003 blank_url, // referrer_main_frame_url | 1016 blank_url, // referrer_main_frame_url |
1004 false, // is_retargeting | 1017 false, // is_retargeting |
1005 referrer_chain[0]); | 1018 referrer_chain[0].get()); |
1006 VerifyReferrerChainEntry(blank_url, // url | 1019 VerifyReferrerChainEntry(blank_url, // url |
1007 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1020 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1008 "", // ip_address | 1021 "", // ip_address |
1009 initial_url, // referrer_url | 1022 initial_url, // referrer_url |
1010 initial_url, // referrer_main_frame_url | 1023 initial_url, // referrer_main_frame_url |
1011 true, // is_retargeting | 1024 true, // is_retargeting |
1012 referrer_chain[1]); | 1025 referrer_chain[1].get()); |
1013 VerifyReferrerChainEntry(initial_url, // url | 1026 VerifyReferrerChainEntry(initial_url, // url |
1014 ReferrerChainEntry::LANDING_PAGE, // type | 1027 ReferrerChainEntry::LANDING_PAGE, // type |
1015 test_server_ip, // ip_address | 1028 test_server_ip, // ip_address |
1016 GURL(), // referrer_url | 1029 GURL(), // referrer_url |
1017 GURL(), // referrer_main_frame_url | 1030 GURL(), // referrer_main_frame_url |
1018 false, // is_retargeting | 1031 false, // is_retargeting |
1019 referrer_chain[2]); | 1032 referrer_chain[2].get()); |
1020 } | 1033 } |
1021 | 1034 |
1022 // TODO(jialiul): Need to figure out why this test is failing on Windows and | 1035 // TODO(jialiul): Need to figure out why this test is failing on Windows and |
1023 // flaky on other platforms. | 1036 // flaky on other platforms. |
1024 #define MAYBE_DownloadViaHTML5FileApi DISABLED_DownloadViaHTML5FileApi | 1037 #define MAYBE_DownloadViaHTML5FileApi DISABLED_DownloadViaHTML5FileApi |
1025 // Download via html5 file API. | 1038 // Download via html5 file API. |
1026 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1039 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1027 MAYBE_DownloadViaHTML5FileApi) { | 1040 MAYBE_DownloadViaHTML5FileApi) { |
1028 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1041 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1029 ClickTestLink("html5_file_api", 1, initial_url); | 1042 ClickTestLink("html5_file_api", 1, initial_url); |
(...skipping 18 matching lines...) Expand all Loading... |
1048 VerifyNavigationEvent(initial_url, // source_url | 1061 VerifyNavigationEvent(initial_url, // source_url |
1049 initial_url, // source_main_frame_url | 1062 initial_url, // source_main_frame_url |
1050 download_url, // original_request_url | 1063 download_url, // original_request_url |
1051 download_url, // destination_url | 1064 download_url, // destination_url |
1052 true, // is_user_initiated, | 1065 true, // is_user_initiated, |
1053 false, // has_committed | 1066 false, // has_committed |
1054 false, // has_server_redirect | 1067 false, // has_server_redirect |
1055 nav_map->at(download_url).at(0)); | 1068 nav_map->at(download_url).at(0)); |
1056 VerifyHostToIpMap(); | 1069 VerifyHostToIpMap(); |
1057 | 1070 |
1058 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1071 ReferrerChain referrer_chain; |
| 1072 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
1059 ASSERT_EQ(2U, referrer_chain.size()); | 1073 ASSERT_EQ(2U, referrer_chain.size()); |
1060 VerifyReferrerChainEntry(download_url, // url | 1074 VerifyReferrerChainEntry(download_url, // url |
1061 ReferrerChainEntry::DOWNLOAD_URL, // type | 1075 ReferrerChainEntry::DOWNLOAD_URL, // type |
1062 "", // ip_address | 1076 "", // ip_address |
1063 initial_url, // referrer_url | 1077 initial_url, // referrer_url |
1064 initial_url, // referrer_main_frame_url | 1078 initial_url, // referrer_main_frame_url |
1065 false, // is_retargeting | 1079 false, // is_retargeting |
1066 referrer_chain[0]); | 1080 referrer_chain[0].get()); |
1067 VerifyReferrerChainEntry(initial_url, // url | 1081 VerifyReferrerChainEntry(initial_url, // url |
1068 ReferrerChainEntry::LANDING_PAGE, // type | 1082 ReferrerChainEntry::LANDING_PAGE, // type |
1069 test_server_ip, // ip_address | 1083 test_server_ip, // ip_address |
1070 GURL(), // referrer_url | 1084 GURL(), // referrer_url |
1071 GURL(), // referrer_main_frame_url | 1085 GURL(), // referrer_main_frame_url |
1072 false, // is_retargeting | 1086 false, // is_retargeting |
1073 referrer_chain[1]); | 1087 referrer_chain[1].get()); |
1074 } | 1088 } |
1075 | 1089 |
1076 // Click a link in a subframe and start download. | 1090 // Click a link in a subframe and start download. |
1077 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1091 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1078 SubFrameDirectDownload) { | 1092 SubFrameDirectDownload) { |
1079 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1093 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1080 ClickTestLink("sub_frame_download_attribution", 1, initial_url); | 1094 ClickTestLink("sub_frame_download_attribution", 1, initial_url); |
1081 std::string test_name = | 1095 std::string test_name = |
1082 base::StringPrintf("%s', '%s", "iframe1", "iframe_direct_download"); | 1096 base::StringPrintf("%s', '%s", "iframe1", "iframe_direct_download"); |
1083 GURL multi_frame_test_url = | 1097 GURL multi_frame_test_url = |
1084 embedded_test_server()->GetURL(kMultiFrameTestURL); | 1098 embedded_test_server()->GetURL(kMultiFrameTestURL); |
1085 GURL iframe_url = embedded_test_server()->GetURL(kIframeDirectDownloadURL); | 1099 GURL iframe_url = embedded_test_server()->GetURL(kIframeDirectDownloadURL); |
1086 ClickTestLink(test_name.c_str(), 1, iframe_url); | 1100 ClickTestLink(test_name.c_str(), 1, iframe_url); |
1087 GURL iframe_retargeting_url = | 1101 GURL iframe_retargeting_url = |
1088 embedded_test_server()->GetURL(kIframeRetargetingURL); | 1102 embedded_test_server()->GetURL(kIframeRetargetingURL); |
1089 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 1103 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
1090 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 1104 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
1091 auto nav_map = navigation_map(); | 1105 auto nav_map = navigation_map(); |
1092 ASSERT_TRUE(nav_map); | 1106 ASSERT_TRUE(nav_map); |
1093 ASSERT_EQ(std::size_t(5), nav_map->size()); | 1107 ASSERT_EQ(5U, nav_map->size()); |
1094 ASSERT_EQ(1U, nav_map->at(multi_frame_test_url).size()); | 1108 ASSERT_EQ(1U, nav_map->at(multi_frame_test_url).size()); |
1095 ASSERT_EQ(1U, nav_map->at(iframe_url).size()); | 1109 ASSERT_EQ(1U, nav_map->at(iframe_url).size()); |
1096 ASSERT_EQ(1U, nav_map->at(iframe_retargeting_url).size()); | 1110 ASSERT_EQ(1U, nav_map->at(iframe_retargeting_url).size()); |
1097 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 1111 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
1098 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 1112 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
1099 VerifyNavigationEvent(GURL(), // source_url | 1113 VerifyNavigationEvent(GURL(), // source_url |
1100 GURL(), // source_main_frame_url | 1114 GURL(), // source_main_frame_url |
1101 initial_url, // original_request_url | 1115 initial_url, // original_request_url |
1102 initial_url, // destination_url | 1116 initial_url, // destination_url |
1103 true, // is_user_initiated, | 1117 true, // is_user_initiated, |
(...skipping 27 matching lines...) Expand all Loading... |
1131 VerifyNavigationEvent(iframe_url, // source_url | 1145 VerifyNavigationEvent(iframe_url, // source_url |
1132 multi_frame_test_url, // source_main_frame_url | 1146 multi_frame_test_url, // source_main_frame_url |
1133 download_url, // original_request_url | 1147 download_url, // original_request_url |
1134 download_url, // destination_url | 1148 download_url, // destination_url |
1135 true, // is_user_initiated, | 1149 true, // is_user_initiated, |
1136 false, // has_committed | 1150 false, // has_committed |
1137 false, // has_server_redirect | 1151 false, // has_server_redirect |
1138 nav_map->at(download_url).at(0)); | 1152 nav_map->at(download_url).at(0)); |
1139 VerifyHostToIpMap(); | 1153 VerifyHostToIpMap(); |
1140 | 1154 |
1141 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1155 ReferrerChain referrer_chain; |
| 1156 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
1142 ASSERT_EQ(4U, referrer_chain.size()); | 1157 ASSERT_EQ(4U, referrer_chain.size()); |
1143 VerifyReferrerChainEntry(download_url, // url | 1158 VerifyReferrerChainEntry(download_url, // url |
1144 ReferrerChainEntry::DOWNLOAD_URL, // type | 1159 ReferrerChainEntry::DOWNLOAD_URL, // type |
1145 test_server_ip, // ip_address | 1160 test_server_ip, // ip_address |
1146 iframe_url, // referrer_url | 1161 iframe_url, // referrer_url |
1147 multi_frame_test_url, // referrer_main_frame_url | 1162 multi_frame_test_url, // referrer_main_frame_url |
1148 false, // is_retargeting | 1163 false, // is_retargeting |
1149 referrer_chain[0]); | 1164 referrer_chain[0].get()); |
1150 VerifyReferrerChainEntry(iframe_url, // url | 1165 VerifyReferrerChainEntry(iframe_url, // url |
1151 ReferrerChainEntry::LANDING_PAGE, // type | 1166 ReferrerChainEntry::LANDING_PAGE, // type |
1152 test_server_ip, // ip_address | 1167 test_server_ip, // ip_address |
1153 GURL(), // referrer_url | 1168 GURL(), // referrer_url |
1154 multi_frame_test_url, // referrer_main_frame_url | 1169 multi_frame_test_url, // referrer_main_frame_url |
1155 false, // is_retargeting | 1170 false, // is_retargeting |
1156 referrer_chain[1]); | 1171 referrer_chain[1].get()); |
1157 VerifyReferrerChainEntry(multi_frame_test_url, // url | 1172 VerifyReferrerChainEntry(multi_frame_test_url, // url |
1158 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1173 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1159 test_server_ip, // ip_address | 1174 test_server_ip, // ip_address |
1160 initial_url, // referrer_url | 1175 initial_url, // referrer_url |
1161 initial_url, // referrer_main_frame_url | 1176 initial_url, // referrer_main_frame_url |
1162 false, // is_retargeting | 1177 false, // is_retargeting |
1163 referrer_chain[2]); | 1178 referrer_chain[2].get()); |
1164 VerifyReferrerChainEntry(initial_url, // url | 1179 VerifyReferrerChainEntry(initial_url, // url |
1165 ReferrerChainEntry::LANDING_REFERRER, // type | 1180 ReferrerChainEntry::LANDING_REFERRER, // type |
1166 test_server_ip, // ip_address | 1181 test_server_ip, // ip_address |
1167 GURL(), // referrer_url | 1182 GURL(), // referrer_url |
1168 GURL(), // referrer_main_frame_url | 1183 GURL(), // referrer_main_frame_url |
1169 false, // is_retargeting | 1184 false, // is_retargeting |
1170 referrer_chain[3]); | 1185 referrer_chain[3].get()); |
1171 } | 1186 } |
1172 | 1187 |
1173 // Click a link in a subframe and open download in a new tab. | 1188 // Click a link in a subframe and open download in a new tab. |
1174 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1189 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1175 SubFrameNewTabDownload) { | 1190 SubFrameNewTabDownload) { |
1176 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1191 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1177 ClickTestLink("sub_frame_download_attribution", 1, initial_url); | 1192 ClickTestLink("sub_frame_download_attribution", 1, initial_url); |
1178 std::string test_name = | 1193 std::string test_name = |
1179 base::StringPrintf("%s', '%s", "iframe2", "iframe_new_tab_download"); | 1194 base::StringPrintf("%s', '%s", "iframe2", "iframe_new_tab_download"); |
1180 GURL multi_frame_test_url = | 1195 GURL multi_frame_test_url = |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1246 VerifyNavigationEvent(blank_url, // source_url | 1261 VerifyNavigationEvent(blank_url, // source_url |
1247 blank_url, // source_main_frame_url | 1262 blank_url, // source_main_frame_url |
1248 download_url, // original_request_url | 1263 download_url, // original_request_url |
1249 download_url, // destination_url | 1264 download_url, // destination_url |
1250 false, // is_user_initiated, | 1265 false, // is_user_initiated, |
1251 false, // has_committed | 1266 false, // has_committed |
1252 false, // has_server_redirect | 1267 false, // has_server_redirect |
1253 nav_map->at(download_url).at(0)); | 1268 nav_map->at(download_url).at(0)); |
1254 VerifyHostToIpMap(); | 1269 VerifyHostToIpMap(); |
1255 | 1270 |
1256 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1271 ReferrerChain referrer_chain; |
| 1272 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
1257 EXPECT_EQ(5U, referrer_chain.size()); | 1273 EXPECT_EQ(5U, referrer_chain.size()); |
1258 VerifyReferrerChainEntry(download_url, // url | 1274 VerifyReferrerChainEntry(download_url, // url |
1259 ReferrerChainEntry::DOWNLOAD_URL, // type | 1275 ReferrerChainEntry::DOWNLOAD_URL, // type |
1260 test_server_ip, // ip_address | 1276 test_server_ip, // ip_address |
1261 blank_url, // referrer_url | 1277 blank_url, // referrer_url |
1262 blank_url, // referrer_main_frame_url | 1278 blank_url, // referrer_main_frame_url |
1263 false, // is_retargeting | 1279 false, // is_retargeting |
1264 referrer_chain[0]); | 1280 referrer_chain[0].get()); |
1265 VerifyReferrerChainEntry(blank_url, // url | 1281 VerifyReferrerChainEntry(blank_url, // url |
1266 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1282 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1267 "", // ip_address | 1283 "", // ip_address |
1268 iframe_retargeting_url, // referrer_url | 1284 iframe_retargeting_url, // referrer_url |
1269 multi_frame_test_url, // referrer_main_frame_url | 1285 multi_frame_test_url, // referrer_main_frame_url |
1270 true, // is_retargeting | 1286 true, // is_retargeting |
1271 referrer_chain[1]); | 1287 referrer_chain[1].get()); |
1272 VerifyReferrerChainEntry(iframe_retargeting_url, // url | 1288 VerifyReferrerChainEntry(iframe_retargeting_url, // url |
1273 ReferrerChainEntry::LANDING_PAGE, // type | 1289 ReferrerChainEntry::LANDING_PAGE, // type |
1274 test_server_ip, // ip_address | 1290 test_server_ip, // ip_address |
1275 GURL(), // referrer_url | 1291 GURL(), // referrer_url |
1276 multi_frame_test_url, // referrer_main_frame_url | 1292 multi_frame_test_url, // referrer_main_frame_url |
1277 false, // is_retargeting | 1293 false, // is_retargeting |
1278 referrer_chain[2]); | 1294 referrer_chain[2].get()); |
1279 VerifyReferrerChainEntry(multi_frame_test_url, // url | 1295 VerifyReferrerChainEntry(multi_frame_test_url, // url |
1280 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1296 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1281 test_server_ip, // ip_address | 1297 test_server_ip, // ip_address |
1282 initial_url, // referrer_url | 1298 initial_url, // referrer_url |
1283 initial_url, // referrer_main_frame_url | 1299 initial_url, // referrer_main_frame_url |
1284 false, // is_retargeting | 1300 false, // is_retargeting |
1285 referrer_chain[3]); | 1301 referrer_chain[3].get()); |
1286 VerifyReferrerChainEntry(initial_url, // url | 1302 VerifyReferrerChainEntry(initial_url, // url |
1287 ReferrerChainEntry::LANDING_REFERRER, // type | 1303 ReferrerChainEntry::LANDING_REFERRER, // type |
1288 test_server_ip, // ip_address | 1304 test_server_ip, // ip_address |
1289 GURL(), // referrer_url | 1305 GURL(), // referrer_url |
1290 GURL(), // referrer_main_frame_url | 1306 GURL(), // referrer_main_frame_url |
1291 false, // is_retargeting | 1307 false, // is_retargeting |
1292 referrer_chain[4]); | 1308 referrer_chain[4].get()); |
1293 } | 1309 } |
1294 | 1310 |
1295 // Click a link which redirects to the landing page, and then click on the | 1311 // Click a link which redirects to the landing page, and then click on the |
1296 // landing page to trigger download. | 1312 // landing page to trigger download. |
1297 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, CompleteReferrerChain) { | 1313 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, CompleteReferrerChain) { |
1298 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1314 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1299 ClickTestLink("complete_referrer_chain", 2, initial_url); | 1315 ClickTestLink("complete_referrer_chain", 2, initial_url); |
1300 GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL); | 1316 GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL); |
1301 GURL landing_url = embedded_test_server()->GetURL(kLandingURL); | 1317 GURL landing_url = embedded_test_server()->GetURL(kLandingURL); |
1302 ClickTestLink("download_on_landing_page", 1, landing_url); | 1318 ClickTestLink("download_on_landing_page", 1, landing_url); |
1303 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 1319 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
1304 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 1320 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
1305 auto nav_map = navigation_map(); | 1321 auto nav_map = navigation_map(); |
1306 ASSERT_TRUE(nav_map); | 1322 ASSERT_TRUE(nav_map); |
1307 ASSERT_EQ(std::size_t(4), nav_map->size()); | 1323 ASSERT_EQ(4U, nav_map->size()); |
1308 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); | 1324 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); |
1309 ASSERT_EQ(1U, nav_map->at(landing_url).size()); | 1325 ASSERT_EQ(1U, nav_map->at(landing_url).size()); |
1310 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 1326 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
1311 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 1327 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
1312 VerifyNavigationEvent(GURL(), // source_url | 1328 VerifyNavigationEvent(GURL(), // source_url |
1313 GURL(), // source_main_frame_url | 1329 GURL(), // source_main_frame_url |
1314 initial_url, // original_request_url | 1330 initial_url, // original_request_url |
1315 initial_url, // destination_url | 1331 initial_url, // destination_url |
1316 true, // is_user_initiated, | 1332 true, // is_user_initiated, |
1317 true, // has_committed | 1333 true, // has_committed |
(...skipping 18 matching lines...) Expand all Loading... |
1336 VerifyNavigationEvent(landing_url, // source_url | 1352 VerifyNavigationEvent(landing_url, // source_url |
1337 landing_url, // source_main_frame_url | 1353 landing_url, // source_main_frame_url |
1338 download_url, // original_request_url | 1354 download_url, // original_request_url |
1339 download_url, // destination_url | 1355 download_url, // destination_url |
1340 true, // is_user_initiated, | 1356 true, // is_user_initiated, |
1341 false, // has_committed | 1357 false, // has_committed |
1342 false, // has_server_redirect | 1358 false, // has_server_redirect |
1343 nav_map->at(download_url).at(0)); | 1359 nav_map->at(download_url).at(0)); |
1344 VerifyHostToIpMap(); | 1360 VerifyHostToIpMap(); |
1345 | 1361 |
1346 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1362 ReferrerChain referrer_chain; |
1347 EXPECT_EQ(std::size_t(4), referrer_chain.size()); | 1363 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 1364 EXPECT_EQ(4U, referrer_chain.size()); |
1348 VerifyReferrerChainEntry(download_url, // url | 1365 VerifyReferrerChainEntry(download_url, // url |
1349 ReferrerChainEntry::DOWNLOAD_URL, // type | 1366 ReferrerChainEntry::DOWNLOAD_URL, // type |
1350 test_server_ip, // ip_address | 1367 test_server_ip, // ip_address |
1351 landing_url, // referrer_url | 1368 landing_url, // referrer_url |
1352 landing_url, // referrer_main_frame_url | 1369 landing_url, // referrer_main_frame_url |
1353 false, // is_retargeting | 1370 false, // is_retargeting |
1354 referrer_chain[0]); | 1371 referrer_chain[0].get()); |
1355 VerifyReferrerChainEntry(landing_url, // url | 1372 VerifyReferrerChainEntry(landing_url, // url |
1356 ReferrerChainEntry::LANDING_PAGE, // type | 1373 ReferrerChainEntry::LANDING_PAGE, // type |
1357 test_server_ip, // ip_address | 1374 test_server_ip, // ip_address |
1358 redirect_url, // referrer_url | 1375 redirect_url, // referrer_url |
1359 redirect_url, // referrer_main_frame_url | 1376 redirect_url, // referrer_main_frame_url |
1360 false, // is_retargeting | 1377 false, // is_retargeting |
1361 referrer_chain[1]); | 1378 referrer_chain[1].get()); |
1362 VerifyReferrerChainEntry(redirect_url, // url | 1379 VerifyReferrerChainEntry(redirect_url, // url |
1363 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1380 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1364 test_server_ip, // ip_address | 1381 test_server_ip, // ip_address |
1365 initial_url, // referrer_url | 1382 initial_url, // referrer_url |
1366 initial_url, // referrer_main_frame_url | 1383 initial_url, // referrer_main_frame_url |
1367 false, // is_retargeting | 1384 false, // is_retargeting |
1368 referrer_chain[2]); | 1385 referrer_chain[2].get()); |
1369 VerifyReferrerChainEntry( | 1386 VerifyReferrerChainEntry( |
1370 initial_url, // url | 1387 initial_url, // url |
1371 ReferrerChainEntry::LANDING_REFERRER, // type | 1388 ReferrerChainEntry::LANDING_REFERRER, // type |
1372 test_server_ip, // ip_address | 1389 test_server_ip, // ip_address |
1373 GURL(), // referrer_url is empty since this beyonds 2 clicks. | 1390 GURL(), // referrer_url is empty since this beyonds 2 clicks. |
1374 GURL(), // referrer_main_frame_url is empty for the same reason. | 1391 GURL(), // referrer_main_frame_url is empty for the same reason. |
1375 false, // is_retargeting | 1392 false, // is_retargeting |
1376 referrer_chain[3]); | 1393 referrer_chain[3].get()); |
1377 } | 1394 } |
1378 | 1395 |
1379 // Click three links before reaching download. | 1396 // Click three links before reaching download. |
1380 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1397 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1381 ReferrerAttributionWithinTwoUserGestures) { | 1398 ReferrerAttributionWithinTwoUserGestures) { |
1382 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1399 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1383 ClickTestLink("attribution_within_two_user_gestures", 1, initial_url); | 1400 ClickTestLink("attribution_within_two_user_gestures", 1, initial_url); |
1384 GURL page_before_landing_referrer_url = | 1401 GURL page_before_landing_referrer_url = |
1385 embedded_test_server()->GetURL(kPageBeforeLandingReferrerURL); | 1402 embedded_test_server()->GetURL(kPageBeforeLandingReferrerURL); |
1386 ClickTestLink("link_to_landing_referrer", 1, | 1403 ClickTestLink("link_to_landing_referrer", 1, |
1387 page_before_landing_referrer_url); | 1404 page_before_landing_referrer_url); |
1388 GURL landing_referrer_url = | 1405 GURL landing_referrer_url = |
1389 embedded_test_server()->GetURL(kLandingReferrerURL); | 1406 embedded_test_server()->GetURL(kLandingReferrerURL); |
1390 ClickTestLink("link_to_landing", 1, landing_referrer_url); | 1407 ClickTestLink("link_to_landing", 1, landing_referrer_url); |
1391 GURL landing_url = embedded_test_server()->GetURL(kLandingURL); | 1408 GURL landing_url = embedded_test_server()->GetURL(kLandingURL); |
1392 ClickTestLink("download_on_landing_page", 1, landing_url); | 1409 ClickTestLink("download_on_landing_page", 1, landing_url); |
1393 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 1410 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
1394 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 1411 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
1395 auto nav_map = navigation_map(); | 1412 auto nav_map = navigation_map(); |
1396 ASSERT_TRUE(nav_map); | 1413 ASSERT_TRUE(nav_map); |
1397 ASSERT_EQ(std::size_t(5), nav_map->size()); | 1414 ASSERT_EQ(5U, nav_map->size()); |
1398 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 1415 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
1399 ASSERT_EQ(1U, nav_map->at(page_before_landing_referrer_url).size()); | 1416 ASSERT_EQ(1U, nav_map->at(page_before_landing_referrer_url).size()); |
1400 ASSERT_EQ(1U, nav_map->at(landing_referrer_url).size()); | 1417 ASSERT_EQ(1U, nav_map->at(landing_referrer_url).size()); |
1401 ASSERT_EQ(1U, nav_map->at(landing_url).size()); | 1418 ASSERT_EQ(1U, nav_map->at(landing_url).size()); |
1402 ASSERT_EQ(1U, nav_map->at(download_url).size()); | 1419 ASSERT_EQ(1U, nav_map->at(download_url).size()); |
1403 VerifyNavigationEvent(GURL(), // source_url | 1420 VerifyNavigationEvent(GURL(), // source_url |
1404 GURL(), // source_main_frame_url | 1421 GURL(), // source_main_frame_url |
1405 initial_url, // original_request_url | 1422 initial_url, // original_request_url |
1406 initial_url, // destination_url | 1423 initial_url, // destination_url |
1407 true, // is_user_initiated, | 1424 true, // is_user_initiated, |
(...skipping 27 matching lines...) Expand all Loading... |
1435 VerifyNavigationEvent(landing_url, // source_url | 1452 VerifyNavigationEvent(landing_url, // source_url |
1436 landing_url, // source_main_frame_url | 1453 landing_url, // source_main_frame_url |
1437 download_url, // original_request_url | 1454 download_url, // original_request_url |
1438 download_url, // destination_url | 1455 download_url, // destination_url |
1439 true, // is_user_initiated, | 1456 true, // is_user_initiated, |
1440 false, // has_committed | 1457 false, // has_committed |
1441 false, // has_server_redirect | 1458 false, // has_server_redirect |
1442 nav_map->at(download_url).at(0)); | 1459 nav_map->at(download_url).at(0)); |
1443 VerifyHostToIpMap(); | 1460 VerifyHostToIpMap(); |
1444 | 1461 |
1445 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1462 ReferrerChain referrer_chain; |
1446 EXPECT_EQ(std::size_t(3), referrer_chain.size()); | 1463 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
| 1464 EXPECT_EQ(3U, referrer_chain.size()); |
1447 VerifyReferrerChainEntry(download_url, // url | 1465 VerifyReferrerChainEntry(download_url, // url |
1448 ReferrerChainEntry::DOWNLOAD_URL, // type | 1466 ReferrerChainEntry::DOWNLOAD_URL, // type |
1449 test_server_ip, // ip_address | 1467 test_server_ip, // ip_address |
1450 landing_url, // referrer_url | 1468 landing_url, // referrer_url |
1451 landing_url, // referrer_main_frame_url | 1469 landing_url, // referrer_main_frame_url |
1452 false, // is_retargeting | 1470 false, // is_retargeting |
1453 referrer_chain[0]); | 1471 referrer_chain[0].get()); |
1454 VerifyReferrerChainEntry(landing_url, // url | 1472 VerifyReferrerChainEntry(landing_url, // url |
1455 ReferrerChainEntry::LANDING_PAGE, // type | 1473 ReferrerChainEntry::LANDING_PAGE, // type |
1456 test_server_ip, // ip_address | 1474 test_server_ip, // ip_address |
1457 landing_referrer_url, // referrer_url | 1475 landing_referrer_url, // referrer_url |
1458 landing_referrer_url, // referrer_main_frame_url | 1476 landing_referrer_url, // referrer_main_frame_url |
1459 false, // is_retargeting | 1477 false, // is_retargeting |
1460 referrer_chain[1]); | 1478 referrer_chain[1].get()); |
1461 VerifyReferrerChainEntry( | 1479 VerifyReferrerChainEntry( |
1462 landing_referrer_url, // url | 1480 landing_referrer_url, // url |
1463 ReferrerChainEntry::LANDING_REFERRER, // type | 1481 ReferrerChainEntry::LANDING_REFERRER, // type |
1464 test_server_ip, // ip_address | 1482 test_server_ip, // ip_address |
1465 GURL(), // referrer_url is empty since this beyonds 2 clicks. | 1483 GURL(), // referrer_url is empty since this beyonds 2 clicks. |
1466 GURL(), // referrer_main_frame_url is empty for the same reason. | 1484 GURL(), // referrer_main_frame_url is empty for the same reason. |
1467 false, // is_retargeting | 1485 false, // is_retargeting |
1468 referrer_chain[2]); | 1486 referrer_chain[2].get()); |
1469 // page_before_landing_referrer_url is not in referrer chain. | 1487 // page_before_landing_referrer_url is not in referrer chain. |
1470 } | 1488 } |
1471 | 1489 |
1472 // Click a link which redirects to a PPAPI landing page. | 1490 // Click a link which redirects to a PPAPI landing page. |
1473 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1491 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1474 PPAPIDownloadWithUserGestureOnHostingFrame) { | 1492 PPAPIDownloadWithUserGestureOnHostingFrame) { |
1475 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1493 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1476 ClickTestLink("complete_referrer_chain", 2, initial_url); | 1494 ClickTestLink("complete_referrer_chain", 2, initial_url); |
1477 GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL); | 1495 GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL); |
1478 GURL landing_url = embedded_test_server()->GetURL(kLandingURL); | 1496 GURL landing_url = embedded_test_server()->GetURL(kLandingURL); |
1479 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 1497 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
1480 | 1498 |
1481 // Simulate a user gesture on landing page. | 1499 // Simulate a user gesture on landing page. |
1482 SimulateUserGesture(); | 1500 SimulateUserGesture(); |
1483 auto nav_map = navigation_map(); | 1501 auto nav_map = navigation_map(); |
1484 ASSERT_TRUE(nav_map); | 1502 ASSERT_TRUE(nav_map); |
1485 ASSERT_EQ(std::size_t(3), nav_map->size()); | 1503 ASSERT_EQ(3U, nav_map->size()); |
1486 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); | 1504 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); |
1487 ASSERT_EQ(1U, nav_map->at(landing_url).size()); | 1505 ASSERT_EQ(1U, nav_map->at(landing_url).size()); |
1488 ASSERT_EQ(1U, nav_map->at(initial_url).size()); | 1506 ASSERT_EQ(1U, nav_map->at(initial_url).size()); |
1489 VerifyNavigationEvent(GURL(), // source_url | 1507 VerifyNavigationEvent(GURL(), // source_url |
1490 GURL(), // source_main_frame_url | 1508 GURL(), // source_main_frame_url |
1491 initial_url, // original_request_url | 1509 initial_url, // original_request_url |
1492 initial_url, // destination_url | 1510 initial_url, // destination_url |
1493 true, // is_user_initiated, | 1511 true, // is_user_initiated, |
1494 true, // has_committed | 1512 true, // has_committed |
1495 false, // has_server_redirect | 1513 false, // has_server_redirect |
1496 nav_map->at(initial_url).at(0)); | 1514 nav_map->at(initial_url).at(0)); |
1497 VerifyNavigationEvent(initial_url, // source_url | 1515 VerifyNavigationEvent(initial_url, // source_url |
1498 initial_url, // source_main_frame_url | 1516 initial_url, // source_main_frame_url |
1499 redirect_url, // original_request_url | 1517 redirect_url, // original_request_url |
1500 redirect_url, // destination_url | 1518 redirect_url, // destination_url |
1501 true, // is_user_initiated, | 1519 true, // is_user_initiated, |
1502 true, // has_committed | 1520 true, // has_committed |
1503 false, // has_server_redirect | 1521 false, // has_server_redirect |
1504 nav_map->at(redirect_url).at(0)); | 1522 nav_map->at(redirect_url).at(0)); |
1505 VerifyNavigationEvent(redirect_url, // source_url | 1523 VerifyNavigationEvent(redirect_url, // source_url |
1506 redirect_url, // source_main_frame_url | 1524 redirect_url, // source_main_frame_url |
1507 landing_url, // original_request_url | 1525 landing_url, // original_request_url |
1508 landing_url, // destination_url | 1526 landing_url, // destination_url |
1509 false, // is_user_initiated, | 1527 false, // is_user_initiated, |
1510 true, // has_committed | 1528 true, // has_committed |
1511 false, // has_server_redirect | 1529 false, // has_server_redirect |
1512 nav_map->at(landing_url).at(0)); | 1530 nav_map->at(landing_url).at(0)); |
1513 VerifyHostToIpMap(); | 1531 VerifyHostToIpMap(); |
1514 | 1532 |
1515 auto referrer_chain = IdentifyReferrerChainForPPAPIDownload( | 1533 ReferrerChain referrer_chain; |
1516 landing_url, browser()->tab_strip_model()->GetActiveWebContents()); | 1534 IdentifyReferrerChainForPPAPIDownload( |
1517 | 1535 landing_url, |
1518 EXPECT_EQ(std::size_t(3), referrer_chain.size()); | 1536 browser()->tab_strip_model()->GetActiveWebContents(), |
| 1537 &referrer_chain); |
| 1538 EXPECT_EQ(3U, referrer_chain.size()); |
1519 VerifyReferrerChainEntry(landing_url, // url | 1539 VerifyReferrerChainEntry(landing_url, // url |
1520 ReferrerChainEntry::LANDING_PAGE, // type | 1540 ReferrerChainEntry::LANDING_PAGE, // type |
1521 test_server_ip, // ip_address | 1541 test_server_ip, // ip_address |
1522 redirect_url, // referrer_url | 1542 redirect_url, // referrer_url |
1523 redirect_url, // referrer_main_frame_url | 1543 redirect_url, // referrer_main_frame_url |
1524 false, // is_retargeting | 1544 false, // is_retargeting |
1525 referrer_chain[0]); | 1545 referrer_chain[0].get()); |
1526 VerifyReferrerChainEntry(redirect_url, // url | 1546 VerifyReferrerChainEntry(redirect_url, // url |
1527 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1547 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1528 test_server_ip, // ip_address | 1548 test_server_ip, // ip_address |
1529 initial_url, // referrer_url | 1549 initial_url, // referrer_url |
1530 initial_url, // referrer_main_frame_url | 1550 initial_url, // referrer_main_frame_url |
1531 false, // is_retargeting | 1551 false, // is_retargeting |
1532 referrer_chain[1]); | 1552 referrer_chain[1].get()); |
1533 VerifyReferrerChainEntry( | 1553 VerifyReferrerChainEntry( |
1534 initial_url, // url | 1554 initial_url, // url |
1535 ReferrerChainEntry::LANDING_REFERRER, // type | 1555 ReferrerChainEntry::LANDING_REFERRER, // type |
1536 test_server_ip, // ip_address | 1556 test_server_ip, // ip_address |
1537 GURL(), // referrer_url is empty since this beyonds 2 clicks. | 1557 GURL(), // referrer_url is empty since this beyonds 2 clicks. |
1538 GURL(), // referrer_main_frame_url is empty for the same reason. | 1558 GURL(), // referrer_main_frame_url is empty for the same reason. |
1539 false, // is_retargeting | 1559 false, // is_retargeting |
1540 referrer_chain[2]); | 1560 referrer_chain[2].get()); |
1541 } | 1561 } |
1542 | 1562 |
1543 // Click a link which redirects to a page that triggers PPAPI download without | 1563 // Click a link which redirects to a page that triggers PPAPI download without |
1544 // user gesture (a.k.a not a landing page). | 1564 // user gesture (a.k.a not a landing page). |
1545 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1565 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1546 PPAPIDownloadWithoutUserGestureOnHostingFrame) { | 1566 PPAPIDownloadWithoutUserGestureOnHostingFrame) { |
1547 GURL landing_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1567 GURL landing_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1548 ClickTestLink("complete_referrer_chain", 2, landing_url); | 1568 ClickTestLink("complete_referrer_chain", 2, landing_url); |
1549 GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL); | 1569 GURL redirect_url = embedded_test_server()->GetURL(kRedirectToLandingURL); |
1550 GURL hosting_url = embedded_test_server()->GetURL(kLandingURL); | 1570 GURL hosting_url = embedded_test_server()->GetURL(kLandingURL); |
1551 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 1571 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
1552 | 1572 |
1553 auto nav_map = navigation_map(); | 1573 auto nav_map = navigation_map(); |
1554 ASSERT_TRUE(nav_map); | 1574 ASSERT_TRUE(nav_map); |
1555 ASSERT_EQ(std::size_t(3), nav_map->size()); | 1575 ASSERT_EQ(3U, nav_map->size()); |
1556 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); | 1576 ASSERT_EQ(1U, nav_map->at(redirect_url).size()); |
1557 ASSERT_EQ(1U, nav_map->at(hosting_url).size()); | 1577 ASSERT_EQ(1U, nav_map->at(hosting_url).size()); |
1558 ASSERT_EQ(1U, nav_map->at(landing_url).size()); | 1578 ASSERT_EQ(1U, nav_map->at(landing_url).size()); |
1559 VerifyNavigationEvent(GURL(), // source_url | 1579 VerifyNavigationEvent(GURL(), // source_url |
1560 GURL(), // source_main_frame_url | 1580 GURL(), // source_main_frame_url |
1561 landing_url, // original_request_url | 1581 landing_url, // original_request_url |
1562 landing_url, // destination_url | 1582 landing_url, // destination_url |
1563 true, // is_user_initiated, | 1583 true, // is_user_initiated, |
1564 true, // has_committed | 1584 true, // has_committed |
1565 false, // has_server_redirect | 1585 false, // has_server_redirect |
1566 nav_map->at(landing_url).at(0)); | 1586 nav_map->at(landing_url).at(0)); |
1567 VerifyNavigationEvent(landing_url, // source_url | 1587 VerifyNavigationEvent(landing_url, // source_url |
1568 landing_url, // source_main_frame_url | 1588 landing_url, // source_main_frame_url |
1569 redirect_url, // original_request_url | 1589 redirect_url, // original_request_url |
1570 redirect_url, // destination_url | 1590 redirect_url, // destination_url |
1571 true, // is_user_initiated, | 1591 true, // is_user_initiated, |
1572 true, // has_committed | 1592 true, // has_committed |
1573 false, // has_server_redirect | 1593 false, // has_server_redirect |
1574 nav_map->at(redirect_url).at(0)); | 1594 nav_map->at(redirect_url).at(0)); |
1575 VerifyNavigationEvent(redirect_url, // source_url | 1595 VerifyNavigationEvent(redirect_url, // source_url |
1576 redirect_url, // source_main_frame_url | 1596 redirect_url, // source_main_frame_url |
1577 hosting_url, // original_request_url | 1597 hosting_url, // original_request_url |
1578 hosting_url, // destination_url | 1598 hosting_url, // destination_url |
1579 false, // is_user_initiated, | 1599 false, // is_user_initiated, |
1580 true, // has_committed | 1600 true, // has_committed |
1581 false, // has_server_redirect | 1601 false, // has_server_redirect |
1582 nav_map->at(hosting_url).at(0)); | 1602 nav_map->at(hosting_url).at(0)); |
1583 VerifyHostToIpMap(); | 1603 VerifyHostToIpMap(); |
1584 | 1604 |
1585 auto referrer_chain = IdentifyReferrerChainForPPAPIDownload( | 1605 ReferrerChain referrer_chain; |
1586 hosting_url, browser()->tab_strip_model()->GetActiveWebContents()); | 1606 IdentifyReferrerChainForPPAPIDownload( |
1587 | 1607 hosting_url, |
1588 EXPECT_EQ(std::size_t(3), referrer_chain.size()); | 1608 browser()->tab_strip_model()->GetActiveWebContents(), |
| 1609 &referrer_chain); |
| 1610 EXPECT_EQ(3U, referrer_chain.size()); |
1589 VerifyReferrerChainEntry(hosting_url, // url | 1611 VerifyReferrerChainEntry(hosting_url, // url |
1590 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1612 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1591 test_server_ip, // ip_address | 1613 test_server_ip, // ip_address |
1592 redirect_url, // referrer_url | 1614 redirect_url, // referrer_url |
1593 redirect_url, // referrer_main_frame_url | 1615 redirect_url, // referrer_main_frame_url |
1594 false, // is_retargeting | 1616 false, // is_retargeting |
1595 referrer_chain[0]); | 1617 referrer_chain[0].get()); |
1596 VerifyReferrerChainEntry(redirect_url, // url | 1618 VerifyReferrerChainEntry(redirect_url, // url |
1597 ReferrerChainEntry::CLIENT_REDIRECT, // type | 1619 ReferrerChainEntry::CLIENT_REDIRECT, // type |
1598 test_server_ip, // ip_address | 1620 test_server_ip, // ip_address |
1599 landing_url, // referrer_url | 1621 landing_url, // referrer_url |
1600 landing_url, // referrer_main_frame_url | 1622 landing_url, // referrer_main_frame_url |
1601 false, // is_retargeting | 1623 false, // is_retargeting |
1602 referrer_chain[1]); | 1624 referrer_chain[1].get()); |
1603 VerifyReferrerChainEntry(landing_url, // url | 1625 VerifyReferrerChainEntry(landing_url, // url |
1604 ReferrerChainEntry::LANDING_PAGE, // type | 1626 ReferrerChainEntry::LANDING_PAGE, // type |
1605 test_server_ip, // ip_address | 1627 test_server_ip, // ip_address |
1606 GURL(), // no more referrer before landing_url | 1628 GURL(), // no more referrer before landing_url |
1607 GURL(), | 1629 GURL(), |
1608 false, // is_retargeting | 1630 false, // is_retargeting |
1609 referrer_chain[2]); | 1631 referrer_chain[2].get()); |
1610 } | 1632 } |
1611 | 1633 |
1612 // Server-side redirect. | 1634 // Server-side redirect. |
1613 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, ServerRedirect) { | 1635 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, ServerRedirect) { |
1614 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1636 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1615 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 1637 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
1616 GURL request_url = | 1638 GURL request_url = |
1617 embedded_test_server()->GetURL("/server-redirect?" + download_url.spec()); | 1639 embedded_test_server()->GetURL("/server-redirect?" + download_url.spec()); |
1618 ui_test_utils::NavigateToURL(browser(), request_url); | 1640 ui_test_utils::NavigateToURL(browser(), request_url); |
1619 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); | 1641 std::string test_server_ip(embedded_test_server()->host_port_pair().host()); |
(...skipping 12 matching lines...) Expand all Loading... |
1632 nav_map->at(initial_url).at(0)); | 1654 nav_map->at(initial_url).at(0)); |
1633 VerifyNavigationEvent(GURL(), // source_url | 1655 VerifyNavigationEvent(GURL(), // source_url |
1634 GURL(), // source_main_frame_url | 1656 GURL(), // source_main_frame_url |
1635 request_url, // original_request_url | 1657 request_url, // original_request_url |
1636 download_url, // destination_url | 1658 download_url, // destination_url |
1637 true, // is_user_initiated, | 1659 true, // is_user_initiated, |
1638 false, // has_committed | 1660 false, // has_committed |
1639 true, // has_server_redirect | 1661 true, // has_server_redirect |
1640 nav_map->at(download_url).at(0)); | 1662 nav_map->at(download_url).at(0)); |
1641 | 1663 |
1642 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1664 ReferrerChain referrer_chain; |
| 1665 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
1643 ASSERT_EQ(1U, referrer_chain.size()); | 1666 ASSERT_EQ(1U, referrer_chain.size()); |
1644 VerifyReferrerChainEntry(download_url, // url | 1667 VerifyReferrerChainEntry(download_url, // url |
1645 ReferrerChainEntry::DOWNLOAD_URL, // type | 1668 ReferrerChainEntry::DOWNLOAD_URL, // type |
1646 test_server_ip, // ip_address | 1669 test_server_ip, // ip_address |
1647 GURL(), // referrer_url | 1670 GURL(), // referrer_url |
1648 GURL(), // referrer_main_frame_url | 1671 GURL(), // referrer_main_frame_url |
1649 false, // is_retargeting | 1672 false, // is_retargeting |
1650 referrer_chain[0]); | 1673 referrer_chain[0].get()); |
1651 } | 1674 } |
1652 | 1675 |
1653 // Retargeting immediately followed by server-side redirect. | 1676 // Retargeting immediately followed by server-side redirect. |
1654 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, | 1677 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, |
1655 RetargetingAndServerRedirect) { | 1678 RetargetingAndServerRedirect) { |
1656 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1679 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1657 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); | 1680 GURL download_url = embedded_test_server()->GetURL(kDownloadItemURL); |
1658 GURL request_url = | 1681 GURL request_url = |
1659 embedded_test_server()->GetURL("/server-redirect?" + download_url.spec()); | 1682 embedded_test_server()->GetURL("/server-redirect?" + download_url.spec()); |
1660 ClickTestLink("new_tab_download_with_server_redirect", 1, initial_url); | 1683 ClickTestLink("new_tab_download_with_server_redirect", 1, initial_url); |
(...skipping 22 matching lines...) Expand all Loading... |
1683 nav_map->at(request_url).at(0)); | 1706 nav_map->at(request_url).at(0)); |
1684 VerifyNavigationEvent(GURL(), // source_url | 1707 VerifyNavigationEvent(GURL(), // source_url |
1685 GURL(), // source_main_frame_url | 1708 GURL(), // source_main_frame_url |
1686 request_url, // original_request_url | 1709 request_url, // original_request_url |
1687 download_url, // destination_url | 1710 download_url, // destination_url |
1688 false, // is_user_initiated, | 1711 false, // is_user_initiated, |
1689 false, // has_committed | 1712 false, // has_committed |
1690 true, // has_server_redirect | 1713 true, // has_server_redirect |
1691 nav_map->at(download_url).at(0)); | 1714 nav_map->at(download_url).at(0)); |
1692 | 1715 |
1693 auto referrer_chain = IdentifyReferrerChainForDownload(GetDownload()); | 1716 ReferrerChain referrer_chain; |
| 1717 IdentifyReferrerChainForDownload(GetDownload(), &referrer_chain); |
1694 ASSERT_EQ(2U, referrer_chain.size()); | 1718 ASSERT_EQ(2U, referrer_chain.size()); |
1695 VerifyReferrerChainEntry(download_url, // url | 1719 VerifyReferrerChainEntry(download_url, // url |
1696 ReferrerChainEntry::DOWNLOAD_URL, // type | 1720 ReferrerChainEntry::DOWNLOAD_URL, // type |
1697 test_server_ip, // ip_address | 1721 test_server_ip, // ip_address |
1698 initial_url, // referrer_url | 1722 initial_url, // referrer_url |
1699 initial_url, // referrer_main_frame_url | 1723 initial_url, // referrer_main_frame_url |
1700 true, // is_retargeting | 1724 true, // is_retargeting |
1701 referrer_chain[0]); | 1725 referrer_chain[0].get()); |
1702 VerifyReferrerChainEntry(initial_url, // url | 1726 VerifyReferrerChainEntry(initial_url, // url |
1703 ReferrerChainEntry::LANDING_PAGE, // type | 1727 ReferrerChainEntry::LANDING_PAGE, // type |
1704 test_server_ip, // ip_address | 1728 test_server_ip, // ip_address |
1705 GURL(), // referrer_url | 1729 GURL(), // referrer_url |
1706 GURL(), // referrer_main_frame_url | 1730 GURL(), // referrer_main_frame_url |
1707 false, // is_retargeting | 1731 false, // is_retargeting |
1708 referrer_chain[1]); | 1732 referrer_chain[1].get()); |
1709 } | 1733 } |
1710 | 1734 |
1711 // host_to_ip_map_ size should increase by one after a new navigation. | 1735 // host_to_ip_map_ size should increase by one after a new navigation. |
1712 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, AddIPMapping) { | 1736 IN_PROC_BROWSER_TEST_F(SBNavigationObserverBrowserTest, AddIPMapping) { |
1713 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); | 1737 GURL initial_url = embedded_test_server()->GetURL(kSingleFrameTestURL); |
1714 auto ip_map = host_to_ip_map(); | 1738 auto ip_map = host_to_ip_map(); |
1715 std::string test_server_host(embedded_test_server()->base_url().host()); | 1739 std::string test_server_host(embedded_test_server()->base_url().host()); |
1716 ip_map->clear(); | 1740 ip_map->clear(); |
1717 ip_map->insert( | 1741 ip_map->insert( |
1718 std::make_pair(test_server_host, std::vector<ResolvedIPAddress>())); | 1742 std::make_pair(test_server_host, std::vector<ResolvedIPAddress>())); |
(...skipping 18 matching lines...) Expand all Loading... |
1737 yesterday, embedded_test_server()->host_port_pair().host())); | 1761 yesterday, embedded_test_server()->host_port_pair().host())); |
1738 ASSERT_EQ(1U, ip_map->at(test_server_host).size()); | 1762 ASSERT_EQ(1U, ip_map->at(test_server_host).size()); |
1739 ClickTestLink("direct_download", 1, initial_url); | 1763 ClickTestLink("direct_download", 1, initial_url); |
1740 EXPECT_EQ(1U, ip_map->at(test_server_host).size()); | 1764 EXPECT_EQ(1U, ip_map->at(test_server_host).size()); |
1741 EXPECT_EQ(embedded_test_server()->host_port_pair().host(), | 1765 EXPECT_EQ(embedded_test_server()->host_port_pair().host(), |
1742 ip_map->at(test_server_host).back().ip); | 1766 ip_map->at(test_server_host).back().ip); |
1743 EXPECT_NE(yesterday, ip_map->at(test_server_host).front().timestamp); | 1767 EXPECT_NE(yesterday, ip_map->at(test_server_host).front().timestamp); |
1744 } | 1768 } |
1745 | 1769 |
1746 } // namespace safe_browsing | 1770 } // namespace safe_browsing |
OLD | NEW |