| Index: components/physical_web/webui/physical_web_base_message_handler.cc
|
| diff --git a/components/physical_web/webui/physical_web_base_message_handler.cc b/components/physical_web/webui/physical_web_base_message_handler.cc
|
| index 68aeca7791e14c274f27283fd78eb9726cfa9b22..75ed1a550411778df40334d1b53a10ef0f4a4f85 100644
|
| --- a/components/physical_web/webui/physical_web_base_message_handler.cc
|
| +++ b/components/physical_web/webui/physical_web_base_message_handler.cc
|
| @@ -13,9 +13,26 @@
|
|
|
| namespace physical_web_ui {
|
|
|
| -PhysicalWebBaseMessageHandler::PhysicalWebBaseMessageHandler() {}
|
| +PhysicalWebBaseMessageHandler::PhysicalWebBaseMessageHandler()
|
| + : data_source_(nullptr) {}
|
|
|
| -PhysicalWebBaseMessageHandler::~PhysicalWebBaseMessageHandler() = default;
|
| +PhysicalWebBaseMessageHandler::~PhysicalWebBaseMessageHandler() {
|
| + if (data_source_)
|
| + data_source_->UnregisterListener(this);
|
| +}
|
| +
|
| +void PhysicalWebBaseMessageHandler::OnFound(const GURL& url) {
|
| + HandleRequestNearbyURLs(nullptr);
|
| +}
|
| +
|
| +void PhysicalWebBaseMessageHandler::OnLost(const GURL& url) {
|
| + // do nothing
|
| +}
|
| +
|
| +void PhysicalWebBaseMessageHandler::OnDistanceChanged(
|
| + const GURL& url, double distance_estimate) {
|
| + // do nothing
|
| +}
|
|
|
| void PhysicalWebBaseMessageHandler::RegisterMessages() {
|
| RegisterMessageCallback(
|
| @@ -27,6 +44,10 @@ void PhysicalWebBaseMessageHandler::RegisterMessages() {
|
| base::BindRepeating(
|
| &PhysicalWebBaseMessageHandler::HandlePhysicalWebItemClicked,
|
| base::Unretained(this)));
|
| +
|
| + data_source_ = GetPhysicalWebDataSource();
|
| + if (data_source_)
|
| + data_source_->RegisterListener(this);
|
| }
|
|
|
| void PhysicalWebBaseMessageHandler::HandleRequestNearbyURLs(
|
| @@ -36,9 +57,19 @@ void PhysicalWebBaseMessageHandler::HandleRequestNearbyURLs(
|
| std::unique_ptr<physical_web::MetadataList> metadata_list =
|
| GetPhysicalWebDataSource()->GetMetadataList();
|
|
|
| + // Append new metadata at the end of the list.
|
| + for (const auto& metadata_list_item : *metadata_list) {
|
| + const std::string& group_id = metadata_list_item.group_id;
|
| + if (metadata_map_.find(group_id) == metadata_map_.end()) {
|
| + ordered_group_ids_.push_back(group_id);
|
| + metadata_map_.emplace(group_id, metadata_list_item);
|
| + }
|
| + }
|
| +
|
| auto metadata = base::MakeUnique<base::ListValue>();
|
| int index = 0;
|
| - for (const auto& metadata_list_item : *metadata_list) {
|
| + for (const auto& group_id : ordered_group_ids_) {
|
| + auto metadata_list_item = metadata_map_[group_id];
|
| auto metadata_item = base::MakeUnique<base::DictionaryValue>();
|
| metadata_item->SetString(physical_web_ui::kResolvedUrl,
|
| metadata_list_item.resolved_url.spec());
|
|
|