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 @@
#include "chrome/browser/chromeos/options/network_property_ui_data.h"
#include "base/logging.h"
#include "base/values.h"
#include "chromeos/network/onc/onc_utils.h"
namespace chromeos {
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) {
}
NetworkPropertyUIData::~NetworkPropertyUIData() {
}
void NetworkPropertyUIData::ParseOncProperty(onc::ONCSource onc_source,
void NetworkPropertyUIData::ParseOncProperty(::onc::ONCSource onc_source,
const base::DictionaryValue* onc,
const std::string& property_key) {
default_value_.reset();
......@@ -28,25 +30,22 @@ void NetworkPropertyUIData::ParseOncProperty(onc::ONCSource onc_source,
if (!onc || !IsManaged())
return;
size_t pos = property_key.find_last_of('.');
std::string recommended_property_key;
std::string property_basename(property_key);
if (pos != std::string::npos) {
recommended_property_key = property_key.substr(0, pos + 1);
property_basename = property_key.substr(pos + 1);
}
recommended_property_key += "Recommended";
const base::ListValue* recommended_keys = NULL;
if (onc->GetList(recommended_property_key, &recommended_keys)) {
base::StringValue basename_value(property_basename);
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());
}
if (!onc::IsRecommendedValue(onc, property_key))
return;
// Set onc_source_ to NONE to indicate that the value is not enforced.
onc_source_ = ::onc::ONC_SOURCE_NONE;
const base::Value* default_value = NULL;
if (!onc->Get(property_key, &default_value)) {
// No default entry indicates that the property can be modified by the user,
// but has no default value, e.g. Username or Passphrase. (The default
// behavior for a property with no entry is non user modifiable).
return;
}
// Set the recommended (default) value.
default_value_.reset(default_value->DeepCopy());
}
} // namespace chromeos
......@@ -672,5 +672,26 @@ NetworkTypePattern NetworkTypePatternFromOncType(const std::string& type) {
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 chromeos
......@@ -130,6 +130,10 @@ CHROMEOS_EXPORT bool ResolveServerCertRefsInNetwork(
CHROMEOS_EXPORT NetworkTypePattern NetworkTypePatternFromOncType(
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 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