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

Side by Side Diff: content/browser/web_contents/web_contents_impl_unittest.cc

Issue 562603002: Move PageTransition from //content/public/common to //ui/base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/logging.h" 5 #include "base/logging.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "content/browser/frame_host/cross_site_transferring_request.h" 7 #include "content/browser/frame_host/cross_site_transferring_request.h"
8 #include "content/browser/frame_host/interstitial_page_impl.h" 8 #include "content/browser/frame_host/interstitial_page_impl.h"
9 #include "content/browser/frame_host/navigation_entry_impl.h" 9 #include "content/browser/frame_host/navigation_entry_impl.h"
10 #include "content/browser/media/audio_stream_monitor.h" 10 #include "content/browser/media/audio_stream_monitor.h"
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 return command_received_count_; 150 return command_received_count_;
151 } 151 }
152 152
153 void TestDomOperationResponse(const std::string& json_string) { 153 void TestDomOperationResponse(const std::string& json_string) {
154 if (enabled()) 154 if (enabled())
155 CommandReceived(); 155 CommandReceived();
156 } 156 }
157 157
158 void TestDidNavigate(int page_id, const GURL& url) { 158 void TestDidNavigate(int page_id, const GURL& url) {
159 FrameHostMsg_DidCommitProvisionalLoad_Params params; 159 FrameHostMsg_DidCommitProvisionalLoad_Params params;
160 InitNavigateParams(&params, page_id, url, PAGE_TRANSITION_TYPED); 160 InitNavigateParams(&params, page_id, url, ui::PAGE_TRANSITION_TYPED);
161 DidNavigate(GetRenderViewHostForTesting(), params); 161 DidNavigate(GetRenderViewHostForTesting(), params);
162 } 162 }
163 163
164 void TestRenderViewTerminated(base::TerminationStatus status, 164 void TestRenderViewTerminated(base::TerminationStatus status,
165 int error_code) { 165 int error_code) {
166 RenderViewTerminated(GetRenderViewHostForTesting(), status, error_code); 166 RenderViewTerminated(GetRenderViewHostForTesting(), status, error_code);
167 } 167 }
168 168
169 bool is_showing() const { 169 bool is_showing() const {
170 return static_cast<TestRenderWidgetHostView*>( 170 return static_cast<TestRenderWidgetHostView*>(
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 }; 337 };
338 338
339 } // namespace 339 } // namespace
340 340
341 // Test to make sure that title updates get stripped of whitespace. 341 // Test to make sure that title updates get stripped of whitespace.
342 TEST_F(WebContentsImplTest, UpdateTitle) { 342 TEST_F(WebContentsImplTest, UpdateTitle) {
343 NavigationControllerImpl& cont = 343 NavigationControllerImpl& cont =
344 static_cast<NavigationControllerImpl&>(controller()); 344 static_cast<NavigationControllerImpl&>(controller());
345 FrameHostMsg_DidCommitProvisionalLoad_Params params; 345 FrameHostMsg_DidCommitProvisionalLoad_Params params;
346 InitNavigateParams( 346 InitNavigateParams(
347 &params, 0, GURL(url::kAboutBlankURL), PAGE_TRANSITION_TYPED); 347 &params, 0, GURL(url::kAboutBlankURL), ui::PAGE_TRANSITION_TYPED);
348 348
349 LoadCommittedDetails details; 349 LoadCommittedDetails details;
350 cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details); 350 cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details);
351 351
352 contents()->UpdateTitle(contents()->GetMainFrame(), 0, 352 contents()->UpdateTitle(contents()->GetMainFrame(), 0,
353 base::ASCIIToUTF16(" Lots O' Whitespace\n"), 353 base::ASCIIToUTF16(" Lots O' Whitespace\n"),
354 base::i18n::LEFT_TO_RIGHT); 354 base::i18n::LEFT_TO_RIGHT);
355 EXPECT_EQ(base::ASCIIToUTF16("Lots O' Whitespace"), contents()->GetTitle()); 355 EXPECT_EQ(base::ASCIIToUTF16("Lots O' Whitespace"), contents()->GetTitle());
356 } 356 }
357 357
358 TEST_F(WebContentsImplTest, DontUseTitleFromPendingEntry) { 358 TEST_F(WebContentsImplTest, DontUseTitleFromPendingEntry) {
359 const GURL kGURL("chrome://blah"); 359 const GURL kGURL("chrome://blah");
360 controller().LoadURL( 360 controller().LoadURL(
361 kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 361 kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
362 EXPECT_EQ(base::string16(), contents()->GetTitle()); 362 EXPECT_EQ(base::string16(), contents()->GetTitle());
363 } 363 }
364 364
365 TEST_F(WebContentsImplTest, UseTitleFromPendingEntryIfSet) { 365 TEST_F(WebContentsImplTest, UseTitleFromPendingEntryIfSet) {
366 const GURL kGURL("chrome://blah"); 366 const GURL kGURL("chrome://blah");
367 const base::string16 title = base::ASCIIToUTF16("My Title"); 367 const base::string16 title = base::ASCIIToUTF16("My Title");
368 controller().LoadURL( 368 controller().LoadURL(
369 kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 369 kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
370 370
371 NavigationEntry* entry = controller().GetVisibleEntry(); 371 NavigationEntry* entry = controller().GetVisibleEntry();
372 ASSERT_EQ(kGURL, entry->GetURL()); 372 ASSERT_EQ(kGURL, entry->GetURL());
373 entry->SetTitle(title); 373 entry->SetTitle(title);
374 374
375 EXPECT_EQ(title, contents()->GetTitle()); 375 EXPECT_EQ(title, contents()->GetTitle());
376 } 376 }
377 377
378 // Test view source mode for a webui page. 378 // Test view source mode for a webui page.
379 TEST_F(WebContentsImplTest, NTPViewSource) { 379 TEST_F(WebContentsImplTest, NTPViewSource) {
380 NavigationControllerImpl& cont = 380 NavigationControllerImpl& cont =
381 static_cast<NavigationControllerImpl&>(controller()); 381 static_cast<NavigationControllerImpl&>(controller());
382 const char kUrl[] = "view-source:chrome://blah"; 382 const char kUrl[] = "view-source:chrome://blah";
383 const GURL kGURL(kUrl); 383 const GURL kGURL(kUrl);
384 384
385 process()->sink().ClearMessages(); 385 process()->sink().ClearMessages();
386 386
387 cont.LoadURL( 387 cont.LoadURL(
388 kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 388 kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
389 rvh()->GetDelegate()->RenderViewCreated(rvh()); 389 rvh()->GetDelegate()->RenderViewCreated(rvh());
390 // Did we get the expected message? 390 // Did we get the expected message?
391 EXPECT_TRUE(process()->sink().GetFirstMessageMatching( 391 EXPECT_TRUE(process()->sink().GetFirstMessageMatching(
392 ViewMsg_EnableViewSourceMode::ID)); 392 ViewMsg_EnableViewSourceMode::ID));
393 393
394 FrameHostMsg_DidCommitProvisionalLoad_Params params; 394 FrameHostMsg_DidCommitProvisionalLoad_Params params;
395 InitNavigateParams(&params, 0, kGURL, PAGE_TRANSITION_TYPED); 395 InitNavigateParams(&params, 0, kGURL, ui::PAGE_TRANSITION_TYPED);
396 LoadCommittedDetails details; 396 LoadCommittedDetails details;
397 cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details); 397 cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details);
398 // Also check title and url. 398 // Also check title and url.
399 EXPECT_EQ(base::ASCIIToUTF16(kUrl), contents()->GetTitle()); 399 EXPECT_EQ(base::ASCIIToUTF16(kUrl), contents()->GetTitle());
400 } 400 }
401 401
402 // Test to ensure UpdateMaxPageID is working properly. 402 // Test to ensure UpdateMaxPageID is working properly.
403 TEST_F(WebContentsImplTest, UpdateMaxPageID) { 403 TEST_F(WebContentsImplTest, UpdateMaxPageID) {
404 SiteInstance* instance1 = contents()->GetSiteInstance(); 404 SiteInstance* instance1 = contents()->GetSiteInstance();
405 scoped_refptr<SiteInstance> instance2(SiteInstance::Create(NULL)); 405 scoped_refptr<SiteInstance> instance2(SiteInstance::Create(NULL));
(...skipping 18 matching lines...) Expand all
424 424
425 // Test simple same-SiteInstance navigation. 425 // Test simple same-SiteInstance navigation.
426 TEST_F(WebContentsImplTest, SimpleNavigation) { 426 TEST_F(WebContentsImplTest, SimpleNavigation) {
427 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 427 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
428 SiteInstance* instance1 = contents()->GetSiteInstance(); 428 SiteInstance* instance1 = contents()->GetSiteInstance();
429 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 429 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
430 430
431 // Navigate to URL 431 // Navigate to URL
432 const GURL url("http://www.google.com"); 432 const GURL url("http://www.google.com");
433 controller().LoadURL( 433 controller().LoadURL(
434 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 434 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
435 EXPECT_FALSE(contents()->cross_navigation_pending()); 435 EXPECT_FALSE(contents()->cross_navigation_pending());
436 EXPECT_EQ(instance1, orig_rfh->GetSiteInstance()); 436 EXPECT_EQ(instance1, orig_rfh->GetSiteInstance());
437 // Controller's pending entry will have a NULL site instance until we assign 437 // Controller's pending entry will have a NULL site instance until we assign
438 // it in DidNavigate. 438 // it in DidNavigate.
439 EXPECT_TRUE( 439 EXPECT_TRUE(
440 NavigationEntryImpl::FromNavigationEntry(controller().GetVisibleEntry())-> 440 NavigationEntryImpl::FromNavigationEntry(controller().GetVisibleEntry())->
441 site_instance() == NULL); 441 site_instance() == NULL);
442 442
443 // DidNavigate from the page 443 // DidNavigate from the page
444 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 444 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
445 EXPECT_FALSE(contents()->cross_navigation_pending()); 445 EXPECT_FALSE(contents()->cross_navigation_pending());
446 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 446 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
447 EXPECT_EQ(instance1, orig_rfh->GetSiteInstance()); 447 EXPECT_EQ(instance1, orig_rfh->GetSiteInstance());
448 // Controller's entry should now have the SiteInstance, or else we won't be 448 // Controller's entry should now have the SiteInstance, or else we won't be
449 // able to find it later. 449 // able to find it later.
450 EXPECT_EQ( 450 EXPECT_EQ(
451 instance1, 451 instance1,
452 NavigationEntryImpl::FromNavigationEntry(controller().GetVisibleEntry())-> 452 NavigationEntryImpl::FromNavigationEntry(controller().GetVisibleEntry())->
453 site_instance()); 453 site_instance());
454 } 454 }
455 455
456 // Test that we reject NavigateToEntry if the url is over kMaxURLChars. 456 // Test that we reject NavigateToEntry if the url is over kMaxURLChars.
457 TEST_F(WebContentsImplTest, NavigateToExcessivelyLongURL) { 457 TEST_F(WebContentsImplTest, NavigateToExcessivelyLongURL) {
458 // Construct a URL that's kMaxURLChars + 1 long of all 'a's. 458 // Construct a URL that's kMaxURLChars + 1 long of all 'a's.
459 const GURL url(std::string("http://example.org/").append( 459 const GURL url(std::string("http://example.org/").append(
460 GetMaxURLChars() + 1, 'a')); 460 GetMaxURLChars() + 1, 'a'));
461 461
462 controller().LoadURL( 462 controller().LoadURL(
463 url, Referrer(), PAGE_TRANSITION_GENERATED, std::string()); 463 url, Referrer(), ui::PAGE_TRANSITION_GENERATED, std::string());
464 EXPECT_TRUE(controller().GetVisibleEntry() == NULL); 464 EXPECT_TRUE(controller().GetVisibleEntry() == NULL);
465 } 465 }
466 466
467 // Test that navigating across a site boundary creates a new RenderViewHost 467 // Test that navigating across a site boundary creates a new RenderViewHost
468 // with a new SiteInstance. Going back should do the same. 468 // with a new SiteInstance. Going back should do the same.
469 TEST_F(WebContentsImplTest, CrossSiteBoundaries) { 469 TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
470 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 470 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
471 int orig_rvh_delete_count = 0; 471 int orig_rvh_delete_count = 0;
472 orig_rfh->GetRenderViewHost()->set_delete_counter(&orig_rvh_delete_count); 472 orig_rfh->GetRenderViewHost()->set_delete_counter(&orig_rvh_delete_count);
473 SiteInstance* instance1 = contents()->GetSiteInstance(); 473 SiteInstance* instance1 = contents()->GetSiteInstance();
474 474
475 // Navigate to URL. First URL should use first RenderViewHost. 475 // Navigate to URL. First URL should use first RenderViewHost.
476 const GURL url("http://www.google.com"); 476 const GURL url("http://www.google.com");
477 controller().LoadURL( 477 controller().LoadURL(
478 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 478 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
479 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 479 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
480 480
481 // Keep the number of active views in orig_rfh's SiteInstance non-zero so that 481 // Keep the number of active views in orig_rfh's SiteInstance non-zero so that
482 // orig_rfh doesn't get deleted when it gets swapped out. 482 // orig_rfh doesn't get deleted when it gets swapped out.
483 static_cast<SiteInstanceImpl*>(orig_rfh->GetSiteInstance())-> 483 static_cast<SiteInstanceImpl*>(orig_rfh->GetSiteInstance())->
484 increment_active_view_count(); 484 increment_active_view_count();
485 485
486 EXPECT_FALSE(contents()->cross_navigation_pending()); 486 EXPECT_FALSE(contents()->cross_navigation_pending());
487 EXPECT_EQ(orig_rfh->GetRenderViewHost(), contents()->GetRenderViewHost()); 487 EXPECT_EQ(orig_rfh->GetRenderViewHost(), contents()->GetRenderViewHost());
488 EXPECT_EQ(url, contents()->GetLastCommittedURL()); 488 EXPECT_EQ(url, contents()->GetLastCommittedURL());
489 EXPECT_EQ(url, contents()->GetVisibleURL()); 489 EXPECT_EQ(url, contents()->GetVisibleURL());
490 490
491 // Navigate to new site 491 // Navigate to new site
492 const GURL url2("http://www.yahoo.com"); 492 const GURL url2("http://www.yahoo.com");
493 controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 493 controller().LoadURL(
494 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
494 EXPECT_TRUE(contents()->cross_navigation_pending()); 495 EXPECT_TRUE(contents()->cross_navigation_pending());
495 EXPECT_EQ(url, contents()->GetLastCommittedURL()); 496 EXPECT_EQ(url, contents()->GetLastCommittedURL());
496 EXPECT_EQ(url2, contents()->GetVisibleURL()); 497 EXPECT_EQ(url2, contents()->GetVisibleURL());
497 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame(); 498 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
498 int pending_rvh_delete_count = 0; 499 int pending_rvh_delete_count = 0;
499 pending_rfh->GetRenderViewHost()->set_delete_counter( 500 pending_rfh->GetRenderViewHost()->set_delete_counter(
500 &pending_rvh_delete_count); 501 &pending_rvh_delete_count);
501 502
502 // Navigations should be suspended in pending_rfh until BeforeUnloadACK. 503 // Navigations should be suspended in pending_rfh until BeforeUnloadACK.
503 EXPECT_TRUE(pending_rfh->are_navigations_suspended()); 504 EXPECT_TRUE(pending_rfh->are_navigations_suspended());
504 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true); 505 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
505 EXPECT_FALSE(pending_rfh->are_navigations_suspended()); 506 EXPECT_FALSE(pending_rfh->are_navigations_suspended());
506 507
507 // DidNavigate from the pending page 508 // DidNavigate from the pending page
508 contents()->TestDidNavigate( 509 contents()->TestDidNavigate(
509 pending_rfh, 1, url2, PAGE_TRANSITION_TYPED); 510 pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
510 SiteInstance* instance2 = contents()->GetSiteInstance(); 511 SiteInstance* instance2 = contents()->GetSiteInstance();
511 512
512 // Keep the number of active views in pending_rfh's SiteInstance 513 // Keep the number of active views in pending_rfh's SiteInstance
513 // non-zero so that orig_rfh doesn't get deleted when it gets 514 // non-zero so that orig_rfh doesn't get deleted when it gets
514 // swapped out. 515 // swapped out.
515 static_cast<SiteInstanceImpl*>(pending_rfh->GetSiteInstance())-> 516 static_cast<SiteInstanceImpl*>(pending_rfh->GetSiteInstance())->
516 increment_active_view_count(); 517 increment_active_view_count();
517 518
518 EXPECT_FALSE(contents()->cross_navigation_pending()); 519 EXPECT_FALSE(contents()->cross_navigation_pending());
519 EXPECT_EQ(pending_rfh, contents()->GetMainFrame()); 520 EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
(...skipping 13 matching lines...) Expand all
533 TestRenderFrameHost* goback_rfh = contents()->GetPendingMainFrame(); 534 TestRenderFrameHost* goback_rfh = contents()->GetPendingMainFrame();
534 EXPECT_EQ(orig_rfh, goback_rfh); 535 EXPECT_EQ(orig_rfh, goback_rfh);
535 EXPECT_TRUE(contents()->cross_navigation_pending()); 536 EXPECT_TRUE(contents()->cross_navigation_pending());
536 537
537 // Navigations should be suspended in goback_rfh until BeforeUnloadACK. 538 // Navigations should be suspended in goback_rfh until BeforeUnloadACK.
538 EXPECT_TRUE(goback_rfh->are_navigations_suspended()); 539 EXPECT_TRUE(goback_rfh->are_navigations_suspended());
539 pending_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true); 540 pending_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
540 EXPECT_FALSE(goback_rfh->are_navigations_suspended()); 541 EXPECT_FALSE(goback_rfh->are_navigations_suspended());
541 542
542 // DidNavigate from the back action 543 // DidNavigate from the back action
543 contents()->TestDidNavigate(goback_rfh, 1, url2, PAGE_TRANSITION_TYPED); 544 contents()->TestDidNavigate(goback_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
544 EXPECT_FALSE(contents()->cross_navigation_pending()); 545 EXPECT_FALSE(contents()->cross_navigation_pending());
545 EXPECT_EQ(goback_rfh, contents()->GetMainFrame()); 546 EXPECT_EQ(goback_rfh, contents()->GetMainFrame());
546 EXPECT_EQ(instance1, contents()->GetSiteInstance()); 547 EXPECT_EQ(instance1, contents()->GetSiteInstance());
547 // The pending RFH should now be swapped out, not deleted. 548 // The pending RFH should now be swapped out, not deleted.
548 EXPECT_TRUE(contents()->GetRenderManagerForTesting()-> 549 EXPECT_TRUE(contents()->GetRenderManagerForTesting()->
549 IsOnSwappedOutList(pending_rfh)); 550 IsOnSwappedOutList(pending_rfh));
550 EXPECT_EQ(pending_rvh_delete_count, 0); 551 EXPECT_EQ(pending_rvh_delete_count, 0);
551 pending_rfh->OnSwappedOut(false); 552 pending_rfh->OnSwappedOut(false);
552 553
553 // Close contents and ensure RVHs are deleted. 554 // Close contents and ensure RVHs are deleted.
554 DeleteContents(); 555 DeleteContents();
555 EXPECT_EQ(orig_rvh_delete_count, 1); 556 EXPECT_EQ(orig_rvh_delete_count, 1);
556 EXPECT_EQ(pending_rvh_delete_count, 1); 557 EXPECT_EQ(pending_rvh_delete_count, 1);
557 } 558 }
558 559
559 // Test that navigating across a site boundary after a crash creates a new 560 // Test that navigating across a site boundary after a crash creates a new
560 // RFH without requiring a cross-site transition (i.e., PENDING state). 561 // RFH without requiring a cross-site transition (i.e., PENDING state).
561 TEST_F(WebContentsImplTest, CrossSiteBoundariesAfterCrash) { 562 TEST_F(WebContentsImplTest, CrossSiteBoundariesAfterCrash) {
562 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 563 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
563 564
564 int orig_rvh_delete_count = 0; 565 int orig_rvh_delete_count = 0;
565 orig_rfh->GetRenderViewHost()->set_delete_counter(&orig_rvh_delete_count); 566 orig_rfh->GetRenderViewHost()->set_delete_counter(&orig_rvh_delete_count);
566 SiteInstance* instance1 = contents()->GetSiteInstance(); 567 SiteInstance* instance1 = contents()->GetSiteInstance();
567 568
568 // Navigate to URL. First URL should use first RenderViewHost. 569 // Navigate to URL. First URL should use first RenderViewHost.
569 const GURL url("http://www.google.com"); 570 const GURL url("http://www.google.com");
570 controller().LoadURL( 571 controller().LoadURL(
571 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 572 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
572 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 573 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
573 574
574 EXPECT_FALSE(contents()->cross_navigation_pending()); 575 EXPECT_FALSE(contents()->cross_navigation_pending());
575 EXPECT_EQ(orig_rfh->GetRenderViewHost(), contents()->GetRenderViewHost()); 576 EXPECT_EQ(orig_rfh->GetRenderViewHost(), contents()->GetRenderViewHost());
576 577
577 // Simulate a renderer crash. 578 // Simulate a renderer crash.
578 orig_rfh->GetRenderViewHost()->set_render_view_created(false); 579 orig_rfh->GetRenderViewHost()->set_render_view_created(false);
579 orig_rfh->set_render_frame_created(false); 580 orig_rfh->set_render_frame_created(false);
580 581
581 // Navigate to new site. We should not go into PENDING. 582 // Navigate to new site. We should not go into PENDING.
582 const GURL url2("http://www.yahoo.com"); 583 const GURL url2("http://www.yahoo.com");
583 controller().LoadURL( 584 controller().LoadURL(
584 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 585 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
585 TestRenderFrameHost* new_rfh = contents()->GetMainFrame(); 586 TestRenderFrameHost* new_rfh = contents()->GetMainFrame();
586 EXPECT_FALSE(contents()->cross_navigation_pending()); 587 EXPECT_FALSE(contents()->cross_navigation_pending());
587 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 588 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
588 EXPECT_NE(orig_rfh, new_rfh); 589 EXPECT_NE(orig_rfh, new_rfh);
589 EXPECT_EQ(orig_rvh_delete_count, 1); 590 EXPECT_EQ(orig_rvh_delete_count, 1);
590 591
591 // DidNavigate from the new page 592 // DidNavigate from the new page
592 contents()->TestDidNavigate(new_rfh, 1, url2, PAGE_TRANSITION_TYPED); 593 contents()->TestDidNavigate(new_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
593 SiteInstance* instance2 = contents()->GetSiteInstance(); 594 SiteInstance* instance2 = contents()->GetSiteInstance();
594 595
595 EXPECT_FALSE(contents()->cross_navigation_pending()); 596 EXPECT_FALSE(contents()->cross_navigation_pending());
596 EXPECT_EQ(new_rfh, main_rfh()); 597 EXPECT_EQ(new_rfh, main_rfh());
597 EXPECT_NE(instance1, instance2); 598 EXPECT_NE(instance1, instance2);
598 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 599 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
599 600
600 // Close contents and ensure RVHs are deleted. 601 // Close contents and ensure RVHs are deleted.
601 DeleteContents(); 602 DeleteContents();
602 EXPECT_EQ(orig_rvh_delete_count, 1); 603 EXPECT_EQ(orig_rvh_delete_count, 1);
603 } 604 }
604 605
605 // Test that opening a new contents in the same SiteInstance and then navigating 606 // Test that opening a new contents in the same SiteInstance and then navigating
606 // both contentses to a new site will place both contentses in a single 607 // both contentses to a new site will place both contentses in a single
607 // SiteInstance. 608 // SiteInstance.
608 TEST_F(WebContentsImplTest, NavigateTwoTabsCrossSite) { 609 TEST_F(WebContentsImplTest, NavigateTwoTabsCrossSite) {
609 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 610 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
610 SiteInstance* instance1 = contents()->GetSiteInstance(); 611 SiteInstance* instance1 = contents()->GetSiteInstance();
611 612
612 // Navigate to URL. First URL should use first RenderViewHost. 613 // Navigate to URL. First URL should use first RenderViewHost.
613 const GURL url("http://www.google.com"); 614 const GURL url("http://www.google.com");
614 controller().LoadURL( 615 controller().LoadURL(
615 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 616 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
616 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 617 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
617 618
618 // Open a new contents with the same SiteInstance, navigated to the same site. 619 // Open a new contents with the same SiteInstance, navigated to the same site.
619 scoped_ptr<TestWebContents> contents2( 620 scoped_ptr<TestWebContents> contents2(
620 TestWebContents::Create(browser_context(), instance1)); 621 TestWebContents::Create(browser_context(), instance1));
621 contents2->GetController().LoadURL(url, Referrer(), 622 contents2->GetController().LoadURL(url, Referrer(),
622 PAGE_TRANSITION_TYPED, 623 ui::PAGE_TRANSITION_TYPED,
623 std::string()); 624 std::string());
624 // Need this page id to be 2 since the site instance is the same (which is the 625 // Need this page id to be 2 since the site instance is the same (which is the
625 // scope of page IDs) and we want to consider this a new page. 626 // scope of page IDs) and we want to consider this a new page.
626 contents2->TestDidNavigate( 627 contents2->TestDidNavigate(
627 contents2->GetMainFrame(), 2, url, PAGE_TRANSITION_TYPED); 628 contents2->GetMainFrame(), 2, url, ui::PAGE_TRANSITION_TYPED);
628 629
629 // Navigate first contents to a new site. 630 // Navigate first contents to a new site.
630 const GURL url2a("http://www.yahoo.com"); 631 const GURL url2a("http://www.yahoo.com");
631 controller().LoadURL( 632 controller().LoadURL(
632 url2a, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 633 url2a, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
633 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true); 634 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
634 TestRenderFrameHost* pending_rfh_a = contents()->GetPendingMainFrame(); 635 TestRenderFrameHost* pending_rfh_a = contents()->GetPendingMainFrame();
635 contents()->TestDidNavigate( 636 contents()->TestDidNavigate(
636 pending_rfh_a, 1, url2a, PAGE_TRANSITION_TYPED); 637 pending_rfh_a, 1, url2a, ui::PAGE_TRANSITION_TYPED);
637 SiteInstance* instance2a = contents()->GetSiteInstance(); 638 SiteInstance* instance2a = contents()->GetSiteInstance();
638 EXPECT_NE(instance1, instance2a); 639 EXPECT_NE(instance1, instance2a);
639 640
640 // Navigate second contents to the same site as the first tab. 641 // Navigate second contents to the same site as the first tab.
641 const GURL url2b("http://mail.yahoo.com"); 642 const GURL url2b("http://mail.yahoo.com");
642 contents2->GetController().LoadURL(url2b, Referrer(), 643 contents2->GetController().LoadURL(url2b, Referrer(),
643 PAGE_TRANSITION_TYPED, 644 ui::PAGE_TRANSITION_TYPED,
644 std::string()); 645 std::string());
645 TestRenderFrameHost* rfh2 = contents2->GetMainFrame(); 646 TestRenderFrameHost* rfh2 = contents2->GetMainFrame();
646 rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true); 647 rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true);
647 TestRenderFrameHost* pending_rfh_b = contents2->GetPendingMainFrame(); 648 TestRenderFrameHost* pending_rfh_b = contents2->GetPendingMainFrame();
648 EXPECT_TRUE(pending_rfh_b != NULL); 649 EXPECT_TRUE(pending_rfh_b != NULL);
649 EXPECT_TRUE(contents2->cross_navigation_pending()); 650 EXPECT_TRUE(contents2->cross_navigation_pending());
650 651
651 // NOTE(creis): We used to be in danger of showing a crash page here if the 652 // NOTE(creis): We used to be in danger of showing a crash page here if the
652 // second contents hadn't navigated somewhere first (bug 1145430). That case 653 // second contents hadn't navigated somewhere first (bug 1145430). That case
653 // is now covered by the CrossSiteBoundariesAfterCrash test. 654 // is now covered by the CrossSiteBoundariesAfterCrash test.
654 contents2->TestDidNavigate(pending_rfh_b, 2, url2b, PAGE_TRANSITION_TYPED); 655 contents2->TestDidNavigate(
656 pending_rfh_b, 2, url2b, ui::PAGE_TRANSITION_TYPED);
655 SiteInstance* instance2b = contents2->GetSiteInstance(); 657 SiteInstance* instance2b = contents2->GetSiteInstance();
656 EXPECT_NE(instance1, instance2b); 658 EXPECT_NE(instance1, instance2b);
657 659
658 // Both contentses should now be in the same SiteInstance. 660 // Both contentses should now be in the same SiteInstance.
659 EXPECT_EQ(instance2a, instance2b); 661 EXPECT_EQ(instance2a, instance2b);
660 } 662 }
661 663
662 // The embedder can request sites for certain urls not be be assigned to the 664 // The embedder can request sites for certain urls not be be assigned to the
663 // SiteInstance through ShouldAssignSiteForURL() in content browser client, 665 // SiteInstance through ShouldAssignSiteForURL() in content browser client,
664 // allowing to reuse the renderer backing certain chrome urls for subsequent 666 // allowing to reuse the renderer backing certain chrome urls for subsequent
665 // navigation. The test verifies that the override is honored. 667 // navigation. The test verifies that the override is honored.
666 TEST_F(WebContentsImplTest, NavigateFromSitelessUrl) { 668 TEST_F(WebContentsImplTest, NavigateFromSitelessUrl) {
667 WebContentsImplTestBrowserClient browser_client; 669 WebContentsImplTestBrowserClient browser_client;
668 SetBrowserClientForTesting(&browser_client); 670 SetBrowserClientForTesting(&browser_client);
669 671
670 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 672 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
671 int orig_rvh_delete_count = 0; 673 int orig_rvh_delete_count = 0;
672 orig_rfh->GetRenderViewHost()->set_delete_counter(&orig_rvh_delete_count); 674 orig_rfh->GetRenderViewHost()->set_delete_counter(&orig_rvh_delete_count);
673 SiteInstanceImpl* orig_instance = 675 SiteInstanceImpl* orig_instance =
674 static_cast<SiteInstanceImpl*>(contents()->GetSiteInstance()); 676 static_cast<SiteInstanceImpl*>(contents()->GetSiteInstance());
675 677
676 browser_client.set_assign_site_for_url(false); 678 browser_client.set_assign_site_for_url(false);
677 // Navigate to an URL that will not assign a new SiteInstance. 679 // Navigate to an URL that will not assign a new SiteInstance.
678 const GURL native_url("non-site-url://stuffandthings"); 680 const GURL native_url("non-site-url://stuffandthings");
679 controller().LoadURL( 681 controller().LoadURL(
680 native_url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 682 native_url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
681 contents()->TestDidNavigate(orig_rfh, 1, native_url, PAGE_TRANSITION_TYPED); 683 contents()->TestDidNavigate(
684 orig_rfh, 1, native_url, ui::PAGE_TRANSITION_TYPED);
682 685
683 EXPECT_FALSE(contents()->cross_navigation_pending()); 686 EXPECT_FALSE(contents()->cross_navigation_pending());
684 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 687 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
685 EXPECT_EQ(native_url, contents()->GetLastCommittedURL()); 688 EXPECT_EQ(native_url, contents()->GetLastCommittedURL());
686 EXPECT_EQ(native_url, contents()->GetVisibleURL()); 689 EXPECT_EQ(native_url, contents()->GetVisibleURL());
687 EXPECT_EQ(orig_instance, contents()->GetSiteInstance()); 690 EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
688 EXPECT_EQ(GURL(), contents()->GetSiteInstance()->GetSiteURL()); 691 EXPECT_EQ(GURL(), contents()->GetSiteInstance()->GetSiteURL());
689 EXPECT_FALSE(orig_instance->HasSite()); 692 EXPECT_FALSE(orig_instance->HasSite());
690 693
691 browser_client.set_assign_site_for_url(true); 694 browser_client.set_assign_site_for_url(true);
692 // Navigate to new site (should keep same site instance). 695 // Navigate to new site (should keep same site instance).
693 const GURL url("http://www.google.com"); 696 const GURL url("http://www.google.com");
694 controller().LoadURL( 697 controller().LoadURL(
695 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 698 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
696 EXPECT_FALSE(contents()->cross_navigation_pending()); 699 EXPECT_FALSE(contents()->cross_navigation_pending());
697 EXPECT_EQ(native_url, contents()->GetLastCommittedURL()); 700 EXPECT_EQ(native_url, contents()->GetLastCommittedURL());
698 EXPECT_EQ(url, contents()->GetVisibleURL()); 701 EXPECT_EQ(url, contents()->GetVisibleURL());
699 EXPECT_FALSE(contents()->GetPendingMainFrame()); 702 EXPECT_FALSE(contents()->GetPendingMainFrame());
700 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 703 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
701 704
702 // Keep the number of active views in orig_rfh's SiteInstance 705 // Keep the number of active views in orig_rfh's SiteInstance
703 // non-zero so that orig_rfh doesn't get deleted when it gets 706 // non-zero so that orig_rfh doesn't get deleted when it gets
704 // swapped out. 707 // swapped out.
705 static_cast<SiteInstanceImpl*>(orig_rfh->GetSiteInstance())-> 708 static_cast<SiteInstanceImpl*>(orig_rfh->GetSiteInstance())->
706 increment_active_view_count(); 709 increment_active_view_count();
707 710
708 EXPECT_EQ(orig_instance, contents()->GetSiteInstance()); 711 EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
709 EXPECT_TRUE( 712 EXPECT_TRUE(
710 contents()->GetSiteInstance()->GetSiteURL().DomainIs("google.com")); 713 contents()->GetSiteInstance()->GetSiteURL().DomainIs("google.com"));
711 EXPECT_EQ(url, contents()->GetLastCommittedURL()); 714 EXPECT_EQ(url, contents()->GetLastCommittedURL());
712 715
713 // Navigate to another new site (should create a new site instance). 716 // Navigate to another new site (should create a new site instance).
714 const GURL url2("http://www.yahoo.com"); 717 const GURL url2("http://www.yahoo.com");
715 controller().LoadURL( 718 controller().LoadURL(
716 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 719 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
717 EXPECT_TRUE(contents()->cross_navigation_pending()); 720 EXPECT_TRUE(contents()->cross_navigation_pending());
718 EXPECT_EQ(url, contents()->GetLastCommittedURL()); 721 EXPECT_EQ(url, contents()->GetLastCommittedURL());
719 EXPECT_EQ(url2, contents()->GetVisibleURL()); 722 EXPECT_EQ(url2, contents()->GetVisibleURL());
720 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame(); 723 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
721 int pending_rvh_delete_count = 0; 724 int pending_rvh_delete_count = 0;
722 pending_rfh->GetRenderViewHost()->set_delete_counter( 725 pending_rfh->GetRenderViewHost()->set_delete_counter(
723 &pending_rvh_delete_count); 726 &pending_rvh_delete_count);
724 727
725 // Navigations should be suspended in pending_rvh until BeforeUnloadACK. 728 // Navigations should be suspended in pending_rvh until BeforeUnloadACK.
726 EXPECT_TRUE(pending_rfh->are_navigations_suspended()); 729 EXPECT_TRUE(pending_rfh->are_navigations_suspended());
727 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true); 730 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
728 EXPECT_FALSE(pending_rfh->are_navigations_suspended()); 731 EXPECT_FALSE(pending_rfh->are_navigations_suspended());
729 732
730 // DidNavigate from the pending page. 733 // DidNavigate from the pending page.
731 contents()->TestDidNavigate( 734 contents()->TestDidNavigate(
732 pending_rfh, 1, url2, PAGE_TRANSITION_TYPED); 735 pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
733 SiteInstance* new_instance = contents()->GetSiteInstance(); 736 SiteInstance* new_instance = contents()->GetSiteInstance();
734 737
735 EXPECT_FALSE(contents()->cross_navigation_pending()); 738 EXPECT_FALSE(contents()->cross_navigation_pending());
736 EXPECT_EQ(pending_rfh, contents()->GetMainFrame()); 739 EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
737 EXPECT_EQ(url2, contents()->GetLastCommittedURL()); 740 EXPECT_EQ(url2, contents()->GetLastCommittedURL());
738 EXPECT_EQ(url2, contents()->GetVisibleURL()); 741 EXPECT_EQ(url2, contents()->GetVisibleURL());
739 EXPECT_NE(new_instance, orig_instance); 742 EXPECT_NE(new_instance, orig_instance);
740 EXPECT_FALSE(contents()->GetPendingMainFrame()); 743 EXPECT_FALSE(contents()->GetPendingMainFrame());
741 // We keep the original RFH around, swapped out. 744 // We keep the original RFH around, swapped out.
742 EXPECT_TRUE(contents()->GetRenderManagerForTesting()->IsOnSwappedOutList( 745 EXPECT_TRUE(contents()->GetRenderManagerForTesting()->IsOnSwappedOutList(
(...skipping 16 matching lines...) Expand all
759 SiteInstanceImpl* orig_instance = 762 SiteInstanceImpl* orig_instance =
760 static_cast<SiteInstanceImpl*>(contents()->GetSiteInstance()); 763 static_cast<SiteInstanceImpl*>(contents()->GetSiteInstance());
761 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 764 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
762 765
763 // Restore a navigation entry for URL that should not assign site to the 766 // Restore a navigation entry for URL that should not assign site to the
764 // SiteInstance. 767 // SiteInstance.
765 browser_client.set_assign_site_for_url(false); 768 browser_client.set_assign_site_for_url(false);
766 const GURL native_url("non-site-url://stuffandthings"); 769 const GURL native_url("non-site-url://stuffandthings");
767 std::vector<NavigationEntry*> entries; 770 std::vector<NavigationEntry*> entries;
768 NavigationEntry* entry = NavigationControllerImpl::CreateNavigationEntry( 771 NavigationEntry* entry = NavigationControllerImpl::CreateNavigationEntry(
769 native_url, Referrer(), PAGE_TRANSITION_LINK, false, std::string(), 772 native_url, Referrer(), ui::PAGE_TRANSITION_LINK, false, std::string(),
770 browser_context()); 773 browser_context());
771 entry->SetPageID(0); 774 entry->SetPageID(0);
772 entries.push_back(entry); 775 entries.push_back(entry);
773 controller().Restore( 776 controller().Restore(
774 0, 777 0,
775 NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY, 778 NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY,
776 &entries); 779 &entries);
777 ASSERT_EQ(0u, entries.size()); 780 ASSERT_EQ(0u, entries.size());
778 ASSERT_EQ(1, controller().GetEntryCount()); 781 ASSERT_EQ(1, controller().GetEntryCount());
779 controller().GoToIndex(0); 782 controller().GoToIndex(0);
780 contents()->TestDidNavigate(orig_rfh, 0, native_url, PAGE_TRANSITION_RELOAD); 783 contents()->TestDidNavigate(
784 orig_rfh, 0, native_url, ui::PAGE_TRANSITION_RELOAD);
781 EXPECT_EQ(orig_instance, contents()->GetSiteInstance()); 785 EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
782 EXPECT_EQ(GURL(), contents()->GetSiteInstance()->GetSiteURL()); 786 EXPECT_EQ(GURL(), contents()->GetSiteInstance()->GetSiteURL());
783 EXPECT_FALSE(orig_instance->HasSite()); 787 EXPECT_FALSE(orig_instance->HasSite());
784 788
785 // Navigate to a regular site and verify that the SiteInstance was kept. 789 // Navigate to a regular site and verify that the SiteInstance was kept.
786 browser_client.set_assign_site_for_url(true); 790 browser_client.set_assign_site_for_url(true);
787 const GURL url("http://www.google.com"); 791 const GURL url("http://www.google.com");
788 controller().LoadURL( 792 controller().LoadURL(
789 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 793 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
790 contents()->TestDidNavigate(orig_rfh, 2, url, PAGE_TRANSITION_TYPED); 794 contents()->TestDidNavigate(orig_rfh, 2, url, ui::PAGE_TRANSITION_TYPED);
791 EXPECT_EQ(orig_instance, contents()->GetSiteInstance()); 795 EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
792 796
793 // Cleanup. 797 // Cleanup.
794 DeleteContents(); 798 DeleteContents();
795 } 799 }
796 800
797 // Complement for NavigateFromRestoredSitelessUrl, verifying that when a regular 801 // Complement for NavigateFromRestoredSitelessUrl, verifying that when a regular
798 // tab is restored, the SiteInstance will change upon navigation. 802 // tab is restored, the SiteInstance will change upon navigation.
799 TEST_F(WebContentsImplTest, NavigateFromRestoredRegularUrl) { 803 TEST_F(WebContentsImplTest, NavigateFromRestoredRegularUrl) {
800 WebContentsImplTestBrowserClient browser_client; 804 WebContentsImplTestBrowserClient browser_client;
801 SetBrowserClientForTesting(&browser_client); 805 SetBrowserClientForTesting(&browser_client);
802 SiteInstanceImpl* orig_instance = 806 SiteInstanceImpl* orig_instance =
803 static_cast<SiteInstanceImpl*>(contents()->GetSiteInstance()); 807 static_cast<SiteInstanceImpl*>(contents()->GetSiteInstance());
804 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 808 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
805 809
806 // Restore a navigation entry for a regular URL ensuring that the embedder 810 // Restore a navigation entry for a regular URL ensuring that the embedder
807 // ShouldAssignSiteForUrl override is disabled (i.e. returns true). 811 // ShouldAssignSiteForUrl override is disabled (i.e. returns true).
808 browser_client.set_assign_site_for_url(true); 812 browser_client.set_assign_site_for_url(true);
809 const GURL regular_url("http://www.yahoo.com"); 813 const GURL regular_url("http://www.yahoo.com");
810 std::vector<NavigationEntry*> entries; 814 std::vector<NavigationEntry*> entries;
811 NavigationEntry* entry = NavigationControllerImpl::CreateNavigationEntry( 815 NavigationEntry* entry = NavigationControllerImpl::CreateNavigationEntry(
812 regular_url, Referrer(), PAGE_TRANSITION_LINK, false, std::string(), 816 regular_url, Referrer(), ui::PAGE_TRANSITION_LINK, false, std::string(),
813 browser_context()); 817 browser_context());
814 entry->SetPageID(0); 818 entry->SetPageID(0);
815 entries.push_back(entry); 819 entries.push_back(entry);
816 controller().Restore( 820 controller().Restore(
817 0, 821 0,
818 NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY, 822 NavigationController::RESTORE_LAST_SESSION_EXITED_CLEANLY,
819 &entries); 823 &entries);
820 ASSERT_EQ(0u, entries.size()); 824 ASSERT_EQ(0u, entries.size());
821 ASSERT_EQ(1, controller().GetEntryCount()); 825 ASSERT_EQ(1, controller().GetEntryCount());
822 controller().GoToIndex(0); 826 controller().GoToIndex(0);
823 contents()->TestDidNavigate(orig_rfh, 0, regular_url, PAGE_TRANSITION_RELOAD); 827 contents()->TestDidNavigate(
828 orig_rfh, 0, regular_url, ui::PAGE_TRANSITION_RELOAD);
824 EXPECT_EQ(orig_instance, contents()->GetSiteInstance()); 829 EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
825 EXPECT_TRUE(orig_instance->HasSite()); 830 EXPECT_TRUE(orig_instance->HasSite());
826 831
827 // Navigate to another site and verify that a new SiteInstance was created. 832 // Navigate to another site and verify that a new SiteInstance was created.
828 const GURL url("http://www.google.com"); 833 const GURL url("http://www.google.com");
829 controller().LoadURL( 834 controller().LoadURL(
830 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 835 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
831 contents()->TestDidNavigate( 836 contents()->TestDidNavigate(
832 contents()->GetPendingMainFrame(), 2, url, PAGE_TRANSITION_TYPED); 837 contents()->GetPendingMainFrame(), 2, url, ui::PAGE_TRANSITION_TYPED);
833 EXPECT_NE(orig_instance, contents()->GetSiteInstance()); 838 EXPECT_NE(orig_instance, contents()->GetSiteInstance());
834 839
835 // Cleanup. 840 // Cleanup.
836 DeleteContents(); 841 DeleteContents();
837 } 842 }
838 843
839 // Test that we can find an opener RVH even if it's pending. 844 // Test that we can find an opener RVH even if it's pending.
840 // http://crbug.com/176252. 845 // http://crbug.com/176252.
841 TEST_F(WebContentsImplTest, FindOpenerRVHWhenPending) { 846 TEST_F(WebContentsImplTest, FindOpenerRVHWhenPending) {
842 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 847 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
843 848
844 // Navigate to a URL. 849 // Navigate to a URL.
845 const GURL url("http://www.google.com"); 850 const GURL url("http://www.google.com");
846 controller().LoadURL( 851 controller().LoadURL(
847 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 852 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
848 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 853 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
849 854
850 // Start to navigate first tab to a new site, so that it has a pending RVH. 855 // Start to navigate first tab to a new site, so that it has a pending RVH.
851 const GURL url2("http://www.yahoo.com"); 856 const GURL url2("http://www.yahoo.com");
852 controller().LoadURL( 857 controller().LoadURL(
853 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 858 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
854 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true); 859 orig_rfh->GetRenderViewHost()->SendBeforeUnloadACK(true);
855 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame(); 860 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
856 861
857 // While it is still pending, simulate opening a new tab with the first tab 862 // While it is still pending, simulate opening a new tab with the first tab
858 // as its opener. This will call WebContentsImpl::CreateOpenerRenderViews 863 // as its opener. This will call WebContentsImpl::CreateOpenerRenderViews
859 // on the opener to ensure that an RVH exists. 864 // on the opener to ensure that an RVH exists.
860 int opener_routing_id = 865 int opener_routing_id =
861 contents()->CreateOpenerRenderViews(pending_rfh->GetSiteInstance()); 866 contents()->CreateOpenerRenderViews(pending_rfh->GetSiteInstance());
862 867
863 // We should find the pending RVH and not create a new one. 868 // We should find the pending RVH and not create a new one.
864 EXPECT_EQ(pending_rfh->GetRenderViewHost()->GetRoutingID(), 869 EXPECT_EQ(pending_rfh->GetRenderViewHost()->GetRoutingID(),
865 opener_routing_id); 870 opener_routing_id);
866 } 871 }
867 872
868 // Tests that WebContentsImpl uses the current URL, not the SiteInstance's site, 873 // Tests that WebContentsImpl uses the current URL, not the SiteInstance's site,
869 // to determine whether a navigation is cross-site. 874 // to determine whether a navigation is cross-site.
870 TEST_F(WebContentsImplTest, CrossSiteComparesAgainstCurrentPage) { 875 TEST_F(WebContentsImplTest, CrossSiteComparesAgainstCurrentPage) {
871 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 876 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
872 SiteInstance* instance1 = contents()->GetSiteInstance(); 877 SiteInstance* instance1 = contents()->GetSiteInstance();
873 878
874 // Navigate to URL. 879 // Navigate to URL.
875 const GURL url("http://www.google.com"); 880 const GURL url("http://www.google.com");
876 controller().LoadURL( 881 controller().LoadURL(
877 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 882 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
878 contents()->TestDidNavigate( 883 contents()->TestDidNavigate(
879 orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 884 orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
880 885
881 // Open a related contents to a second site. 886 // Open a related contents to a second site.
882 scoped_ptr<TestWebContents> contents2( 887 scoped_ptr<TestWebContents> contents2(
883 TestWebContents::Create(browser_context(), instance1)); 888 TestWebContents::Create(browser_context(), instance1));
884 const GURL url2("http://www.yahoo.com"); 889 const GURL url2("http://www.yahoo.com");
885 contents2->GetController().LoadURL(url2, Referrer(), 890 contents2->GetController().LoadURL(url2, Referrer(),
886 PAGE_TRANSITION_TYPED, 891 ui::PAGE_TRANSITION_TYPED,
887 std::string()); 892 std::string());
888 // The first RVH in contents2 isn't live yet, so we shortcut the cross site 893 // The first RVH in contents2 isn't live yet, so we shortcut the cross site
889 // pending. 894 // pending.
890 TestRenderFrameHost* rfh2 = contents2->GetMainFrame(); 895 TestRenderFrameHost* rfh2 = contents2->GetMainFrame();
891 EXPECT_FALSE(contents2->cross_navigation_pending()); 896 EXPECT_FALSE(contents2->cross_navigation_pending());
892 contents2->TestDidNavigate(rfh2, 2, url2, PAGE_TRANSITION_TYPED); 897 contents2->TestDidNavigate(rfh2, 2, url2, ui::PAGE_TRANSITION_TYPED);
893 SiteInstance* instance2 = contents2->GetSiteInstance(); 898 SiteInstance* instance2 = contents2->GetSiteInstance();
894 EXPECT_NE(instance1, instance2); 899 EXPECT_NE(instance1, instance2);
895 EXPECT_FALSE(contents2->cross_navigation_pending()); 900 EXPECT_FALSE(contents2->cross_navigation_pending());
896 901
897 // Simulate a link click in first contents to second site. Doesn't switch 902 // Simulate a link click in first contents to second site. Doesn't switch
898 // SiteInstances, because we don't intercept WebKit navigations. 903 // SiteInstances, because we don't intercept WebKit navigations.
899 contents()->TestDidNavigate( 904 contents()->TestDidNavigate(
900 orig_rfh, 2, url2, PAGE_TRANSITION_TYPED); 905 orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
901 SiteInstance* instance3 = contents()->GetSiteInstance(); 906 SiteInstance* instance3 = contents()->GetSiteInstance();
902 EXPECT_EQ(instance1, instance3); 907 EXPECT_EQ(instance1, instance3);
903 EXPECT_FALSE(contents()->cross_navigation_pending()); 908 EXPECT_FALSE(contents()->cross_navigation_pending());
904 909
905 // Navigate to the new site. Doesn't switch SiteInstancees, because we 910 // Navigate to the new site. Doesn't switch SiteInstancees, because we
906 // compare against the current URL, not the SiteInstance's site. 911 // compare against the current URL, not the SiteInstance's site.
907 const GURL url3("http://mail.yahoo.com"); 912 const GURL url3("http://mail.yahoo.com");
908 controller().LoadURL( 913 controller().LoadURL(
909 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 914 url3, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
910 EXPECT_FALSE(contents()->cross_navigation_pending()); 915 EXPECT_FALSE(contents()->cross_navigation_pending());
911 contents()->TestDidNavigate( 916 contents()->TestDidNavigate(
912 orig_rfh, 3, url3, PAGE_TRANSITION_TYPED); 917 orig_rfh, 3, url3, ui::PAGE_TRANSITION_TYPED);
913 SiteInstance* instance4 = contents()->GetSiteInstance(); 918 SiteInstance* instance4 = contents()->GetSiteInstance();
914 EXPECT_EQ(instance1, instance4); 919 EXPECT_EQ(instance1, instance4);
915 } 920 }
916 921
917 // Test that the onbeforeunload and onunload handlers run when navigating 922 // Test that the onbeforeunload and onunload handlers run when navigating
918 // across site boundaries. 923 // across site boundaries.
919 TEST_F(WebContentsImplTest, CrossSiteUnloadHandlers) { 924 TEST_F(WebContentsImplTest, CrossSiteUnloadHandlers) {
920 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 925 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
921 SiteInstance* instance1 = contents()->GetSiteInstance(); 926 SiteInstance* instance1 = contents()->GetSiteInstance();
922 927
923 // Navigate to URL. First URL should use first RenderViewHost. 928 // Navigate to URL. First URL should use first RenderViewHost.
924 const GURL url("http://www.google.com"); 929 const GURL url("http://www.google.com");
925 controller().LoadURL( 930 controller().LoadURL(
926 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 931 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
927 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 932 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
928 EXPECT_FALSE(contents()->cross_navigation_pending()); 933 EXPECT_FALSE(contents()->cross_navigation_pending());
929 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 934 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
930 935
931 // Navigate to new site, but simulate an onbeforeunload denial. 936 // Navigate to new site, but simulate an onbeforeunload denial.
932 const GURL url2("http://www.yahoo.com"); 937 const GURL url2("http://www.yahoo.com");
933 controller().LoadURL( 938 controller().LoadURL(
934 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 939 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
935 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 940 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
936 base::TimeTicks now = base::TimeTicks::Now(); 941 base::TimeTicks now = base::TimeTicks::Now();
937 orig_rfh->OnMessageReceived( 942 orig_rfh->OnMessageReceived(
938 FrameHostMsg_BeforeUnload_ACK(0, false, now, now)); 943 FrameHostMsg_BeforeUnload_ACK(0, false, now, now));
939 EXPECT_FALSE( 944 EXPECT_FALSE(
940 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 945 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
941 EXPECT_FALSE(contents()->cross_navigation_pending()); 946 EXPECT_FALSE(contents()->cross_navigation_pending());
942 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 947 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
943 948
944 // Navigate again, but simulate an onbeforeunload approval. 949 // Navigate again, but simulate an onbeforeunload approval.
945 controller().LoadURL( 950 controller().LoadURL(
946 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 951 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
947 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 952 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
948 now = base::TimeTicks::Now(); 953 now = base::TimeTicks::Now();
949 orig_rfh->OnMessageReceived( 954 orig_rfh->OnMessageReceived(
950 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 955 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
951 EXPECT_FALSE( 956 EXPECT_FALSE(
952 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 957 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
953 EXPECT_TRUE(contents()->cross_navigation_pending()); 958 EXPECT_TRUE(contents()->cross_navigation_pending());
954 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame(); 959 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
955 960
956 // We won't hear DidNavigate until the onunload handler has finished running. 961 // We won't hear DidNavigate until the onunload handler has finished running.
957 962
958 // DidNavigate from the pending page. 963 // DidNavigate from the pending page.
959 contents()->TestDidNavigate( 964 contents()->TestDidNavigate(
960 pending_rfh, 1, url2, PAGE_TRANSITION_TYPED); 965 pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
961 SiteInstance* instance2 = contents()->GetSiteInstance(); 966 SiteInstance* instance2 = contents()->GetSiteInstance();
962 EXPECT_FALSE(contents()->cross_navigation_pending()); 967 EXPECT_FALSE(contents()->cross_navigation_pending());
963 EXPECT_EQ(pending_rfh, contents()->GetMainFrame()); 968 EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
964 EXPECT_NE(instance1, instance2); 969 EXPECT_NE(instance1, instance2);
965 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 970 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
966 } 971 }
967 972
968 // Test that during a slow cross-site navigation, the original renderer can 973 // Test that during a slow cross-site navigation, the original renderer can
969 // navigate to a different URL and have it displayed, canceling the slow 974 // navigate to a different URL and have it displayed, canceling the slow
970 // navigation. 975 // navigation.
971 TEST_F(WebContentsImplTest, CrossSiteNavigationPreempted) { 976 TEST_F(WebContentsImplTest, CrossSiteNavigationPreempted) {
972 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 977 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
973 SiteInstance* instance1 = contents()->GetSiteInstance(); 978 SiteInstance* instance1 = contents()->GetSiteInstance();
974 979
975 // Navigate to URL. First URL should use first RenderFrameHost. 980 // Navigate to URL. First URL should use first RenderFrameHost.
976 const GURL url("http://www.google.com"); 981 const GURL url("http://www.google.com");
977 controller().LoadURL( 982 controller().LoadURL(
978 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 983 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
979 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 984 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
980 EXPECT_FALSE(contents()->cross_navigation_pending()); 985 EXPECT_FALSE(contents()->cross_navigation_pending());
981 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 986 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
982 987
983 // Navigate to new site, simulating an onbeforeunload approval. 988 // Navigate to new site, simulating an onbeforeunload approval.
984 const GURL url2("http://www.yahoo.com"); 989 const GURL url2("http://www.yahoo.com");
985 controller().LoadURL( 990 controller().LoadURL(
986 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 991 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
987 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 992 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
988 base::TimeTicks now = base::TimeTicks::Now(); 993 base::TimeTicks now = base::TimeTicks::Now();
989 orig_rfh->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 994 orig_rfh->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
990 EXPECT_TRUE(contents()->cross_navigation_pending()); 995 EXPECT_TRUE(contents()->cross_navigation_pending());
991 996
992 // Suppose the original renderer navigates before the new one is ready. 997 // Suppose the original renderer navigates before the new one is ready.
993 orig_rfh->SendNavigate(2, GURL("http://www.google.com/foo")); 998 orig_rfh->SendNavigate(2, GURL("http://www.google.com/foo"));
994 999
995 // Verify that the pending navigation is cancelled. 1000 // Verify that the pending navigation is cancelled.
996 EXPECT_FALSE( 1001 EXPECT_FALSE(
997 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1002 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
998 SiteInstance* instance2 = contents()->GetSiteInstance(); 1003 SiteInstance* instance2 = contents()->GetSiteInstance();
999 EXPECT_FALSE(contents()->cross_navigation_pending()); 1004 EXPECT_FALSE(contents()->cross_navigation_pending());
1000 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1005 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1001 EXPECT_EQ(instance1, instance2); 1006 EXPECT_EQ(instance1, instance2);
1002 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 1007 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
1003 } 1008 }
1004 1009
1005 TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) { 1010 TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
1006 // Start with a web ui page, which gets a new RVH with WebUI bindings. 1011 // Start with a web ui page, which gets a new RVH with WebUI bindings.
1007 const GURL url1("chrome://blah"); 1012 const GURL url1("chrome://blah");
1008 controller().LoadURL( 1013 controller().LoadURL(
1009 url1, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1014 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1010 TestRenderFrameHost* ntp_rfh = contents()->GetMainFrame(); 1015 TestRenderFrameHost* ntp_rfh = contents()->GetMainFrame();
1011 contents()->TestDidNavigate(ntp_rfh, 1, url1, PAGE_TRANSITION_TYPED); 1016 contents()->TestDidNavigate(ntp_rfh, 1, url1, ui::PAGE_TRANSITION_TYPED);
1012 NavigationEntry* entry1 = controller().GetLastCommittedEntry(); 1017 NavigationEntry* entry1 = controller().GetLastCommittedEntry();
1013 SiteInstance* instance1 = contents()->GetSiteInstance(); 1018 SiteInstance* instance1 = contents()->GetSiteInstance();
1014 1019
1015 EXPECT_FALSE(contents()->cross_navigation_pending()); 1020 EXPECT_FALSE(contents()->cross_navigation_pending());
1016 EXPECT_EQ(ntp_rfh, contents()->GetMainFrame()); 1021 EXPECT_EQ(ntp_rfh, contents()->GetMainFrame());
1017 EXPECT_EQ(url1, entry1->GetURL()); 1022 EXPECT_EQ(url1, entry1->GetURL());
1018 EXPECT_EQ(instance1, 1023 EXPECT_EQ(instance1,
1019 NavigationEntryImpl::FromNavigationEntry(entry1)->site_instance()); 1024 NavigationEntryImpl::FromNavigationEntry(entry1)->site_instance());
1020 EXPECT_TRUE(ntp_rfh->GetRenderViewHost()->GetEnabledBindings() & 1025 EXPECT_TRUE(ntp_rfh->GetRenderViewHost()->GetEnabledBindings() &
1021 BINDINGS_POLICY_WEB_UI); 1026 BINDINGS_POLICY_WEB_UI);
1022 1027
1023 // Navigate to new site. 1028 // Navigate to new site.
1024 const GURL url2("http://www.google.com"); 1029 const GURL url2("http://www.google.com");
1025 controller().LoadURL( 1030 controller().LoadURL(
1026 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1031 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1027 EXPECT_TRUE(contents()->cross_navigation_pending()); 1032 EXPECT_TRUE(contents()->cross_navigation_pending());
1028 TestRenderFrameHost* google_rfh = contents()->GetPendingMainFrame(); 1033 TestRenderFrameHost* google_rfh = contents()->GetPendingMainFrame();
1029 1034
1030 // Simulate beforeunload approval. 1035 // Simulate beforeunload approval.
1031 EXPECT_TRUE(ntp_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1036 EXPECT_TRUE(ntp_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1032 base::TimeTicks now = base::TimeTicks::Now(); 1037 base::TimeTicks now = base::TimeTicks::Now();
1033 ntp_rfh->OnMessageReceived( 1038 ntp_rfh->OnMessageReceived(
1034 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1039 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1035 1040
1036 // DidNavigate from the pending page. 1041 // DidNavigate from the pending page.
1037 contents()->TestDidNavigate( 1042 contents()->TestDidNavigate(
1038 google_rfh, 1, url2, PAGE_TRANSITION_TYPED); 1043 google_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
1039 NavigationEntry* entry2 = controller().GetLastCommittedEntry(); 1044 NavigationEntry* entry2 = controller().GetLastCommittedEntry();
1040 SiteInstance* instance2 = contents()->GetSiteInstance(); 1045 SiteInstance* instance2 = contents()->GetSiteInstance();
1041 1046
1042 EXPECT_FALSE(contents()->cross_navigation_pending()); 1047 EXPECT_FALSE(contents()->cross_navigation_pending());
1043 EXPECT_EQ(google_rfh, contents()->GetMainFrame()); 1048 EXPECT_EQ(google_rfh, contents()->GetMainFrame());
1044 EXPECT_NE(instance1, instance2); 1049 EXPECT_NE(instance1, instance2);
1045 EXPECT_FALSE(contents()->GetPendingMainFrame()); 1050 EXPECT_FALSE(contents()->GetPendingMainFrame());
1046 EXPECT_EQ(url2, entry2->GetURL()); 1051 EXPECT_EQ(url2, entry2->GetURL());
1047 EXPECT_EQ(instance2, 1052 EXPECT_EQ(instance2,
1048 NavigationEntryImpl::FromNavigationEntry(entry2)->site_instance()); 1053 NavigationEntryImpl::FromNavigationEntry(entry2)->site_instance());
1049 EXPECT_FALSE(google_rfh->GetRenderViewHost()->GetEnabledBindings() & 1054 EXPECT_FALSE(google_rfh->GetRenderViewHost()->GetEnabledBindings() &
1050 BINDINGS_POLICY_WEB_UI); 1055 BINDINGS_POLICY_WEB_UI);
1051 1056
1052 // Navigate to third page on same site. 1057 // Navigate to third page on same site.
1053 const GURL url3("http://news.google.com"); 1058 const GURL url3("http://news.google.com");
1054 controller().LoadURL( 1059 controller().LoadURL(
1055 url3, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1060 url3, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1056 EXPECT_FALSE(contents()->cross_navigation_pending()); 1061 EXPECT_FALSE(contents()->cross_navigation_pending());
1057 contents()->TestDidNavigate( 1062 contents()->TestDidNavigate(
1058 google_rfh, 2, url3, PAGE_TRANSITION_TYPED); 1063 google_rfh, 2, url3, ui::PAGE_TRANSITION_TYPED);
1059 NavigationEntry* entry3 = controller().GetLastCommittedEntry(); 1064 NavigationEntry* entry3 = controller().GetLastCommittedEntry();
1060 SiteInstance* instance3 = contents()->GetSiteInstance(); 1065 SiteInstance* instance3 = contents()->GetSiteInstance();
1061 1066
1062 EXPECT_FALSE(contents()->cross_navigation_pending()); 1067 EXPECT_FALSE(contents()->cross_navigation_pending());
1063 EXPECT_EQ(google_rfh, contents()->GetMainFrame()); 1068 EXPECT_EQ(google_rfh, contents()->GetMainFrame());
1064 EXPECT_EQ(instance2, instance3); 1069 EXPECT_EQ(instance2, instance3);
1065 EXPECT_FALSE(contents()->GetPendingMainFrame()); 1070 EXPECT_FALSE(contents()->GetPendingMainFrame());
1066 EXPECT_EQ(url3, entry3->GetURL()); 1071 EXPECT_EQ(url3, entry3->GetURL());
1067 EXPECT_EQ(instance3, 1072 EXPECT_EQ(instance3,
1068 NavigationEntryImpl::FromNavigationEntry(entry3)->site_instance()); 1073 NavigationEntryImpl::FromNavigationEntry(entry3)->site_instance());
(...skipping 10 matching lines...) Expand all
1079 EXPECT_EQ(entry1, controller().GetPendingEntry()); 1084 EXPECT_EQ(entry1, controller().GetPendingEntry());
1080 1085
1081 // Simulate beforeunload approval. 1086 // Simulate beforeunload approval.
1082 EXPECT_TRUE( 1087 EXPECT_TRUE(
1083 google_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1088 google_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1084 now = base::TimeTicks::Now(); 1089 now = base::TimeTicks::Now();
1085 google_rfh->OnMessageReceived( 1090 google_rfh->OnMessageReceived(
1086 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1091 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1087 1092
1088 // DidNavigate from the first back. This aborts the second back's pending RFH. 1093 // DidNavigate from the first back. This aborts the second back's pending RFH.
1089 contents()->TestDidNavigate(google_rfh, 1, url2, PAGE_TRANSITION_TYPED); 1094 contents()->TestDidNavigate(google_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
1090 1095
1091 // We should commit this page and forget about the second back. 1096 // We should commit this page and forget about the second back.
1092 EXPECT_FALSE(contents()->cross_navigation_pending()); 1097 EXPECT_FALSE(contents()->cross_navigation_pending());
1093 EXPECT_FALSE(controller().GetPendingEntry()); 1098 EXPECT_FALSE(controller().GetPendingEntry());
1094 EXPECT_EQ(google_rfh, contents()->GetMainFrame()); 1099 EXPECT_EQ(google_rfh, contents()->GetMainFrame());
1095 EXPECT_EQ(url2, controller().GetLastCommittedEntry()->GetURL()); 1100 EXPECT_EQ(url2, controller().GetLastCommittedEntry()->GetURL());
1096 1101
1097 // We should not have corrupted the NTP entry. 1102 // We should not have corrupted the NTP entry.
1098 EXPECT_EQ(instance3, 1103 EXPECT_EQ(instance3,
1099 NavigationEntryImpl::FromNavigationEntry(entry3)->site_instance()); 1104 NavigationEntryImpl::FromNavigationEntry(entry3)->site_instance());
1100 EXPECT_EQ(instance2, 1105 EXPECT_EQ(instance2,
1101 NavigationEntryImpl::FromNavigationEntry(entry2)->site_instance()); 1106 NavigationEntryImpl::FromNavigationEntry(entry2)->site_instance());
1102 EXPECT_EQ(instance1, 1107 EXPECT_EQ(instance1,
1103 NavigationEntryImpl::FromNavigationEntry(entry1)->site_instance()); 1108 NavigationEntryImpl::FromNavigationEntry(entry1)->site_instance());
1104 EXPECT_EQ(url1, entry1->GetURL()); 1109 EXPECT_EQ(url1, entry1->GetURL());
1105 } 1110 }
1106 1111
1107 // Test that during a slow cross-site navigation, a sub-frame navigation in the 1112 // Test that during a slow cross-site navigation, a sub-frame navigation in the
1108 // original renderer will not cancel the slow navigation (bug 42029). 1113 // original renderer will not cancel the slow navigation (bug 42029).
1109 TEST_F(WebContentsImplTest, CrossSiteNavigationNotPreemptedByFrame) { 1114 TEST_F(WebContentsImplTest, CrossSiteNavigationNotPreemptedByFrame) {
1110 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 1115 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
1111 1116
1112 // Navigate to URL. First URL should use the original RenderFrameHost. 1117 // Navigate to URL. First URL should use the original RenderFrameHost.
1113 const GURL url("http://www.google.com"); 1118 const GURL url("http://www.google.com");
1114 controller().LoadURL( 1119 controller().LoadURL(
1115 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1120 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1116 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1121 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1117 EXPECT_FALSE(contents()->cross_navigation_pending()); 1122 EXPECT_FALSE(contents()->cross_navigation_pending());
1118 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1123 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1119 1124
1120 // Start navigating to new site. 1125 // Start navigating to new site.
1121 const GURL url2("http://www.yahoo.com"); 1126 const GURL url2("http://www.yahoo.com");
1122 controller().LoadURL( 1127 controller().LoadURL(
1123 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1128 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1124 1129
1125 // Simulate a sub-frame navigation arriving and ensure the RVH is still 1130 // Simulate a sub-frame navigation arriving and ensure the RVH is still
1126 // waiting for a before unload response. 1131 // waiting for a before unload response.
1127 TestRenderFrameHost* child_rfh = orig_rfh->AppendChild("subframe"); 1132 TestRenderFrameHost* child_rfh = orig_rfh->AppendChild("subframe");
1128 child_rfh->SendNavigateWithTransition( 1133 child_rfh->SendNavigateWithTransition(
1129 1, GURL("http://google.com/frame"), PAGE_TRANSITION_AUTO_SUBFRAME); 1134 1, GURL("http://google.com/frame"), ui::PAGE_TRANSITION_AUTO_SUBFRAME);
1130 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1135 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1131 1136
1132 // Now simulate the onbeforeunload approval and verify the navigation is 1137 // Now simulate the onbeforeunload approval and verify the navigation is
1133 // not canceled. 1138 // not canceled.
1134 base::TimeTicks now = base::TimeTicks::Now(); 1139 base::TimeTicks now = base::TimeTicks::Now();
1135 orig_rfh->OnMessageReceived( 1140 orig_rfh->OnMessageReceived(
1136 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1141 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1137 EXPECT_FALSE( 1142 EXPECT_FALSE(
1138 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1143 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1139 EXPECT_TRUE(contents()->cross_navigation_pending()); 1144 EXPECT_TRUE(contents()->cross_navigation_pending());
1140 } 1145 }
1141 1146
1142 // Test that a cross-site navigation is not preempted if the previous 1147 // Test that a cross-site navigation is not preempted if the previous
1143 // renderer sends a FrameNavigate message just before being told to stop. 1148 // renderer sends a FrameNavigate message just before being told to stop.
1144 // We should only preempt the cross-site navigation if the previous renderer 1149 // We should only preempt the cross-site navigation if the previous renderer
1145 // has started a new navigation. See http://crbug.com/79176. 1150 // has started a new navigation. See http://crbug.com/79176.
1146 TEST_F(WebContentsImplTest, CrossSiteNotPreemptedDuringBeforeUnload) { 1151 TEST_F(WebContentsImplTest, CrossSiteNotPreemptedDuringBeforeUnload) {
1147 // Navigate to NTP URL. 1152 // Navigate to NTP URL.
1148 const GURL url("chrome://blah"); 1153 const GURL url("chrome://blah");
1149 controller().LoadURL( 1154 controller().LoadURL(
1150 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1155 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1151 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 1156 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
1152 EXPECT_FALSE(contents()->cross_navigation_pending()); 1157 EXPECT_FALSE(contents()->cross_navigation_pending());
1153 1158
1154 // Navigate to new site, with the beforeunload request in flight. 1159 // Navigate to new site, with the beforeunload request in flight.
1155 const GURL url2("http://www.yahoo.com"); 1160 const GURL url2("http://www.yahoo.com");
1156 controller().LoadURL( 1161 controller().LoadURL(
1157 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1162 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1158 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame(); 1163 TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
1159 EXPECT_TRUE(contents()->cross_navigation_pending()); 1164 EXPECT_TRUE(contents()->cross_navigation_pending());
1160 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1165 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1161 1166
1162 // Suppose the first navigation tries to commit now, with a 1167 // Suppose the first navigation tries to commit now, with a
1163 // FrameMsg_Stop in flight. This should not cancel the pending navigation, 1168 // FrameMsg_Stop in flight. This should not cancel the pending navigation,
1164 // but it should act as if the beforeunload ack arrived. 1169 // but it should act as if the beforeunload ack arrived.
1165 orig_rfh->SendNavigate(1, GURL("chrome://blah")); 1170 orig_rfh->SendNavigate(1, GURL("chrome://blah"));
1166 EXPECT_TRUE(contents()->cross_navigation_pending()); 1171 EXPECT_TRUE(contents()->cross_navigation_pending());
1167 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1172 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1168 EXPECT_FALSE( 1173 EXPECT_FALSE(
1169 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1174 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1170 1175
1171 // The pending navigation should be able to commit successfully. 1176 // The pending navigation should be able to commit successfully.
1172 contents()->TestDidNavigate(pending_rfh, 1, url2, PAGE_TRANSITION_TYPED); 1177 contents()->TestDidNavigate(pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
1173 EXPECT_FALSE(contents()->cross_navigation_pending()); 1178 EXPECT_FALSE(contents()->cross_navigation_pending());
1174 EXPECT_EQ(pending_rfh, contents()->GetMainFrame()); 1179 EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
1175 } 1180 }
1176 1181
1177 // Test that a cross-site navigation that doesn't commit after the unload 1182 // Test that a cross-site navigation that doesn't commit after the unload
1178 // handler doesn't leave the contents in a stuck state. http://crbug.com/88562 1183 // handler doesn't leave the contents in a stuck state. http://crbug.com/88562
1179 TEST_F(WebContentsImplTest, CrossSiteNavigationCanceled) { 1184 TEST_F(WebContentsImplTest, CrossSiteNavigationCanceled) {
1180 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 1185 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
1181 SiteInstance* instance1 = contents()->GetSiteInstance(); 1186 SiteInstance* instance1 = contents()->GetSiteInstance();
1182 1187
1183 // Navigate to URL. First URL should use original RenderFrameHost. 1188 // Navigate to URL. First URL should use original RenderFrameHost.
1184 const GURL url("http://www.google.com"); 1189 const GURL url("http://www.google.com");
1185 controller().LoadURL( 1190 controller().LoadURL(
1186 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1191 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1187 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1192 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1188 EXPECT_FALSE(contents()->cross_navigation_pending()); 1193 EXPECT_FALSE(contents()->cross_navigation_pending());
1189 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1194 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1190 1195
1191 // Navigate to new site, simulating an onbeforeunload approval. 1196 // Navigate to new site, simulating an onbeforeunload approval.
1192 const GURL url2("http://www.yahoo.com"); 1197 const GURL url2("http://www.yahoo.com");
1193 controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1198 controller().LoadURL(
1199 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1194 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1200 EXPECT_TRUE(orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1195 base::TimeTicks now = base::TimeTicks::Now(); 1201 base::TimeTicks now = base::TimeTicks::Now();
1196 orig_rfh->OnMessageReceived( 1202 orig_rfh->OnMessageReceived(
1197 FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); 1203 FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
1198 EXPECT_TRUE(contents()->cross_navigation_pending()); 1204 EXPECT_TRUE(contents()->cross_navigation_pending());
1199 1205
1200 // Simulate swap out message when the response arrives. 1206 // Simulate swap out message when the response arrives.
1201 orig_rfh->OnSwappedOut(false); 1207 orig_rfh->OnSwappedOut(false);
1202 1208
1203 // Suppose the navigation doesn't get a chance to commit, and the user 1209 // Suppose the navigation doesn't get a chance to commit, and the user
1204 // navigates in the current RFH's SiteInstance. 1210 // navigates in the current RFH's SiteInstance.
1205 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1211 controller().LoadURL(
1212 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1206 1213
1207 // Verify that the pending navigation is cancelled and the renderer is no 1214 // Verify that the pending navigation is cancelled and the renderer is no
1208 // longer swapped out. 1215 // longer swapped out.
1209 EXPECT_FALSE( 1216 EXPECT_FALSE(
1210 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack()); 1217 orig_rfh->GetRenderViewHost()->is_waiting_for_beforeunload_ack());
1211 SiteInstance* instance2 = contents()->GetSiteInstance(); 1218 SiteInstance* instance2 = contents()->GetSiteInstance();
1212 EXPECT_FALSE(contents()->cross_navigation_pending()); 1219 EXPECT_FALSE(contents()->cross_navigation_pending());
1213 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1220 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1214 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, 1221 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT,
1215 orig_rfh->GetRenderViewHost()->rvh_state()); 1222 orig_rfh->GetRenderViewHost()->rvh_state());
1216 EXPECT_EQ(instance1, instance2); 1223 EXPECT_EQ(instance1, instance2);
1217 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); 1224 EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
1218 } 1225 }
1219 1226
1220 // Test that NavigationEntries have the correct page state after going 1227 // Test that NavigationEntries have the correct page state after going
1221 // forward and back. Prevents regression for bug 1116137. 1228 // forward and back. Prevents regression for bug 1116137.
1222 TEST_F(WebContentsImplTest, NavigationEntryContentState) { 1229 TEST_F(WebContentsImplTest, NavigationEntryContentState) {
1223 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 1230 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
1224 1231
1225 // Navigate to URL. There should be no committed entry yet. 1232 // Navigate to URL. There should be no committed entry yet.
1226 const GURL url("http://www.google.com"); 1233 const GURL url("http://www.google.com");
1227 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1234 controller().LoadURL(
1235 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1228 NavigationEntry* entry = controller().GetLastCommittedEntry(); 1236 NavigationEntry* entry = controller().GetLastCommittedEntry();
1229 EXPECT_TRUE(entry == NULL); 1237 EXPECT_TRUE(entry == NULL);
1230 1238
1231 // Committed entry should have page state after DidNavigate. 1239 // Committed entry should have page state after DidNavigate.
1232 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1240 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1233 entry = controller().GetLastCommittedEntry(); 1241 entry = controller().GetLastCommittedEntry();
1234 EXPECT_TRUE(entry->GetPageState().IsValid()); 1242 EXPECT_TRUE(entry->GetPageState().IsValid());
1235 1243
1236 // Navigate to same site. 1244 // Navigate to same site.
1237 const GURL url2("http://images.google.com"); 1245 const GURL url2("http://images.google.com");
1238 controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1246 controller().LoadURL(
1247 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1239 entry = controller().GetLastCommittedEntry(); 1248 entry = controller().GetLastCommittedEntry();
1240 EXPECT_TRUE(entry->GetPageState().IsValid()); 1249 EXPECT_TRUE(entry->GetPageState().IsValid());
1241 1250
1242 // Committed entry should have page state after DidNavigate. 1251 // Committed entry should have page state after DidNavigate.
1243 contents()->TestDidNavigate(orig_rfh, 2, url2, PAGE_TRANSITION_TYPED); 1252 contents()->TestDidNavigate(orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
1244 entry = controller().GetLastCommittedEntry(); 1253 entry = controller().GetLastCommittedEntry();
1245 EXPECT_TRUE(entry->GetPageState().IsValid()); 1254 EXPECT_TRUE(entry->GetPageState().IsValid());
1246 1255
1247 // Now go back. Committed entry should still have page state. 1256 // Now go back. Committed entry should still have page state.
1248 controller().GoBack(); 1257 controller().GoBack();
1249 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1258 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1250 entry = controller().GetLastCommittedEntry(); 1259 entry = controller().GetLastCommittedEntry();
1251 EXPECT_TRUE(entry->GetPageState().IsValid()); 1260 EXPECT_TRUE(entry->GetPageState().IsValid());
1252 } 1261 }
1253 1262
1254 // Test that NavigationEntries have the correct page state and SiteInstance 1263 // Test that NavigationEntries have the correct page state and SiteInstance
1255 // state after opening a new window to about:blank. Prevents regression for 1264 // state after opening a new window to about:blank. Prevents regression for
1256 // bugs b/1116137 and http://crbug.com/111975. 1265 // bugs b/1116137 and http://crbug.com/111975.
1257 TEST_F(WebContentsImplTest, NavigationEntryContentStateNewWindow) { 1266 TEST_F(WebContentsImplTest, NavigationEntryContentStateNewWindow) {
1258 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 1267 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
1259 1268
1260 // When opening a new window, it is navigated to about:blank internally. 1269 // When opening a new window, it is navigated to about:blank internally.
1261 // Currently, this results in two DidNavigate events. 1270 // Currently, this results in two DidNavigate events.
1262 const GURL url(url::kAboutBlankURL); 1271 const GURL url(url::kAboutBlankURL);
1263 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1272 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1264 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1273 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1265 1274
1266 // Should have a page state here. 1275 // Should have a page state here.
1267 NavigationEntry* entry = controller().GetLastCommittedEntry(); 1276 NavigationEntry* entry = controller().GetLastCommittedEntry();
1268 EXPECT_TRUE(entry->GetPageState().IsValid()); 1277 EXPECT_TRUE(entry->GetPageState().IsValid());
1269 1278
1270 // The SiteInstance should be available for other navigations to use. 1279 // The SiteInstance should be available for other navigations to use.
1271 NavigationEntryImpl* entry_impl = 1280 NavigationEntryImpl* entry_impl =
1272 NavigationEntryImpl::FromNavigationEntry(entry); 1281 NavigationEntryImpl::FromNavigationEntry(entry);
1273 EXPECT_FALSE(entry_impl->site_instance()->HasSite()); 1282 EXPECT_FALSE(entry_impl->site_instance()->HasSite());
1274 int32 site_instance_id = entry_impl->site_instance()->GetId(); 1283 int32 site_instance_id = entry_impl->site_instance()->GetId();
1275 1284
1276 // Navigating to a normal page should not cause a process swap. 1285 // Navigating to a normal page should not cause a process swap.
1277 const GURL new_url("http://www.google.com"); 1286 const GURL new_url("http://www.google.com");
1278 controller().LoadURL(new_url, Referrer(), 1287 controller().LoadURL(new_url, Referrer(),
1279 PAGE_TRANSITION_TYPED, std::string()); 1288 ui::PAGE_TRANSITION_TYPED, std::string());
1280 EXPECT_FALSE(contents()->cross_navigation_pending()); 1289 EXPECT_FALSE(contents()->cross_navigation_pending());
1281 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1290 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1282 contents()->TestDidNavigate(orig_rfh, 1, new_url, PAGE_TRANSITION_TYPED); 1291 contents()->TestDidNavigate(orig_rfh, 1, new_url, ui::PAGE_TRANSITION_TYPED);
1283 NavigationEntryImpl* entry_impl2 = NavigationEntryImpl::FromNavigationEntry( 1292 NavigationEntryImpl* entry_impl2 = NavigationEntryImpl::FromNavigationEntry(
1284 controller().GetLastCommittedEntry()); 1293 controller().GetLastCommittedEntry());
1285 EXPECT_EQ(site_instance_id, entry_impl2->site_instance()->GetId()); 1294 EXPECT_EQ(site_instance_id, entry_impl2->site_instance()->GetId());
1286 EXPECT_TRUE(entry_impl2->site_instance()->HasSite()); 1295 EXPECT_TRUE(entry_impl2->site_instance()->HasSite());
1287 } 1296 }
1288 1297
1289 // Tests that fullscreen is exited throughout the object hierarchy when 1298 // Tests that fullscreen is exited throughout the object hierarchy when
1290 // navigating to a new page. 1299 // navigating to a new page.
1291 TEST_F(WebContentsImplTest, NavigationExitsFullscreen) { 1300 TEST_F(WebContentsImplTest, NavigationExitsFullscreen) {
1292 FakeFullscreenDelegate fake_delegate; 1301 FakeFullscreenDelegate fake_delegate;
1293 contents()->SetDelegate(&fake_delegate); 1302 contents()->SetDelegate(&fake_delegate);
1294 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame(); 1303 TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
1295 TestRenderViewHost* orig_rvh = orig_rfh->GetRenderViewHost(); 1304 TestRenderViewHost* orig_rvh = orig_rfh->GetRenderViewHost();
1296 1305
1297 // Navigate to a site. 1306 // Navigate to a site.
1298 const GURL url("http://www.google.com"); 1307 const GURL url("http://www.google.com");
1299 controller().LoadURL( 1308 controller().LoadURL(
1300 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1309 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1301 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1310 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1302 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1311 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1303 1312
1304 // Toggle fullscreen mode on (as if initiated via IPC from renderer). 1313 // Toggle fullscreen mode on (as if initiated via IPC from renderer).
1305 EXPECT_FALSE(orig_rvh->IsFullscreen()); 1314 EXPECT_FALSE(orig_rvh->IsFullscreen());
1306 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab()); 1315 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab());
1307 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1316 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1308 orig_rvh->OnMessageReceived( 1317 orig_rvh->OnMessageReceived(
1309 ViewHostMsg_ToggleFullscreen(orig_rvh->GetRoutingID(), true)); 1318 ViewHostMsg_ToggleFullscreen(orig_rvh->GetRoutingID(), true));
1310 EXPECT_TRUE(orig_rvh->IsFullscreen()); 1319 EXPECT_TRUE(orig_rvh->IsFullscreen());
1311 EXPECT_TRUE(contents()->IsFullscreenForCurrentTab()); 1320 EXPECT_TRUE(contents()->IsFullscreenForCurrentTab());
1312 EXPECT_TRUE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1321 EXPECT_TRUE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1313 1322
1314 // Navigate to a new site. 1323 // Navigate to a new site.
1315 const GURL url2("http://www.yahoo.com"); 1324 const GURL url2("http://www.yahoo.com");
1316 controller().LoadURL( 1325 controller().LoadURL(
1317 url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1326 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1318 TestRenderFrameHost* const pending_rfh = contents()->GetPendingMainFrame(); 1327 TestRenderFrameHost* const pending_rfh = contents()->GetPendingMainFrame();
1319 contents()->TestDidNavigate( 1328 contents()->TestDidNavigate(
1320 pending_rfh, 1, url2, PAGE_TRANSITION_TYPED); 1329 pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
1321 1330
1322 // Confirm fullscreen has exited. 1331 // Confirm fullscreen has exited.
1323 EXPECT_FALSE(orig_rvh->IsFullscreen()); 1332 EXPECT_FALSE(orig_rvh->IsFullscreen());
1324 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab()); 1333 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab());
1325 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1334 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1326 1335
1327 contents()->SetDelegate(NULL); 1336 contents()->SetDelegate(NULL);
1328 } 1337 }
1329 1338
1330 // Tests that fullscreen is exited throughout the object hierarchy when 1339 // Tests that fullscreen is exited throughout the object hierarchy when
1331 // instructing NavigationController to GoBack() or GoForward(). 1340 // instructing NavigationController to GoBack() or GoForward().
1332 TEST_F(WebContentsImplTest, HistoryNavigationExitsFullscreen) { 1341 TEST_F(WebContentsImplTest, HistoryNavigationExitsFullscreen) {
1333 FakeFullscreenDelegate fake_delegate; 1342 FakeFullscreenDelegate fake_delegate;
1334 contents()->SetDelegate(&fake_delegate); 1343 contents()->SetDelegate(&fake_delegate);
1335 TestRenderFrameHost* const orig_rfh = contents()->GetMainFrame(); 1344 TestRenderFrameHost* const orig_rfh = contents()->GetMainFrame();
1336 TestRenderViewHost* const orig_rvh = orig_rfh->GetRenderViewHost(); 1345 TestRenderViewHost* const orig_rvh = orig_rfh->GetRenderViewHost();
1337 1346
1338 // Navigate to a site. 1347 // Navigate to a site.
1339 const GURL url("http://www.google.com"); 1348 const GURL url("http://www.google.com");
1340 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1349 controller().LoadURL(
1341 contents()->TestDidNavigate(orig_rfh, 1, url, PAGE_TRANSITION_TYPED); 1350 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1351 contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
1342 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1352 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1343 1353
1344 // Now, navigate to another page on the same site. 1354 // Now, navigate to another page on the same site.
1345 const GURL url2("http://www.google.com/search?q=kittens"); 1355 const GURL url2("http://www.google.com/search?q=kittens");
1346 controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1356 controller().LoadURL(
1357 url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1347 EXPECT_FALSE(contents()->cross_navigation_pending()); 1358 EXPECT_FALSE(contents()->cross_navigation_pending());
1348 contents()->TestDidNavigate(orig_rfh, 2, url2, PAGE_TRANSITION_TYPED); 1359 contents()->TestDidNavigate(orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
1349 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1360 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1350 1361
1351 // Sanity-check: Confirm we're not starting out in fullscreen mode. 1362 // Sanity-check: Confirm we're not starting out in fullscreen mode.
1352 EXPECT_FALSE(orig_rvh->IsFullscreen()); 1363 EXPECT_FALSE(orig_rvh->IsFullscreen());
1353 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab()); 1364 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab());
1354 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1365 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1355 1366
1356 for (int i = 0; i < 2; ++i) { 1367 for (int i = 0; i < 2; ++i) {
1357 // Toggle fullscreen mode on (as if initiated via IPC from renderer). 1368 // Toggle fullscreen mode on (as if initiated via IPC from renderer).
1358 orig_rvh->OnMessageReceived( 1369 orig_rvh->OnMessageReceived(
1359 ViewHostMsg_ToggleFullscreen(orig_rvh->GetRoutingID(), true)); 1370 ViewHostMsg_ToggleFullscreen(orig_rvh->GetRoutingID(), true));
1360 EXPECT_TRUE(orig_rvh->IsFullscreen()); 1371 EXPECT_TRUE(orig_rvh->IsFullscreen());
1361 EXPECT_TRUE(contents()->IsFullscreenForCurrentTab()); 1372 EXPECT_TRUE(contents()->IsFullscreenForCurrentTab());
1362 EXPECT_TRUE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1373 EXPECT_TRUE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1363 1374
1364 // Navigate backward (or forward). 1375 // Navigate backward (or forward).
1365 if (i == 0) 1376 if (i == 0)
1366 controller().GoBack(); 1377 controller().GoBack();
1367 else 1378 else
1368 controller().GoForward(); 1379 controller().GoForward();
1369 EXPECT_FALSE(contents()->cross_navigation_pending()); 1380 EXPECT_FALSE(contents()->cross_navigation_pending());
1370 EXPECT_EQ(orig_rfh, contents()->GetMainFrame()); 1381 EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
1371 contents()->TestDidNavigate( 1382 contents()->TestDidNavigate(
1372 orig_rfh, i + 1, url, PAGE_TRANSITION_FORWARD_BACK); 1383 orig_rfh, i + 1, url, ui::PAGE_TRANSITION_FORWARD_BACK);
1373 1384
1374 // Confirm fullscreen has exited. 1385 // Confirm fullscreen has exited.
1375 EXPECT_FALSE(orig_rvh->IsFullscreen()); 1386 EXPECT_FALSE(orig_rvh->IsFullscreen());
1376 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab()); 1387 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab());
1377 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1388 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1378 } 1389 }
1379 1390
1380 contents()->SetDelegate(NULL); 1391 contents()->SetDelegate(NULL);
1381 } 1392 }
1382 1393
(...skipping 15 matching lines...) Expand all
1398 1409
1399 // Tests that fullscreen is exited throughout the object hierarchy on a renderer 1410 // Tests that fullscreen is exited throughout the object hierarchy on a renderer
1400 // crash. 1411 // crash.
1401 TEST_F(WebContentsImplTest, CrashExitsFullscreen) { 1412 TEST_F(WebContentsImplTest, CrashExitsFullscreen) {
1402 FakeFullscreenDelegate fake_delegate; 1413 FakeFullscreenDelegate fake_delegate;
1403 contents()->SetDelegate(&fake_delegate); 1414 contents()->SetDelegate(&fake_delegate);
1404 1415
1405 // Navigate to a site. 1416 // Navigate to a site.
1406 const GURL url("http://www.google.com"); 1417 const GURL url("http://www.google.com");
1407 controller().LoadURL( 1418 controller().LoadURL(
1408 url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1419 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
1409 contents()->TestDidNavigate( 1420 contents()->TestDidNavigate(
1410 contents()->GetMainFrame(), 1, url, PAGE_TRANSITION_TYPED); 1421 contents()->GetMainFrame(), 1, url, ui::PAGE_TRANSITION_TYPED);
1411 1422
1412 // Toggle fullscreen mode on (as if initiated via IPC from renderer). 1423 // Toggle fullscreen mode on (as if initiated via IPC from renderer).
1413 EXPECT_FALSE(test_rvh()->IsFullscreen()); 1424 EXPECT_FALSE(test_rvh()->IsFullscreen());
1414 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab()); 1425 EXPECT_FALSE(contents()->IsFullscreenForCurrentTab());
1415 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1426 EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents()));
1416 test_rvh()->OnMessageReceived( 1427 test_rvh()->OnMessageReceived(
1417 ViewHostMsg_ToggleFullscreen(test_rvh()->GetRoutingID(), true)); 1428 ViewHostMsg_ToggleFullscreen(test_rvh()->GetRoutingID(), true));
1418 EXPECT_TRUE(test_rvh()->IsFullscreen()); 1429 EXPECT_TRUE(test_rvh()->IsFullscreen());
1419 EXPECT_TRUE(contents()->IsFullscreenForCurrentTab()); 1430 EXPECT_TRUE(contents()->IsFullscreenForCurrentTab());
1420 EXPECT_TRUE(fake_delegate.IsFullscreenForTabOrPending(contents())); 1431 EXPECT_TRUE(fake_delegate.IsFullscreenForTabOrPending(contents()));
(...skipping 20 matching lines...) Expand all
1441 // creates a new navigation entry, then hiding it without proceeding. 1452 // creates a new navigation entry, then hiding it without proceeding.
1442 TEST_F(WebContentsImplTest, 1453 TEST_F(WebContentsImplTest,
1443 ShowInterstitialFromBrowserWithNewNavigationDontProceed) { 1454 ShowInterstitialFromBrowserWithNewNavigationDontProceed) {
1444 // Navigate to a page. 1455 // Navigate to a page.
1445 GURL url1("http://www.google.com"); 1456 GURL url1("http://www.google.com");
1446 contents()->GetMainFrame()->SendNavigate(1, url1); 1457 contents()->GetMainFrame()->SendNavigate(1, url1);
1447 EXPECT_EQ(1, controller().GetEntryCount()); 1458 EXPECT_EQ(1, controller().GetEntryCount());
1448 1459
1449 // Initiate a browser navigation that will trigger the interstitial 1460 // Initiate a browser navigation that will trigger the interstitial
1450 controller().LoadURL(GURL("http://www.evil.com"), Referrer(), 1461 controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
1451 PAGE_TRANSITION_TYPED, std::string()); 1462 ui::PAGE_TRANSITION_TYPED, std::string());
1452 1463
1453 // Show an interstitial. 1464 // Show an interstitial.
1454 TestInterstitialPage::InterstitialState state = 1465 TestInterstitialPage::InterstitialState state =
1455 TestInterstitialPage::INVALID; 1466 TestInterstitialPage::INVALID;
1456 bool deleted = false; 1467 bool deleted = false;
1457 GURL url2("http://interstitial"); 1468 GURL url2("http://interstitial");
1458 TestInterstitialPage* interstitial = 1469 TestInterstitialPage* interstitial =
1459 new TestInterstitialPage(contents(), true, url2, &state, &deleted); 1470 new TestInterstitialPage(contents(), true, url2, &state, &deleted);
1460 TestInterstitialPageStateGuard state_guard(interstitial); 1471 TestInterstitialPageStateGuard state_guard(interstitial);
1461 interstitial->Show(); 1472 interstitial->Show();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1584 // creates a new navigation entry, then proceeding. 1595 // creates a new navigation entry, then proceeding.
1585 TEST_F(WebContentsImplTest, 1596 TEST_F(WebContentsImplTest,
1586 ShowInterstitialFromBrowserNewNavigationProceed) { 1597 ShowInterstitialFromBrowserNewNavigationProceed) {
1587 // Navigate to a page. 1598 // Navigate to a page.
1588 GURL url1("http://www.google.com"); 1599 GURL url1("http://www.google.com");
1589 contents()->GetMainFrame()->SendNavigate(1, url1); 1600 contents()->GetMainFrame()->SendNavigate(1, url1);
1590 EXPECT_EQ(1, controller().GetEntryCount()); 1601 EXPECT_EQ(1, controller().GetEntryCount());
1591 1602
1592 // Initiate a browser navigation that will trigger the interstitial 1603 // Initiate a browser navigation that will trigger the interstitial
1593 controller().LoadURL(GURL("http://www.evil.com"), Referrer(), 1604 controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
1594 PAGE_TRANSITION_TYPED, std::string()); 1605 ui::PAGE_TRANSITION_TYPED, std::string());
1595 1606
1596 // Show an interstitial. 1607 // Show an interstitial.
1597 TestInterstitialPage::InterstitialState state = 1608 TestInterstitialPage::InterstitialState state =
1598 TestInterstitialPage::INVALID; 1609 TestInterstitialPage::INVALID;
1599 bool deleted = false; 1610 bool deleted = false;
1600 GURL url2("http://interstitial"); 1611 GURL url2("http://interstitial");
1601 TestInterstitialPage* interstitial = 1612 TestInterstitialPage* interstitial =
1602 new TestInterstitialPage(contents(), true, url2, &state, &deleted); 1613 new TestInterstitialPage(contents(), true, url2, &state, &deleted);
1603 TestInterstitialPageStateGuard state_guard(interstitial); 1614 TestInterstitialPageStateGuard state_guard(interstitial);
1604 interstitial->Show(); 1615 interstitial->Show();
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after
2079 GURL interstitial_url("http://interstitial"); 2090 GURL interstitial_url("http://interstitial");
2080 TestInterstitialPage* interstitial = 2091 TestInterstitialPage* interstitial =
2081 new TestInterstitialPage(contents(), true, interstitial_url, 2092 new TestInterstitialPage(contents(), true, interstitial_url,
2082 &state, &deleted); 2093 &state, &deleted);
2083 TestInterstitialPageStateGuard state_guard(interstitial); 2094 TestInterstitialPageStateGuard state_guard(interstitial);
2084 interstitial->Show(); 2095 interstitial->Show();
2085 2096
2086 // Let's simulate a navigation initiated from the browser before the 2097 // Let's simulate a navigation initiated from the browser before the
2087 // interstitial finishes loading. 2098 // interstitial finishes loading.
2088 const GURL url("http://www.google.com"); 2099 const GURL url("http://www.google.com");
2089 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2100 controller().LoadURL(
2101 url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
2090 EXPECT_FALSE(interstitial->is_showing()); 2102 EXPECT_FALSE(interstitial->is_showing());
2091 RunAllPendingInMessageLoop(); 2103 RunAllPendingInMessageLoop();
2092 ASSERT_FALSE(deleted); 2104 ASSERT_FALSE(deleted);
2093 2105
2094 // Now let's make the interstitial navigation commit. 2106 // Now let's make the interstitial navigation commit.
2095 interstitial->TestDidNavigate(1, interstitial_url); 2107 interstitial->TestDidNavigate(1, interstitial_url);
2096 2108
2097 // After it loaded the interstitial should be gone. 2109 // After it loaded the interstitial should be gone.
2098 EXPECT_EQ(TestInterstitialPage::CANCELED, state); 2110 EXPECT_EQ(TestInterstitialPage::CANCELED, state);
2099 2111
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
2176 2188
2177 // Tests that showing an interstitial as a result of a browser initiated 2189 // Tests that showing an interstitial as a result of a browser initiated
2178 // navigation while an interstitial is showing does not remove the pending 2190 // navigation while an interstitial is showing does not remove the pending
2179 // entry (see http://crbug.com/9791). 2191 // entry (see http://crbug.com/9791).
2180 TEST_F(WebContentsImplTest, NewInterstitialDoesNotCancelPendingEntry) { 2192 TEST_F(WebContentsImplTest, NewInterstitialDoesNotCancelPendingEntry) {
2181 const char kUrl[] = "http://www.badguys.com/"; 2193 const char kUrl[] = "http://www.badguys.com/";
2182 const GURL kGURL(kUrl); 2194 const GURL kGURL(kUrl);
2183 2195
2184 // Start a navigation to a page 2196 // Start a navigation to a page
2185 contents()->GetController().LoadURL( 2197 contents()->GetController().LoadURL(
2186 kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2198 kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
2187 2199
2188 // Simulate that navigation triggering an interstitial. 2200 // Simulate that navigation triggering an interstitial.
2189 TestInterstitialPage::InterstitialState state = 2201 TestInterstitialPage::InterstitialState state =
2190 TestInterstitialPage::INVALID; 2202 TestInterstitialPage::INVALID;
2191 bool deleted = false; 2203 bool deleted = false;
2192 TestInterstitialPage* interstitial = 2204 TestInterstitialPage* interstitial =
2193 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted); 2205 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
2194 TestInterstitialPageStateGuard state_guard(interstitial); 2206 TestInterstitialPageStateGuard state_guard(interstitial);
2195 interstitial->Show(); 2207 interstitial->Show();
2196 interstitial->TestDidNavigate(1, kGURL); 2208 interstitial->TestDidNavigate(1, kGURL);
2197 2209
2198 // Initiate a new navigation from the browser that also triggers an 2210 // Initiate a new navigation from the browser that also triggers an
2199 // interstitial. 2211 // interstitial.
2200 contents()->GetController().LoadURL( 2212 contents()->GetController().LoadURL(
2201 kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2213 kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
2202 TestInterstitialPage::InterstitialState state2 = 2214 TestInterstitialPage::InterstitialState state2 =
2203 TestInterstitialPage::INVALID; 2215 TestInterstitialPage::INVALID;
2204 bool deleted2 = false; 2216 bool deleted2 = false;
2205 TestInterstitialPage* interstitial2 = 2217 TestInterstitialPage* interstitial2 =
2206 new TestInterstitialPage(contents(), true, kGURL, &state2, &deleted2); 2218 new TestInterstitialPage(contents(), true, kGURL, &state2, &deleted2);
2207 TestInterstitialPageStateGuard state_guard2(interstitial2); 2219 TestInterstitialPageStateGuard state_guard2(interstitial2);
2208 interstitial2->Show(); 2220 interstitial2->Show();
2209 interstitial2->TestDidNavigate(1, kGURL); 2221 interstitial2->TestDidNavigate(1, kGURL);
2210 2222
2211 // Make sure we still have an entry. 2223 // Make sure we still have an entry.
(...skipping 10 matching lines...) Expand all
2222 } 2234 }
2223 2235
2224 // Tests that Javascript messages are not shown while an interstitial is 2236 // Tests that Javascript messages are not shown while an interstitial is
2225 // showing. 2237 // showing.
2226 TEST_F(WebContentsImplTest, NoJSMessageOnInterstitials) { 2238 TEST_F(WebContentsImplTest, NoJSMessageOnInterstitials) {
2227 const char kUrl[] = "http://www.badguys.com/"; 2239 const char kUrl[] = "http://www.badguys.com/";
2228 const GURL kGURL(kUrl); 2240 const GURL kGURL(kUrl);
2229 2241
2230 // Start a navigation to a page 2242 // Start a navigation to a page
2231 contents()->GetController().LoadURL( 2243 contents()->GetController().LoadURL(
2232 kGURL, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2244 kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
2233 // DidNavigate from the page 2245 // DidNavigate from the page
2234 contents()->TestDidNavigate( 2246 contents()->TestDidNavigate(
2235 contents()->GetMainFrame(), 1, kGURL, PAGE_TRANSITION_TYPED); 2247 contents()->GetMainFrame(), 1, kGURL, ui::PAGE_TRANSITION_TYPED);
2236 2248
2237 // Simulate showing an interstitial while the page is showing. 2249 // Simulate showing an interstitial while the page is showing.
2238 TestInterstitialPage::InterstitialState state = 2250 TestInterstitialPage::InterstitialState state =
2239 TestInterstitialPage::INVALID; 2251 TestInterstitialPage::INVALID;
2240 bool deleted = false; 2252 bool deleted = false;
2241 TestInterstitialPage* interstitial = 2253 TestInterstitialPage* interstitial =
2242 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted); 2254 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
2243 TestInterstitialPageStateGuard state_guard(interstitial); 2255 TestInterstitialPageStateGuard state_guard(interstitial);
2244 interstitial->Show(); 2256 interstitial->Show();
2245 interstitial->TestDidNavigate(1, kGURL); 2257 interstitial->TestDidNavigate(1, kGURL);
(...skipping 11 matching lines...) Expand all
2257 // Makes sure that if the source passed to CopyStateFromAndPrune has an 2269 // Makes sure that if the source passed to CopyStateFromAndPrune has an
2258 // interstitial it isn't copied over to the destination. 2270 // interstitial it isn't copied over to the destination.
2259 TEST_F(WebContentsImplTest, CopyStateFromAndPruneSourceInterstitial) { 2271 TEST_F(WebContentsImplTest, CopyStateFromAndPruneSourceInterstitial) {
2260 // Navigate to a page. 2272 // Navigate to a page.
2261 GURL url1("http://www.google.com"); 2273 GURL url1("http://www.google.com");
2262 contents()->GetMainFrame()->SendNavigate(1, url1); 2274 contents()->GetMainFrame()->SendNavigate(1, url1);
2263 EXPECT_EQ(1, controller().GetEntryCount()); 2275 EXPECT_EQ(1, controller().GetEntryCount());
2264 2276
2265 // Initiate a browser navigation that will trigger the interstitial 2277 // Initiate a browser navigation that will trigger the interstitial
2266 controller().LoadURL(GURL("http://www.evil.com"), Referrer(), 2278 controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
2267 PAGE_TRANSITION_TYPED, std::string()); 2279 ui::PAGE_TRANSITION_TYPED, std::string());
2268 2280
2269 // Show an interstitial. 2281 // Show an interstitial.
2270 TestInterstitialPage::InterstitialState state = 2282 TestInterstitialPage::InterstitialState state =
2271 TestInterstitialPage::INVALID; 2283 TestInterstitialPage::INVALID;
2272 bool deleted = false; 2284 bool deleted = false;
2273 GURL url2("http://interstitial"); 2285 GURL url2("http://interstitial");
2274 TestInterstitialPage* interstitial = 2286 TestInterstitialPage* interstitial =
2275 new TestInterstitialPage(contents(), true, url2, &state, &deleted); 2287 new TestInterstitialPage(contents(), true, url2, &state, &deleted);
2276 TestInterstitialPageStateGuard state_guard(interstitial); 2288 TestInterstitialPageStateGuard state_guard(interstitial);
2277 interstitial->Show(); 2289 interstitial->Show();
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
2617 scoped_refptr<SiteInstance> instance( 2629 scoped_refptr<SiteInstance> instance(
2618 SiteInstance::Create(browser_context())); 2630 SiteInstance::Create(browser_context()));
2619 2631
2620 EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount()); 2632 EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
2621 2633
2622 scoped_ptr<TestWebContents> contents( 2634 scoped_ptr<TestWebContents> contents(
2623 TestWebContents::Create(browser_context(), instance.get())); 2635 TestWebContents::Create(browser_context(), instance.get()));
2624 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2636 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2625 2637
2626 // Navigate to a URL. 2638 // Navigate to a URL.
2627 contents->GetController().LoadURL( 2639 contents->GetController().LoadURL(GURL("http://a.com/1"),
2628 GURL("http://a.com/1"), Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2640 Referrer(),
2641 ui::PAGE_TRANSITION_TYPED,
2642 std::string());
2629 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2643 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2630 contents->CommitPendingNavigation(); 2644 contents->CommitPendingNavigation();
2631 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2645 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2632 2646
2633 // Navigate to a URL in the same site. 2647 // Navigate to a URL in the same site.
2634 contents->GetController().LoadURL( 2648 contents->GetController().LoadURL(GURL("http://a.com/2"),
2635 GURL("http://a.com/2"), Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2649 Referrer(),
2650 ui::PAGE_TRANSITION_TYPED,
2651 std::string());
2636 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2652 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2637 contents->CommitPendingNavigation(); 2653 contents->CommitPendingNavigation();
2638 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2654 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2639 2655
2640 // Navigate to a URL in a different site. 2656 // Navigate to a URL in a different site.
2641 contents->GetController().LoadURL( 2657 contents->GetController().LoadURL(GURL("http://b.com"),
2642 GURL("http://b.com"), Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2658 Referrer(),
2659 ui::PAGE_TRANSITION_TYPED,
2660 std::string());
2643 EXPECT_TRUE(contents->cross_navigation_pending()); 2661 EXPECT_TRUE(contents->cross_navigation_pending());
2644 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2662 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2645 contents->CommitPendingNavigation(); 2663 contents->CommitPendingNavigation();
2646 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2664 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2647 2665
2648 contents.reset(); 2666 contents.reset();
2649 EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount()); 2667 EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
2650 } 2668 }
2651 2669
2652 // Tests that GetRelatedActiveContentsCount tracks BrowsingInstance changes 2670 // Tests that GetRelatedActiveContentsCount tracks BrowsingInstance changes
2653 // from WebUI. 2671 // from WebUI.
2654 TEST_F(WebContentsImplTest, ActiveContentsCountChangeBrowsingInstance) { 2672 TEST_F(WebContentsImplTest, ActiveContentsCountChangeBrowsingInstance) {
2655 scoped_refptr<SiteInstance> instance( 2673 scoped_refptr<SiteInstance> instance(
2656 SiteInstance::Create(browser_context())); 2674 SiteInstance::Create(browser_context()));
2657 2675
2658 EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount()); 2676 EXPECT_EQ(0u, instance->GetRelatedActiveContentsCount());
2659 2677
2660 scoped_ptr<TestWebContents> contents( 2678 scoped_ptr<TestWebContents> contents(
2661 TestWebContents::Create(browser_context(), instance.get())); 2679 TestWebContents::Create(browser_context(), instance.get()));
2662 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2680 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2663 2681
2664 // Navigate to a URL. 2682 // Navigate to a URL.
2665 contents->NavigateAndCommit(GURL("http://a.com")); 2683 contents->NavigateAndCommit(GURL("http://a.com"));
2666 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2684 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2667 2685
2668 // Navigate to a URL with WebUI. This will change BrowsingInstances. 2686 // Navigate to a URL with WebUI. This will change BrowsingInstances.
2669 contents->GetController().LoadURL( 2687 contents->GetController().LoadURL(GURL(kTestWebUIUrl),
2670 GURL(kTestWebUIUrl), Referrer(), PAGE_TRANSITION_TYPED, std::string()); 2688 Referrer(),
2689 ui::PAGE_TRANSITION_TYPED,
2690 std::string());
2671 EXPECT_TRUE(contents->cross_navigation_pending()); 2691 EXPECT_TRUE(contents->cross_navigation_pending());
2672 scoped_refptr<SiteInstance> instance_webui( 2692 scoped_refptr<SiteInstance> instance_webui(
2673 contents->GetPendingMainFrame()->GetSiteInstance()); 2693 contents->GetPendingMainFrame()->GetSiteInstance());
2674 EXPECT_FALSE(instance->IsRelatedSiteInstance(instance_webui.get())); 2694 EXPECT_FALSE(instance->IsRelatedSiteInstance(instance_webui.get()));
2675 2695
2676 // At this point, contents still counts for the old BrowsingInstance. 2696 // At this point, contents still counts for the old BrowsingInstance.
2677 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount()); 2697 EXPECT_EQ(1u, instance->GetRelatedActiveContentsCount());
2678 EXPECT_EQ(0u, instance_webui->GetRelatedActiveContentsCount()); 2698 EXPECT_EQ(0u, instance_webui->GetRelatedActiveContentsCount());
2679 2699
2680 // Commit and contents counts for the new one. 2700 // Commit and contents counts for the new one.
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
2768 2788
2769 // Destroy the video only player. No power save blockers should remain. 2789 // Destroy the video only player. No power save blockers should remain.
2770 rfh->OnMessageReceived( 2790 rfh->OnMessageReceived(
2771 FrameHostMsg_MediaPausedNotification(0, kPlayerVideoOnlyId)); 2791 FrameHostMsg_MediaPausedNotification(0, kPlayerVideoOnlyId));
2772 EXPECT_FALSE(contents()->has_video_power_save_blocker_for_testing()); 2792 EXPECT_FALSE(contents()->has_video_power_save_blocker_for_testing());
2773 EXPECT_FALSE(contents()->has_audio_power_save_blocker_for_testing()); 2793 EXPECT_FALSE(contents()->has_audio_power_save_blocker_for_testing());
2774 } 2794 }
2775 #endif 2795 #endif
2776 2796
2777 } // namespace content 2797 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698