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

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: 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_(
305 base::Time::Now() -
306 prefs_manager_.LastTriggeredPrompt()),
290 settings_types_initialized_(0), 307 settings_types_initialized_(0),
291 homepage_reset_domain_id_(-1), 308 homepage_reset_domain_id_(-1),
292 homepage_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED), 309 homepage_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED),
293 default_search_reset_domain_id_(-1), 310 default_search_reset_domain_id_(-1),
294 default_search_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED), 311 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) { 312 startup_urls_reset_state_(NO_RESET_REQUIRED_DUE_TO_DOMAIN_NOT_MATCHED) {
296 DCHECK(profile_); 313 DCHECK(profile_);
297 DCHECK(prompt_config_); 314 DCHECK(prompt_config_);
298 DCHECK(settings_snapshot_); 315 DCHECK(settings_snapshot_);
299 DCHECK(default_settings_); 316 DCHECK(default_settings_);
(...skipping 15 matching lines...) Expand all
315 DCHECK_EQ(settings_types_initialized_, 0U); 332 DCHECK_EQ(settings_types_initialized_, 0U);
316 333
317 settings_types_initialized_ |= SETTINGS_TYPE_DEFAULT_SEARCH; 334 settings_types_initialized_ |= SETTINGS_TYPE_DEFAULT_SEARCH;
318 335
319 default_search_url_ = FixupUrl(settings_snapshot_->dse_url()); 336 default_search_url_ = FixupUrl(settings_snapshot_->dse_url());
320 default_search_reset_domain_id_ = 337 default_search_reset_domain_id_ =
321 prompt_config_->UrlToResetDomainId(default_search_url_); 338 prompt_config_->UrlToResetDomainId(default_search_url_);
322 if (default_search_reset_domain_id_ < 0) 339 if (default_search_reset_domain_id_ < 0)
323 return; 340 return;
324 341
325 default_search_reset_state_ = RESET_REQUIRED; 342 default_search_reset_state_ = GetResetStateForSetting(
343 prefs_manager_.LastTriggeredPromptForDefaultSearch());
326 } 344 }
327 345
328 void SettingsResetPromptModel::InitStartupUrlsData() { 346 void SettingsResetPromptModel::InitStartupUrlsData() {
329 // Default search data must have been initialized before startup URLs data. 347 // Default search data must have been initialized before startup URLs data.
330 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_DEFAULT_SEARCH); 348 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_DEFAULT_SEARCH);
331 349
332 settings_types_initialized_ |= SETTINGS_TYPE_STARTUP_URLS; 350 settings_types_initialized_ |= SETTINGS_TYPE_STARTUP_URLS;
333 351
334 // Only the SessionStartupPref::URLS startup type is a candidate for 352 // Only the SessionStartupPref::URLS startup type is a candidate for
335 // resetting. 353 // resetting.
336 if (settings_snapshot_->startup_type() != SessionStartupPref::URLS) 354 if (settings_snapshot_->startup_type() != SessionStartupPref::URLS)
337 return; 355 return;
338 356
339 for (const GURL& startup_url : settings_snapshot_->startup_urls()) { 357 for (const GURL& startup_url : settings_snapshot_->startup_urls()) {
340 GURL fixed_url = FixupUrl(startup_url.possibly_invalid_spec()); 358 GURL fixed_url = FixupUrl(startup_url.possibly_invalid_spec());
341 startup_urls_.push_back(fixed_url); 359 startup_urls_.push_back(fixed_url);
342 int reset_domain_id = prompt_config_->UrlToResetDomainId(fixed_url); 360 int reset_domain_id = prompt_config_->UrlToResetDomainId(fixed_url);
343 if (reset_domain_id >= 0) { 361 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); 362 startup_urls_to_reset_.push_back(fixed_url);
349 domain_ids_for_startup_urls_to_reset_.insert(reset_domain_id); 363 domain_ids_for_startup_urls_to_reset_.insert(reset_domain_id);
350 } 364 }
351 } 365 }
366
367 if (startup_urls_to_reset_.empty())
368 return;
369
370 startup_urls_reset_state_ = GetResetStateForSetting(
371 prefs_manager_.LastTriggeredPromptForStartupUrls());
352 } 372 }
353 373
354 void SettingsResetPromptModel::InitHomepageData() { 374 void SettingsResetPromptModel::InitHomepageData() {
355 // Homepage data must be initialized after default search and startup URLs 375 // Homepage data must be initialized after default search and startup URLs
356 // data. 376 // data.
357 DCHECK_EQ(settings_types_initialized_, 377 DCHECK_EQ(settings_types_initialized_,
358 SETTINGS_TYPE_DEFAULT_SEARCH | SETTINGS_TYPE_STARTUP_URLS); 378 SETTINGS_TYPE_DEFAULT_SEARCH | SETTINGS_TYPE_STARTUP_URLS);
359 379
360 settings_types_initialized_ |= SETTINGS_TYPE_HOMEPAGE; 380 settings_types_initialized_ |= SETTINGS_TYPE_HOMEPAGE;
361 381
362 homepage_url_ = FixupUrl(settings_snapshot_->homepage()); 382 homepage_url_ = FixupUrl(settings_snapshot_->homepage());
363 383
364 // If the home button is not visible to the user, then the homepage setting 384 // If the home button is not visible to the user, then the homepage setting
365 // has no real user-visible effect. 385 // has no real user-visible effect.
366 if (!settings_snapshot_->show_home_button()) 386 if (!settings_snapshot_->show_home_button())
367 return; 387 return;
368 388
369 // We do not currently support resetting New Tab pages that are set by 389 // We do not currently support resetting New Tab pages that are set by
370 // extensions. 390 // extensions.
371 if (settings_snapshot_->homepage_is_ntp()) 391 if (settings_snapshot_->homepage_is_ntp())
372 return; 392 return;
373 393
374 homepage_reset_domain_id_ = prompt_config_->UrlToResetDomainId(homepage_url_); 394 homepage_reset_domain_id_ = prompt_config_->UrlToResetDomainId(homepage_url_);
375 if (homepage_reset_domain_id_ < 0) 395 if (homepage_reset_domain_id_ < 0)
376 return; 396 return;
377 397
378 homepage_reset_state_ = 398 homepage_reset_state_ =
379 SomeSettingRequiresReset() 399 GetResetStateForSetting(prefs_manager_.LastTriggeredPromptForHomepage());
380 ? NO_RESET_REQUIRED_DUE_TO_OTHER_SETTING_REQUIRING_RESET
381 : RESET_REQUIRED;
382 } 400 }
383 401
384 // Populate |extensions_to_disable_| with all enabled extensions that override 402 // Populate |extensions_to_disable_| with all enabled extensions that override
385 // the settings whose values were determined to need resetting. Note that all 403 // 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 404 // 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 405 // 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 406 // that default values can be restored. This function should be called after
389 // other Init*() functions. 407 // other Init*() functions.
390 void SettingsResetPromptModel::InitExtensionData() { 408 void SettingsResetPromptModel::InitExtensionData() {
391 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_ALL); 409 DCHECK_EQ(settings_types_initialized_, SETTINGS_TYPE_ALL);
(...skipping 21 matching lines...) Expand all
413 overrides->search_engine) || 431 overrides->search_engine) ||
414 (startup_urls_reset_state_ == RESET_REQUIRED && 432 (startup_urls_reset_state_ == RESET_REQUIRED &&
415 !overrides->startup_pages.empty())) { 433 !overrides->startup_pages.empty())) {
416 ExtensionInfo extension_info(extension); 434 ExtensionInfo extension_info(extension);
417 extensions_to_disable_.insert( 435 extensions_to_disable_.insert(
418 std::make_pair(extension_info.id, extension_info)); 436 std::make_pair(extension_info.id, extension_info));
419 } 437 }
420 } 438 }
421 } 439 }
422 440
441 SettingsResetPromptModel::ResetState
442 SettingsResetPromptModel::GetResetStateForSetting(
443 const base::Time& last_triggered_for_setting) const {
444 if (!last_triggered_for_setting.is_null())
445 return NO_RESET_REQUIRED_DUE_TO_ALREADY_PROMPTED_FOR_SETTING;
446
447 if (time_since_last_prompt_ < prompt_config_->time_between_prompts())
448 return NO_RESET_REQUIRED_DUE_TO_RECENTLY_PROMPTED;
449
450 if (SomeSettingRequiresReset())
451 return NO_RESET_REQUIRED_DUE_TO_OTHER_SETTING_REQUIRING_RESET;
452
453 return RESET_REQUIRED;
454 }
455
423 bool SettingsResetPromptModel::SomeSettingRequiresReset() const { 456 bool SettingsResetPromptModel::SomeSettingRequiresReset() const {
424 return default_search_reset_state_ == RESET_REQUIRED || 457 return default_search_reset_state_ == RESET_REQUIRED ||
425 startup_urls_reset_state_ == RESET_REQUIRED || 458 startup_urls_reset_state_ == RESET_REQUIRED ||
426 homepage_reset_state_ == RESET_REQUIRED; 459 homepage_reset_state_ == RESET_REQUIRED;
427 } 460 }
428 461
429 } // namespace safe_browsing. 462 } // namespace safe_browsing.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698