| Index: chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
|
| index 90c6cede5441c61ce0e5e08659322ec797ac99a8..618c97cc3f0297e7f2b2418d2ddcce5fb6799023 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/physicalweb/UrlManager.java
|
| @@ -220,7 +220,10 @@ class UrlManager {
|
| return distance1.compareTo(distance2);
|
| }
|
| });
|
| - return urlInfos;
|
| +
|
| + // Keep only the first UrlInfo with a given groupid. The list is already
|
| + // sorted by distance, so the first instance will be the closest.
|
| + return deduplicateByGroupId(urlInfos);
|
| }
|
|
|
| public UrlInfo getUrlInfoByUrl(String url) {
|
| @@ -292,6 +295,28 @@ class UrlManager {
|
| }
|
|
|
| /**
|
| + * Given a list of UrlInfos, returns the list with only one UrlInfo for each unique group ID.
|
| + * When multiple UrlInfos have the same group ID, all but the first instance are discarded.
|
| + * @param urlInfos A list of UrlInfos, possibly containing duplicates.
|
| + * @return A list of deduplicated UrlInfos.
|
| + */
|
| + private List<UrlInfo> deduplicateByGroupId(List<UrlInfo> urlInfos) {
|
| + List<UrlInfo> deduplicatedUrlInfos = new ArrayList<>();
|
| + Set<String> groupIds = new HashSet<>();
|
| + for (UrlInfo urlInfo : urlInfos) {
|
| + PwsResult pwsResult = mPwsResultMap.get(urlInfo.getUrl());
|
| + if (pwsResult != null) {
|
| + if (pwsResult.groupId == null || groupIds.contains(pwsResult.groupId)) {
|
| + continue;
|
| + }
|
| + groupIds.add(pwsResult.groupId);
|
| + }
|
| + deduplicatedUrlInfos.add(urlInfo);
|
| + }
|
| + return deduplicatedUrlInfos;
|
| + }
|
| +
|
| + /**
|
| * Adds a URL that has been resolved by the PWS.
|
| * @param pwsResult The meta data associated with the resolved URL.
|
| */
|
|
|