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

Side by Side Diff: chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prompt_controller.cc

Issue 2701313002: Adds a modal dialog implementation of the settings reset prompt. (Closed)
Patch Set: Addressed sky@'s comments Created 3 years, 10 months 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
OLDNEW
(Empty)
1 // Copyright 2017 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 "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_controller.h"
6
7 #include <utility>
8
9 #include "base/bind.h"
10 #include "base/bind_helpers.h"
11 #include "base/i18n/rtl.h"
12 #include "base/location.h"
13 #include "base/logging.h"
14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/utf_string_conversions.h"
16 #include "base/time/time.h"
17 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_config.h"
19 #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_model.h"
20 #include "chrome/browser/ui/browser.h"
21 #include "chrome/browser/ui/browser_finder.h"
22 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
23 #include "chrome/grit/chromium_strings.h"
24 #include "chrome/grit/generated_resources.h"
25 #include "components/url_formatter/elide_url.h"
26 #include "components/url_formatter/url_formatter.h"
27 #include "content/public/browser/browser_thread.h"
28 #include "ui/base/l10n/l10n_util.h"
29 #include "url/gurl.h"
30
31 namespace safe_browsing {
32
33 namespace {
34
35 base::string16 FormatUrlForDisplay(const GURL& url) {
36 return base::i18n::GetDisplayStringInLTRDirectionality(
37 url_formatter::FormatUrl(url));
38 }
39
40 base::string16 FormatSearchEngineForDisplay(const GURL& search_url) {
41 return url_formatter::FormatUrlForSecurityDisplay(search_url);
42 }
43
44 // Helper function that chooses and, if necessary, formats a message string
45 // based on the number of extensions that need to be disabled.
46 base::string16 ChooseActionMessage(size_t extensions_to_disable,
47 int no_extensions_message,
48 int one_extension_message,
49 int multiple_extensions_message) {
50 if (extensions_to_disable == 0U)
51 return l10n_util::GetStringUTF16(no_extensions_message);
52 if (extensions_to_disable == 1U)
53 return l10n_util::GetStringUTF16(one_extension_message);
54 // If extensions_to_disable > 1U.
55 return l10n_util::GetStringFUTF16(
56 multiple_extensions_message,
57 base::SizeTToString16(extensions_to_disable));
58 }
59
60 } // namespace.
61
62 SettingsResetPromptController::LabelInfo::LabelInfo(LabelType type,
63 const base::string16& text)
64 : type(type), text(text) {}
65
66 SettingsResetPromptController::LabelInfo::LabelInfo(LabelType type,
67 int message_id)
68 : type(type), text(l10n_util::GetStringUTF16(message_id)) {}
69
70 SettingsResetPromptController::LabelInfo::~LabelInfo() {}
71
72 SettingsResetPromptController::SettingsResetPromptController(
73 std::unique_ptr<SettingsResetPromptModel> model)
74 : model_(std::move(model)) {
75 DCHECK(model_);
76 DCHECK(model_->ShouldPromptForReset());
77
78 InitMainText();
79 InitDetailsText();
80 }
81
82 SettingsResetPromptController::~SettingsResetPromptController() {}
83
84 base::string16 SettingsResetPromptController::GetWindowTitle() const {
85 return l10n_util::GetStringUTF16(IDS_SETTINGS_RESET_PROMPT_TITLE);
86 }
87
88 base::string16 SettingsResetPromptController::GetButtonLabel() const {
89 return l10n_util::GetStringUTF16(
90 IDS_SETTINGS_RESET_PROMPT_ACCEPT_BUTTON_LABEL);
91 }
92
93 base::string16 SettingsResetPromptController::GetShowDetailsLabel() const {
94 return l10n_util::GetStringUTF16(
95 IDS_SETTINGS_RESET_PROMPT_SHOW_DETAILS_BUTTON_LABEL);
96 }
97
98 base::string16 SettingsResetPromptController::GetHideDetailsLabel() const {
99 return l10n_util::GetStringUTF16(
100 IDS_SETTINGS_RESET_PROMPT_HIDE_DETAILS_BUTTON_LABEL);
101 }
102
103 const std::vector<SettingsResetPromptController::LabelInfo>&
104 SettingsResetPromptController::GetMainText() const {
105 DCHECK(!main_text_.empty());
106 return main_text_;
107 }
108
109 const std::vector<SettingsResetPromptController::LabelInfo>&
110 SettingsResetPromptController::GetDetailsText() const {
111 DCHECK(!details_text_.empty());
112 return details_text_;
113 }
114
115 void SettingsResetPromptController::Accept() {
116 model_->PerformReset(
117 base::Bind(&SettingsResetPromptController::OnInteractionDone,
118 base::Unretained(this)));
119 }
120
121 void SettingsResetPromptController::Cancel() {
122 OnInteractionDone();
123 }
124
125 void SettingsResetPromptController::InitMainText() {
126 DCHECK(main_text_.empty());
127
128 const bool reset_search = model_->default_search_reset_state() ==
129 SettingsResetPromptModel::RESET_REQUIRED;
130 const bool reset_startup_urls = model_->startup_urls_reset_state() ==
131 SettingsResetPromptModel::RESET_REQUIRED;
132 const bool reset_homepage = model_->homepage_reset_state() ==
133 SettingsResetPromptModel::RESET_REQUIRED;
134 DCHECK(reset_search || reset_startup_urls || reset_homepage);
135
136 base::string16 action_message;
137 if (int{reset_search} + int{reset_startup_urls} + int{reset_homepage} > 1) {
138 // When multiple settings need to be reset, display a bulleted list of
139 // settings with a common explanation text.
140 main_text_.push_back(
141 LabelInfo(LabelInfo::PARAGRAPH,
142 IDS_SETTINGS_RESET_PROMPT_EXPLANATION_FOR_MULTIPLE_SETTINGS));
143 if (reset_search) {
144 main_text_.push_back(
145 LabelInfo(LabelInfo::BULLET_ITEM,
146 IDS_SETTINGS_RESET_PROMPT_SEARCH_ENGINE_SETTING_NAME));
147 }
148 if (reset_startup_urls) {
149 main_text_.push_back(
150 LabelInfo(LabelInfo::BULLET_ITEM,
151 IDS_SETTINGS_RESET_PROMPT_STARTUP_PAGE_SETTING_NAME));
152 }
153 if (reset_homepage) {
154 main_text_.push_back(
155 LabelInfo(LabelInfo::BULLET_ITEM,
156 IDS_SETTINGS_RESET_PROMPT_HOMEPAGE_SETTING_NAME));
157 }
158
159 // Use a common action message asking if user wants to reset the settings
160 // that were displayed in the list above.
161 main_text_.push_back(LabelInfo(
162 LabelInfo::PARAGRAPH,
163 ChooseActionMessage(
164 model_->extensions_to_disable().size(),
165 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_MULTIPLE_SETTINGS_N O_EXTENSIONS,
166 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_MULTIPLE_SETTINGS_O NE_EXTENSION,
167 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_MULTIPLE_SETTINGS_M ULTIPLE_EXTENSIONS)));
168 } else {
169 // When only one setting needs to be reset, display tailored explanation and
170 // action message for each setting.
171 if (reset_search) {
172 main_text_.push_back(
173 LabelInfo(LabelInfo::PARAGRAPH,
174 IDS_SETTINGS_RESET_PROMPT_EXPLANATION_FOR_SEARCH_ENGINE));
175 main_text_.push_back(LabelInfo(
176 LabelInfo::PARAGRAPH,
177 ChooseActionMessage(
178 model_->extensions_to_disable().size(),
179 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_SEARCH_ENGINE_NO_ EXTENSIONS,
180 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_SEARCH_ENGINE_ONE _EXTENSION,
181 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_SEARCH_ENGINE_MUL TIPLE_EXTENSIONS)));
182 }
183 if (reset_startup_urls) {
184 main_text_.push_back(
185 LabelInfo(LabelInfo::PARAGRAPH,
186 IDS_SETTINGS_RESET_PROMPT_EXPLANATION_FOR_STARTUP_PAGE));
187 main_text_.push_back(LabelInfo(
188 LabelInfo::PARAGRAPH,
189 ChooseActionMessage(
190 model_->extensions_to_disable().size(),
191 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_STARTUP_PAGE_NO_E XTENSIONS,
192 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_STARTUP_PAGE_ONE_ EXTENSION,
193 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_STARTUP_PAGE_MULT IPLE_EXTENSIONS)));
194 }
195 if (reset_homepage) {
196 main_text_.push_back(
197 LabelInfo(LabelInfo::PARAGRAPH,
198 IDS_SETTINGS_RESET_PROMPT_EXPLANATION_FOR_HOMEPAGE));
199 main_text_.push_back(LabelInfo(
200 LabelInfo::PARAGRAPH,
201 ChooseActionMessage(
202 model_->extensions_to_disable().size(),
203 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_HOMEPAGE_NO_EXTEN SIONS,
204 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_HOMEPAGE_ONE_EXTE NSION,
205 IDS_SETTINGS_RESET_PROMPT_ACTION_EXPLANATION_FOR_HOMEPAGE_MULTIPLE _EXTENSIONS)));
206 }
207 }
208 }
209
210 void SettingsResetPromptController::InitDetailsText() {
211 DCHECK(details_text_.empty());
212
213 // Add the text explaining which settings are going to be reset.
214 details_text_.push_back(LabelInfo(
215 LabelInfo::PARAGRAPH,
216 l10n_util::GetStringUTF16(
217 IDS_SETTINGS_RESET_PROMPT_DETAILS_SECTION_SETTINGS_EXPLANATION)));
218
219 // Enumerate the settings that are going to be reset.
220 if (model_->default_search_reset_state() ==
221 SettingsResetPromptModel::RESET_REQUIRED) {
222 details_text_.push_back(LabelInfo(
223 LabelInfo::PARAGRAPH,
224 l10n_util::GetStringUTF16(
225 IDS_SETTINGS_RESET_PROMPT_DETAILED_SEARCH_ENGINE_SETTING)));
226 details_text_.push_back(
227 LabelInfo(LabelInfo::BULLET_ITEM,
228 FormatSearchEngineForDisplay(model_->default_search())));
229 }
230 if (model_->homepage_reset_state() ==
231 SettingsResetPromptModel::RESET_REQUIRED) {
232 details_text_.push_back(
233 LabelInfo(LabelInfo::PARAGRAPH,
234 l10n_util::GetStringUTF16(
235 IDS_SETTINGS_RESET_PROMPT_DETAILED_HOMEPAGE_SETTING)));
236 details_text_.push_back(LabelInfo(LabelInfo::BULLET_ITEM,
237 FormatUrlForDisplay(model_->homepage())));
238 }
239 if (model_->startup_urls_reset_state() ==
240 SettingsResetPromptModel::RESET_REQUIRED) {
241 details_text_.push_back(
242 LabelInfo(LabelInfo::PARAGRAPH,
243 l10n_util::GetStringUTF16(
244 IDS_SETTINGS_RESET_PROMPT_DETAILED_STARTUP_SETTINGS)));
245 for (const GURL& url : model_->startup_urls())
246 details_text_.push_back(
247 LabelInfo(LabelInfo::BULLET_ITEM, FormatUrlForDisplay(url)));
248 }
249
250 if (!model_->extensions_to_disable().empty()) {
251 // Add the text explaining which extensions will be disabled.
252 details_text_.push_back(LabelInfo(
253 LabelInfo::PARAGRAPH,
254 l10n_util::GetStringUTF16(
255 IDS_SETTINGS_RESET_PROMPT_DETAILS_SECTION_EXTENSION_EXPLANATION)));
256
257 for (const auto& item : model_->extensions_to_disable()) {
258 const ExtensionInfo& extension_info = item.second;
259 details_text_.push_back(LabelInfo(
260 LabelInfo::BULLET_ITEM, base::UTF8ToUTF16(extension_info.name)));
261 }
262 }
263 }
264
265 void SettingsResetPromptController::OnInteractionDone() {
266 // TODO(alito): Add metrics reporting here.
267 delete this;
268 }
269
270 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698