| 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..dd28dc3dd22c89caf8903913d27dfe60e26af510 100644
|
| --- a/components/physical_web/webui/physical_web_base_message_handler.cc
|
| +++ b/components/physical_web/webui/physical_web_base_message_handler.cc
|
| @@ -13,32 +13,65 @@
|
|
|
| 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) {
|
| + PushNearbyURLs();
|
| +}
|
| +
|
| +void PhysicalWebBaseMessageHandler::OnLost(const GURL& url) {
|
| + // do nothing
|
| +}
|
| +
|
| +void PhysicalWebBaseMessageHandler::OnDistanceChanged(
|
| + const GURL& url,
|
| + double distance_estimate) {
|
| + // do nothing
|
| +}
|
|
|
| void PhysicalWebBaseMessageHandler::RegisterMessages() {
|
| RegisterMessageCallback(
|
| - kRequestNearbyUrls,
|
| + kPhysicalWebPageLoaded,
|
| base::BindRepeating(
|
| - &PhysicalWebBaseMessageHandler::HandleRequestNearbyURLs,
|
| + &PhysicalWebBaseMessageHandler::HandlePhysicalWebPageLoaded,
|
| base::Unretained(this)));
|
| - RegisterMessageCallback(kPhysicalWebItemClicked,
|
| +
|
| + RegisterMessageCallback(
|
| + kPhysicalWebItemClicked,
|
| base::BindRepeating(
|
| &PhysicalWebBaseMessageHandler::HandlePhysicalWebItemClicked,
|
| base::Unretained(this)));
|
| +
|
| + data_source_ = GetPhysicalWebDataSource();
|
| + if (data_source_)
|
| + data_source_->RegisterListener(this, physical_web::OPPORTUNISTIC);
|
| }
|
|
|
| -void PhysicalWebBaseMessageHandler::HandleRequestNearbyURLs(
|
| - const base::ListValue* args) {
|
| +void PhysicalWebBaseMessageHandler::PushNearbyURLs() {
|
| base::DictionaryValue results;
|
|
|
| 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_.insert(std::make_pair(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());
|
| @@ -57,12 +90,16 @@ void PhysicalWebBaseMessageHandler::HandleRequestNearbyURLs(
|
|
|
| results.Set(physical_web_ui::kMetadata, metadata.release());
|
|
|
| - UMA_HISTOGRAM_EXACT_LINEAR("PhysicalWeb.TotalUrls.OnInitialDisplay",
|
| - (int)metadata_list->size(), 50);
|
| -
|
| // Pass the list of Physical Web URL metadata to the WebUI. A jstemplate will
|
| // create a list view with an item for each URL.
|
| - CallJavaScriptFunction(physical_web_ui::kReturnNearbyUrls, results);
|
| + CallJavaScriptFunction(physical_web_ui::kPushNearbyUrls, results);
|
| +}
|
| +
|
| +void PhysicalWebBaseMessageHandler::HandlePhysicalWebPageLoaded(
|
| + const base::ListValue* args) {
|
| + PushNearbyURLs();
|
| + UMA_HISTOGRAM_EXACT_LINEAR("PhysicalWeb.TotalUrls.OnInitialDisplay",
|
| + (int)ordered_group_ids_.size(), 50);
|
| }
|
|
|
| void PhysicalWebBaseMessageHandler::HandlePhysicalWebItemClicked(
|
| @@ -82,4 +119,4 @@ void PhysicalWebBaseMessageHandler::HandlePhysicalWebItemClicked(
|
| base::UserMetricsAction("PhysicalWeb.WebUI.ListViewUrlSelected"));
|
| }
|
|
|
| -} // namespace physical_web_ui
|
| +} // namespace physical_web_ui
|
|
|