From cc4e35df97aa6cb16ae13b10cf1cd1ab29aa690c Mon Sep 17 00:00:00 2001 From: treib Date: Tue, 23 Feb 2016 10:56:31 -0800 Subject: [PATCH] [Offline pages on the NTP] Add UMA for offline-available NTP tiles BUG=565219 Review URL: https://codereview.chromium.org/1721753002 Cr-Commit-Position: refs/heads/master@{#377033} --- .../chrome/browser/ntp/MostVisitedItem.java | 13 ++++++++++- .../chrome/browser/ntp/NewTabPage.java | 10 +++++++++ .../chrome/browser/ntp/NewTabPageView.java | 22 +++++++++---------- tools/metrics/histograms/histograms.xml | 9 ++++++++ 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/MostVisitedItem.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/MostVisitedItem.java index 64b6b0cfb128e7..3e83b9e264149f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/MostVisitedItem.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/MostVisitedItem.java @@ -49,6 +49,7 @@ public interface MostVisitedItemManager { private MostVisitedItemManager mManager; private String mTitle; private String mUrl; + private boolean mOfflineAvailable; private int mIndex; private int mTileType; private View mView; @@ -59,12 +60,15 @@ public interface MostVisitedItemManager { * @param manager The NewTabPageManager used to handle clicks and context menu events. * @param title The title of the page. * @param url The URL of the page. + * @param offlineAvailable Whether there is an offline copy of the URL available. * @param index The index of this item in the list of most visited items. */ - public MostVisitedItem(MostVisitedItemManager manager, String title, String url, int index) { + public MostVisitedItem(MostVisitedItemManager manager, String title, String url, + boolean offlineAvailable, int index) { mManager = manager; mTitle = title; mUrl = url; + mOfflineAvailable = offlineAvailable; mIndex = index; mTileType = MostVisitedTileType.NONE; } @@ -101,6 +105,13 @@ public String getTitle() { return mTitle; } + /** + * @return Whether this item is available offline. + */ + public boolean isOfflineAvailable() { + return mOfflineAvailable; + } + /** * @return The index of this MostVisitedItem in the list of MostVisitedItems. */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java index ace8a12d9339f2..b7b1237d35b062 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java @@ -529,6 +529,16 @@ public void onLoadingComplete(MostVisitedItem[] items) { } mMostVisitedSites.recordTileTypeMetrics(tileTypes); + if (isNtpOfflinePagesEnabled()) { + final int maxNumTiles = 12; + for (int i = 0; i < items.length; i++) { + if (items[i].isOfflineAvailable()) { + RecordHistogram.recordEnumeratedHistogram( + "NewTabPage.TileOfflineAvailable", i, maxNumTiles); + } + } + } + SyncSessionsMetrics.recordYoungestForeignTabAgeOnNTP(); } }; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java index 072c320f3fd641..797d04d97edf3f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPageView.java @@ -783,13 +783,15 @@ public void onMostVisitedURLsAvailable(String[] titles, String[] urls) { for (int i = 0; i < titles.length; i++) { final String url = urls[i]; final String title = titles[i]; + boolean offlineAvailable = mManager.isOfflineAvailable(url); // Look for an existing item to reuse. MostVisitedItem item = null; for (int j = 0; j < oldItemCount; j++) { MostVisitedItem oldItem = oldItems[j]; if (oldItem != null && TextUtils.equals(url, oldItem.getUrl()) - && TextUtils.equals(title, oldItem.getTitle())) { + && TextUtils.equals(title, oldItem.getTitle()) + && offlineAvailable == oldItem.isOfflineAvailable()) { item = oldItem; item.setIndex(i); oldItems[j] = null; @@ -799,10 +801,9 @@ public void onMostVisitedURLsAvailable(String[] titles, String[] urls) { // If nothing can be reused, create a new item. if (item == null) { - String displayTitle = getTitleForDisplay(title, url); - item = new MostVisitedItem(mManager, title, url, i); - View view = mMostVisitedDesign.createMostVisitedItemView(inflater, url, - displayTitle, item, isInitialLoad); + item = new MostVisitedItem(mManager, title, url, offlineAvailable, i); + View view = + mMostVisitedDesign.createMostVisitedItemView(inflater, item, isInitialLoad); item.initView(view); } @@ -963,17 +964,16 @@ public void onLargeIconAvailable(Bitmap icon, int fallbackColor) { } } - public View createMostVisitedItemView(LayoutInflater inflater, final String url, - String displayTitle, MostVisitedItem item, - final boolean isInitialLoad) { + public View createMostVisitedItemView( + LayoutInflater inflater, MostVisitedItem item, boolean isInitialLoad) { final MostVisitedItemView view = (MostVisitedItemView) inflater.inflate( R.layout.most_visited_item, mMostVisitedLayout, false); - view.setTitle(displayTitle); - view.setOfflineAvailable(mManager.isOfflineAvailable(url)); + view.setTitle(getTitleForDisplay(item.getTitle(), item.getUrl())); + view.setOfflineAvailable(item.isOfflineAvailable()); LargeIconCallback iconCallback = new LargeIconCallbackImpl(item, isInitialLoad); if (isInitialLoad) mPendingLoadTasks++; - mManager.getLargeIconForUrl(url, mMinIconSize, iconCallback); + mManager.getLargeIconForUrl(item.getUrl(), mMinIconSize, iconCallback); return view; } diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index e44e5202a9fbee..b4262335eae52a 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml @@ -31342,6 +31342,15 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries. + + treib@chromium.org + + The number of times a tile was available offline, per tile index - compare + to the NewTabPage.SuggestionsImpression.* histograms. This is recorded when + the NTP finishes loading. Only measured on Android. + + + newt@chromium.org