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 |