| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/metrics/user_metrics_action.h" | 5 #include "base/metrics/user_metrics_action.h" |
| 6 #include "base/supports_user_data.h" | 6 #include "base/supports_user_data.h" |
| 7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
| 8 #include "chrome/browser/sessions/tab_restore_service_factory.h" | 8 #include "chrome/browser/sessions/tab_restore_service_factory.h" |
| 9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
| 10 #include "chrome/browser/ui/browser_commands.h" | 10 #include "chrome/browser/ui/browser_commands.h" |
| 11 #include "chrome/browser/ui/browser_list.h" | 11 #include "chrome/browser/ui/browser_list.h" |
| 12 #include "chrome/browser/ui/browser_list_observer.h" | 12 #include "chrome/browser/ui/browser_list_observer.h" |
| 13 #include "chrome/browser/ui/browser_tab_restore_service_delegate.h" | 13 #include "chrome/browser/ui/browser_tab_restore_service_delegate.h" |
| 14 #include "components/sessions/core/tab_restore_service.h" | 14 #include "components/sessions/core/tab_restore_service.h" |
| 15 #include "components/sessions/core/tab_restore_service_observer.h" | 15 #include "components/sessions/core/tab_restore_service_observer.h" |
| 16 #include "content/public/browser/user_metrics.h" | 16 #include "content/public/browser/user_metrics.h" |
| 17 | 17 |
| 18 namespace chrome { | 18 namespace chrome { |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 const char kBrowserTabRestorerKey[] = "BrowserTabRestorer"; | 21 const char kBrowserTabRestorerKey[] = "BrowserTabRestorer"; |
| 22 | 22 |
| 23 // BrowserTabRestorer is responsible for restoring a tab when the | 23 // BrowserTabRestorer is responsible for restoring a tab when the |
| 24 // TabRestoreService finishes loading. A TabRestoreService is associated with a | 24 // sessions::TabRestoreService finishes loading. A TabRestoreService is |
| 25 // associated with a |
| 25 // single Browser and deletes itself if the Browser is destroyed. | 26 // single Browser and deletes itself if the Browser is destroyed. |
| 26 // BrowserTabRestorer is installed on the Profile (by way of user data), only | 27 // BrowserTabRestorer is installed on the Profile (by way of user data), only |
| 27 // one instance is created per profile at a time. | 28 // one instance is created per profile at a time. |
| 28 class BrowserTabRestorer : public TabRestoreServiceObserver, | 29 class BrowserTabRestorer : public sessions::TabRestoreServiceObserver, |
| 29 public chrome::BrowserListObserver, | 30 public chrome::BrowserListObserver, |
| 30 public base::SupportsUserData::Data { | 31 public base::SupportsUserData::Data { |
| 31 public: | 32 public: |
| 32 ~BrowserTabRestorer() override; | 33 ~BrowserTabRestorer() override; |
| 33 | 34 |
| 34 static void CreateIfNecessary(Browser* browser); | 35 static void CreateIfNecessary(Browser* browser); |
| 35 | 36 |
| 36 private: | 37 private: |
| 37 explicit BrowserTabRestorer(Browser* browser); | 38 explicit BrowserTabRestorer(Browser* browser); |
| 38 | 39 |
| 39 // TabRestoreServiceObserver: | 40 // TabRestoreServiceObserver: |
| 40 void TabRestoreServiceChanged(TabRestoreService* service) override; | 41 void TabRestoreServiceChanged(sessions::TabRestoreService* service) override; |
| 41 void TabRestoreServiceDestroyed(TabRestoreService* service) override; | 42 void TabRestoreServiceDestroyed( |
| 42 void TabRestoreServiceLoaded(TabRestoreService* service) override; | 43 sessions::TabRestoreService* service) override; |
| 44 void TabRestoreServiceLoaded(sessions::TabRestoreService* service) override; |
| 43 | 45 |
| 44 // BrowserListObserver: | 46 // BrowserListObserver: |
| 45 void OnBrowserRemoved(Browser* browser) override; | 47 void OnBrowserRemoved(Browser* browser) override; |
| 46 | 48 |
| 47 Browser* browser_; | 49 Browser* browser_; |
| 48 TabRestoreService* tab_restore_service_; | 50 sessions::TabRestoreService* tab_restore_service_; |
| 49 | 51 |
| 50 DISALLOW_COPY_AND_ASSIGN(BrowserTabRestorer); | 52 DISALLOW_COPY_AND_ASSIGN(BrowserTabRestorer); |
| 51 }; | 53 }; |
| 52 | 54 |
| 53 BrowserTabRestorer::~BrowserTabRestorer() { | 55 BrowserTabRestorer::~BrowserTabRestorer() { |
| 54 tab_restore_service_->RemoveObserver(this); | 56 tab_restore_service_->RemoveObserver(this); |
| 55 BrowserList::GetInstance(browser_->host_desktop_type())->RemoveObserver(this); | 57 BrowserList::GetInstance(browser_->host_desktop_type())->RemoveObserver(this); |
| 56 } | 58 } |
| 57 | 59 |
| 58 // static | 60 // static |
| (...skipping 11 matching lines...) Expand all Loading... |
| 70 tab_restore_service_( | 72 tab_restore_service_( |
| 71 TabRestoreServiceFactory::GetForProfile(browser->profile())) { | 73 TabRestoreServiceFactory::GetForProfile(browser->profile())) { |
| 72 DCHECK(tab_restore_service_); | 74 DCHECK(tab_restore_service_); |
| 73 DCHECK(!tab_restore_service_->IsLoaded()); | 75 DCHECK(!tab_restore_service_->IsLoaded()); |
| 74 tab_restore_service_->AddObserver(this); | 76 tab_restore_service_->AddObserver(this); |
| 75 BrowserList::GetInstance(browser->host_desktop_type())->AddObserver(this); | 77 BrowserList::GetInstance(browser->host_desktop_type())->AddObserver(this); |
| 76 browser_->profile()->SetUserData(kBrowserTabRestorerKey, this); | 78 browser_->profile()->SetUserData(kBrowserTabRestorerKey, this); |
| 77 tab_restore_service_->LoadTabsFromLastSession(); | 79 tab_restore_service_->LoadTabsFromLastSession(); |
| 78 } | 80 } |
| 79 | 81 |
| 80 void BrowserTabRestorer::TabRestoreServiceChanged(TabRestoreService* service) { | 82 void BrowserTabRestorer::TabRestoreServiceChanged( |
| 81 } | 83 sessions::TabRestoreService* service) {} |
| 82 | 84 |
| 83 void BrowserTabRestorer::TabRestoreServiceDestroyed( | 85 void BrowserTabRestorer::TabRestoreServiceDestroyed( |
| 84 TabRestoreService* service) { | 86 sessions::TabRestoreService* service) {} |
| 85 } | |
| 86 | 87 |
| 87 void BrowserTabRestorer::TabRestoreServiceLoaded(TabRestoreService* service) { | 88 void BrowserTabRestorer::TabRestoreServiceLoaded( |
| 89 sessions::TabRestoreService* service) { |
| 88 RestoreTab(browser_); | 90 RestoreTab(browser_); |
| 89 // This deletes us. | 91 // This deletes us. |
| 90 browser_->profile()->SetUserData(kBrowserTabRestorerKey, NULL); | 92 browser_->profile()->SetUserData(kBrowserTabRestorerKey, NULL); |
| 91 } | 93 } |
| 92 | 94 |
| 93 void BrowserTabRestorer::OnBrowserRemoved(Browser* browser) { | 95 void BrowserTabRestorer::OnBrowserRemoved(Browser* browser) { |
| 94 // This deletes us. | 96 // This deletes us. |
| 95 browser_->profile()->SetUserData(kBrowserTabRestorerKey, NULL); | 97 browser_->profile()->SetUserData(kBrowserTabRestorerKey, NULL); |
| 96 } | 98 } |
| 97 | 99 |
| 98 } // namespace | 100 } // namespace |
| 99 | 101 |
| 100 void RestoreTab(Browser* browser) { | 102 void RestoreTab(Browser* browser) { |
| 101 content::RecordAction(base::UserMetricsAction("RestoreTab")); | 103 content::RecordAction(base::UserMetricsAction("RestoreTab")); |
| 102 TabRestoreService* service = | 104 sessions::TabRestoreService* service = |
| 103 TabRestoreServiceFactory::GetForProfile(browser->profile()); | 105 TabRestoreServiceFactory::GetForProfile(browser->profile()); |
| 104 if (!service) | 106 if (!service) |
| 105 return; | 107 return; |
| 106 | 108 |
| 107 if (service->IsLoaded()) { | 109 if (service->IsLoaded()) { |
| 108 service->RestoreMostRecentEntry(browser->tab_restore_service_delegate(), | 110 service->RestoreMostRecentEntry(browser->tab_restore_service_delegate(), |
| 109 browser->host_desktop_type()); | 111 browser->host_desktop_type()); |
| 110 return; | 112 return; |
| 111 } | 113 } |
| 112 | 114 |
| 113 BrowserTabRestorer::CreateIfNecessary(browser); | 115 BrowserTabRestorer::CreateIfNecessary(browser); |
| 114 } | 116 } |
| 115 | 117 |
| 116 } // namespace chrome | 118 } // namespace chrome |
| OLD | NEW |