Bug 1265708 - Post: query topsites metadata by URL without ref too r?sebastian draft
authorAndrzej Hunt <ahunt@mozilla.com>
Thu, 02 Jun 2016 14:25:45 -0700
changeset 374831 be100298e5658b038c1f0c7d52b0f10e653db411
parent 374830 d26a94e376b258382254d5dad8bb9fb07bf3dc54
child 374857 9ebc9c17bbedec8ada0ba58a81fafee966b2e83b
push id20091
push userahunt@mozilla.com
push dateThu, 02 Jun 2016 21:42:56 +0000
reviewerssebastian
bugs1265708
milestone49.0a1
Bug 1265708 - Post: query topsites metadata by URL without ref too r?sebastian MozReview-Commit-ID: KzbKJjRm4Za
mobile/android/base/java/org/mozilla/gecko/home/TopSitesPanel.java
--- a/mobile/android/base/java/org/mozilla/gecko/home/TopSitesPanel.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/TopSitesPanel.java
@@ -31,16 +31,17 @@ import org.mozilla.gecko.home.HomeContex
 import org.mozilla.gecko.home.HomePager.OnUrlOpenListener;
 import org.mozilla.gecko.home.PinSiteDialog.OnSiteSelectedListener;
 import org.mozilla.gecko.home.TopSitesGridView.OnEditPinnedSiteListener;
 import org.mozilla.gecko.home.TopSitesGridView.TopSitesGridContextMenuInfo;
 import org.mozilla.gecko.restrictions.Restrictable;
 import org.mozilla.gecko.restrictions.Restrictions;
 import org.mozilla.gecko.util.StringUtils;
 import org.mozilla.gecko.util.ThreadUtils;
+import org.mozilla.gecko.util.URLUtils;
 
 import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.Color;
 import android.os.Bundle;
@@ -807,31 +808,41 @@ public class TopSitesPanel extends HomeF
 
         @Override
         public Map<String, ThumbnailInfo> loadInBackground() {
             final Map<String, ThumbnailInfo> thumbnails = new HashMap<String, ThumbnailInfo>();
             if (mUrls == null || mUrls.size() == 0) {
                 return thumbnails;
             }
 
+            // We need to query metadata based on the URL without any refs, hence we create a new
+            // mapping and list of these URLs (we need to preserve the original URL for display purposes)
+            final Map<String, String> queryURLs = new HashMap<>();
+            for (final String pageURL : mUrls) {
+                queryURLs.put(pageURL, URLUtils.stripRefFromURL(pageURL));
+            }
+
             // Query the DB for tile images.
             final ContentResolver cr = getContext().getContentResolver();
-            final Map<String, Map<String, Object>> metadata = mDB.getURLMetadata().getForURLs(cr, mUrls, COLUMNS);
+            // Use the stripped URLs for querying the DB
+            final Map<String, Map<String, Object>> metadata = mDB.getURLMetadata().getForURLs(cr, queryURLs.values(), COLUMNS);
 
             // Keep a list of urls that don't have tiles images. We'll use thumbnails for them instead.
             final List<String> thumbnailUrls = new ArrayList<String>();
-            for (String url : mUrls) {
-                ThumbnailInfo info = ThumbnailInfo.fromMetadata(metadata.get(url));
+            for (final String pageURL : mUrls) {
+                final String queryURL = queryURLs.get(pageURL);
+
+                ThumbnailInfo info = ThumbnailInfo.fromMetadata(metadata.get(queryURL));
                 if (info == null) {
                     // If we didn't find metadata, we'll look for a thumbnail for this url.
-                    thumbnailUrls.add(url);
+                    thumbnailUrls.add(pageURL);
                     continue;
                 }
 
-                thumbnails.put(url, info);
+                thumbnails.put(pageURL, info);
             }
 
             if (thumbnailUrls.size() == 0) {
                 return thumbnails;
             }
 
             // Query the DB for tile thumbnails.
             final Cursor cursor = mDB.getThumbnailsForUrls(cr, thumbnailUrls);