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

Unified Diff: chrome/installer/util/master_preferences.cc

Issue 4342001: Refactoring the master_preferences functions.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/installer/util/master_preferences.h ('k') | chrome/installer/util/master_preferences_dummy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/installer/util/master_preferences.cc
===================================================================
--- chrome/installer/util/master_preferences.cc (revision 64604)
+++ chrome/installer/util/master_preferences.cc (working copy)
@@ -9,6 +9,7 @@
#include "base/path_service.h"
#include "base/string_util.h"
#include "chrome/common/json_value_serializer.h"
+#include "chrome/installer/util/master_preferences_constants.h"
#include "chrome/installer/util/util_constants.h"
#include "googleurl/src/gurl.h"
@@ -16,6 +17,7 @@
namespace {
const char kDistroDict[] = "distribution";
+const char kFirstRunTabs[] = "first_run_tabs";
bool GetGURLFromValue(const Value* in_value, GURL* out_value) {
if (!in_value || !out_value)
@@ -47,130 +49,11 @@
return list;
}
-} // namespace
-
-namespace installer_util {
-
-bool GetDistroBooleanPreference(const DictionaryValue* prefs,
- const std::string& name,
- bool* value) {
- if (!prefs || !value)
- return false;
-
- DictionaryValue* distro = NULL;
- if (!prefs->GetDictionary(kDistroDict, &distro) || !distro)
- return false;
-
- if (!distro->GetBoolean(name, value))
- return false;
-
- return true;
-}
-
-bool GetDistroStringPreference(const DictionaryValue* prefs,
- const std::string& name,
- std::string* value) {
- if (!prefs || !value)
- return false;
-
- DictionaryValue* distro = NULL;
- if (!prefs->GetDictionary(kDistroDict, &distro) || !distro)
- return false;
-
- std::string str_value;
- if (!distro->GetString(name, &str_value))
- return false;
-
- if (str_value.empty())
- return false;
-
- *value = str_value;
- return true;
-}
-
-bool GetDistroIntegerPreference(const DictionaryValue* prefs,
- const std::string& name,
- int* value) {
- if (!prefs || !value)
- return false;
-
- DictionaryValue* distro = NULL;
- if (!prefs->GetDictionary(kDistroDict, &distro) || !distro)
- return false;
-
- if (!distro->GetInteger(name, value))
- return false;
-
- return true;
-}
-
-DictionaryValue* GetInstallPreferences(const CommandLine& cmd_line) {
- DictionaryValue* prefs = NULL;
-#if defined(OS_WIN)
- if (cmd_line.HasSwitch(installer_util::switches::kInstallerData)) {
- FilePath prefs_path = cmd_line.GetSwitchValuePath(
- installer_util::switches::kInstallerData);
- prefs = installer_util::ParseDistributionPreferences(prefs_path);
- }
-
- if (!prefs)
- prefs = new DictionaryValue();
-
- if (cmd_line.HasSwitch(installer_util::switches::kChromeFrame))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kChromeFrame, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kCreateAllShortcuts))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kCreateAllShortcuts, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kDoNotCreateShortcuts))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kDoNotCreateShortcuts, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kMsi))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kMsi, true);
-
- if (cmd_line.HasSwitch(
- installer_util::switches::kDoNotRegisterForUpdateLaunch))
- installer_util::SetDistroBooleanPreference(
- prefs,
- installer_util::master_preferences::kDoNotRegisterForUpdateLaunch,
- true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kDoNotLaunchChrome))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kDoNotLaunchChrome, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kMakeChromeDefault))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kMakeChromeDefault, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kSystemLevel))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kSystemLevel, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kVerboseLogging))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kVerboseLogging, true);
-
- if (cmd_line.HasSwitch(installer_util::switches::kAltDesktopShortcut))
- installer_util::SetDistroBooleanPreference(
- prefs, installer_util::master_preferences::kAltShortcutText, true);
-#endif
-
- return prefs;
-}
-
DictionaryValue* ParseDistributionPreferences(
const FilePath& master_prefs_path) {
- if (!file_util::PathExists(master_prefs_path))
- return NULL;
-
std::string json_data;
if (!file_util::ReadFileToString(master_prefs_path, &json_data)) {
- LOG(WARNING) << "Failed to read master prefs file.";
+ LOG(WARNING) << "Failed to read master prefs file. ";
return NULL;
}
JSONStringValueSerializer json(json_data);
@@ -188,23 +71,112 @@
return static_cast<DictionaryValue*>(root.release());
}
-std::vector<GURL> GetFirstRunTabs(const DictionaryValue* prefs) {
- return GetNamedList("first_run_tabs", prefs);
+} // namespace
+
+namespace installer_util {
+
+MasterPreferences::MasterPreferences(const CommandLine& cmd_line)
+ : distribution_(NULL), preferences_read_from_file_(false) {
+#if defined(OS_WIN)
+ if (cmd_line.HasSwitch(installer_util::switches::kInstallerData)) {
+ FilePath prefs_path(cmd_line.GetSwitchValuePath(
+ installer_util::switches::kInstallerData));
+ this->MasterPreferences::MasterPreferences(prefs_path);
+ } else {
+ master_dictionary_.reset(new DictionaryValue());
+ }
+
+ DCHECK(master_dictionary_.get());
+
+ // A simple map from command line switches to equivalent switches in the
+ // distribution dictionary. Currently all switches added will be set to
+ // 'true'.
+ static const struct CmdLineSwitchToDistributionSwitch {
+ const wchar_t* cmd_line_switch;
+ const char* distribution_switch;
+ } translate_switches[] = {
+ { installer_util::switches::kChromeFrame,
+ installer_util::master_preferences::kChromeFrame },
+ { installer_util::switches::kCreateAllShortcuts,
+ installer_util::master_preferences::kCreateAllShortcuts },
+ { installer_util::switches::kDoNotCreateShortcuts,
+ installer_util::master_preferences::kDoNotCreateShortcuts },
+ { installer_util::switches::kMsi,
+ installer_util::master_preferences::kMsi },
+ { installer_util::switches::kDoNotRegisterForUpdateLaunch,
+ installer_util::master_preferences::kDoNotRegisterForUpdateLaunch },
+ { installer_util::switches::kDoNotLaunchChrome,
+ installer_util::master_preferences::kDoNotLaunchChrome },
+ { installer_util::switches::kMakeChromeDefault,
+ installer_util::master_preferences::kMakeChromeDefault },
+ { installer_util::switches::kSystemLevel,
+ installer_util::master_preferences::kSystemLevel },
+ { installer_util::switches::kVerboseLogging,
+ installer_util::master_preferences::kVerboseLogging },
+ { installer_util::switches::kAltDesktopShortcut,
+ installer_util::master_preferences::kAltShortcutText },
+ };
+
+ std::string name(kDistroDict);
+ for (int i = 0; i < arraysize(translate_switches); ++i) {
+ if (cmd_line.HasSwitch(translate_switches[i].cmd_line_switch)) {
+ name.resize(arraysize(kDistroDict) - 1);
+ name.append(".").append(translate_switches[i].distribution_switch);
+ master_dictionary_->SetBoolean(name, true);
+ }
+ }
+
+ // Cache a pointer to the distribution dictionary. Ignore errors if any.
+ master_dictionary_->GetDictionary(kDistroDict, &distribution_);
+#endif
}
-bool SetDistroBooleanPreference(DictionaryValue* prefs,
- const std::string& name,
- bool value) {
- if (!prefs || name.empty())
- return false;
- prefs->SetBoolean(std::string(kDistroDict) + "." + name, value);
- return true;
+MasterPreferences::MasterPreferences(const FilePath& prefs_path)
+ : distribution_(NULL), preferences_read_from_file_(false) {
+ master_dictionary_.reset(ParseDistributionPreferences(prefs_path));
+ LOG_IF(ERROR, !master_dictionary_.get()) << "Failed to parse "
+ << prefs_path.value();
+ if (!master_dictionary_.get()) {
+ master_dictionary_.reset(new DictionaryValue());
+ } else {
+ preferences_read_from_file_ = true;
+ // Cache a pointer to the distribution dictionary.
+ master_dictionary_->GetDictionary(kDistroDict, &distribution_);
+ }
}
-bool HasExtensionsBlock(const DictionaryValue* prefs,
- DictionaryValue** extensions) {
- return (prefs->GetDictionary(master_preferences::kExtensionsBlock,
- extensions));
+MasterPreferences::~MasterPreferences() {
}
+bool MasterPreferences::GetBool(const std::string& name, bool* value) const {
+ bool ret = false;
+ if (distribution_)
+ ret = distribution_->GetBoolean(name, value);
+ return ret;
+}
+
+bool MasterPreferences::GetInt(const std::string& name, int* value) const {
+ bool ret = false;
+ if (distribution_)
+ ret = distribution_->GetInteger(name, value);
+ return ret;
+}
+
+bool MasterPreferences::GetString(const std::string& name,
+ std::string* value) const {
+ bool ret = false;
+ if (distribution_)
+ ret = (distribution_->GetString(name, value) && !value->empty());
+ return ret;
+}
+
+std::vector<GURL> MasterPreferences::GetFirstRunTabs() const {
+ return GetNamedList(kFirstRunTabs, master_dictionary_.get());
+}
+
+bool MasterPreferences::GetExtensionsBlock(DictionaryValue** extensions) const {
+ return master_dictionary_->GetDictionary(
+ master_preferences::kExtensionsBlock, extensions);
+}
+
} // installer_util
« no previous file with comments | « chrome/installer/util/master_preferences.h ('k') | chrome/installer/util/master_preferences_dummy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698