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

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

Issue 2918053003: Settings reset prompt: Fetch default settings only when needed. (Closed)
Patch Set: Nit: Move function definition to match declaration order in header Created 3 years, 6 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_model.h" 5 #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_model.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/metrics/histogram_macros.h" 11 #include "base/metrics/histogram_macros.h"
12 #include "chrome/browser/extensions/extension_service.h" 12 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/prefs/session_startup_pref.h" 13 #include "chrome/browser/prefs/session_startup_pref.h"
14 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h" 14 #include "chrome/browser/profile_resetter/brandcoded_default_settings.h"
15 #include "chrome/browser/profile_resetter/profile_resetter.h"
15 #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h" 16 #include "chrome/browser/profile_resetter/resettable_settings_snapshot.h"
16 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/safe_browsing/settings_reset_prompt/default_settings_fe tcher.h"
18 #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_config.h" 18 #include "chrome/browser/safe_browsing/settings_reset_prompt/settings_reset_prom pt_config.h"
19 #include "chrome/browser/search_engines/template_url_service_factory.h" 19 #include "chrome/browser/search_engines/template_url_service_factory.h"
20 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h" 20 #include "chrome/common/extensions/manifest_handlers/settings_overrides_handler. h"
21 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
22 #include "components/prefs/pref_service.h" 22 #include "components/prefs/pref_service.h"
23 #include "components/search_engines/template_url_service.h" 23 #include "components/search_engines/template_url_service.h"
24 #include "components/url_formatter/url_fixer.h" 24 #include "components/url_formatter/url_fixer.h"
25 #include "content/public/browser/browser_thread.h" 25 #include "content/public/browser/browser_thread.h"
26 #include "extensions/browser/extension_registry.h" 26 #include "extensions/browser/extension_registry.h"
27 #include "extensions/browser/extension_system.h" 27 #include "extensions/browser/extension_system.h"
(...skipping 30 matching lines...) Expand all
58 return extensions::ExtensionRegistry::Get(profile)->GetInstalledExtension( 58 return extensions::ExtensionRegistry::Get(profile)->GetInstalledExtension(
59 extension_id); 59 extension_id);
60 } 60 }
61 61
62 GURL FixupUrl(const std::string& url_text) { 62 GURL FixupUrl(const std::string& url_text) {
63 return url_formatter::FixupURL(url_text, /*desired_tld=*/std::string()); 63 return url_formatter::FixupURL(url_text, /*desired_tld=*/std::string());
64 } 64 }
65 65
66 } // namespace 66 } // namespace
67 67
68 // static 68 SettingsResetPromptModel::SettingsResetPromptModel(
69 void SettingsResetPromptModel::Create(
70 Profile* profile, 69 Profile* profile,
71 std::unique_ptr<SettingsResetPromptConfig> prompt_config, 70 std::unique_ptr<SettingsResetPromptConfig> prompt_config,
72 CreateCallback callback) { 71 std::unique_ptr<ProfileResetter> profile_resetter)
72 : profile_(profile),
73 prefs_manager_(profile, prompt_config->prompt_wave()),
74 prompt_config_(std::move(prompt_config)),
75 settings_snapshot_(base::MakeUnique<ResettableSettingsSnapshot>(profile)),
76 profile_resetter_(std::move(profile_resetter)),
77 time_since_last_prompt_(base::Time::Now() -
78 prefs_manager_.LastTriggeredPrompt()),
79 settings_types_initialized_(0),
csharp 2017/06/02 18:18:27 Worth moving the initialization of these values th
alito 2017/06/02 18:54:26 Done.
80 homepage_reset_domain_id_(-1),
81 homepage_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
82 default_search_reset_domain_id_(-1),
83 default_search_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
84 startup_urls_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED) {
73 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 85 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
74 DCHECK(profile); 86 DCHECK(profile_);
75 DCHECK(prompt_config); 87 DCHECK(prompt_config_);
88 DCHECK(settings_snapshot_);
89 DCHECK(profile_resetter_);
76 90
77 DefaultSettingsFetcher::FetchDefaultSettings( 91 InitDefaultSearchData();
78 base::Bind(SettingsResetPromptModel::OnSettingsFetched, profile, 92 InitStartupUrlsData();
79 base::Passed(&prompt_config), base::Passed(&callback))); 93 InitHomepageData();
80 } 94 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_ALL);
81 95
82 // static 96 InitExtensionData();
83 std::unique_ptr<SettingsResetPromptModel> 97
84 SettingsResetPromptModel::CreateForTesting( 98 if (!SomeSettingRequiresReset())
85 Profile* profile, 99 return;
86 std::unique_ptr<SettingsResetPromptConfig> prompt_config, 100
87 std::unique_ptr<ResettableSettingsSnapshot> settings_snapshot, 101 // For now, during the experimental phase, if policy controls any of the
88 std::unique_ptr<BrandcodedDefaultSettings> default_settings, 102 // settings that we consider for reset (search, startup pages, homepage) or if
89 std::unique_ptr<ProfileResetter> profile_resetter) { 103 // an extension that needs to be disabled is managed by policy, then we do not
90 return base::WrapUnique(new SettingsResetPromptModel( 104 // show the reset prompt.
91 profile, std::move(prompt_config), std::move(settings_snapshot), 105 //
92 std::move(default_settings), std::move(profile_resetter))); 106 // TODO(alito): Consider how clients with policies should be prompted for
107 // reset.
108 if (SomeSettingIsManaged() || SomeExtensionMustRemainEnabled()) {
109 if (homepage_reset_state_ == RESET_REQUIRED)
110 homepage_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY;
111 if (default_search_reset_state_ == RESET_REQUIRED)
112 default_search_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY;
113 if (startup_urls_reset_state_ == RESET_REQUIRED)
114 startup_urls_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY;
115 }
93 } 116 }
94 117
95 SettingsResetPromptModel::~SettingsResetPromptModel() {} 118 SettingsResetPromptModel::~SettingsResetPromptModel() {}
96 119
97 Profile* SettingsResetPromptModel::profile() const { 120 Profile* SettingsResetPromptModel::profile() const {
98 return profile_; 121 return profile_;
99 } 122 }
100 123
101 SettingsResetPromptConfig* SettingsResetPromptModel::config() const { 124 SettingsResetPromptConfig* SettingsResetPromptModel::config() const {
102 return prompt_config_.get(); 125 return prompt_config_.get();
103 } 126 }
104 127
105 bool SettingsResetPromptModel::ShouldPromptForReset() const { 128 bool SettingsResetPromptModel::ShouldPromptForReset() const {
106 return SomeSettingRequiresReset(); 129 return SomeSettingRequiresReset();
107 } 130 }
108 131
109 void SettingsResetPromptModel::PerformReset( 132 void SettingsResetPromptModel::PerformReset(
133 std::unique_ptr<BrandcodedDefaultSettings> default_settings,
110 const base::Closure& done_callback) { 134 const base::Closure& done_callback) {
111 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 135 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
112 // |default_settings_| is set in the constructor and will be passed on to 136 DCHECK(default_settings);
113 // |profile_resetter_| who will take over ownership. This method should never
114 // be called more than once during the lifetime of this object.
115 DCHECK(default_settings_);
116 137
117 // Disable all extensions that override settings that need to be reset. 138 // Disable all extensions that override settings that need to be reset.
118 ExtensionService* extension_service = 139 ExtensionService* extension_service =
119 extensions::ExtensionSystem::Get(profile_)->extension_service(); 140 extensions::ExtensionSystem::Get(profile_)->extension_service();
120 DCHECK(extension_service); 141 DCHECK(extension_service);
121 for (const auto& item : extensions_to_disable()) { 142 for (const auto& item : extensions_to_disable()) {
122 const extensions::ExtensionId& extension_id = item.first; 143 const extensions::ExtensionId& extension_id = item.first;
123 extension_service->DisableExtension( 144 extension_service->DisableExtension(
124 extension_id, extensions::Extension::DISABLE_USER_ACTION); 145 extension_id, extensions::Extension::DISABLE_USER_ACTION);
125 } 146 }
(...skipping 12 matching lines...) Expand all
138 UMA_HISTOGRAM_ENUMERATION("SettingsResetPrompt.SettingsReset", 159 UMA_HISTOGRAM_ENUMERATION("SettingsResetPrompt.SettingsReset",
139 SETTINGS_RESET_DEFAULT_SEARCH, 160 SETTINGS_RESET_DEFAULT_SEARCH,
140 SETTINGS_RESET_MAX); 161 SETTINGS_RESET_MAX);
141 } 162 }
142 if (startup_urls_reset_state() == RESET_REQUIRED) { 163 if (startup_urls_reset_state() == RESET_REQUIRED) {
143 reset_flags |= ProfileResetter::STARTUP_PAGES; 164 reset_flags |= ProfileResetter::STARTUP_PAGES;
144 UMA_HISTOGRAM_ENUMERATION("SettingsResetPrompt.SettingsReset", 165 UMA_HISTOGRAM_ENUMERATION("SettingsResetPrompt.SettingsReset",
145 SETTINGS_RESET_STARTUP_URLS, SETTINGS_RESET_MAX); 166 SETTINGS_RESET_STARTUP_URLS, SETTINGS_RESET_MAX);
146 } 167 }
147 168
148 profile_resetter_->Reset(reset_flags, std::move(default_settings_), 169 profile_resetter_->Reset(reset_flags, std::move(default_settings),
149 done_callback); 170 done_callback);
150 } 171 }
151 172
152 void SettingsResetPromptModel::DialogShown() { 173 void SettingsResetPromptModel::DialogShown() {
153 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 174 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
154 DCHECK(SomeSettingRequiresReset()); 175 DCHECK(SomeSettingRequiresReset());
155 176
156 base::Time now = base::Time::Now(); 177 base::Time now = base::Time::Now();
157 if (default_search_reset_state() == RESET_REQUIRED) 178 if (default_search_reset_state() == RESET_REQUIRED)
158 prefs_manager_.RecordPromptShownForDefaultSearch(now); 179 prefs_manager_.RecordPromptShownForDefaultSearch(now);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 startup_urls_reset_state(), RESET_STATE_MAX); 233 startup_urls_reset_state(), RESET_STATE_MAX);
213 UMA_HISTOGRAM_ENUMERATION("SettingsResetPrompt.ResetState_Homepage", 234 UMA_HISTOGRAM_ENUMERATION("SettingsResetPrompt.ResetState_Homepage",
214 homepage_reset_state(), RESET_STATE_MAX); 235 homepage_reset_state(), RESET_STATE_MAX);
215 UMA_HISTOGRAM_COUNTS_100("SettingsResetPrompt.NumberOfExtensionsToDisable", 236 UMA_HISTOGRAM_COUNTS_100("SettingsResetPrompt.NumberOfExtensionsToDisable",
216 extensions_to_disable().size()); 237 extensions_to_disable().size());
217 UMA_HISTOGRAM_SPARSE_SLOWLY( 238 UMA_HISTOGRAM_SPARSE_SLOWLY(
218 "SettingsResetPrompt.DelayBeforePromptParam", 239 "SettingsResetPrompt.DelayBeforePromptParam",
219 prompt_config_->delay_before_prompt().InSeconds()); 240 prompt_config_->delay_before_prompt().InSeconds());
220 } 241 }
221 242
222 // static
223 void SettingsResetPromptModel::OnSettingsFetched(
224 Profile* profile,
225 std::unique_ptr<SettingsResetPromptConfig> prompt_config,
226 SettingsResetPromptModel::CreateCallback callback,
227 std::unique_ptr<BrandcodedDefaultSettings> default_settings) {
228 DCHECK(profile);
229 DCHECK(prompt_config);
230 DCHECK(default_settings);
231
232 callback.Run(base::WrapUnique(new SettingsResetPromptModel(
233 profile, std::move(prompt_config),
234 base::MakeUnique<ResettableSettingsSnapshot>(profile),
235 std::move(default_settings),
236 base::MakeUnique<ProfileResetter>(profile))));
237 }
238
239 SettingsResetPromptModel::SettingsResetPromptModel(
240 Profile* profile,
241 std::unique_ptr<SettingsResetPromptConfig> prompt_config,
242 std::unique_ptr<ResettableSettingsSnapshot> settings_snapshot,
243 std::unique_ptr<BrandcodedDefaultSettings> default_settings,
244 std::unique_ptr<ProfileResetter> profile_resetter)
245 : profile_(profile),
246 prefs_manager_(profile, prompt_config->prompt_wave()),
247 prompt_config_(std::move(prompt_config)),
248 settings_snapshot_(std::move(settings_snapshot)),
249 default_settings_(std::move(default_settings)),
250 profile_resetter_(std::move(profile_resetter)),
251 time_since_last_prompt_(base::Time::Now() -
252 prefs_manager_.LastTriggeredPrompt()),
253 settings_types_initialized_(0),
254 homepage_reset_domain_id_(-1),
255 homepage_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
256 default_search_reset_domain_id_(-1),
257 default_search_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
258 startup_urls_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED) {
259 DCHECK(profile_);
260 DCHECK(prompt_config_);
261 DCHECK(settings_snapshot_);
262 DCHECK(default_settings_);
263 DCHECK(profile_resetter_);
264
265 InitDefaultSearchData();
266 InitStartupUrlsData();
267 InitHomepageData();
268 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_ALL);
269
270 InitExtensionData();
271
272 if (!SomeSettingRequiresReset())
273 return;
274
275 // For now, during the experimental phase, if policy controls any of the
276 // settings that we consider for reset (search, startup pages, homepage) or if
277 // an extension that needs to be disabled is managed by policy, then we do not
278 // show the reset prompt.
279 //
280 // TODO(alito): Consider how clients with policies should be prompted for
281 // reset.
282 if (SomeSettingIsManaged() || SomeExtensionMustRemainEnabled()) {
283 if (homepage_reset_state_ == RESET_REQUIRED)
284 homepage_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY;
285 if (default_search_reset_state_ == RESET_REQUIRED)
286 default_search_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY;
287 if (startup_urls_reset_state_ == RESET_REQUIRED)
288 startup_urls_reset_state_ = NO_RESET_REQUIRED_DUE_TO_POLICY;
289 }
290 }
291
292 void SettingsResetPromptModel::InitDefaultSearchData() { 243 void SettingsResetPromptModel::InitDefaultSearchData() {
293 // Default search data must be the first setting type to be initialized. 244 // Default search data must be the first setting type to be initialized.
294 DCHECK_EQ(settings_types_initialized_, 0U); 245 DCHECK_EQ(settings_types_initialized_, 0U);
295 246
296 settings_types_initialized_ |= SETTINGS_TYPE_DEFAULT_SEARCH; 247 settings_types_initialized_ |= SETTINGS_TYPE_DEFAULT_SEARCH;
297 248
298 default_search_url_ = FixupUrl(settings_snapshot_->dse_url()); 249 default_search_url_ = FixupUrl(settings_snapshot_->dse_url());
299 default_search_reset_domain_id_ = 250 default_search_reset_domain_id_ =
300 prompt_config_->UrlToResetDomainId(default_search_url_); 251 prompt_config_->UrlToResetDomainId(default_search_url_);
301 if (default_search_reset_domain_id_ < 0) 252 if (default_search_reset_domain_id_ < 0)
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 GetExtension(profile_, extension_id); 408 GetExtension(profile_, extension_id);
458 if (extension && management_policy->MustRemainEnabled(extension, nullptr)) 409 if (extension && management_policy->MustRemainEnabled(extension, nullptr))
459 return true; 410 return true;
460 } 411 }
461 } 412 }
462 413
463 return false; 414 return false;
464 } 415 }
465 416
466 } // namespace safe_browsing. 417 } // namespace safe_browsing.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698