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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/ntp/most_visited_sites_bridge.h" 5 #include "chrome/browser/android/ntp/most_visited_sites_bridge.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_array.h" 10 #include "base/android/jni_array.h"
(...skipping 19 matching lines...) Expand all
30 using base::android::ToJavaArrayOfStrings; 30 using base::android::ToJavaArrayOfStrings;
31 using base::android::ToJavaIntArray; 31 using base::android::ToJavaIntArray;
32 using ntp_tiles::MostVisitedSites; 32 using ntp_tiles::MostVisitedSites;
33 using ntp_tiles::NTPTileSource; 33 using ntp_tiles::NTPTileSource;
34 using ntp_tiles::NTPTilesVector; 34 using ntp_tiles::NTPTilesVector;
35 using ntp_tiles::metrics::MostVisitedTileType; 35 using ntp_tiles::metrics::MostVisitedTileType;
36 using ntp_tiles::metrics::TileImpression; 36 using ntp_tiles::metrics::TileImpression;
37 37
38 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer { 38 class MostVisitedSitesBridge::JavaObserver : public MostVisitedSites::Observer {
39 public: 39 public:
40 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj); 40 JavaObserver(JNIEnv* env, const JavaParamRef<jobject>& obj, int num_sites);
41 41
42 void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override; 42 void OnMostVisitedURLsAvailable(const NTPTilesVector& tiles) override;
43 43
44 void OnIconMadeAvailable(const GURL& site_url) override; 44 void OnIconMadeAvailable(const GURL& site_url) override;
45 45
46 private: 46 private:
47 ScopedJavaGlobalRef<jobject> observer_; 47 ScopedJavaGlobalRef<jobject> observer_;
48 const int num_sites_;
48 49
49 DISALLOW_COPY_AND_ASSIGN(JavaObserver); 50 DISALLOW_COPY_AND_ASSIGN(JavaObserver);
50 }; 51 };
51 52
52 MostVisitedSitesBridge::JavaObserver::JavaObserver( 53 MostVisitedSitesBridge::JavaObserver::JavaObserver(
53 JNIEnv* env, 54 JNIEnv* env,
54 const JavaParamRef<jobject>& obj) 55 const JavaParamRef<jobject>& obj,
55 : observer_(env, obj) {} 56 int num_sites)
57 : observer_(env, obj), num_sites_(num_sites) {}
56 58
57 void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable( 59 void MostVisitedSitesBridge::JavaObserver::OnMostVisitedURLsAvailable(
58 const NTPTilesVector& tiles) { 60 const NTPTilesVector& tiles) {
59 JNIEnv* env = AttachCurrentThread(); 61 JNIEnv* env = AttachCurrentThread();
60 std::vector<base::string16> titles; 62 std::vector<base::string16> titles;
61 std::vector<std::string> urls; 63 std::vector<std::string> urls;
62 std::vector<std::string> whitelist_icon_paths; 64 std::vector<std::string> whitelist_icon_paths;
63 std::vector<int> sources; 65 std::vector<int> sources;
64 66
65 titles.reserve(tiles.size()); 67 titles.reserve(tiles.size());
66 urls.reserve(tiles.size()); 68 urls.reserve(tiles.size());
67 whitelist_icon_paths.reserve(tiles.size()); 69 whitelist_icon_paths.reserve(tiles.size());
68 sources.reserve(tiles.size()); 70 sources.reserve(tiles.size());
69 for (const auto& tile : tiles) { 71 for (const auto& tile : tiles) {
72 if (static_cast<int>(titles.size()) >= num_sites_)
73 break;
70 titles.emplace_back(tile.title); 74 titles.emplace_back(tile.title);
71 urls.emplace_back(tile.url.spec()); 75 urls.emplace_back(tile.url.spec());
72 whitelist_icon_paths.emplace_back(tile.whitelist_icon_path.value()); 76 whitelist_icon_paths.emplace_back(tile.whitelist_icon_path.value());
73 sources.emplace_back(static_cast<int>(tile.source)); 77 sources.emplace_back(static_cast<int>(tile.source));
74 } 78 }
75 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable( 79 Java_MostVisitedURLsObserver_onMostVisitedURLsAvailable(
76 env, observer_, ToJavaArrayOfStrings(env, titles), 80 env, observer_, ToJavaArrayOfStrings(env, titles),
77 ToJavaArrayOfStrings(env, urls), 81 ToJavaArrayOfStrings(env, urls),
78 ToJavaArrayOfStrings(env, whitelist_icon_paths), 82 ToJavaArrayOfStrings(env, whitelist_icon_paths),
79 ToJavaIntArray(env, sources)); 83 ToJavaIntArray(env, sources));
80 } 84 }
81 85
82 void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable( 86 void MostVisitedSitesBridge::JavaObserver::OnIconMadeAvailable(
83 const GURL& site_url) { 87 const GURL& site_url) {
88 // Note that this implementation doesn't honor num_sites_, so client code is
89 // expected to handle well the case where the URL doesn't match any known URL.
84 JNIEnv* env = AttachCurrentThread(); 90 JNIEnv* env = AttachCurrentThread();
85 Java_MostVisitedURLsObserver_onIconMadeAvailable( 91 Java_MostVisitedURLsObserver_onIconMadeAvailable(
86 env, observer_, ConvertUTF8ToJavaString(env, site_url.spec())); 92 env, observer_, ConvertUTF8ToJavaString(env, site_url.spec()));
87 } 93 }
88 94
89 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile) 95 MostVisitedSitesBridge::MostVisitedSitesBridge(Profile* profile)
90 : most_visited_(ChromeMostVisitedSitesFactory::NewForProfile(profile)) { 96 : most_visited_(ChromeMostVisitedSitesFactory::NewForProfile(profile)) {
91 // Register the thumbnails debugging page. 97 // Register the thumbnails debugging page.
92 // TODO(sfiera): find thumbnails a home. They don't belong here. 98 // TODO(sfiera): find thumbnails a home. They don't belong here.
93 content::URLDataSource::Add(profile, new ThumbnailListSource(profile)); 99 content::URLDataSource::Add(profile, new ThumbnailListSource(profile));
94 DCHECK(!profile->IsOffTheRecord()); 100 DCHECK(!profile->IsOffTheRecord());
95 } 101 }
96 102
97 MostVisitedSitesBridge::~MostVisitedSitesBridge() {} 103 MostVisitedSitesBridge::~MostVisitedSitesBridge() {
104 if (java_observer_)
105 most_visited_->RemoveObserver(java_observer_.get());
106 }
98 107
99 void MostVisitedSitesBridge::Destroy( 108 void MostVisitedSitesBridge::Destroy(
100 JNIEnv* env, const JavaParamRef<jobject>& obj) { 109 JNIEnv* env, const JavaParamRef<jobject>& obj) {
101 delete this; 110 delete this;
102 } 111 }
103 112
104 void MostVisitedSitesBridge::SetMostVisitedURLsObserver( 113 void MostVisitedSitesBridge::SetMostVisitedURLsObserver(
105 JNIEnv* env, 114 JNIEnv* env,
106 const JavaParamRef<jobject>& obj, 115 const JavaParamRef<jobject>& obj,
107 const JavaParamRef<jobject>& j_observer, 116 const JavaParamRef<jobject>& j_observer,
108 jint num_sites) { 117 jint num_sites) {
109 java_observer_.reset(new JavaObserver(env, j_observer)); 118 if (java_observer_)
110 most_visited_->SetMostVisitedURLsObserver(java_observer_.get(), num_sites); 119 most_visited_->RemoveObserver(java_observer_.get());
120
121 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
122 most_visited_->AddObserver(java_observer_.get());
123 most_visited_->Refresh();
111 } 124 }
112 125
113 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl( 126 void MostVisitedSitesBridge::AddOrRemoveBlacklistedUrl(
114 JNIEnv* env, 127 JNIEnv* env,
115 const JavaParamRef<jobject>& obj, 128 const JavaParamRef<jobject>& obj,
116 const JavaParamRef<jstring>& j_url, 129 const JavaParamRef<jstring>& j_url,
117 jboolean add_url) { 130 jboolean add_url) {
118 GURL url(ConvertJavaStringToUTF8(env, j_url)); 131 GURL url(ConvertJavaStringToUTF8(env, j_url));
119 most_visited_->AddOrRemoveBlacklistedUrl(url, add_url); 132 most_visited_->AddOrRemoveBlacklistedUrl(url, add_url);
120 } 133 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 } 178 }
166 179
167 static jlong Init(JNIEnv* env, 180 static jlong Init(JNIEnv* env,
168 const JavaParamRef<jobject>& obj, 181 const JavaParamRef<jobject>& obj,
169 const JavaParamRef<jobject>& jprofile) { 182 const JavaParamRef<jobject>& jprofile) {
170 MostVisitedSitesBridge* most_visited_sites = 183 MostVisitedSitesBridge* most_visited_sites =
171 new MostVisitedSitesBridge( 184 new MostVisitedSitesBridge(
172 ProfileAndroid::FromProfileAndroid(jprofile)); 185 ProfileAndroid::FromProfileAndroid(jprofile));
173 return reinterpret_cast<intptr_t>(most_visited_sites); 186 return reinterpret_cast<intptr_t>(most_visited_sites);
174 } 187 }
OLDNEW
« 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