Skip to content

Commit

Permalink
Add VendorCapability support in CloudDeviceDescription.
Browse files Browse the repository at this point in the history
Bug: 848942
Change-Id: I43f56cf063c24d4078cd0d4952ca0914a33f3976
Reviewed-on: https://chromium-review.googlesource.com/c/1470199
Commit-Queue: Nikita Podguzov <nikitapodguzov@google.com>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#632599}
  • Loading branch information
Nikita Podguzov authored and Commit Bot committed Feb 15, 2019
1 parent fdcbdff commit d3b1539
Show file tree
Hide file tree
Showing 5 changed files with 1,088 additions and 10 deletions.
10 changes: 9 additions & 1 deletion components/cloud_devices/common/description_items.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class ListCapability {
return base::ContainsValue(options_, option);
}

void AddOption(const Option& option) { options_.push_back(option); }
void AddOption(Option&& option) { options_.emplace_back(std::move(option)); }

private:
typedef std::vector<Option> OptionVector;
Expand All @@ -81,11 +81,19 @@ template <class Option, class Traits>
class SelectionCapability {
public:
SelectionCapability();
SelectionCapability(SelectionCapability&& other);
~SelectionCapability();

SelectionCapability& operator=(SelectionCapability&& other);

bool operator==(const SelectionCapability& other) const;

bool LoadFrom(const CloudDeviceDescription& description);
void SaveTo(CloudDeviceDescription* description) const;

bool LoadFrom(const base::Value& dict);
void SaveTo(base::Value* dict) const;

void Reset() {
options_.clear();
default_idx_ = -1;
Expand Down
44 changes: 35 additions & 9 deletions components/cloud_devices/common/description_items_inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ bool ListCapability<Option, Traits>::LoadFrom(
Option option;
if (!option_value.is_dict() || !Traits::Load(option_value, &option))
return false;
AddOption(option);
AddOption(std::move(option));
}
return IsValid();
}
Expand All @@ -77,10 +77,24 @@ SelectionCapability<Option, Traits>::SelectionCapability() {
Reset();
}

template <class Option, class Traits>
SelectionCapability<Option, Traits>::SelectionCapability(
SelectionCapability&& other) = default;

template <class Option, class Traits>
SelectionCapability<Option, Traits>::~SelectionCapability() {
}

template <class Option, class Traits>
SelectionCapability<Option, Traits>& SelectionCapability<Option, Traits>::
operator=(SelectionCapability&& other) = default;

template <class Option, class Traits>
bool SelectionCapability<Option, Traits>::operator==(
const SelectionCapability<Option, Traits>& other) const {
return options_ == other.options_ && default_idx_ == other.default_idx_;
}

template <class Option, class Traits>
bool SelectionCapability<Option, Traits>::IsValid() const {
if (empty())
Expand All @@ -95,13 +109,28 @@ bool SelectionCapability<Option, Traits>::IsValid() const {
template <class Option, class Traits>
bool SelectionCapability<Option, Traits>::LoadFrom(
const CloudDeviceDescription& description) {
Reset();
const base::Value* item = description.GetItem(Traits::GetCapabilityPath(),
base::Value::Type::DICTIONARY);
if (!item)
if (!item) {
Reset();
return false;
}
return LoadFrom(*item);
}

template <class Option, class Traits>
void SelectionCapability<Option, Traits>::SaveTo(
CloudDeviceDescription* description) const {
DCHECK(IsValid());
SaveTo(description->CreateItem(Traits::GetCapabilityPath(),
base::Value::Type::DICTIONARY));
}

template <class Option, class Traits>
bool SelectionCapability<Option, Traits>::LoadFrom(const base::Value& dict) {
Reset();
const base::Value* options_value =
item->FindKeyOfType(json::kKeyOption, base::Value::Type::LIST);
dict.FindKeyOfType(json::kKeyOption, base::Value::Type::LIST);
if (!options_value)
return false;
const base::Value::ListStorage& options = options_value->GetList();
Expand All @@ -120,8 +149,7 @@ bool SelectionCapability<Option, Traits>::LoadFrom(
}

template <class Option, class Traits>
void SelectionCapability<Option, Traits>::SaveTo(
CloudDeviceDescription* description) const {
void SelectionCapability<Option, Traits>::SaveTo(base::Value* dict) const {
DCHECK(IsValid());
base::Value options_list(base::Value::Type::LIST);
for (size_t i = 0; i < options_.size(); ++i) {
Expand All @@ -131,9 +159,7 @@ void SelectionCapability<Option, Traits>::SaveTo(
Traits::Save(options_[i], &option_value);
options_list.GetList().emplace_back(std::move(option_value));
}
description
->CreateItem(Traits::GetCapabilityPath(), base::Value::Type::DICTIONARY)
->SetKey(json::kKeyOption, std::move(options_list));
dict->SetKey(json::kKeyOption, std::move(options_list));
}

template <class Traits>
Expand Down
Loading

0 comments on commit d3b1539

Please sign in to comment.