Chromium Code Reviews| 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 "chrome/browser/sessions/session_service.h" | 5 #include "chrome/browser/sessions/session_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 514 &last_updated_save_time_); | 514 &last_updated_save_time_); |
| 515 content::NotificationService::current()->Notify( | 515 content::NotificationService::current()->Notify( |
| 516 chrome::NOTIFICATION_SESSION_SERVICE_SAVED, | 516 chrome::NOTIFICATION_SESSION_SERVICE_SAVED, |
| 517 content::Source<Profile>(profile()), | 517 content::Source<Profile>(profile()), |
| 518 content::NotificationService::NoDetails()); | 518 content::NotificationService::NoDetails()); |
| 519 } | 519 } |
| 520 } | 520 } |
| 521 | 521 |
| 522 void SessionService::Init() { | 522 void SessionService::Init() { |
| 523 // Register for the notifications we're interested in. | 523 // Register for the notifications we're interested in. |
| 524 registrar_.Add(this, chrome::NOTIFICATION_TAB_PARENTED, | |
| 525 content::NotificationService::AllSources()); | |
| 526 registrar_.Add(this, chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED, | |
| 527 content::NotificationService::AllSources()); | |
| 528 registrar_.Add(this, content::NOTIFICATION_NAV_LIST_PRUNED, | 524 registrar_.Add(this, content::NOTIFICATION_NAV_LIST_PRUNED, |
| 529 content::NotificationService::AllSources()); | 525 content::NotificationService::AllSources()); |
| 530 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_CHANGED, | 526 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_CHANGED, |
| 531 content::NotificationService::AllSources()); | 527 content::NotificationService::AllSources()); |
| 532 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 528 registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 533 content::NotificationService::AllSources()); | 529 content::NotificationService::AllSources()); |
| 534 // Wait for NOTIFICATION_BROWSER_WINDOW_READY so that is_app() is set. | 530 // Wait for NOTIFICATION_BROWSER_WINDOW_READY so that is_app() is set. |
| 535 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY, | 531 registrar_.Add(this, chrome::NOTIFICATION_BROWSER_WINDOW_READY, |
| 536 content::NotificationService::AllBrowserContextsAndSources()); | 532 content::NotificationService::AllBrowserContextsAndSources()); |
| 537 registrar_.Add( | 533 registrar_.Add( |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 595 if (browser->profile() != profile() || | 591 if (browser->profile() != profile() || |
| 596 !should_track_changes_for_browser_type(browser->type(), app_type)) | 592 !should_track_changes_for_browser_type(browser->type(), app_type)) |
| 597 return; | 593 return; |
| 598 | 594 |
| 599 RestoreIfNecessary(std::vector<GURL>(), browser); | 595 RestoreIfNecessary(std::vector<GURL>(), browser); |
| 600 SetWindowType(browser->session_id(), browser->type(), app_type); | 596 SetWindowType(browser->session_id(), browser->type(), app_type); |
| 601 SetWindowAppName(browser->session_id(), browser->app_name()); | 597 SetWindowAppName(browser->session_id(), browser->app_name()); |
| 602 break; | 598 break; |
| 603 } | 599 } |
| 604 | 600 |
| 605 case chrome::NOTIFICATION_TAB_PARENTED: { | |
| 606 WebContents* web_contents = content::Source<WebContents>(source).ptr(); | |
| 607 if (web_contents->GetBrowserContext() != profile()) | |
| 608 return; | |
| 609 SessionTabHelper* session_tab_helper = | |
| 610 SessionTabHelper::FromWebContents(web_contents); | |
| 611 SetTabWindow(session_tab_helper->window_id(), | |
| 612 session_tab_helper->session_id()); | |
| 613 extensions::TabHelper* extensions_tab_helper = | |
| 614 extensions::TabHelper::FromWebContents(web_contents); | |
| 615 if (extensions_tab_helper && | |
| 616 extensions_tab_helper->extension_app()) { | |
| 617 SetTabExtensionAppID( | |
| 618 session_tab_helper->window_id(), | |
| 619 session_tab_helper->session_id(), | |
| 620 extensions_tab_helper->extension_app()->id()); | |
| 621 } | |
| 622 | |
| 623 // Record the association between the SessionStorageNamespace and the | |
| 624 // tab. | |
| 625 // | |
| 626 // TODO(ajwong): This should be processing the whole map rather than | |
| 627 // just the default. This in particular will not work for tabs with only | |
| 628 // isolated apps which won't have a default partition. | |
| 629 content::SessionStorageNamespace* session_storage_namespace = | |
| 630 web_contents->GetController().GetDefaultSessionStorageNamespace(); | |
| 631 ScheduleCommand(CreateSessionStorageAssociatedCommand( | |
| 632 session_tab_helper->session_id(), | |
| 633 session_storage_namespace->persistent_id())); | |
| 634 session_storage_namespace->SetShouldPersist(true); | |
| 635 break; | |
| 636 } | |
| 637 | |
| 638 case chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED: { | |
| 639 TabContents* tab = content::Source<TabContents>(source).ptr(); | |
| 640 if (!tab || tab->profile() != profile()) | |
| 641 return; | |
| 642 // Allow the associated sessionStorage to get deleted; it won't be needed | |
| 643 // in the session restore. | |
| 644 content::SessionStorageNamespace* session_storage_namespace = | |
| 645 tab->web_contents()->GetController(). | |
| 646 GetDefaultSessionStorageNamespace(); | |
| 647 session_storage_namespace->SetShouldPersist(false); | |
| 648 SessionTabHelper* session_tab_helper = | |
| 649 SessionTabHelper::FromWebContents(tab->web_contents()); | |
| 650 TabClosed(session_tab_helper->window_id(), | |
| 651 session_tab_helper->session_id(), | |
| 652 tab->web_contents()->GetClosedByUserGesture()); | |
| 653 RecordSessionUpdateHistogramData(type, &last_updated_tab_closed_time_); | |
| 654 break; | |
| 655 } | |
| 656 | |
| 657 case content::NOTIFICATION_NAV_LIST_PRUNED: { | 601 case content::NOTIFICATION_NAV_LIST_PRUNED: { |
| 658 WebContents* web_contents = | 602 WebContents* web_contents = |
| 659 content::Source<content::NavigationController>(source).ptr()-> | 603 content::Source<content::NavigationController>(source).ptr()-> |
| 660 GetWebContents(); | 604 GetWebContents(); |
| 661 SessionTabHelper* session_tab_helper = | 605 SessionTabHelper* session_tab_helper = |
| 662 SessionTabHelper::FromWebContents(web_contents); | 606 SessionTabHelper::FromWebContents(web_contents); |
| 663 if (!session_tab_helper || web_contents->GetBrowserContext() != profile()) | 607 if (!session_tab_helper || web_contents->GetBrowserContext() != profile()) |
| 664 return; | 608 return; |
| 665 content::Details<content::PrunedDetails> pruned_details(details); | 609 content::Details<content::PrunedDetails> pruned_details(details); |
| 666 if (pruned_details->from_front) { | 610 if (pruned_details->from_front) { |
| (...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1756 50); | 1700 50); |
| 1757 if (use_long_period) { | 1701 if (use_long_period) { |
| 1758 std::string long_name_("SessionRestore.SaveLongPeriod"); | 1702 std::string long_name_("SessionRestore.SaveLongPeriod"); |
| 1759 UMA_HISTOGRAM_CUSTOM_TIMES(long_name_, | 1703 UMA_HISTOGRAM_CUSTOM_TIMES(long_name_, |
| 1760 delta, | 1704 delta, |
| 1761 save_delay_in_mins_, | 1705 save_delay_in_mins_, |
| 1762 save_delay_in_hrs_, | 1706 save_delay_in_hrs_, |
| 1763 50); | 1707 50); |
| 1764 } | 1708 } |
| 1765 } | 1709 } |
| 1710 | |
| 1711 void SessionService::TabInserted(WebContents* contents) { | |
| 1712 SessionTabHelper* session_tab_helper = | |
| 1713 SessionTabHelper::FromWebContents(contents); | |
| 1714 SetTabWindow(session_tab_helper->window_id(), | |
| 1715 session_tab_helper->session_id()); | |
| 1716 extensions::TabHelper* extensions_tab_helper = | |
| 1717 extensions::TabHelper::FromWebContents(contents); | |
| 1718 if (extensions_tab_helper && | |
| 1719 extensions_tab_helper->extension_app()) { | |
| 1720 SetTabExtensionAppID( | |
| 1721 session_tab_helper->window_id(), | |
| 1722 session_tab_helper->session_id(), | |
| 1723 extensions_tab_helper->extension_app()->id()); | |
| 1724 } | |
| 1725 | |
| 1726 // Record the association between the SessionStorageNamespace and the | |
| 1727 // tab. | |
| 1728 // | |
| 1729 // TODO(ajwong): This should be processing the whole map rather than | |
| 1730 // just the default. This in particular will not work for tabs with only | |
| 1731 // isolated apps which won't have a default partition. | |
| 1732 content::SessionStorageNamespace* session_storage_namespace = | |
| 1733 contents->GetController().GetDefaultSessionStorageNamespace(); | |
| 1734 ScheduleCommand(CreateSessionStorageAssociatedCommand( | |
| 1735 session_tab_helper->session_id(), | |
| 1736 session_storage_namespace->persistent_id())); | |
| 1737 session_storage_namespace->SetShouldPersist(true); | |
| 1738 } | |
| 1739 | |
| 1740 void SessionService::TabClosing(WebContents* contents) { | |
| 1741 // Allow the associated sessionStorage to get deleted; it won't be needed | |
| 1742 // in the session restore. | |
| 1743 content::SessionStorageNamespace* session_storage_namespace = | |
| 1744 contents->GetController().GetDefaultSessionStorageNamespace(); | |
|
michaeln
2012/09/24 18:49:37
tiny nit: indent 2 more spaces
marja
2012/09/26 07:51:01
Done.
| |
| 1745 session_storage_namespace->SetShouldPersist(false); | |
| 1746 SessionTabHelper* session_tab_helper = | |
| 1747 SessionTabHelper::FromWebContents(contents); | |
|
michaeln
2012/09/24 18:49:37
ditto
marja
2012/09/26 07:51:01
Done.
| |
| 1748 TabClosed(session_tab_helper->window_id(), | |
| 1749 session_tab_helper->session_id(), | |
| 1750 contents->GetClosedByUserGesture()); | |
| 1751 RecordSessionUpdateHistogramData(chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED, | |
| 1752 &last_updated_tab_closed_time_); | |
| 1753 } | |
| OLD | NEW |