| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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. |
| OLD | NEW |