| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/first_run/first_run.h" | 5 #include "chrome/browser/first_run/first_run.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> |
| 8 #include <utility> | 9 #include <utility> |
| 9 | 10 |
| 10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 11 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 12 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
| 13 #include "base/files/file_util.h" | 14 #include "base/files/file_util.h" |
| 14 #include "base/lazy_instance.h" | 15 #include "base/lazy_instance.h" |
| 15 #include "base/macros.h" | 16 #include "base/macros.h" |
| 16 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
| 17 #include "base/memory/weak_ptr.h" | 18 #include "base/memory/weak_ptr.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 47 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" | 48 #include "chrome/browser/ui/webui/ntp/new_tab_ui.h" |
| 48 #include "chrome/common/chrome_constants.h" | 49 #include "chrome/common/chrome_constants.h" |
| 49 #include "chrome/common/chrome_paths.h" | 50 #include "chrome/common/chrome_paths.h" |
| 50 #include "chrome/common/chrome_switches.h" | 51 #include "chrome/common/chrome_switches.h" |
| 51 #include "chrome/common/pref_names.h" | 52 #include "chrome/common/pref_names.h" |
| 52 #include "chrome/common/url_constants.h" | 53 #include "chrome/common/url_constants.h" |
| 53 #include "chrome/grit/locale_settings.h" | 54 #include "chrome/grit/locale_settings.h" |
| 54 #include "chrome/installer/util/master_preferences.h" | 55 #include "chrome/installer/util/master_preferences.h" |
| 55 #include "chrome/installer/util/master_preferences_constants.h" | 56 #include "chrome/installer/util/master_preferences_constants.h" |
| 56 #include "chrome/installer/util/util_constants.h" | 57 #include "chrome/installer/util/util_constants.h" |
| 57 #include "components/pref_registry/pref_registry_syncable.h" | |
| 58 #include "components/prefs/pref_service.h" | 58 #include "components/prefs/pref_service.h" |
| 59 #include "components/search_engines/template_url_service.h" | 59 #include "components/search_engines/template_url_service.h" |
| 60 #include "components/signin/core/browser/signin_manager.h" | 60 #include "components/signin/core/browser/signin_manager.h" |
| 61 #include "components/signin/core/browser/signin_tracker.h" | 61 #include "components/signin/core/browser/signin_tracker.h" |
| 62 #include "content/public/browser/navigation_entry.h" | 62 #include "content/public/browser/navigation_entry.h" |
| 63 #include "content/public/browser/notification_observer.h" | 63 #include "content/public/browser/notification_observer.h" |
| 64 #include "content/public/browser/notification_registrar.h" | 64 #include "content/public/browser/notification_registrar.h" |
| 65 #include "content/public/browser/notification_service.h" | 65 #include "content/public/browser/notification_service.h" |
| 66 #include "content/public/browser/notification_types.h" | 66 #include "content/public/browser/notification_types.h" |
| 67 #include "content/public/browser/user_metrics.h" | 67 #include "content/public/browser/user_metrics.h" |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 } | 440 } |
| 441 | 441 |
| 442 static base::LazyInstance<base::FilePath> master_prefs_path_for_testing | 442 static base::LazyInstance<base::FilePath> master_prefs_path_for_testing |
| 443 = LAZY_INSTANCE_INITIALIZER; | 443 = LAZY_INSTANCE_INITIALIZER; |
| 444 | 444 |
| 445 // Loads master preferences from the master preference file into the installer | 445 // Loads master preferences from the master preference file into the installer |
| 446 // master preferences. Returns the pointer to installer::MasterPreferences | 446 // master preferences. Returns the pointer to installer::MasterPreferences |
| 447 // object if successful; otherwise, returns NULL. | 447 // object if successful; otherwise, returns NULL. |
| 448 installer::MasterPreferences* LoadMasterPrefs() { | 448 installer::MasterPreferences* LoadMasterPrefs() { |
| 449 base::FilePath master_prefs_path; | 449 base::FilePath master_prefs_path; |
| 450 if (!master_prefs_path_for_testing.Get().empty()) | 450 if (!master_prefs_path_for_testing.Get().empty()) { |
| 451 master_prefs_path = master_prefs_path_for_testing.Get(); | 451 master_prefs_path = master_prefs_path_for_testing.Get(); |
| 452 else | 452 } else { |
| 453 master_prefs_path = base::FilePath(first_run::internal::MasterPrefsPath()); | 453 master_prefs_path = base::FilePath(first_run::internal::MasterPrefsPath()); |
| 454 } |
| 454 if (master_prefs_path.empty()) | 455 if (master_prefs_path.empty()) |
| 455 return NULL; | 456 return NULL; |
| 456 installer::MasterPreferences* install_prefs = | 457 installer::MasterPreferences* install_prefs = |
| 457 new installer::MasterPreferences(master_prefs_path); | 458 new installer::MasterPreferences(master_prefs_path); |
| 458 if (!install_prefs->read_from_file()) { | 459 if (!install_prefs->read_from_file()) { |
| 459 delete install_prefs; | 460 delete install_prefs; |
| 460 return NULL; | 461 return NULL; |
| 461 } | 462 } |
| 462 | 463 |
| 463 return install_prefs; | 464 return install_prefs; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 487 | 488 |
| 488 namespace first_run { | 489 namespace first_run { |
| 489 namespace internal { | 490 namespace internal { |
| 490 | 491 |
| 491 void SetupMasterPrefsFromInstallPrefs( | 492 void SetupMasterPrefsFromInstallPrefs( |
| 492 const installer::MasterPreferences& install_prefs, | 493 const installer::MasterPreferences& install_prefs, |
| 493 MasterPrefs* out_prefs) { | 494 MasterPrefs* out_prefs) { |
| 494 ConvertStringVectorToGURLVector( | 495 ConvertStringVectorToGURLVector( |
| 495 install_prefs.GetFirstRunTabs(), &out_prefs->new_tabs); | 496 install_prefs.GetFirstRunTabs(), &out_prefs->new_tabs); |
| 496 | 497 |
| 497 install_prefs.GetInt(installer::master_preferences::kDistroPingDelay, | |
| 498 &out_prefs->ping_delay); | |
| 499 | |
| 500 bool value = false; | 498 bool value = false; |
| 501 if (install_prefs.GetBool( | 499 if (install_prefs.GetBool( |
| 502 installer::master_preferences::kDistroImportSearchPref, &value)) { | 500 installer::master_preferences::kDistroImportSearchPref, &value)) { |
| 503 if (value) { | 501 if (value) { |
| 504 out_prefs->do_import_items |= importer::SEARCH_ENGINES; | 502 out_prefs->do_import_items |= importer::SEARCH_ENGINES; |
| 505 } else { | 503 } else { |
| 506 out_prefs->dont_import_items |= importer::SEARCH_ENGINES; | 504 out_prefs->dont_import_items |= importer::SEARCH_ENGINES; |
| 507 } | 505 } |
| 508 } | 506 } |
| 509 | 507 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 bool force_first_run, | 610 bool force_first_run, |
| 613 bool no_first_run) { | 611 bool no_first_run) { |
| 614 return (force_first_run || (!has_sentinel && !no_first_run)) | 612 return (force_first_run || (!has_sentinel && !no_first_run)) |
| 615 ? FIRST_RUN_TRUE | 613 ? FIRST_RUN_TRUE |
| 616 : FIRST_RUN_FALSE; | 614 : FIRST_RUN_FALSE; |
| 617 } | 615 } |
| 618 | 616 |
| 619 } // namespace internal | 617 } // namespace internal |
| 620 | 618 |
| 621 MasterPrefs::MasterPrefs() | 619 MasterPrefs::MasterPrefs() |
| 622 : ping_delay(0), | 620 : homepage_defined(false), |
| 623 homepage_defined(false), | |
| 624 do_import_items(0), | 621 do_import_items(0), |
| 625 dont_import_items(0), | 622 dont_import_items(0), |
| 626 make_chrome_default_for_user(false), | 623 make_chrome_default_for_user(false), |
| 627 suppress_first_run_default_browser_prompt(false), | 624 suppress_first_run_default_browser_prompt(false), |
| 628 welcome_page_on_os_upgrade_enabled(true) { | 625 welcome_page_on_os_upgrade_enabled(true) {} |
| 629 } | |
| 630 | 626 |
| 631 MasterPrefs::~MasterPrefs() {} | 627 MasterPrefs::~MasterPrefs() {} |
| 632 | 628 |
| 633 bool IsChromeFirstRun() { | 629 bool IsChromeFirstRun() { |
| 634 if (g_first_run == internal::FIRST_RUN_UNKNOWN) { | 630 if (g_first_run == internal::FIRST_RUN_UNKNOWN) { |
| 635 const base::CommandLine* command_line = | 631 const base::CommandLine* command_line = |
| 636 base::CommandLine::ForCurrentProcess(); | 632 base::CommandLine::ForCurrentProcess(); |
| 637 g_first_run = internal::DetermineFirstRunState( | 633 g_first_run = internal::DetermineFirstRunState( |
| 638 internal::IsFirstRunSentinelPresent(), | 634 internal::IsFirstRunSentinelPresent(), |
| 639 command_line->HasSwitch(switches::kForceFirstRun), | 635 command_line->HasSwitch(switches::kForceFirstRun), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 653 // However, user will have chance to modify metrics reporting state during | 649 // However, user will have chance to modify metrics reporting state during |
| 654 // first run. | 650 // first run. |
| 655 return false; | 651 return false; |
| 656 } | 652 } |
| 657 | 653 |
| 658 void CreateSentinelIfNeeded() { | 654 void CreateSentinelIfNeeded() { |
| 659 if (IsChromeFirstRun()) | 655 if (IsChromeFirstRun()) |
| 660 internal::CreateSentinel(); | 656 internal::CreateSentinel(); |
| 661 } | 657 } |
| 662 | 658 |
| 663 std::string GetPingDelayPrefName() { | |
| 664 return base::StringPrintf("%s.%s", | |
| 665 installer::master_preferences::kDistroDict, | |
| 666 installer::master_preferences::kDistroPingDelay); | |
| 667 } | |
| 668 | |
| 669 void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) { | |
| 670 registry->RegisterIntegerPref(GetPingDelayPrefName().c_str(), 0); | |
| 671 } | |
| 672 | |
| 673 bool SetShowFirstRunBubblePref(FirstRunBubbleOptions show_bubble_option) { | 659 bool SetShowFirstRunBubblePref(FirstRunBubbleOptions show_bubble_option) { |
| 674 PrefService* local_state = g_browser_process->local_state(); | 660 PrefService* local_state = g_browser_process->local_state(); |
| 675 if (!local_state) | 661 if (!local_state) |
| 676 return false; | 662 return false; |
| 677 if (local_state->GetInteger( | 663 if (local_state->GetInteger( |
| 678 prefs::kShowFirstRunBubbleOption) != FIRST_RUN_BUBBLE_SUPPRESS) { | 664 prefs::kShowFirstRunBubbleOption) != FIRST_RUN_BUBBLE_SUPPRESS) { |
| 679 // Set the new state as long as the bubble wasn't explicitly suppressed | 665 // Set the new state as long as the bubble wasn't explicitly suppressed |
| 680 // already. | 666 // already. |
| 681 local_state->SetInteger(prefs::kShowFirstRunBubbleOption, | 667 local_state->SetInteger(prefs::kShowFirstRunBubbleOption, |
| 682 show_bubble_option); | 668 show_bubble_option); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 735 } | 721 } |
| 736 | 722 |
| 737 ProcessMasterPreferencesResult ProcessMasterPreferences( | 723 ProcessMasterPreferencesResult ProcessMasterPreferences( |
| 738 const base::FilePath& user_data_dir, | 724 const base::FilePath& user_data_dir, |
| 739 MasterPrefs* out_prefs) { | 725 MasterPrefs* out_prefs) { |
| 740 DCHECK(!user_data_dir.empty()); | 726 DCHECK(!user_data_dir.empty()); |
| 741 | 727 |
| 742 std::unique_ptr<installer::MasterPreferences> install_prefs( | 728 std::unique_ptr<installer::MasterPreferences> install_prefs( |
| 743 LoadMasterPrefs()); | 729 LoadMasterPrefs()); |
| 744 | 730 |
| 745 // Default value in case master preferences is missing or corrupt, or | |
| 746 // ping_delay is missing. | |
| 747 out_prefs->ping_delay = 90; | |
| 748 if (install_prefs.get()) { | 731 if (install_prefs.get()) { |
| 749 if (!internal::ShowPostInstallEULAIfNeeded(install_prefs.get())) | 732 if (!internal::ShowPostInstallEULAIfNeeded(install_prefs.get())) |
| 750 return EULA_EXIT_NOW; | 733 return EULA_EXIT_NOW; |
| 751 | 734 |
| 735 std::unique_ptr<base::DictionaryValue> master_dictionary = |
| 736 install_prefs->master_dictionary().CreateDeepCopy(); |
| 737 // The distribution dictionary (and any prefs below it) are never registered |
| 738 // for use in Chrome's PrefService. Strip them from the master dictionary |
| 739 // before mapping it to prefs. |
| 740 master_dictionary->RemoveWithoutPathExpansion( |
| 741 installer::master_preferences::kDistroDict, nullptr); |
| 742 |
| 752 if (!chrome_prefs::InitializePrefsFromMasterPrefs( | 743 if (!chrome_prefs::InitializePrefsFromMasterPrefs( |
| 753 profiles::GetDefaultProfileDir(user_data_dir), | 744 profiles::GetDefaultProfileDir(user_data_dir), |
| 754 install_prefs->master_dictionary())) { | 745 std::move(master_dictionary))) { |
| 755 DLOG(ERROR) << "Failed to initialize from master_preferences."; | 746 DLOG(ERROR) << "Failed to initialize from master_preferences."; |
| 756 } | 747 } |
| 757 | 748 |
| 758 DoDelayedInstallExtensionsIfNeeded(install_prefs.get()); | 749 DoDelayedInstallExtensionsIfNeeded(install_prefs.get()); |
| 759 | 750 |
| 760 internal::SetupMasterPrefsFromInstallPrefs(*install_prefs, out_prefs); | 751 internal::SetupMasterPrefsFromInstallPrefs(*install_prefs, out_prefs); |
| 761 } | 752 } |
| 762 | 753 |
| 763 return FIRST_RUN_PROCEED; | 754 return FIRST_RUN_PROCEED; |
| 764 } | 755 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 SetShouldDoPersonalDataManagerFirstRun(); | 850 SetShouldDoPersonalDataManagerFirstRun(); |
| 860 | 851 |
| 861 internal::DoPostImportPlatformSpecificTasks(profile); | 852 internal::DoPostImportPlatformSpecificTasks(profile); |
| 862 } | 853 } |
| 863 | 854 |
| 864 uint16_t auto_import_state() { | 855 uint16_t auto_import_state() { |
| 865 return g_auto_import_state; | 856 return g_auto_import_state; |
| 866 } | 857 } |
| 867 | 858 |
| 868 } // namespace first_run | 859 } // namespace first_run |
| OLD | NEW |