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

Unified Diff: base/values.cc

Issue 81183005: Remove JsonPrefStore pruning of empty values on write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove else Created 7 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 | « base/values.h ('k') | base/values_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/values.cc
diff --git a/base/values.cc b/base/values.cc
index 2d3984e0d4247ddb2b82aed3758771fa19bf8e31..cf5a62dc76439aae97109416448afc68073ff53a 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -462,8 +462,8 @@ void DictionaryValue::SetStringWithoutPathExpansion(
SetWithoutPathExpansion(path, CreateStringValue(in_value));
}
-bool DictionaryValue::Get(
- const std::string& path, const Value** out_value) const {
+bool DictionaryValue::Get(const std::string& path,
+ const Value** out_value) const {
DCHECK(IsStringUTF8(path));
// LOG(WARNING) << "\n1\n";
std::string current_path(path);
@@ -755,6 +755,26 @@ bool DictionaryValue::RemoveWithoutPathExpansion(const std::string& key,
return true;
}
+bool DictionaryValue::RemovePath(const std::string& path,
+ scoped_ptr<Value>* out_value) {
+ bool result = false;
+ size_t delimiter_position = path.find('.');
+
+ if (delimiter_position == std::string::npos)
+ return RemoveWithoutPathExpansion(path, out_value);
+
+ const std::string subdict_path = path.substr(0, delimiter_position);
+ DictionaryValue* subdict = NULL;
+ if (!GetDictionary(subdict_path, &subdict))
+ return false;
+ result = subdict->RemovePath(path.substr(delimiter_position + 1),
+ out_value);
+ if (result && subdict->empty())
+ RemoveWithoutPathExpansion(subdict_path, NULL);
+
+ return result;
+}
+
DictionaryValue* DictionaryValue::DeepCopyWithoutEmptyChildren() const {
Value* copy = CopyWithoutEmptyChildren(this);
return copy ? static_cast<DictionaryValue*>(copy) : new DictionaryValue;
« no previous file with comments | « base/values.h ('k') | base/values_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698