Commit 01066c98 authored by stevenjb@chromium.org's avatar stevenjb@chromium.org

Split onc::IsRecommendedValue into onc_utils.cc

Separate out the Recommended parsing from NetworkPropertyUIData so that
it can be used independently.

BUG=279351

Review URL: https://codereview.chromium.org/433143002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@287375 0039d316-1c4b-4281-b951-d872f2087c98
parent ef9f5ffe
...@@ -4,22 +4,24 @@ ...@@ -4,22 +4,24 @@
#include "chrome/browser/chromeos/options/network_property_ui_data.h" #include "chrome/browser/chromeos/options/network_property_ui_data.h"
#include "base/logging.h"
#include "base/values.h" #include "base/values.h"
#include "chromeos/network/onc/onc_utils.h"
namespace chromeos { namespace chromeos {
NetworkPropertyUIData::NetworkPropertyUIData() NetworkPropertyUIData::NetworkPropertyUIData()
: onc_source_(onc::ONC_SOURCE_NONE) { : onc_source_(::onc::ONC_SOURCE_NONE) {
} }
NetworkPropertyUIData::NetworkPropertyUIData(onc::ONCSource onc_source) NetworkPropertyUIData::NetworkPropertyUIData(::onc::ONCSource onc_source)
: onc_source_(onc_source) { : onc_source_(onc_source) {
} }
NetworkPropertyUIData::~NetworkPropertyUIData() { NetworkPropertyUIData::~NetworkPropertyUIData() {
} }
void NetworkPropertyUIData::ParseOncProperty(onc::ONCSource onc_source, void NetworkPropertyUIData::ParseOncProperty(::onc::ONCSource onc_source,
const base::DictionaryValue* onc, const base::DictionaryValue* onc,
const std::string& property_key) { const std::string& property_key) {
default_value_.reset(); default_value_.reset();
...@@ -28,25 +30,22 @@ void NetworkPropertyUIData::ParseOncProperty(onc::ONCSource onc_source, ...@@ -28,25 +30,22 @@ void NetworkPropertyUIData::ParseOncProperty(onc::ONCSource onc_source,
if (!onc || !IsManaged()) if (!onc || !IsManaged())
return; return;
size_t pos = property_key.find_last_of('.'); if (!onc::IsRecommendedValue(onc, property_key))
std::string recommended_property_key; return;
std::string property_basename(property_key);
if (pos != std::string::npos) { // Set onc_source_ to NONE to indicate that the value is not enforced.
recommended_property_key = property_key.substr(0, pos + 1); onc_source_ = ::onc::ONC_SOURCE_NONE;
property_basename = property_key.substr(pos + 1);
} const base::Value* default_value = NULL;
recommended_property_key += "Recommended"; if (!onc->Get(property_key, &default_value)) {
// No default entry indicates that the property can be modified by the user,
const base::ListValue* recommended_keys = NULL; // but has no default value, e.g. Username or Passphrase. (The default
if (onc->GetList(recommended_property_key, &recommended_keys)) { // behavior for a property with no entry is non user modifiable).
base::StringValue basename_value(property_basename); return;
if (recommended_keys->Find(basename_value) != recommended_keys->end()) {
onc_source_ = onc::ONC_SOURCE_NONE;
const base::Value* default_value = NULL;
if (onc->Get(property_key, &default_value))
default_value_.reset(default_value->DeepCopy());
}
} }
// Set the recommended (default) value.
default_value_.reset(default_value->DeepCopy());
} }
} // namespace chromeos } // namespace chromeos
...@@ -672,5 +672,26 @@ NetworkTypePattern NetworkTypePatternFromOncType(const std::string& type) { ...@@ -672,5 +672,26 @@ NetworkTypePattern NetworkTypePatternFromOncType(const std::string& type) {
return NetworkTypePattern::Default(); return NetworkTypePattern::Default();
} }
bool IsRecommendedValue(const base::DictionaryValue* onc,
const std::string& property_key) {
std::string property_basename, recommended_property_key;
size_t pos = property_key.find_last_of('.');
if (pos != std::string::npos) {
// 'WiFi.AutoConnect' -> 'AutoConnect', 'WiFi.Recommended'
property_basename = property_key.substr(pos + 1);
recommended_property_key =
property_key.substr(0, pos + 1) + ::onc::kRecommended;
} else {
// 'Name' -> 'Name', 'Recommended'
property_basename = property_key;
recommended_property_key = ::onc::kRecommended;
}
const base::ListValue* recommended_keys = NULL;
return (onc->GetList(recommended_property_key, &recommended_keys) &&
recommended_keys->Find(base::StringValue(property_basename)) !=
recommended_keys->end());
}
} // namespace onc } // namespace onc
} // namespace chromeos } // namespace chromeos
...@@ -130,6 +130,10 @@ CHROMEOS_EXPORT bool ResolveServerCertRefsInNetwork( ...@@ -130,6 +130,10 @@ CHROMEOS_EXPORT bool ResolveServerCertRefsInNetwork(
CHROMEOS_EXPORT NetworkTypePattern NetworkTypePatternFromOncType( CHROMEOS_EXPORT NetworkTypePattern NetworkTypePatternFromOncType(
const std::string& type); const std::string& type);
// Returns true if |property_key| is a recommended value in the ONC dictionary.
CHROMEOS_EXPORT bool IsRecommendedValue(const base::DictionaryValue* onc,
const std::string& property_key);
} // namespace onc } // namespace onc
} // namespace chromeos } // namespace chromeos
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment