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

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

Issue 2727063006: Settings reset prompt: add startup logic (Closed)
Patch Set: Nits Created 3 years, 9 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"
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 if (homepage_reset_state() == RESET_REQUIRED) 211 if (homepage_reset_state() == RESET_REQUIRED)
212 reset_flags |= ProfileResetter::HOMEPAGE; 212 reset_flags |= ProfileResetter::HOMEPAGE;
213 if (default_search_reset_state() == RESET_REQUIRED) 213 if (default_search_reset_state() == RESET_REQUIRED)
214 reset_flags |= ProfileResetter::DEFAULT_SEARCH_ENGINE; 214 reset_flags |= ProfileResetter::DEFAULT_SEARCH_ENGINE;
215 if (startup_urls_reset_state() == RESET_REQUIRED) 215 if (startup_urls_reset_state() == RESET_REQUIRED)
216 reset_flags |= ProfileResetter::STARTUP_PAGES; 216 reset_flags |= ProfileResetter::STARTUP_PAGES;
217 profile_resetter_->Reset(reset_flags, std::move(default_settings_), 217 profile_resetter_->Reset(reset_flags, std::move(default_settings_),
218 done_callback); 218 done_callback);
219 } 219 }
220 220
221 void SettingsResetPromptModel::DialogShown() {
222 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
223 DCHECK(SomeSettingRequiresReset());
224
225 base::Time now = base::Time::Now();
226 if (default_search_reset_state() == RESET_REQUIRED)
227 prefs_manager_.RecordPromptShownForDefaultSearch(now);
228 if (startup_urls_reset_state() == RESET_REQUIRED)
229 prefs_manager_.RecordPromptShownForStartupUrls(now);
230 if (homepage_reset_state() == RESET_REQUIRED)
231 prefs_manager_.RecordPromptShownForHomepage(now);
232 }
233
221 GURL SettingsResetPromptModel::homepage() const { 234 GURL SettingsResetPromptModel::homepage() const {
222 return homepage_url_; 235 return homepage_url_;
223 } 236 }
224 237
225 SettingsResetPromptModel::ResetState 238 SettingsResetPromptModel::ResetState
226 SettingsResetPromptModel::homepage_reset_state() const { 239 SettingsResetPromptModel::homepage_reset_state() const {
227 DCHECK(homepage_reset_state_ != RESET_REQUIRED || 240 DCHECK(homepage_reset_state_ != RESET_REQUIRED ||
228 homepage_reset_domain_id_ >= 0); 241 homepage_reset_domain_id_ >= 0);
229 return homepage_reset_state_; 242 return homepage_reset_state_;
230 } 243 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 base::MakeUnique<ProfileResetter>(profile)))); 289 base::MakeUnique<ProfileResetter>(profile))));
277 } 290 }
278 291
279 SettingsResetPromptModel::SettingsResetPromptModel( 292 SettingsResetPromptModel::SettingsResetPromptModel(
280 Profile* profile, 293 Profile* profile,
281 std::unique_ptr<SettingsResetPromptConfig> prompt_config, 294 std::unique_ptr<SettingsResetPromptConfig> prompt_config,
282 std::unique_ptr<ResettableSettingsSnapshot> settings_snapshot, 295 std::unique_ptr<ResettableSettingsSnapshot> settings_snapshot,
283 std::unique_ptr<BrandcodedDefaultSettings> default_settings, 296 std::unique_ptr<BrandcodedDefaultSettings> default_settings,
284 std::unique_ptr<ProfileResetter> profile_resetter) 297 std::unique_ptr<ProfileResetter> profile_resetter)
285 : profile_(profile), 298 : profile_(profile),
299 prefs_manager_(profile, prompt_config->prompt_wave()),
286 prompt_config_(std::move(prompt_config)), 300 prompt_config_(std::move(prompt_config)),
287 settings_snapshot_(std::move(settings_snapshot)), 301 settings_snapshot_(std::move(settings_snapshot)),
288 default_settings_(std::move(default_settings)), 302 default_settings_(std::move(default_settings)),
289 profile_resetter_(std::move(profile_resetter)), 303 profile_resetter_(std::move(profile_resetter)),
304 time_since_last_prompt_(base::Time::Now() -
305 prefs_manager_.LastTriggeredPrompt()),
290 settings_types_initialized_(0), 306 settings_types_initialized_(0),
291 homepage_reset_domain_id_(-1), 307 homepage_reset_domain_id_(-1),
292 homepage_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED), 308 homepage_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
293 default_search_reset_domain_id_(-1), 309 default_search_reset_domain_id_(-1),
294 default_search_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED), 310 default_search_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
295 startup_urls_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED) { 311 startup_urls_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED) {
296 DCHECK(profile_); 312 DCHECK(profile_);
297 DCHECK(prompt_config_); 313 DCHECK(prompt_config_);
298 DCHECK(settings_snapshot_); 314 DCHECK(settings_snapshot_);
299 DCHECK(default_settings_); 315 DCHECK(default_settings_);
(...skipping 15 matching lines...) Expand all
315 DCHECK_EQ(settings_types_initialized_, 0U); 331 DCHECK_EQ(settings_types_initialized_, 0U);
316 332
317 settings_types_initialized_ |= SETTINGS_TYPE_DEFAULT_SEARCH; 333 settings_types_initialized_ |= SETTINGS_TYPE_DEFAULT_SEARCH;
318 334
319 default_search_url_ = FixupUrl(settings_snapshot_->dse_url()); 335 default_search_url_ = FixupUrl(settings_snapshot_->dse_url());
320 default_search_reset_domain_id_ = 336 default_search_reset_domain_id_ =
321 prompt_config_->UrlToResetDomainId(default_search_url_); 337 prompt_config_->UrlToResetDomainId(default_search_url_);
322 if (default_search_reset_domain_id_ < 0) 338 if (default_search_reset_domain_id_ < 0)
323 return; 339 return;
324 340
325 default_search_reset_state_ = RESET_REQUIRED; 341 default_search_reset_state_ = GetResetStateForSetting(
342 prefs_manager_.LastTriggeredPromptForDefaultSearch());
326 } 343 }
327 344
328 void SettingsResetPromptModel::InitStartupUrlsData() { 345 void SettingsResetPromptModel::InitStartupUrlsData() {
329 // Default search data must have been initialized before startup URLs data. 346 // Default search data must have been initialized before startup URLs data.
330 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_DEFAULT_SEARCH); 347 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_DEFAULT_SEARCH);
331 348
332 settings_types_initialized_ |= SETTINGS_TYPE_STARTUP_URLS; 349 settings_types_initialized_ |= SETTINGS_TYPE_STARTUP_URLS;
333 350
334 // Only the SessionStartupPref::URLS startup type is a candidate for 351 // Only the SessionStartupPref::URLS startup type is a candidate for
335 // resetting. 352 // resetting.
336 if (settings_snapshot_->startup_type() != SessionStartupPref::URLS) 353 if (settings_snapshot_->startup_type() != SessionStartupPref::URLS)
337 return; 354 return;
338 355
339 for (const GURL& startup_url : settings_snapshot_->startup_urls()) { 356 for (const GURL& startup_url : settings_snapshot_->startup_urls()) {
340 GURL fixed_url = FixupUrl(startup_url.possibly_invalid_spec()); 357 GURL fixed_url = FixupUrl(startup_url.possibly_invalid_spec());
341 startup_urls_.push_back(fixed_url); 358 startup_urls_.push_back(fixed_url);
342 int reset_domain_id = prompt_config_->UrlToResetDomainId(fixed_url); 359 int reset_domain_id = prompt_config_->UrlToResetDomainId(fixed_url);
343 if (reset_domain_id >= 0) { 360 if (reset_domain_id >= 0) {
344 startup_urls_reset_state_ =
345 SomeSettingRequiresReset()
346 ? NO_RESET_REQUIRED_DUE_TO_OTHER_SETTING_REQUIRING_RESET
347 : RESET_REQUIRED;
348 startup_urls_to_reset_.push_back(fixed_url); 361 startup_urls_to_reset_.push_back(fixed_url);
349 domain_ids_for_startup_urls_to_reset_.insert(reset_domain_id); 362 domain_ids_for_startup_urls_to_reset_.insert(reset_domain_id);
350 } 363 }
351 } 364 }
365
366 if (startup_urls_to_reset_.empty())
367 return;
368
369 startup_urls_reset_state_ = GetResetStateForSetting(
370 prefs_manager_.LastTriggeredPromptForStartupUrls());
352 } 371 }
353 372
354 void SettingsResetPromptModel::InitHomepageData() { 373 void SettingsResetPromptModel::InitHomepageData() {
355 // Homepage data must be initialized after default search and startup URLs 374 // Homepage data must be initialized after default search and startup URLs
356 // data. 375 // data.
357 DCHECK_EQ(settings_types_initialized_, 376 DCHECK_EQ(settings_types_initialized_,
358 SETTINGS_TYPE_DEFAULT_SEARCH | SETTINGS_TYPE_STARTUP_URLS); 377 SETTINGS_TYPE_DEFAULT_SEARCH | SETTINGS_TYPE_STARTUP_URLS);
359 378
360 settings_types_initialized_ |= SETTINGS_TYPE_HOMEPAGE; 379 settings_types_initialized_ |= SETTINGS_TYPE_HOMEPAGE;
361 380
362 homepage_url_ = FixupUrl(settings_snapshot_->homepage()); 381 homepage_url_ = FixupUrl(settings_snapshot_->homepage());
363 382
364 // If the home button is not visible to the user, then the homepage setting 383 // If the home button is not visible to the user, then the homepage setting
365 // has no real user-visible effect. 384 // has no real user-visible effect.
366 if (!settings_snapshot_->show_home_button()) 385 if (!settings_snapshot_->show_home_button())
367 return; 386 return;
368 387
369 // We do not currently support resetting New Tab pages that are set by 388 // We do not currently support resetting New Tab pages that are set by
370 // extensions. 389 // extensions.
371 if (settings_snapshot_->homepage_is_ntp()) 390 if (settings_snapshot_->homepage_is_ntp())
372 return; 391 return;
373 392
374 homepage_reset_domain_id_ = prompt_config_->UrlToResetDomainId(homepage_url_); 393 homepage_reset_domain_id_ = prompt_config_->UrlToResetDomainId(homepage_url_);
375 if (homepage_reset_domain_id_ < 0) 394 if (homepage_reset_domain_id_ < 0)
376 return; 395 return;
377 396
378 homepage_reset_state_ = 397 homepage_reset_state_ =
379 SomeSettingRequiresReset() 398 GetResetStateForSetting(prefs_manager_.LastTriggeredPromptForHomepage());
380 ? NO_RESET_REQUIRED_DUE_TO_OTHER_SETTING_REQUIRING_RESET
381 : RESET_REQUIRED;
382 } 399 }
383 400
384 // Populate |extensions_to_disable_| with all enabled extensions that override 401 // Populate |extensions_to_disable_| with all enabled extensions that override
385 // the settings whose values were determined to need resetting. Note that all 402 // the settings whose values were determined to need resetting. Note that all
386 // extensions that override such settings are included in the list, not just the 403 // extensions that override such settings are included in the list, not just the
387 // one that is currently actively overriding the setting, in order to ensure 404 // one that is currently actively overriding the setting, in order to ensure
388 // that default values can be restored. This function should be called after 405 // that default values can be restored. This function should be called after
389 // other Init*() functions. 406 // other Init*() functions.
390 void SettingsResetPromptModel::InitExtensionData() { 407 void SettingsResetPromptModel::InitExtensionData() {
391 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_ALL); 408 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_ALL);
(...skipping 21 matching lines...) Expand all
413 overrides->search_engine) || 430 overrides->search_engine) ||
414 (startup_urls_reset_state_ == RESET_REQUIRED && 431 (startup_urls_reset_state_ == RESET_REQUIRED &&
415 !overrides->startup_pages.empty())) { 432 !overrides->startup_pages.empty())) {
416 ExtensionInfo extension_info(extension); 433 ExtensionInfo extension_info(extension);
417 extensions_to_disable_.insert( 434 extensions_to_disable_.insert(
418 std::make_pair(extension_info.id, extension_info)); 435 std::make_pair(extension_info.id, extension_info));
419 } 436 }
420 } 437 }
421 } 438 }
422 439
440 SettingsResetPromptModel::ResetState
441 SettingsResetPromptModel::GetResetStateForSetting(
442 const base::Time& last_triggered_for_setting) const {
443 if (!last_triggered_for_setting.is_null())
444 return NO_RESET_REQUIRED_DUE_TO_ALREADY_PROMPTED_FOR_SETTING;
445
446 if (time_since_last_prompt_ < prompt_config_->time_between_prompts())
447 return NO_RESET_REQUIRED_DUE_TO_RECENTLY_PROMPTED;
448
449 if (SomeSettingRequiresReset())
450 return NO_RESET_REQUIRED_DUE_TO_OTHER_SETTING_REQUIRING_RESET;
451
452 return RESET_REQUIRED;
453 }
454
423 bool SettingsResetPromptModel::SomeSettingRequiresReset() const { 455 bool SettingsResetPromptModel::SomeSettingRequiresReset() const {
424 return default_search_reset_state_ == RESET_REQUIRED || 456 return default_search_reset_state_ == RESET_REQUIRED ||
425 startup_urls_reset_state_ == RESET_REQUIRED || 457 startup_urls_reset_state_ == RESET_REQUIRED ||
426 homepage_reset_state_ == RESET_REQUIRED; 458 homepage_reset_state_ == RESET_REQUIRED;
427 } 459 }
428 460
429 } // namespace safe_browsing. 461 } // namespace safe_browsing.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698