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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_navigation_observer_browsertest.cc

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

Powered by Google App Engine
This is Rietveld 408576698