Index: components/physical_web/data_source/physical_web_data_source.h |
diff --git a/components/physical_web/data_source/physical_web_data_source.h b/components/physical_web/data_source/physical_web_data_source.h |
index c6310396ce1a25c4ac2a767975182c3def46f550..0e95c5fe361609e11a31bf8248223ae57dc97af3 100644 |
--- a/components/physical_web/data_source/physical_web_data_source.h |
+++ b/components/physical_web/data_source/physical_web_data_source.h |
@@ -6,6 +6,11 @@ |
#define COMPONENTS_PHYSICAL_WEB_DATA_SOURCE_PHYSICAL_WEB_DATA_SOURCE_H_ |
#include <memory> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/time/time.h" |
+#include "url/gurl.h" |
namespace base { |
class ListValue; |
@@ -16,6 +21,7 @@ namespace physical_web { |
class PhysicalWebListener; |
// Dictionary keys for reading Physical Web URL metadata. |
+// TODO(cco3): Remove these when we are no longer dependent. |
extern const char kDescriptionKey[]; |
extern const char kDistanceEstimateKey[]; |
extern const char kGroupIdKey[]; |
@@ -25,6 +31,53 @@ extern const char kScanTimestampKey[]; |
extern const char kScannedUrlKey[]; |
extern const char kTitleKey[]; |
+// Metadata struct for associating data with Physical Web URLs. |
+struct Metadata { |
+ Metadata(); |
+ Metadata(const Metadata& other); |
+ ~Metadata(); |
+ // The URL broadcasted by the beacon and scanned by the client device. |
+ // REQUIRED |
+ GURL scanned_url; |
+ // The URL that the scanned_url redirects to. |
+ // This is the URL that users should be directed to. |
+ // REQUIRED |
+ GURL resolved_url; |
+ // The favicon URL. |
+ // OPTIONAL |
+ GURL icon_url; |
+ // The title of the web page. |
+ // REQUIRED |
+ std::string title; |
+ // The description of the web page. |
+ // OPTIONAL: When the website has not specified a description, the PWS |
+ // generates one based on the initial text of the site, but this is not |
+ // guaranteed behavior. |
+ std::string description; |
+ // An identifier that associates multiple resolved URLs. These URLs will |
+ // most typically be associated because their metadata is near-identical |
+ // (same icon, title, description, URL minus the fragment). e.g., |
+ // https://mymuseum/exhibits#e1 |
+ // https://mymuseum/exhibits#e2 |
+ // If two URLs have the same group id, only one should be shown (typically, |
+ // the one with the smallest distance estimate). |
+ // OPTIONAL: Treat the item as its own unique group if this is empty. |
+ std::string group_id; |
+ // The estimated distance between the user and the Physical Web device (e.g., |
+ // beacon) in meters. |
+ // OPTIONAL: This will be a value <= 0 if no distance estimate has been |
+ // calculated. The distance may not be calculated if we aren't able to |
+ // receive an estimate from the underlying scanning service in time, or if |
+ // (in the future) we begin sourcing Physical Web URLs from a non-BLE |
+ // transport (e.g. mDNS). |
+ double distance_estimate; |
+ // The timestamp corresponding to when this URL was last scanned. |
+ // REQUIRED |
+ base::Time scan_timestamp; |
+}; |
+ |
+using MetadataList = std::vector<Metadata>; |
+ |
// Helper class for accessing Physical Web metadata and controlling the scanner. |
class PhysicalWebDataSource { |
public: |
@@ -41,6 +94,14 @@ class PhysicalWebDataSource { |
// requests are disabled or if discovery is not active, the list will be |
// empty. The method can be called at any time to receive the current metadata |
// list. |
+ virtual std::unique_ptr<MetadataList> GetMetadataList() = 0; |
+ |
+ // Returns a list of resolved URLs and associated page metadata. If network |
+ // requests are disabled or if discovery is not active, the list will be |
+ // empty. The method can be called at any time to receive the current metadata |
+ // list. |
+ // DEPRECATED |
+ // TODO(cco3): Remove this when we are no longer dependent on it. |
virtual std::unique_ptr<base::ListValue> GetMetadata() = 0; |
// Returns boolean |true| if network requests are disabled and there are one |