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

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

Powered by Google App Engine
This is Rietveld 408576698