OLD | NEW |
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/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/defaults.h" | 9 #include "chrome/browser/defaults.h" |
10 #include "chrome/browser/first_run/first_run.h" | 10 #include "chrome/browser/first_run/first_run.h" |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
385 TabNavigation nav2(0, url2, content::Referrer(), ASCIIToUTF16("two"), | 385 TabNavigation nav2(0, url2, content::Referrer(), ASCIIToUTF16("two"), |
386 std::string(), content::PAGE_TRANSITION_TYPED); | 386 std::string(), content::PAGE_TRANSITION_TYPED); |
387 | 387 |
388 // Set up the restore data. | 388 // Set up the restore data. |
389 SessionTab tab; | 389 SessionTab tab; |
390 tab.tab_visual_index = 0; | 390 tab.tab_visual_index = 0; |
391 tab.current_navigation_index = 1; | 391 tab.current_navigation_index = 1; |
392 tab.pinned = false; | 392 tab.pinned = false; |
393 tab.navigations.push_back(nav1); | 393 tab.navigations.push_back(nav1); |
394 tab.navigations.push_back(nav2); | 394 tab.navigations.push_back(nav2); |
| 395 tab.user_agent_override = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19" |
| 396 " (KHTML, like Gecko) Chrome/18.0.1025.45 Safari/535.19"; |
395 | 397 |
396 ASSERT_EQ(1, browser()->tab_count()); | 398 ASSERT_EQ(1, browser()->tab_count()); |
397 | 399 |
398 // Restore in the current tab. | 400 // Restore in the current tab. |
399 { | 401 { |
400 content::WindowedNotificationObserver observer( | 402 content::WindowedNotificationObserver observer( |
401 content::NOTIFICATION_LOAD_STOP, | 403 content::NOTIFICATION_LOAD_STOP, |
402 content::NotificationService::AllSources()); | 404 content::NotificationService::AllSources()); |
403 SessionRestore::RestoreForeignSessionTab( | 405 SessionRestore::RestoreForeignSessionTab( |
404 chrome::GetActiveWebContents(browser()), tab, CURRENT_TAB); | 406 chrome::GetActiveWebContents(browser()), tab, CURRENT_TAB); |
405 observer.Wait(); | 407 observer.Wait(); |
406 } | 408 } |
407 ASSERT_EQ(1, browser()->tab_count()); | 409 ASSERT_EQ(1, browser()->tab_count()); |
408 VerifyNavigationEntries( | 410 content::WebContents* web_contents = chrome::GetWebContentsAt(browser(), 0); |
409 chrome::GetWebContentsAt(browser(), 0)->GetController(), url1, url2); | 411 VerifyNavigationEntries(web_contents->GetController(), url1, url2); |
| 412 ASSERT_EQ(tab.user_agent_override, web_contents->GetUserAgentOverride()); |
410 | 413 |
411 // Restore in a new tab. | 414 // Restore in a new tab. |
412 { | 415 { |
413 content::WindowedNotificationObserver observer( | 416 content::WindowedNotificationObserver observer( |
414 content::NOTIFICATION_LOAD_STOP, | 417 content::NOTIFICATION_LOAD_STOP, |
415 content::NotificationService::AllSources()); | 418 content::NotificationService::AllSources()); |
416 SessionRestore::RestoreForeignSessionTab( | 419 SessionRestore::RestoreForeignSessionTab( |
417 chrome::GetActiveWebContents(browser()), tab, NEW_BACKGROUND_TAB); | 420 chrome::GetActiveWebContents(browser()), tab, NEW_BACKGROUND_TAB); |
418 observer.Wait(); | 421 observer.Wait(); |
419 } | 422 } |
420 ASSERT_EQ(2, browser()->tab_count()); | 423 ASSERT_EQ(2, browser()->tab_count()); |
421 ASSERT_EQ(0, browser()->active_index()); | 424 ASSERT_EQ(0, browser()->active_index()); |
422 VerifyNavigationEntries( | 425 web_contents = chrome::GetWebContentsAt(browser(), 1); |
423 chrome::GetWebContentsAt(browser(), 1)->GetController(), url1, url2); | 426 VerifyNavigationEntries(web_contents->GetController(), url1, url2); |
| 427 ASSERT_EQ(tab.user_agent_override, web_contents->GetUserAgentOverride()); |
424 | 428 |
425 // Restore in a new window. | 429 // Restore in a new window. |
426 ui_test_utils::BrowserAddedObserver browser_observer; | 430 ui_test_utils::BrowserAddedObserver browser_observer; |
427 SessionRestore::RestoreForeignSessionTab( | 431 SessionRestore::RestoreForeignSessionTab( |
428 chrome::GetActiveWebContents(browser()), tab, NEW_WINDOW); | 432 chrome::GetActiveWebContents(browser()), tab, NEW_WINDOW); |
429 Browser* new_browser = browser_observer.WaitForSingleNewBrowser(); | 433 Browser* new_browser = browser_observer.WaitForSingleNewBrowser(); |
430 | 434 |
431 ASSERT_EQ(1, new_browser->tab_count()); | 435 ASSERT_EQ(1, new_browser->tab_count()); |
432 VerifyNavigationEntries( | 436 web_contents = chrome::GetWebContentsAt(new_browser, 0); |
433 chrome::GetWebContentsAt(new_browser, 0)->GetController(), url1, url2); | 437 VerifyNavigationEntries(web_contents->GetController(), url1, url2); |
| 438 ASSERT_EQ(tab.user_agent_override, web_contents->GetUserAgentOverride()); |
434 } | 439 } |
435 | 440 |
436 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestoreForeignSession) { | 441 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestoreForeignSession) { |
437 Profile* profile = browser()->profile(); | 442 Profile* profile = browser()->profile(); |
438 | 443 |
439 GURL url1("http://google.com"); | 444 GURL url1("http://google.com"); |
440 GURL url2("http://google2.com"); | 445 GURL url2("http://google2.com"); |
441 TabNavigation nav1(0, url1, content::Referrer(), ASCIIToUTF16("one"), | 446 TabNavigation nav1(0, url1, content::Referrer(), ASCIIToUTF16("one"), |
442 std::string(), content::PAGE_TRANSITION_TYPED); | 447 std::string(), content::PAGE_TRANSITION_TYPED); |
443 TabNavigation nav2(0, url2, content::Referrer(), ASCIIToUTF16("two"), | 448 TabNavigation nav2(0, url2, content::Referrer(), ASCIIToUTF16("two"), |
444 std::string(), content::PAGE_TRANSITION_TYPED); | 449 std::string(), content::PAGE_TRANSITION_TYPED); |
| 450 nav1.set_is_overriding_user_agent(false); |
| 451 nav2.set_is_overriding_user_agent(true); |
445 | 452 |
446 // Set up the restore data -- one window with two tabs. | 453 // Set up the restore data -- one window with two tabs. |
447 std::vector<const SessionWindow*> session; | 454 std::vector<const SessionWindow*> session; |
448 SessionWindow window; | 455 SessionWindow window; |
449 SessionTab tab1; | 456 SessionTab tab1; |
450 tab1.tab_visual_index = 0; | 457 tab1.tab_visual_index = 0; |
451 tab1.current_navigation_index = 0; | 458 tab1.current_navigation_index = 0; |
452 tab1.pinned = true; | 459 tab1.pinned = true; |
453 tab1.navigations.push_back(nav1); | 460 tab1.navigations.push_back(nav1); |
| 461 tab1.user_agent_override = "user_agent_override"; |
454 window.tabs.push_back(&tab1); | 462 window.tabs.push_back(&tab1); |
455 | 463 |
456 SessionTab tab2; | 464 SessionTab tab2; |
457 tab2.tab_visual_index = 1; | 465 tab2.tab_visual_index = 1; |
458 tab2.current_navigation_index = 0; | 466 tab2.current_navigation_index = 0; |
459 tab2.pinned = false; | 467 tab2.pinned = false; |
460 tab2.navigations.push_back(nav2); | 468 tab2.navigations.push_back(nav2); |
| 469 tab2.user_agent_override = "user_agent_override_2"; |
461 window.tabs.push_back(&tab2); | 470 window.tabs.push_back(&tab2); |
462 | 471 |
463 session.push_back(static_cast<const SessionWindow*>(&window)); | 472 session.push_back(static_cast<const SessionWindow*>(&window)); |
464 ui_test_utils::BrowserAddedObserver window_observer; | 473 ui_test_utils::BrowserAddedObserver window_observer; |
465 SessionRestore::RestoreForeignSessionWindows( | 474 SessionRestore::RestoreForeignSessionWindows( |
466 profile, session.begin(), session.end()); | 475 profile, session.begin(), session.end()); |
467 Browser* new_browser = window_observer.WaitForSingleNewBrowser(); | 476 Browser* new_browser = window_observer.WaitForSingleNewBrowser(); |
468 ASSERT_TRUE(new_browser); | 477 ASSERT_TRUE(new_browser); |
469 ASSERT_EQ(2u, BrowserList::size()); | 478 ASSERT_EQ(2u, BrowserList::size()); |
470 ASSERT_EQ(2, new_browser->tab_count()); | 479 ASSERT_EQ(2, new_browser->tab_count()); |
471 | 480 |
472 ASSERT_EQ(url1, chrome::GetWebContentsAt(new_browser, 0)->GetURL()); | 481 content::WebContents* web_contents_1 = |
473 ASSERT_EQ(url2, chrome::GetWebContentsAt(new_browser, 1)->GetURL()); | 482 chrome::GetWebContentsAt(new_browser, 0); |
| 483 content::WebContents* web_contents_2 = |
| 484 chrome::GetWebContentsAt(new_browser, 1); |
| 485 ASSERT_EQ(url1, web_contents_1->GetURL()); |
| 486 ASSERT_EQ(url2, web_contents_2->GetURL()); |
| 487 |
| 488 // Check user agent override state. |
| 489 ASSERT_EQ(tab1.user_agent_override, web_contents_1->GetUserAgentOverride()); |
| 490 ASSERT_EQ(tab2.user_agent_override, web_contents_2->GetUserAgentOverride()); |
| 491 |
| 492 content::NavigationEntry* entry = |
| 493 web_contents_1->GetController().GetActiveEntry(); |
| 494 ASSERT_TRUE(entry); |
| 495 ASSERT_EQ(nav1.is_overriding_user_agent(), entry->GetIsOverridingUserAgent()); |
| 496 |
| 497 entry = web_contents_2->GetController().GetActiveEntry(); |
| 498 ASSERT_TRUE(entry); |
| 499 ASSERT_EQ(nav2.is_overriding_user_agent(), entry->GetIsOverridingUserAgent()); |
474 | 500 |
475 // The SessionWindow destructor deletes the tabs, so we have to clear them | 501 // The SessionWindow destructor deletes the tabs, so we have to clear them |
476 // here to avoid a crash. | 502 // here to avoid a crash. |
477 window.tabs.clear(); | 503 window.tabs.clear(); |
478 } | 504 } |
479 | 505 |
480 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, Basic) { | 506 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, Basic) { |
481 ui_test_utils::NavigateToURL(browser(), url1_); | 507 ui_test_utils::NavigateToURL(browser(), url1_); |
482 ui_test_utils::NavigateToURL(browser(), url2_); | 508 ui_test_utils::NavigateToURL(browser(), url2_); |
483 | 509 |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 int expected_process_count = RenderProcessHostCount(); | 746 int expected_process_count = RenderProcessHostCount(); |
721 | 747 |
722 // Restart. | 748 // Restart. |
723 Browser* new_browser = QuitBrowserAndRestore(browser(), 3); | 749 Browser* new_browser = QuitBrowserAndRestore(browser(), 3); |
724 | 750 |
725 ASSERT_EQ(3, new_browser->tab_count()); | 751 ASSERT_EQ(3, new_browser->tab_count()); |
726 | 752 |
727 ASSERT_EQ(expected_process_count, RenderProcessHostCount()); | 753 ASSERT_EQ(expected_process_count, RenderProcessHostCount()); |
728 } | 754 } |
729 | 755 |
| 756 // Test that changing the user agent override will persist it to disk. |
| 757 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, PersistAndRestoreUserAgentOverride) { |
| 758 // Create a tab with an overridden user agent. |
| 759 ui_test_utils::NavigateToURL(browser(), url1_); |
| 760 ASSERT_EQ(0, browser()->active_index()); |
| 761 chrome::GetWebContentsAt(browser(), 0)->SetUserAgentOverride("override"); |
| 762 |
| 763 // Create a tab without an overridden user agent. |
| 764 ui_test_utils::NavigateToURLWithDisposition( |
| 765 browser(), url2_, NEW_FOREGROUND_TAB, |
| 766 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 767 ASSERT_EQ(1, browser()->active_index()); |
| 768 |
| 769 // Kill the original browser then open a new one to trigger a restore. |
| 770 Browser* new_browser = QuitBrowserAndRestore(browser(), 1); |
| 771 ASSERT_EQ(1u, BrowserList::size()); |
| 772 ASSERT_EQ(2, new_browser->tab_count()); |
| 773 ASSERT_EQ(1, new_browser->active_index()); |
| 774 |
| 775 // Confirm that the user agent overrides are properly set. |
| 776 EXPECT_EQ("override", |
| 777 chrome::GetWebContentsAt(new_browser, 0)->GetUserAgentOverride()); |
| 778 EXPECT_EQ("", |
| 779 chrome::GetWebContentsAt(new_browser, 1)->GetUserAgentOverride()); |
| 780 } |
| 781 |
730 // Regression test for crbug.com/125958. When restoring a pinned selected tab in | 782 // Regression test for crbug.com/125958. When restoring a pinned selected tab in |
731 // a setting where there are existing tabs, the selected index computation was | 783 // a setting where there are existing tabs, the selected index computation was |
732 // wrong, leading to the wrong tab getting selected, DCHECKs firing, and the | 784 // wrong, leading to the wrong tab getting selected, DCHECKs firing, and the |
733 // pinned tab not getting loaded. | 785 // pinned tab not getting loaded. |
734 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestorePinnedSelectedTab) { | 786 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestorePinnedSelectedTab) { |
735 // Create a pinned tab. | 787 // Create a pinned tab. |
736 ui_test_utils::NavigateToURL(browser(), url1_); | 788 ui_test_utils::NavigateToURL(browser(), url1_); |
737 browser()->tab_strip_model()->SetTabPinned(0, true); | 789 browser()->tab_strip_model()->SetTabPinned(0, true); |
738 ASSERT_EQ(0, browser()->active_index()); | 790 ASSERT_EQ(0, browser()->active_index()); |
739 // Create a nonpinned tab. | 791 // Create a nonpinned tab. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
783 ASSERT_EQ(1u, BrowserList::size()); | 835 ASSERT_EQ(1u, BrowserList::size()); |
784 ASSERT_EQ(url1_, chrome::GetActiveWebContents(new_browser)->GetURL()); | 836 ASSERT_EQ(url1_, chrome::GetActiveWebContents(new_browser)->GetURL()); |
785 content::NavigationController* new_controller = | 837 content::NavigationController* new_controller = |
786 &chrome::GetActiveWebContents(new_browser)->GetController(); | 838 &chrome::GetActiveWebContents(new_browser)->GetController(); |
787 ASSERT_TRUE(new_controller->GetDefaultSessionStorageNamespace()); | 839 ASSERT_TRUE(new_controller->GetDefaultSessionStorageNamespace()); |
788 std::string restored_session_storage_persistent_id = | 840 std::string restored_session_storage_persistent_id = |
789 new_controller->GetDefaultSessionStorageNamespace()->persistent_id(); | 841 new_controller->GetDefaultSessionStorageNamespace()->persistent_id(); |
790 EXPECT_EQ(session_storage_persistent_id, | 842 EXPECT_EQ(session_storage_persistent_id, |
791 restored_session_storage_persistent_id); | 843 restored_session_storage_persistent_id); |
792 } | 844 } |
OLD | NEW |