| 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 52564f97adf048836da07c485e0ff02248b2d72b..87b3e06c3b70d17a6d6d242c749cb0d2edd44cb1 100644
|
| --- a/chrome/browser/sessions/session_restore_delegate.cc
|
| +++ b/chrome/browser/sessions/session_restore_delegate.cc
|
| @@ -69,22 +69,38 @@ 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 (const 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);
|
| - for (auto& restored_tab : tabs) {
|
| + // A TabLoader will not be used for this session restore, so manually create
|
| + // and use a SessionRestoreStatsCollector, normally owned by the TabLoader.
|
| + scoped_ptr<SessionRestoreStatsCollector::StatsReportingDelegate>
|
| + reporting_delegate(
|
| + new SessionRestoreStatsCollector::UmaStatsReportingDelegate());
|
| + scoped_refptr<SessionRestoreStatsCollector> stats_collector =
|
| + new SessionRestoreStatsCollector(restore_started,
|
| + reporting_delegate.Pass());
|
| + stats_collector->TrackTabs(tabs);
|
| + for (const 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);
|
| }
|
| }
|
| }
|
|
|