Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(143)

Unified Diff: chrome/browser/android/ntp/most_visited_sites_bridge.cc

Issue 2619993002: ntp_tiles: Migrate to multi-observer model
Patch Set: Fixed build. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/search/instant_service.cc » ('j') | chrome/browser/search/instant_service.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/android/ntp/most_visited_sites_bridge.cc
diff --git a/chrome/browser/android/ntp/most_visited_sites_bridge.cc b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
index 4f3538763c856e0fd6bf336958b1dab6d40b8dcd..386219084e346548f0747a99213e2ac2ef14160b 100644
--- a/chrome/browser/android/ntp/most_visited_sites_bridge.cc
+++ b/chrome/browser/android/ntp/most_visited_sites_bridge.cc
@@ -37,7 +37,7 @@ using ntp_tiles::metrics::TileImpression;
class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer {
public:
- JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj);
+ JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj, int num_sites);
void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override;
@@ -45,14 +45,16 @@ class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer {
private:
ScopedJavaGlobalRef<jobject> observer_;
+ const int num_sites_;
DISALLOW_COPY_AND_ASSIGN(JavaObserver);
};
MostVisitedSitesBridge::JavaObserver::JavaObserver(
JNIEnv* env,
- const JavaParamRef<jobject>& obj)
- : observer_(env, obj) {}
+ const JavaParamRef<jobject>& obj,
+ int num_sites)
+ : observer_(env, obj), num_sites_(num_sites) {}
void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable(
const NTPTilesVector& tiles) {
@@ -67,6 +69,8 @@ void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable(
whitelist_icon_paths.reserve(tiles.size());
sources.reserve(tiles.size());
for (const auto& tile : tiles) {
+ if (static_cast<int>(titles.size()) >= num_sites_)
+ break;
titles.emplace_back(tile.title);
urls.emplace_back(tile.url.spec());
whitelist_icon_paths.emplace_back(tile.whitelist_icon_path.value());
@@ -81,6 +85,8 @@ void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable(
void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable(
const GURL& site_url) {
+ // Note that this implementation doesn't honor num_sites_, so client code is
+ // expected to handle well the case where the URL doesn't match any known URL.
JNIEnv* env = AttachCurrentThread();
Java_MostVisitedURLsObserver_onIconMadeAvailable(
env, observer_, ConvertUTF8ToJavaString(env, site_url.spec()));
@@ -94,7 +100,10 @@ MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile)
DCHECK(!profile->IsOffTheRecord());
}
-MostVisitedSitesBridge::~MostVisitedSitesBridge() {}
+MostVisitedSitesBridge::~MostVisitedSitesBridge() {
+ if (java_observer_)
+ most_visited_->RemoveObserver(java_observer_.get());
+}
void MostVisitedSitesBridge::Destroy(
JNIEnv* env, const JavaParamRef<jobject>& obj) {
@@ -106,8 +115,12 @@ void MostVisitedSitesBridge::SetMostVisitedURLsObserver(
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& j_observer,
jint num_sites) {
- java_observer_.reset(new JavaObserver(env, j_observer));
- most_visited_->SetMostVisitedURLsObserver(java_observer_.get(), num_sites);
+ if (java_observer_)
+ most_visited_->RemoveObserver(java_observer_.get());
+
+ java_observer_.reset(new JavaObserver(env, j_observer, num_sites));
sfiera 2017/01/18 09:58:33 Can we change JavaObserver to call {Add,Remove}Obs
+ most_visited_->AddObserver(java_observer_.get());
+ most_visited_->Refresh();
}
void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl(
« no previous file with comments | « no previous file | chrome/browser/search/instant_service.cc » ('j') | chrome/browser/search/instant_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698