diff options
author | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-10 04:45:54 +0000 |
---|---|---|
committer | tony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-10 04:45:54 +0000 |
commit | f988638e6ea5a3f16e289be9ac7ffd853f7a13e4 (patch) | |
tree | 21a390713263cede93537c0651656e83acbc5965 /chrome/browser/first_run_gtk.cc | |
parent | 39b22b7c4c5c45183a5224449f0f82d7998a70e0 (diff) | |
download | chromium_src-f988638e6ea5a3f16e289be9ac7ffd853f7a13e4.zip chromium_src-f988638e6ea5a3f16e289be9ac7ffd853f7a13e4.tar.gz chromium_src-f988638e6ea5a3f16e289be9ac7ffd853f7a13e4.tar.bz2 |
Allow the use of the master_preferences file in Linux.
Also refactor FirstRunTabs to use GURL instead of wstring.
BUG=none
TEST=Add master_preferences file to directory containing the chrome binary and
execute chrome with the --first-run option.
Original patch by bgmerrell@gmail.com at
http://codereview.chromium.org/551160
Review URL: http://codereview.chromium.org/796001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@41131 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/first_run_gtk.cc')
-rw-r--r-- | chrome/browser/first_run_gtk.cc | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/chrome/browser/first_run_gtk.cc b/chrome/browser/first_run_gtk.cc index 3d4a091..59f3041 100644 --- a/chrome/browser/first_run_gtk.cc +++ b/chrome/browser/first_run_gtk.cc @@ -4,7 +4,20 @@ #include "chrome/browser/first_run.h" +#include "app/resource_bundle.h" +#include "base/file_path.h" +#include "base/file_util.h" +#include "base/path_service.h" #include "chrome/browser/gtk/first_run_dialog.h" +#include "chrome/browser/profile_manager.h" +#include "chrome/browser/shell_integration.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/pref_names.h" +#include "chrome/common/result_codes.h" +#include "chrome/installer/util/google_update_settings.h" +#include "chrome/installer/util/master_preferences.h" +#include "chrome/installer/util/util_constants.h" +#include "googleurl/src/gurl.h" bool OpenFirstRunDialog(Profile* profile, bool homepage_defined, int import_items, @@ -12,3 +25,73 @@ bool OpenFirstRunDialog(Profile* profile, bool homepage_defined, ProcessSingleton* process_singleton) { return FirstRunDialog::Show(profile, process_singleton); } + +FilePath GetDefaultPrefFilePath(bool create_profile_dir, + const FilePath& user_data_dir) { + FilePath default_pref_dir = + ProfileManager::GetDefaultProfileDir(user_data_dir); + if (create_profile_dir) { + if (!file_util::PathExists(default_pref_dir)) { + if (!file_util::CreateDirectory(default_pref_dir)) + return FilePath(); + } + } + return ProfileManager::GetProfilePrefsPath(default_pref_dir); +} + +bool FirstRun::ProcessMasterPreferences(const FilePath& user_data_dir, + const FilePath& master_prefs_path, + MasterPrefs* out_prefs) { + DCHECK(!user_data_dir.empty()); + FilePath master_prefs = master_prefs_path; + if (master_prefs.empty()) { + // The default location of the master prefs is next to the chrome binary. + if (!PathService::Get(base::DIR_EXE, &master_prefs)) + return true; + master_prefs = + master_prefs.AppendASCII(installer_util::kDefaultMasterPrefs); + } + + scoped_ptr<DictionaryValue> prefs( + installer_util::ParseDistributionPreferences(master_prefs)); + if (!prefs.get()) + return true; + + out_prefs->new_tabs = installer_util::GetFirstRunTabs(prefs.get()); + + std::string not_used; + out_prefs->homepage_defined = prefs->GetString(prefs::kHomePage, ¬_used); + + bool value = false; + if (installer_util::GetDistroBooleanPreference(prefs.get(), + installer_util::master_preferences::kAltFirstRunBubble, &value) && value) + FirstRun::SetOEMFirstRunBubblePref(); + + FilePath user_prefs = GetDefaultPrefFilePath(true, user_data_dir); + if (user_prefs.empty()) + return true; + + // The master prefs are regular prefs so we can just copy the file + // to the default place and they just work. + if (!file_util::CopyFile(master_prefs, user_prefs)) + return true; + + // Note we are skipping all other master preferences if skip-first-run-ui + // is *not* specified. + if (!installer_util::GetDistroBooleanPreference(prefs.get(), + installer_util::master_preferences::kDistroSkipFirstRunPref, &value) || + !value) + return true; + + // From here on we won't show first run so we need to do the work to set the + // required state given that FirstRunView is not going to be called. + FirstRun::SetShowFirstRunBubblePref(); + + if (installer_util::GetDistroBooleanPreference(prefs.get(), + installer_util::master_preferences::kDistroShowWelcomePage, &value) && + value) + FirstRun::SetShowWelcomePagePref(); + + return false; +} + |