Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(801)

Side by Side Diff: chrome/browser/protector/session_startup_change.cc

Issue 11493003: Remove the protector service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix implicit ExtensionSystem -> TemplateURLService dependency Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/basictypes.h"
6 #include "base/compiler_specific.h"
7 #include "base/logging.h"
8 #include "base/metrics/histogram.h"
9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/prefs/session_startup_pref.h"
11 #include "chrome/browser/protector/base_prefs_change.h"
12 #include "chrome/browser/protector/histograms.h"
13 #include "chrome/browser/protector/protector_service.h"
14 #include "chrome/browser/protector/protector_service_factory.h"
15 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_navigator.h"
17 #include "chrome/browser/ui/tabs/pinned_tab_codec.h"
18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
19 #include "chrome/browser/ui/tabs/tab_strip_model.h"
20 #include "chrome/common/pref_names.h"
21 #include "grit/chromium_strings.h"
22 #include "grit/generated_resources.h"
23 #include "grit/theme_resources.h"
24 #include "ui/base/l10n/l10n_util.h"
25
26 namespace protector {
27
28 // Session startup settings change tracked by Protector.
29 class SessionStartupChange : public BasePrefsChange {
30 public:
31 SessionStartupChange(const SessionStartupPref& actual_startup_pref,
32 const StartupTabs& actual_pinned_tabs,
33 const SessionStartupPref& backup_startup_pref,
34 const StartupTabs& backup_pinned_tabs);
35
36 // BaseSettingChange overrides:
37 virtual bool Init(Profile* profile) OVERRIDE;
38 virtual void Apply(Browser* browser) OVERRIDE;
39 virtual void Discard(Browser* browser) OVERRIDE;
40 virtual void Timeout() OVERRIDE;
41 virtual int GetBadgeIconID() const OVERRIDE;
42 virtual int GetMenuItemIconID() const OVERRIDE;
43 virtual int GetBubbleIconID() const OVERRIDE;
44 virtual string16 GetBubbleTitle() const OVERRIDE;
45 virtual string16 GetBubbleMessage() const OVERRIDE;
46 virtual string16 GetApplyButtonText() const OVERRIDE;
47 virtual string16 GetDiscardButtonText() const OVERRIDE;
48 virtual DisplayName GetApplyDisplayName() const OVERRIDE;
49 virtual GURL GetNewSettingURL() const OVERRIDE;
50
51 private:
52 virtual ~SessionStartupChange();
53
54 // Returns the first URL that was added to the startup pages. Returns the
55 // first startup URL if they haven't changed. Returns an empty URL if there
56 // are no startup URLs.
57 GURL GetFirstNewURL() const;
58
59 // Opens all tabs in |tabs| and makes them pinned.
60 void OpenPinnedTabs(Browser* browser, const StartupTabs& tabs);
61
62 const SessionStartupPref new_startup_pref_;
63 const SessionStartupPref backup_startup_pref_;
64 const StartupTabs new_pinned_tabs_;
65 const StartupTabs backup_pinned_tabs_;
66
67 DISALLOW_COPY_AND_ASSIGN(SessionStartupChange);
68 };
69
70 SessionStartupChange::SessionStartupChange(
71 const SessionStartupPref& actual_startup_pref,
72 const StartupTabs& actual_pinned_tabs,
73 const SessionStartupPref& backup_startup_pref,
74 const StartupTabs& backup_pinned_tabs)
75 : new_startup_pref_(actual_startup_pref),
76 backup_startup_pref_(backup_startup_pref),
77 new_pinned_tabs_(actual_pinned_tabs),
78 backup_pinned_tabs_(backup_pinned_tabs) {
79 UMA_HISTOGRAM_ENUMERATION(
80 kProtectorHistogramStartupSettingsChanged,
81 actual_startup_pref.type,
82 SessionStartupPref::TYPE_COUNT);
83 }
84
85 SessionStartupChange::~SessionStartupChange() {
86 }
87
88 bool SessionStartupChange::Init(Profile* profile) {
89 if (!BasePrefsChange::Init(profile))
90 return false;
91 SessionStartupPref::SetStartupPref(profile, backup_startup_pref_);
92 PinnedTabCodec::WritePinnedTabs(profile, backup_pinned_tabs_);
93 DismissOnPrefChange(prefs::kRestoreOnStartup);
94 DismissOnPrefChange(prefs::kURLsToRestoreOnStartup);
95 DismissOnPrefChange(prefs::kPinnedTabs);
96 return true;
97 }
98
99 void SessionStartupChange::Apply(Browser* browser) {
100 UMA_HISTOGRAM_ENUMERATION(
101 kProtectorHistogramStartupSettingsApplied,
102 new_startup_pref_.type,
103 SessionStartupPref::TYPE_COUNT);
104 IgnorePrefChanges();
105 SessionStartupPref::SetStartupPref(profile(), new_startup_pref_);
106 PinnedTabCodec::WritePinnedTabs(profile(), new_pinned_tabs_);
107 OpenPinnedTabs(browser, new_pinned_tabs_);
108 }
109
110 void SessionStartupChange::Discard(Browser* browser) {
111 UMA_HISTOGRAM_ENUMERATION(
112 kProtectorHistogramStartupSettingsDiscarded,
113 new_startup_pref_.type,
114 SessionStartupPref::TYPE_COUNT);
115 IgnorePrefChanges();
116 // Nothing to do here since backup has already been made active by Init().
117 }
118
119 void SessionStartupChange::Timeout() {
120 UMA_HISTOGRAM_ENUMERATION(
121 kProtectorHistogramStartupSettingsTimeout,
122 new_startup_pref_.type,
123 SessionStartupPref::TYPE_COUNT);
124 }
125
126 int SessionStartupChange::GetBadgeIconID() const {
127 // Icons are the same for homepage and startup settings.
128 return IDR_HOMEPAGE_CHANGE_BADGE;
129 }
130
131 int SessionStartupChange::GetMenuItemIconID() const {
132 return IDR_HOMEPAGE_CHANGE_MENU;
133 }
134
135 int SessionStartupChange::GetBubbleIconID() const {
136 return IDR_HOMEPAGE_CHANGE_ALERT;
137 }
138
139 string16 SessionStartupChange::GetBubbleTitle() const {
140 return l10n_util::GetStringUTF16(IDS_STARTUP_SETTINGS_CHANGE_TITLE);
141 }
142
143 string16 SessionStartupChange::GetBubbleMessage() const {
144 return l10n_util::GetStringUTF16(IDS_STARTUP_SETTINGS_CHANGE_BUBBLE_MESSAGE);
145 }
146
147 string16 SessionStartupChange::GetApplyButtonText() const {
148 if (new_startup_pref_.type == SessionStartupPref::LAST)
149 return l10n_util::GetStringUTF16(IDS_CHANGE_STARTUP_SETTINGS_RESTORE);
150
151 // Display the domain name of the first startup/pinned URL.
152 string16 first_domain = UTF8ToUTF16(GetFirstNewURL().host());
153 return first_domain.empty() ?
154 l10n_util::GetStringUTF16(IDS_CHANGE_STARTUP_SETTINGS_NTP) :
155 l10n_util::GetStringFUTF16(IDS_CHANGE_STARTUP_SETTINGS_URLS,
156 first_domain);
157 }
158
159 string16 SessionStartupChange::GetDiscardButtonText() const {
160 return l10n_util::GetStringUTF16(IDS_KEEP_SETTING);
161 }
162
163 BaseSettingChange::DisplayName
164 SessionStartupChange::GetApplyDisplayName() const {
165 string16 first_domain = UTF8ToUTF16(GetFirstNewURL().host());
166 return first_domain.empty() ?
167 BaseSettingChange::GetApplyDisplayName() :
168 DisplayName(kSessionStartupChangeNamePriority, first_domain);
169 }
170
171 GURL SessionStartupChange::GetNewSettingURL() const {
172 VLOG(1) << "HP URL: " << GetFirstNewURL().spec();
173 return GetFirstNewURL();
174 }
175
176 GURL SessionStartupChange::GetFirstNewURL() const {
177 if (new_startup_pref_.type == SessionStartupPref::LAST)
178 return GURL();
179
180 std::set<GURL> old_urls;
181 if (backup_startup_pref_.type == SessionStartupPref::URLS) {
182 old_urls.insert(backup_startup_pref_.urls.begin(),
183 backup_startup_pref_.urls.end());
184 }
185 for (size_t i = 0; i < backup_pinned_tabs_.size(); ++i)
186 old_urls.insert(backup_pinned_tabs_[i].url);
187
188 std::vector<GURL> new_urls;
189 if (new_startup_pref_.type == SessionStartupPref::URLS) {
190 new_urls.insert(new_urls.end(), new_startup_pref_.urls.begin(),
191 new_startup_pref_.urls.end());
192 }
193 for (size_t i = 0; i < new_pinned_tabs_.size(); ++i)
194 new_urls.push_back(new_pinned_tabs_[i].url);
195
196 if (new_urls.empty())
197 return GURL();
198
199 // First try to find a URL in new settings that is not present in backup.
200 for (size_t i = 0; i < new_urls.size(); ++i) {
201 if (!old_urls.count(new_urls[i]))
202 return new_urls[i];
203 }
204 // Then fallback to the first of the current startup URLs - this means that
205 // URLs themselves haven't changed.
206 return new_urls[0];
207 }
208
209 void SessionStartupChange::OpenPinnedTabs(Browser* browser,
210 const StartupTabs& tabs) {
211 for (size_t i = 0; i < tabs.size(); ++i) {
212 chrome::NavigateParams params(browser, tabs[i].url,
213 content::PAGE_TRANSITION_AUTO_TOPLEVEL);
214 params.disposition = NEW_BACKGROUND_TAB;
215 params.tabstrip_index = -1;
216 params.tabstrip_add_types = TabStripModel::ADD_PINNED;
217 params.extension_app_id = tabs[i].app_id;
218 chrome::Navigate(&params);
219 }
220 }
221
222 BaseSettingChange* CreateSessionStartupChange(
223 const SessionStartupPref& actual_startup_pref,
224 const StartupTabs& actual_pinned_tabs,
225 const SessionStartupPref& backup_startup_pref,
226 const StartupTabs& backup_pinned_tabs) {
227 return new SessionStartupChange(actual_startup_pref, actual_pinned_tabs,
228 backup_startup_pref, backup_pinned_tabs);
229 }
230
231 } // namespace protector
OLDNEW
« no previous file with comments | « chrome/browser/protector/protector_utils.cc ('k') | chrome/browser/protector/session_startup_change_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698