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

Unified Diff: components/physical_web/webui/physical_web_base_message_handler.cc

Issue 2741823002: Update Physical Web WebUI to show new results automatically (Closed)
Patch Set: fix test Created 3 years, 9 months 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
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

Powered by Google App Engine
This is Rietveld 408576698