summaryrefslogtreecommitdiffstats
path: root/chrome/browser/first_run_gtk.cc
diff options
context:
space:
mode:
authortony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-10 04:45:54 +0000
committertony@chromium.org <tony@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-10 04:45:54 +0000
commitf988638e6ea5a3f16e289be9ac7ffd853f7a13e4 (patch)
tree21a390713263cede93537c0651656e83acbc5965 /chrome/browser/first_run_gtk.cc
parent39b22b7c4c5c45183a5224449f0f82d7998a70e0 (diff)
downloadchromium_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.cc83
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, &not_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;
+}
+