| Index: chrome/browser/sessions/session_restore_delegate.cc
|
| diff --git a/chrome/browser/sessions/session_restore_delegate.cc b/chrome/browser/sessions/session_restore_delegate.cc
|
| index 9d5c3122709459dff1f353967f51ca45e44af392..fe17f79785847ab0c1282c45c90929980e110956 100644
|
| --- a/chrome/browser/sessions/session_restore_delegate.cc
|
| +++ b/chrome/browser/sessions/session_restore_delegate.cc
|
| @@ -65,22 +65,35 @@ bool SessionRestoreDelegate::RestoredTab::operator<(
|
| void SessionRestoreDelegate::RestoreTabs(
|
| const std::vector<RestoredTab>& tabs,
|
| const base::TimeTicks& restore_started) {
|
| + // Restore the favicon for all tabs. Any tab may end up being deferred due
|
| + // to memory pressure so it's best to have some visual indication of its
|
| + // contents.
|
| + for (auto& restored_tab : tabs) {
|
| + // Restore the favicon for deferred tabs.
|
| + favicon::ContentFaviconDriver* favicon_driver =
|
| + favicon::ContentFaviconDriver::FromWebContents(
|
| + restored_tab.contents());
|
| + favicon_driver->FetchFavicon(favicon_driver->GetActiveURL());
|
| + }
|
| +
|
| // This experiment allows us to have comparative numbers for session restore
|
| // metrics. It will be removed once those numbers are obtained.
|
| // TODO(georgesak): Remove this experiment when stats are collected.
|
| base::FieldTrial* trial =
|
| base::FieldTrialList::Find("IntelligentSessionRestore");
|
| if (!trial || trial->group_name() != "DontRestoreBackgroundTabs") {
|
| - SessionRestoreStatsCollector::TrackTabs(tabs, restore_started);
|
| TabLoader::RestoreTabs(tabs, restore_started);
|
| } else {
|
| - SessionRestoreStatsCollector::TrackActiveTabs(tabs, restore_started);
|
| + // A TabLoader will not be used for this session restore, so manually create
|
| + // and use a SessionRestoreStatsCollector, normally owned by the TabLoader.
|
| + scoped_refptr<SessionRestoreStatsCollector> stats_collector =
|
| + new SessionRestoreStatsCollector(restore_started);
|
| + stats_collector->TrackTabs(tabs);
|
| for (auto& restored_tab : tabs) {
|
| if (!restored_tab.is_active()) {
|
| - favicon::ContentFaviconDriver* favicon_driver =
|
| - favicon::ContentFaviconDriver::FromWebContents(
|
| - restored_tab.contents());
|
| - favicon_driver->FetchFavicon(favicon_driver->GetActiveURL());
|
| + // Non-active tabs aren't being loaded, so mark them as deferred.
|
| + auto tab_controller = &restored_tab.contents()->GetController();
|
| + stats_collector->DeferTab(tab_controller);
|
| }
|
| }
|
| }
|
|
|