Index: chrome/browser/ui/views/payments/payment_request_item_list.cc |
diff --git a/chrome/browser/ui/views/payments/payment_request_item_list.cc b/chrome/browser/ui/views/payments/payment_request_item_list.cc |
index 0cb3ce8787a4746bb3c136eb20ca2ff38dfc3fe3..dde7ff9da833cd766326a825899f8d7075f684c4 100644 |
--- a/chrome/browser/ui/views/payments/payment_request_item_list.cc |
+++ b/chrome/browser/ui/views/payments/payment_request_item_list.cc |
@@ -10,7 +10,10 @@ |
namespace payments { |
-PaymentRequestItemList::Item::Item() {} |
+PaymentRequestItemList::Item::Item(PaymentRequest* request, |
+ PaymentRequestItemList* list, |
+ bool selected) |
+ : request_(request), list_(list), selected_(selected) {} |
PaymentRequestItemList::Item::~Item() {} |
@@ -23,13 +26,21 @@ views::View* PaymentRequestItemList::Item::GetItemView() { |
return item_view_.get(); |
} |
-PaymentRequestItemList::PaymentRequestItemList() {} |
+void PaymentRequestItemList::Item::SetSelected(bool selected) { |
+ selected_ = selected; |
+ SelectedStateChanged(); |
+} |
+ |
+PaymentRequestItemList::PaymentRequestItemList() : selected_item_(nullptr) {} |
PaymentRequestItemList::~PaymentRequestItemList() {} |
void PaymentRequestItemList::AddItem( |
std::unique_ptr<PaymentRequestItemList::Item> item) { |
+ DCHECK_EQ(this, item->list()); |
items_.push_back(std::move(item)); |
+ if (items_.back()->selected()) |
+ SelectItem(items_.back().get()); |
} |
std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() { |
@@ -46,4 +57,25 @@ std::unique_ptr<views::View> PaymentRequestItemList::CreateListView() { |
return content_view; |
} |
+void PaymentRequestItemList::SelectItem(PaymentRequestItemList::Item* item) { |
+ DCHECK_EQ(this, item->list()); |
+ if (selected_item_ == item) |
+ return; |
+ |
+ UnselectSelectedItem(); |
+ |
+ selected_item_ = item; |
+ item->SetSelected(true); |
+} |
+ |
+void PaymentRequestItemList::UnselectSelectedItem() { |
+ // It's possible that no item is currently selected, either during list |
+ // creation or in the middle of the selection operation when the previously |
+ // selected item has been deselected but the new one isn't selected yet. |
+ if (selected_item_) |
+ selected_item_->SetSelected(false); |
+ |
+ selected_item_ = nullptr; |
+} |
+ |
} // namespace payments |