Commit c3c25d1e authored by atanasova's avatar atanasova Committed by Commit bot

Start using the whitelist icon on the NTP.

When the whitelist is created we save the path to the locally stored
icon. During the suggestions creation save that information and when
trying to get the large icon for the NTP, first check if we have a
locally stored one first.

This does not yet handle the case when whitelist entry point becomes
part of most visited.

For more information on whitelists - go/chrome-whitelists

Screenshot - https://screenshot.googleplex.com/3eTZ3wghRvH.png

BUG=586097

Review URL: https://codereview.chromium.org/1772363002

Cr-Commit-Position: refs/heads/master@{#381756}
parent cdb67b0d
...@@ -49,25 +49,30 @@ public class MostVisitedItem implements OnCreateContextMenuListener, ...@@ -49,25 +49,30 @@ public class MostVisitedItem implements OnCreateContextMenuListener,
private MostVisitedItemManager mManager; private MostVisitedItemManager mManager;
private String mTitle; private String mTitle;
private String mUrl; private String mUrl;
private String mWhitelistIconPath;
private boolean mOfflineAvailable; private boolean mOfflineAvailable;
private int mIndex; private int mIndex;
private int mTileType; private int mTileType;
private View mView; private View mView;
/** /**
* Constructs a MostVisitedItem with the given manager, title, URL, index, and view. * Constructs a MostVisitedItem with the given manager, title, URL, whitelist icon path, index,
* and view.
* *
* @param manager The NewTabPageManager used to handle clicks and context menu events. * @param manager The NewTabPageManager used to handle clicks and context menu events.
* @param title The title of the page. * @param title The title of the page.
* @param url The URL of the page. * @param url The URL of the page.
* @param whitelistIconPath The path to the icon image file, if this is a whitelisted most
* visited item. Empty otherwise.
* @param offlineAvailable Whether there is an offline copy of the URL available. * @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. * @param index The index of this item in the list of most visited items.
*/ */
public MostVisitedItem(MostVisitedItemManager manager, String title, String url, public MostVisitedItem(MostVisitedItemManager manager, String title, String url,
boolean offlineAvailable, int index) { String whitelistIconPath, boolean offlineAvailable, int index) {
mManager = manager; mManager = manager;
mTitle = title; mTitle = title;
mUrl = url; mUrl = url;
mWhitelistIconPath = whitelistIconPath;
mOfflineAvailable = offlineAvailable; mOfflineAvailable = offlineAvailable;
mIndex = index; mIndex = index;
mTileType = MostVisitedTileType.NONE; mTileType = MostVisitedTileType.NONE;
...@@ -105,6 +110,13 @@ public class MostVisitedItem implements OnCreateContextMenuListener, ...@@ -105,6 +110,13 @@ public class MostVisitedItem implements OnCreateContextMenuListener,
return mTitle; return mTitle;
} }
/**
* @return The path of the whitelist icon associated with the URL.
*/
public String getWhitelistIconPath() {
return mWhitelistIconPath;
}
/** /**
* @return Whether this item is available offline. * @return Whether this item is available offline.
*/ */
......
...@@ -8,7 +8,9 @@ import android.annotation.SuppressLint; ...@@ -8,7 +8,9 @@ import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.BitmapDrawable;
import android.net.Uri; import android.net.Uri;
...@@ -34,6 +36,7 @@ import android.widget.FrameLayout; ...@@ -34,6 +36,7 @@ import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
...@@ -68,6 +71,7 @@ public class NewTabPageView extends FrameLayout ...@@ -68,6 +71,7 @@ public class NewTabPageView extends FrameLayout
private static final int SHADOW_COLOR = 0x11000000; private static final int SHADOW_COLOR = 0x11000000;
private static final long SNAP_SCROLL_DELAY_MS = 30; private static final long SNAP_SCROLL_DELAY_MS = 30;
private static final String TAG = "NewTabPageView";
private ViewGroup mContentView; private ViewGroup mContentView;
private NewTabScrollView mScrollView; private NewTabScrollView mScrollView;
...@@ -767,7 +771,8 @@ public class NewTabPageView extends FrameLayout ...@@ -767,7 +771,8 @@ public class NewTabPageView extends FrameLayout
// MostVisitedURLsObserver implementation // MostVisitedURLsObserver implementation
@Override @Override
public void onMostVisitedURLsAvailable(String[] titles, String[] urls) { public void onMostVisitedURLsAvailable(
String[] titles, String[] urls, String[] whitelistIconPaths) {
mMostVisitedLayout.removeAllViews(); mMostVisitedLayout.removeAllViews();
MostVisitedItem[] oldItems = mMostVisitedItems; MostVisitedItem[] oldItems = mMostVisitedItems;
...@@ -781,6 +786,7 @@ public class NewTabPageView extends FrameLayout ...@@ -781,6 +786,7 @@ public class NewTabPageView extends FrameLayout
for (int i = 0; i < titles.length; i++) { for (int i = 0; i < titles.length; i++) {
final String url = urls[i]; final String url = urls[i];
final String title = titles[i]; final String title = titles[i];
final String whitelistIconPath = whitelistIconPaths[i];
boolean offlineAvailable = mManager.isOfflineAvailable(url); boolean offlineAvailable = mManager.isOfflineAvailable(url);
// Look for an existing item to reuse. // Look for an existing item to reuse.
...@@ -789,7 +795,8 @@ public class NewTabPageView extends FrameLayout ...@@ -789,7 +795,8 @@ public class NewTabPageView extends FrameLayout
MostVisitedItem oldItem = oldItems[j]; MostVisitedItem oldItem = oldItems[j];
if (oldItem != null && TextUtils.equals(url, oldItem.getUrl()) if (oldItem != null && TextUtils.equals(url, oldItem.getUrl())
&& TextUtils.equals(title, oldItem.getTitle()) && TextUtils.equals(title, oldItem.getTitle())
&& offlineAvailable == oldItem.isOfflineAvailable()) { && offlineAvailable == oldItem.isOfflineAvailable()
&& whitelistIconPath.equals(oldItem.getWhitelistIconPath())) {
item = oldItem; item = oldItem;
item.setIndex(i); item.setIndex(i);
oldItems[j] = null; oldItems[j] = null;
...@@ -799,7 +806,8 @@ public class NewTabPageView extends FrameLayout ...@@ -799,7 +806,8 @@ public class NewTabPageView extends FrameLayout
// If nothing can be reused, create a new item. // If nothing can be reused, create a new item.
if (item == null) { if (item == null) {
item = new MostVisitedItem(mManager, title, url, offlineAvailable, i); item = new MostVisitedItem(
mManager, title, url, whitelistIconPath, offlineAvailable, i);
View view = View view =
mMostVisitedDesign.createMostVisitedItemView(inflater, item, isInitialLoad); mMostVisitedDesign.createMostVisitedItemView(inflater, item, isInitialLoad);
item.initView(view); item.initView(view);
...@@ -929,20 +937,22 @@ public class NewTabPageView extends FrameLayout ...@@ -929,20 +937,22 @@ public class NewTabPageView extends FrameLayout
class LargeIconCallbackImpl implements LargeIconCallback { class LargeIconCallbackImpl implements LargeIconCallback {
private MostVisitedItem mItem; private MostVisitedItem mItem;
private MostVisitedItemView mItemView;
private boolean mIsInitialLoad; private boolean mIsInitialLoad;
public LargeIconCallbackImpl(MostVisitedItem item, boolean isInitialLoad) { public LargeIconCallbackImpl(
MostVisitedItem item, MostVisitedItemView itemView, boolean isInitialLoad) {
mItem = item; mItem = item;
mItemView = itemView;
mIsInitialLoad = isInitialLoad; mIsInitialLoad = isInitialLoad;
} }
@Override @Override
public void onLargeIconAvailable(Bitmap icon, int fallbackColor) { public void onLargeIconAvailable(Bitmap icon, int fallbackColor) {
MostVisitedItemView view = (MostVisitedItemView) mItem.getView();
if (icon == null) { if (icon == null) {
mIconGenerator.setBackgroundColor(fallbackColor); mIconGenerator.setBackgroundColor(fallbackColor);
icon = mIconGenerator.generateIconForUrl(mItem.getUrl()); icon = mIconGenerator.generateIconForUrl(mItem.getUrl());
view.setIcon(new BitmapDrawable(getResources(), icon)); mItemView.setIcon(new BitmapDrawable(getResources(), icon));
mItem.setTileType(fallbackColor == ICON_BACKGROUND_COLOR mItem.setTileType(fallbackColor == ICON_BACKGROUND_COLOR
? MostVisitedTileType.ICON_DEFAULT : MostVisitedTileType.ICON_COLOR); ? MostVisitedTileType.ICON_DEFAULT : MostVisitedTileType.ICON_COLOR);
} else { } else {
...@@ -954,7 +964,7 @@ public class NewTabPageView extends FrameLayout ...@@ -954,7 +964,7 @@ public class NewTabPageView extends FrameLayout
roundedIcon.setCornerRadius(cornerRadius); roundedIcon.setCornerRadius(cornerRadius);
roundedIcon.setAntiAlias(true); roundedIcon.setAntiAlias(true);
roundedIcon.setFilterBitmap(true); roundedIcon.setFilterBitmap(true);
view.setIcon(roundedIcon); mItemView.setIcon(roundedIcon);
mItem.setTileType(MostVisitedTileType.ICON_REAL); mItem.setTileType(MostVisitedTileType.ICON_REAL);
} }
mSnapshotMostVisitedChanged = true; mSnapshotMostVisitedChanged = true;
...@@ -969,19 +979,34 @@ public class NewTabPageView extends FrameLayout ...@@ -969,19 +979,34 @@ public class NewTabPageView extends FrameLayout
view.setTitle(getTitleForDisplay(item.getTitle(), item.getUrl())); view.setTitle(getTitleForDisplay(item.getTitle(), item.getUrl()));
view.setOfflineAvailable(item.isOfflineAvailable()); view.setOfflineAvailable(item.isOfflineAvailable());
LargeIconCallback iconCallback = new LargeIconCallbackImpl(item, isInitialLoad); LargeIconCallback iconCallback = new LargeIconCallbackImpl(item, view, isInitialLoad);
if (isInitialLoad) mPendingLoadTasks++; if (isInitialLoad) mPendingLoadTasks++;
mManager.getLargeIconForUrl(item.getUrl(), mMinIconSize, iconCallback); if (!loadWhitelistIcon(item, iconCallback)) {
mManager.getLargeIconForUrl(item.getUrl(), mMinIconSize, iconCallback);
}
return view; return view;
} }
private boolean loadWhitelistIcon(MostVisitedItem item, LargeIconCallback iconCallback) {
if (item.getWhitelistIconPath().isEmpty()) return false;
Bitmap bitmap = BitmapFactory.decodeFile(item.getWhitelistIconPath());
if (bitmap == null) {
Log.d(TAG, "Image decoding failed: %s", item.getWhitelistIconPath());
return false;
}
iconCallback.onLargeIconAvailable(bitmap, Color.BLACK);
return true;
}
public void onIconUpdated(final String url) { public void onIconUpdated(final String url) {
if (mMostVisitedItems == null) return; if (mMostVisitedItems == null) return;
// Find a matching most visited item. // Find a matching most visited item.
for (MostVisitedItem item : mMostVisitedItems) { for (MostVisitedItem item : mMostVisitedItems) {
if (item.getUrl().equals(url)) { if (item.getUrl().equals(url)) {
LargeIconCallback iconCallback = new LargeIconCallbackImpl(item, false); LargeIconCallback iconCallback = new LargeIconCallbackImpl(
item, (MostVisitedItemView) item.getView(), false);
mManager.getLargeIconForUrl(url, mMinIconSize, iconCallback); mManager.getLargeIconForUrl(url, mMinIconSize, iconCallback);
break; break;
} }
......
...@@ -29,7 +29,8 @@ public class MostVisitedSites { ...@@ -29,7 +29,8 @@ public class MostVisitedSites {
* visited URLs). * visited URLs).
*/ */
@CalledByNative("MostVisitedURLsObserver") @CalledByNative("MostVisitedURLsObserver")
public void onMostVisitedURLsAvailable(String[] titles, String[] urls); public void onMostVisitedURLsAvailable(
String[] titles, String[] urls, String[] whitelistIconPaths);
/** /**
* This is called when the list of popular URLs is initially available or updated. * This is called when the list of popular URLs is initially available or updated.
...@@ -89,10 +90,11 @@ public class MostVisitedSites { ...@@ -89,10 +90,11 @@ public class MostVisitedSites {
public void setMostVisitedURLsObserver(final MostVisitedURLsObserver observer, int numSites) { public void setMostVisitedURLsObserver(final MostVisitedURLsObserver observer, int numSites) {
MostVisitedURLsObserver wrappedObserver = new MostVisitedURLsObserver() { MostVisitedURLsObserver wrappedObserver = new MostVisitedURLsObserver() {
@Override @Override
public void onMostVisitedURLsAvailable(String[] titles, String[] urls) { public void onMostVisitedURLsAvailable(
String[] titles, String[] urls, String[] whitelistIconPaths) {
// Don't notify observer if we've already been destroyed. // Don't notify observer if we've already been destroyed.
if (mNativeMostVisitedSites != 0) { if (mNativeMostVisitedSites != 0) {
observer.onMostVisitedURLsAvailable(titles, urls); observer.onMostVisitedURLsAvailable(titles, urls, whitelistIconPaths);
} }
} }
@Override @Override
......
...@@ -18,6 +18,7 @@ public class FakeMostVisitedSites extends MostVisitedSites { ...@@ -18,6 +18,7 @@ public class FakeMostVisitedSites extends MostVisitedSites {
private final String[] mMostVisitedTitles; private final String[] mMostVisitedTitles;
private final String[] mMostVisitedUrls; private final String[] mMostVisitedUrls;
private final String[] mMostVisitedWhitelistIconPaths;
private final List<String> mBlacklistedUrls = new ArrayList<String>(); private final List<String> mBlacklistedUrls = new ArrayList<String>();
...@@ -26,11 +27,13 @@ public class FakeMostVisitedSites extends MostVisitedSites { ...@@ -26,11 +27,13 @@ public class FakeMostVisitedSites extends MostVisitedSites {
* @param mostVisitedTitles The titles of the fixed list of most visited sites. * @param mostVisitedTitles The titles of the fixed list of most visited sites.
* @param mostVisitedUrls The URLs of the fixed list of most visited sites. * @param mostVisitedUrls The URLs of the fixed list of most visited sites.
*/ */
public FakeMostVisitedSites(Profile p, String[] mostVisitedTitles, String[] mostVisitedUrls) { public FakeMostVisitedSites(Profile p, String[] mostVisitedTitles, String[] mostVisitedUrls,
String[] mostVisitedWhitelistIconPaths) {
super(p); super(p);
assert mostVisitedTitles.length == mostVisitedUrls.length; assert mostVisitedTitles.length == mostVisitedUrls.length;
mMostVisitedTitles = mostVisitedTitles.clone(); mMostVisitedTitles = mostVisitedTitles.clone();
mMostVisitedUrls = mostVisitedUrls.clone(); mMostVisitedUrls = mostVisitedUrls.clone();
mMostVisitedWhitelistIconPaths = mostVisitedWhitelistIconPaths.clone();
} }
@Override @Override
...@@ -39,7 +42,7 @@ public class FakeMostVisitedSites extends MostVisitedSites { ...@@ -39,7 +42,7 @@ public class FakeMostVisitedSites extends MostVisitedSites {
@Override @Override
public void run() { public void run() {
observer.onMostVisitedURLsAvailable(mMostVisitedTitles.clone(), observer.onMostVisitedURLsAvailable(mMostVisitedTitles.clone(),
mMostVisitedUrls.clone()); mMostVisitedUrls.clone(), mMostVisitedWhitelistIconPaths.clone());
} }
}); });
} }
......
...@@ -49,6 +49,7 @@ public class NewTabPageTest extends ChromeTabbedActivityTestBase { ...@@ -49,6 +49,7 @@ public class NewTabPageTest extends ChromeTabbedActivityTestBase {
private static final String TEST_PAGE = "/chrome/test/data/android/navigate/simple.html"; private static final String TEST_PAGE = "/chrome/test/data/android/navigate/simple.html";
private static final String[] FAKE_MOST_VISITED_TITLES = new String[] { "Simple" }; private static final String[] FAKE_MOST_VISITED_TITLES = new String[] { "Simple" };
private static final String[] FAKE_MOST_VISITED_WHITELIST_ICON_PATHS = new String[] { "" };
private Tab mTab; private Tab mTab;
private NewTabPage mNtp; private NewTabPage mNtp;
...@@ -83,8 +84,9 @@ public class NewTabPageTest extends ChromeTabbedActivityTestBase { ...@@ -83,8 +84,9 @@ public class NewTabPageTest extends ChromeTabbedActivityTestBase {
public void run() { public void run() {
// Create FakeMostVisitedSites after starting the activity, since it depends on // Create FakeMostVisitedSites after starting the activity, since it depends on
// native code. // native code.
mFakeMostVisitedSites = new FakeMostVisitedSites(mTab.getProfile(), mFakeMostVisitedSites =
FAKE_MOST_VISITED_TITLES, mFakeMostVisitedUrls); new FakeMostVisitedSites(mTab.getProfile(), FAKE_MOST_VISITED_TITLES,
mFakeMostVisitedUrls, FAKE_MOST_VISITED_WHITELIST_ICON_PATHS);
} }
}); });
} catch (Throwable t) { } catch (Throwable t) {
......
...@@ -160,23 +160,7 @@ bool NeedPopularSites(const PrefService* prefs, size_t num_tiles) { ...@@ -160,23 +160,7 @@ bool NeedPopularSites(const PrefService* prefs, size_t num_tiles) {
} // namespace } // namespace
MostVisitedSites::Suggestion::Suggestion(const base::string16& title, MostVisitedSites::Suggestion::Suggestion() : provider_index(-1) {}
const std::string& url,
MostVisitedSource source)
: title(title), url(url), source(source), provider_index(-1) {}
MostVisitedSites::Suggestion::Suggestion(const base::string16& title,
const GURL& url,
MostVisitedSource source)
: title(title), url(url), source(source), provider_index(-1) {}
MostVisitedSites::Suggestion::Suggestion(const base::string16& title,
const std::string& url,
MostVisitedSource source,
int provider_index)
: title(title), url(url), source(source), provider_index(provider_index) {
DCHECK_EQ(MostVisitedSites::SUGGESTIONS_SERVICE, source);
}
MostVisitedSites::Suggestion::~Suggestion() {} MostVisitedSites::Suggestion::~Suggestion() {}
...@@ -464,8 +448,12 @@ void MostVisitedSites::OnMostVisitedURLsAvailable( ...@@ -464,8 +448,12 @@ void MostVisitedSites::OnMostVisitedURLsAvailable(
continue; continue;
} }
suggestions.push_back(make_scoped_ptr( scoped_ptr<Suggestion> suggestion(new Suggestion());
new Suggestion(visited.title, visited.url.spec(), TOP_SITES))); suggestion->title = visited.title;
suggestion->url = visited.url;
suggestion->source = TOP_SITES;
suggestions.push_back(std::move(suggestion));
} }
received_most_visited_sites_ = true; received_most_visited_sites_ = true;
...@@ -496,10 +484,14 @@ void MostVisitedSites::OnSuggestionsProfileAvailable( ...@@ -496,10 +484,14 @@ void MostVisitedSites::OnSuggestionsProfileAvailable(
continue; continue;
} }
suggestions.push_back(make_scoped_ptr(new Suggestion( scoped_ptr<Suggestion> generated_suggestion(new Suggestion());
base::UTF8ToUTF16(suggestion.title()), suggestion.url(), generated_suggestion->title = base::UTF8ToUTF16(suggestion.title());
SUGGESTIONS_SERVICE, generated_suggestion->url = GURL(suggestion.url());
suggestion.providers_size() > 0 ? suggestion.providers(0) : -1))); generated_suggestion->source = SUGGESTIONS_SERVICE;
if (suggestion.providers_size() > 0)
generated_suggestion->provider_index = suggestion.providers(0);
suggestions.push_back(std::move(generated_suggestion));
} }
received_most_visited_sites_ = true; received_most_visited_sites_ = true;
...@@ -543,8 +535,13 @@ MostVisitedSites::CreateWhitelistEntryPointSuggestions( ...@@ -543,8 +535,13 @@ MostVisitedSites::CreateWhitelistEntryPointSuggestions(
continue; continue;
} }
whitelist_suggestions.push_back(make_scoped_ptr(new Suggestion( scoped_ptr<Suggestion> suggestion(new Suggestion());
whitelist->title(), whitelist->entry_point(), WHITELIST))); suggestion->title = whitelist->title();
suggestion->url = whitelist->entry_point();
suggestion->source = WHITELIST;
suggestion->whitelist_icon_path = whitelist->large_icon_path();
whitelist_suggestions.push_back(std::move(suggestion));
if (whitelist_suggestions.size() >= num_whitelist_suggestions) if (whitelist_suggestions.size() >= num_whitelist_suggestions)
break; break;
} }
...@@ -585,8 +582,12 @@ MostVisitedSites::CreatePopularSitesSuggestions( ...@@ -585,8 +582,12 @@ MostVisitedSites::CreatePopularSitesSuggestions(
if (hosts.find(host) != hosts.end()) if (hosts.find(host) != hosts.end())
continue; continue;
popular_sites_suggestions.push_back(make_scoped_ptr( scoped_ptr<Suggestion> suggestion(new Suggestion());
new Suggestion(popular_site.title, popular_site.url, POPULAR))); suggestion->title = popular_site.title;
suggestion->url = GURL(popular_site.url);
suggestion->source = POPULAR;
popular_sites_suggestions.push_back(std::move(suggestion));
if (popular_sites_suggestions.size() >= num_popular_sites_suggestions) if (popular_sites_suggestions.size() >= num_popular_sites_suggestions)
break; break;
} }
...@@ -777,17 +778,20 @@ void MostVisitedSites::NotifyMostVisitedURLsObserver() { ...@@ -777,17 +778,20 @@ void MostVisitedSites::NotifyMostVisitedURLsObserver() {
std::vector<base::string16> titles; std::vector<base::string16> titles;
std::vector<std::string> urls; std::vector<std::string> urls;
std::vector<std::string> whitelist_icon_paths;
titles.reserve(num_suggestions); titles.reserve(num_suggestions);
urls.reserve(num_suggestions); urls.reserve(num_suggestions);
for (const auto& suggestion : current_suggestions_) { for (const auto& suggestion : current_suggestions_) {
titles.push_back(suggestion->title); titles.push_back(suggestion->title);
urls.push_back(suggestion->url.spec()); urls.push_back(suggestion->url.spec());
whitelist_icon_paths.push_back(suggestion->whitelist_icon_path.value());
} }
JNIEnv* env = AttachCurrentThread(); JNIEnv* env = AttachCurrentThread();
DCHECK_EQ(titles.size(), urls.size()); DCHECK_EQ(titles.size(), urls.size());
Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(),
ToJavaArrayOfStrings(env, urls).obj()); ToJavaArrayOfStrings(env, urls).obj(),
ToJavaArrayOfStrings(env, whitelist_icon_paths).obj());
} }
void MostVisitedSites::OnPopularSitesAvailable(bool success) { void MostVisitedSites::OnPopularSitesAvailable(bool success) {
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/android/scoped_java_ref.h" #include "base/android/scoped_java_ref.h"
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/files/file_path.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
...@@ -85,19 +86,14 @@ class MostVisitedSites : public history::TopSitesObserver, ...@@ -85,19 +86,14 @@ class MostVisitedSites : public history::TopSitesObserver,
base::string16 title; base::string16 title;
GURL url; GURL url;
MostVisitedSource source; MostVisitedSource source;
// Only valid for source == WHITELIST (empty otherwise).
base::FilePath whitelist_icon_path;
// Only valid for source == SUGGESTIONS_SERVICE (-1 otherwise). // Only valid for source == SUGGESTIONS_SERVICE (-1 otherwise).
int provider_index; int provider_index;
Suggestion(const base::string16& title, Suggestion();
const std::string& url,
MostVisitedSource source);
Suggestion(const base::string16& title,
const GURL& url,
MostVisitedSource source);
Suggestion(const base::string16& title,
const std::string& url,
MostVisitedSource source,
int provider_index);
~Suggestion(); ~Suggestion();
// Get the Histogram name associated with the source. // Get the Histogram name associated with the source.
......
...@@ -81,11 +81,14 @@ class MostVisitedSitesTest : public testing::Test { ...@@ -81,11 +81,14 @@ class MostVisitedSitesTest : public testing::Test {
const TitleURL& title_url, const TitleURL& title_url,
bool is_personal, bool is_personal,
bool whitelist) { bool whitelist) {
return make_scoped_ptr(new MostVisitedSites::Suggestion( scoped_ptr<MostVisitedSites::Suggestion> suggestion =
title_url.title, title_url.url, make_scoped_ptr(new MostVisitedSites::Suggestion());
whitelist ? MostVisitedSites::WHITELIST suggestion->title = title_url.title;
: (is_personal ? MostVisitedSites::TOP_SITES suggestion->url = GURL(title_url.url);
: MostVisitedSites::POPULAR))); suggestion->source = whitelist ? MostVisitedSites::WHITELIST
: (is_personal ? MostVisitedSites::TOP_SITES
: MostVisitedSites::POPULAR);
return suggestion;
} }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment