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 <vector> |
| 6 |
5 #include "base/command_line.h" | 7 #include "base/command_line.h" |
6 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
7 #include "base/process/launch.h" | 9 #include "base/process/launch.h" |
8 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
9 #include "base/time/time.h" | 11 #include "base/time/time.h" |
10 #include "chrome/browser/browser_process.h" | 12 #include "chrome/browser/browser_process.h" |
11 #include "chrome/browser/chrome_notification_types.h" | 13 #include "chrome/browser/chrome_notification_types.h" |
12 #include "chrome/browser/defaults.h" | 14 #include "chrome/browser/defaults.h" |
13 #include "chrome/browser/first_run/first_run.h" | 15 #include "chrome/browser/first_run/first_run.h" |
14 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 | 351 |
350 // Find the SessionID for entry2. Since the session service was destroyed, | 352 // Find the SessionID for entry2. Since the session service was destroyed, |
351 // there is no guarantee that the SessionID for the tab has remained the same. | 353 // there is no guarantee that the SessionID for the tab has remained the same. |
352 base::Time timestamp; | 354 base::Time timestamp; |
353 for (std::vector<TabRestoreService::Tab>::const_iterator it = | 355 for (std::vector<TabRestoreService::Tab>::const_iterator it = |
354 window->tabs.begin(); it != window->tabs.end(); ++it) { | 356 window->tabs.begin(); it != window->tabs.end(); ++it) { |
355 const TabRestoreService::Tab& tab = *it; | 357 const TabRestoreService::Tab& tab = *it; |
356 // If this tab held url2, then restore this single tab. | 358 // If this tab held url2, then restore this single tab. |
357 if (tab.navigations[0].virtual_url() == url2) { | 359 if (tab.navigations[0].virtual_url() == url2) { |
358 timestamp = tab.navigations[0].timestamp(); | 360 timestamp = tab.navigations[0].timestamp(); |
359 service->RestoreEntryById(NULL, tab.id, host_desktop_type, UNKNOWN); | 361 std::vector<content::WebContents*> content = |
| 362 service->RestoreEntryById(NULL, tab.id, host_desktop_type, UNKNOWN); |
| 363 ASSERT_EQ(1U, content.size()); |
| 364 ASSERT_TRUE(content[0]); |
| 365 EXPECT_EQ(url2, content[0]->GetURL()); |
360 break; | 366 break; |
361 } | 367 } |
362 } | 368 } |
363 EXPECT_FALSE(timestamp.is_null()); | 369 EXPECT_FALSE(timestamp.is_null()); |
364 | 370 |
365 // Make sure that the restored tab is removed from the service. | 371 // Make sure that the restored tab is removed from the service. |
366 ASSERT_EQ(1U, service->entries().size()); | 372 ASSERT_EQ(1U, service->entries().size()); |
367 ASSERT_EQ(TabRestoreService::WINDOW, service->entries().front()->type); | 373 ASSERT_EQ(TabRestoreService::WINDOW, service->entries().front()->type); |
368 window = static_cast<TabRestoreService::Window*>(service->entries().front()); | 374 window = static_cast<TabRestoreService::Window*>(service->entries().front()); |
369 EXPECT_EQ(2U, window->tabs.size()); | 375 EXPECT_EQ(2U, window->tabs.size()); |
(...skipping 27 matching lines...) Expand all Loading... |
397 // Close the window. | 403 // Close the window. |
398 browser()->window()->Close(); | 404 browser()->window()->Close(); |
399 | 405 |
400 // Expect the window to be converted to a tab by the TRS. | 406 // Expect the window to be converted to a tab by the TRS. |
401 EXPECT_EQ(1U, service->entries().size()); | 407 EXPECT_EQ(1U, service->entries().size()); |
402 ASSERT_EQ(TabRestoreService::TAB, service->entries().front()->type); | 408 ASSERT_EQ(TabRestoreService::TAB, service->entries().front()->type); |
403 const TabRestoreService::Tab* tab = | 409 const TabRestoreService::Tab* tab = |
404 static_cast<TabRestoreService::Tab*>(service->entries().front()); | 410 static_cast<TabRestoreService::Tab*>(service->entries().front()); |
405 | 411 |
406 // Restore the tab. | 412 // Restore the tab. |
407 service->RestoreEntryById(NULL, tab->id, host_desktop_type, UNKNOWN); | 413 std::vector<content::WebContents*> content = |
| 414 service->RestoreEntryById(NULL, tab->id, host_desktop_type, UNKNOWN); |
| 415 ASSERT_EQ(1U, content.size()); |
| 416 ASSERT_TRUE(content[0]); |
| 417 EXPECT_EQ(url, content[0]->GetURL()); |
408 | 418 |
409 // Make sure the restore was successful. | 419 // Make sure the restore was successful. |
410 EXPECT_EQ(0U, service->entries().size()); | 420 EXPECT_EQ(0U, service->entries().size()); |
411 } | 421 } |
412 | 422 |
413 #if !defined(OS_CHROMEOS) | 423 #if !defined(OS_CHROMEOS) |
414 // This test does not apply to ChromeOS as ChromeOS does not do session | 424 // This test does not apply to ChromeOS as ChromeOS does not do session |
415 // restore when a new window is open. | 425 // restore when a new window is open. |
416 | 426 |
417 // Verifies we remember the last browser window when closing the last | 427 // Verifies we remember the last browser window when closing the last |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 | 490 |
481 SessionTab tab; | 491 SessionTab tab; |
482 tab.SetFromSyncData(sync_data, base::Time::Now()); | 492 tab.SetFromSyncData(sync_data, base::Time::Now()); |
483 EXPECT_EQ(2U, tab.navigations.size()); | 493 EXPECT_EQ(2U, tab.navigations.size()); |
484 for (size_t i = 0; i < tab.navigations.size(); ++i) | 494 for (size_t i = 0; i < tab.navigations.size(); ++i) |
485 EXPECT_TRUE(tab.navigations[i].timestamp().is_null()); | 495 EXPECT_TRUE(tab.navigations[i].timestamp().is_null()); |
486 | 496 |
487 ASSERT_EQ(1, browser()->tab_strip_model()->count()); | 497 ASSERT_EQ(1, browser()->tab_strip_model()->count()); |
488 | 498 |
489 // Restore in the current tab. | 499 // Restore in the current tab. |
| 500 content::WebContents* tab_content = NULL; |
490 { | 501 { |
491 content::WindowedNotificationObserver observer( | 502 content::WindowedNotificationObserver observer( |
492 content::NOTIFICATION_LOAD_STOP, | 503 content::NOTIFICATION_LOAD_STOP, |
493 content::NotificationService::AllSources()); | 504 content::NotificationService::AllSources()); |
494 SessionRestore::RestoreForeignSessionTab( | 505 tab_content = SessionRestore::RestoreForeignSessionTab( |
495 browser()->tab_strip_model()->GetActiveWebContents(), tab, CURRENT_TAB); | 506 browser()->tab_strip_model()->GetActiveWebContents(), tab, CURRENT_TAB); |
496 observer.Wait(); | 507 observer.Wait(); |
497 } | 508 } |
498 ASSERT_EQ(1, browser()->tab_strip_model()->count()); | 509 ASSERT_EQ(1, browser()->tab_strip_model()->count()); |
499 content::WebContents* web_contents = | 510 content::WebContents* web_contents = |
500 browser()->tab_strip_model()->GetWebContentsAt(0); | 511 browser()->tab_strip_model()->GetWebContentsAt(0); |
501 VerifyNavigationEntries(web_contents->GetController(), url1, url2); | 512 VerifyNavigationEntries(web_contents->GetController(), url1, url2); |
502 ASSERT_TRUE(web_contents->GetUserAgentOverride().empty()); | 513 ASSERT_TRUE(web_contents->GetUserAgentOverride().empty()); |
| 514 ASSERT_TRUE(tab_content); |
| 515 ASSERT_EQ(url2, tab_content->GetURL()); |
503 | 516 |
504 // Restore in a new tab. | 517 // Restore in a new tab. |
| 518 tab_content = NULL; |
505 { | 519 { |
506 content::WindowedNotificationObserver observer( | 520 content::WindowedNotificationObserver observer( |
507 content::NOTIFICATION_LOAD_STOP, | 521 content::NOTIFICATION_LOAD_STOP, |
508 content::NotificationService::AllSources()); | 522 content::NotificationService::AllSources()); |
509 SessionRestore::RestoreForeignSessionTab( | 523 tab_content = SessionRestore::RestoreForeignSessionTab( |
510 browser()->tab_strip_model()->GetActiveWebContents(), | 524 browser()->tab_strip_model()->GetActiveWebContents(), |
511 tab, NEW_BACKGROUND_TAB); | 525 tab, NEW_BACKGROUND_TAB); |
512 observer.Wait(); | 526 observer.Wait(); |
513 } | 527 } |
514 ASSERT_EQ(2, browser()->tab_strip_model()->count()); | 528 ASSERT_EQ(2, browser()->tab_strip_model()->count()); |
515 ASSERT_EQ(0, browser()->tab_strip_model()->active_index()); | 529 ASSERT_EQ(0, browser()->tab_strip_model()->active_index()); |
516 web_contents = browser()->tab_strip_model()->GetWebContentsAt(1); | 530 web_contents = browser()->tab_strip_model()->GetWebContentsAt(1); |
517 VerifyNavigationEntries(web_contents->GetController(), url1, url2); | 531 VerifyNavigationEntries(web_contents->GetController(), url1, url2); |
518 ASSERT_TRUE(web_contents->GetUserAgentOverride().empty()); | 532 ASSERT_TRUE(web_contents->GetUserAgentOverride().empty()); |
| 533 ASSERT_TRUE(tab_content); |
| 534 ASSERT_EQ(url2, tab_content->GetURL()); |
519 | 535 |
520 // Restore in a new window. | 536 // Restore in a new window. |
521 Browser* new_browser = NULL; | 537 Browser* new_browser = NULL; |
| 538 tab_content = NULL; |
522 { | 539 { |
523 ui_test_utils::BrowserAddedObserver browser_observer; | 540 ui_test_utils::BrowserAddedObserver browser_observer; |
524 content::WindowedNotificationObserver observer( | 541 content::WindowedNotificationObserver observer( |
525 content::NOTIFICATION_LOAD_STOP, | 542 content::NOTIFICATION_LOAD_STOP, |
526 content::NotificationService::AllSources()); | 543 content::NotificationService::AllSources()); |
527 SessionRestore::RestoreForeignSessionTab( | 544 tab_content = SessionRestore::RestoreForeignSessionTab( |
528 browser()->tab_strip_model()->GetActiveWebContents(), tab, NEW_WINDOW); | 545 browser()->tab_strip_model()->GetActiveWebContents(), tab, NEW_WINDOW); |
529 new_browser = browser_observer.WaitForSingleNewBrowser(); | 546 new_browser = browser_observer.WaitForSingleNewBrowser(); |
530 observer.Wait(); | 547 observer.Wait(); |
531 } | 548 } |
532 | 549 |
533 ASSERT_EQ(1, new_browser->tab_strip_model()->count()); | 550 ASSERT_EQ(1, new_browser->tab_strip_model()->count()); |
534 web_contents = new_browser->tab_strip_model()->GetWebContentsAt(0); | 551 web_contents = new_browser->tab_strip_model()->GetWebContentsAt(0); |
535 VerifyNavigationEntries(web_contents->GetController(), url1, url2); | 552 VerifyNavigationEntries(web_contents->GetController(), url1, url2); |
536 ASSERT_TRUE(web_contents->GetUserAgentOverride().empty()); | 553 ASSERT_TRUE(web_contents->GetUserAgentOverride().empty()); |
| 554 ASSERT_TRUE(tab_content); |
| 555 ASSERT_EQ(url2, tab_content->GetURL()); |
537 } | 556 } |
538 | 557 |
539 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestoreForeignSession) { | 558 IN_PROC_BROWSER_TEST_F(SessionRestoreTest, RestoreForeignSession) { |
540 Profile* profile = browser()->profile(); | 559 Profile* profile = browser()->profile(); |
541 | 560 |
542 GURL url1("http://google.com"); | 561 GURL url1("http://google.com"); |
543 GURL url2("http://google2.com"); | 562 GURL url2("http://google2.com"); |
544 SerializedNavigationEntry nav1 = | 563 SerializedNavigationEntry nav1 = |
545 SerializedNavigationEntryTestHelper::CreateNavigation(url1.spec(), "one"); | 564 SerializedNavigationEntryTestHelper::CreateNavigation(url1.spec(), "one"); |
546 SerializedNavigationEntry nav2 = | 565 SerializedNavigationEntry nav2 = |
(...skipping 20 matching lines...) Expand all Loading... |
567 sync_data.set_tab_visual_index(1); | 586 sync_data.set_tab_visual_index(1); |
568 sync_data.set_current_navigation_index(0); | 587 sync_data.set_current_navigation_index(0); |
569 sync_data.set_pinned(false); | 588 sync_data.set_pinned(false); |
570 sync_data.add_navigation()->CopyFrom(nav2.ToSyncData()); | 589 sync_data.add_navigation()->CopyFrom(nav2.ToSyncData()); |
571 tab2.SetFromSyncData(sync_data, base::Time::Now()); | 590 tab2.SetFromSyncData(sync_data, base::Time::Now()); |
572 } | 591 } |
573 window.tabs.push_back(&tab2); | 592 window.tabs.push_back(&tab2); |
574 | 593 |
575 session.push_back(static_cast<const SessionWindow*>(&window)); | 594 session.push_back(static_cast<const SessionWindow*>(&window)); |
576 ui_test_utils::BrowserAddedObserver window_observer; | 595 ui_test_utils::BrowserAddedObserver window_observer; |
577 SessionRestore::RestoreForeignSessionWindows( | 596 std::vector<Browser*> browsers = |
578 profile, browser()->host_desktop_type(), session.begin(), session.end()); | 597 SessionRestore::RestoreForeignSessionWindows( |
| 598 profile, browser()->host_desktop_type(), session.begin(), |
| 599 session.end()); |
579 Browser* new_browser = window_observer.WaitForSingleNewBrowser(); | 600 Browser* new_browser = window_observer.WaitForSingleNewBrowser(); |
580 ASSERT_TRUE(new_browser); | 601 ASSERT_TRUE(new_browser); |
581 ASSERT_EQ(2u, active_browser_list_->size()); | 602 ASSERT_EQ(2u, active_browser_list_->size()); |
582 ASSERT_EQ(2, new_browser->tab_strip_model()->count()); | 603 ASSERT_EQ(2, new_browser->tab_strip_model()->count()); |
583 | 604 |
| 605 ASSERT_EQ(1u, browsers.size()); |
| 606 ASSERT_TRUE(browsers[0]); |
| 607 ASSERT_EQ(2, browsers[0]->tab_strip_model()->count()); |
| 608 |
584 content::WebContents* web_contents_1 = | 609 content::WebContents* web_contents_1 = |
585 new_browser->tab_strip_model()->GetWebContentsAt(0); | 610 new_browser->tab_strip_model()->GetWebContentsAt(0); |
586 content::WebContents* web_contents_2 = | 611 content::WebContents* web_contents_2 = |
587 new_browser->tab_strip_model()->GetWebContentsAt(1); | 612 new_browser->tab_strip_model()->GetWebContentsAt(1); |
588 ASSERT_EQ(url1, web_contents_1->GetURL()); | 613 ASSERT_EQ(url1, web_contents_1->GetURL()); |
589 ASSERT_EQ(url2, web_contents_2->GetURL()); | 614 ASSERT_EQ(url2, web_contents_2->GetURL()); |
590 | 615 |
591 // Check user agent override state. | 616 // Check user agent override state. |
592 ASSERT_TRUE(web_contents_1->GetUserAgentOverride().empty()); | 617 ASSERT_TRUE(web_contents_1->GetUserAgentOverride().empty()); |
593 ASSERT_TRUE(web_contents_2->GetUserAgentOverride().empty()); | 618 ASSERT_TRUE(web_contents_2->GetUserAgentOverride().empty()); |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1120 content::NavigationController* controller = | 1145 content::NavigationController* controller = |
1121 &browser()->tab_strip_model()->GetActiveWebContents()->GetController(); | 1146 &browser()->tab_strip_model()->GetActiveWebContents()->GetController(); |
1122 EXPECT_TRUE( | 1147 EXPECT_TRUE( |
1123 controller->GetDefaultSessionStorageNamespace()->should_persist()); | 1148 controller->GetDefaultSessionStorageNamespace()->should_persist()); |
1124 | 1149 |
1125 // Quit and restore. Check that no extra tabs were created. | 1150 // Quit and restore. Check that no extra tabs were created. |
1126 Browser* new_browser = QuitBrowserAndRestore(browser(), 1); | 1151 Browser* new_browser = QuitBrowserAndRestore(browser(), 1); |
1127 ASSERT_EQ(1u, active_browser_list_->size()); | 1152 ASSERT_EQ(1u, active_browser_list_->size()); |
1128 EXPECT_EQ(1, new_browser->tab_strip_model()->count()); | 1153 EXPECT_EQ(1, new_browser->tab_strip_model()->count()); |
1129 } | 1154 } |
OLD | NEW |