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

Side by Side Diff: chrome/browser/android/ntp/ntp_snippets_bridge.cc

Issue 2781583002: [Content suggestions] Add a function to the service API to fetch favicons (Closed)
Patch Set: Fix compilation #2 Created 3 years, 8 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/ntp_snippets_bridge.h" 5 #include "chrome/browser/android/ntp/ntp_snippets_bridge.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 profile, ServiceAccessType::EXPLICIT_ACCESS); 168 profile, ServiceAccessType::EXPLICIT_ACCESS);
169 content_suggestions_service_observer_.Add(content_suggestions_service_); 169 content_suggestions_service_observer_.Add(content_suggestions_service_);
170 } 170 }
171 171
172 void NTPSnippetsBridge::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { 172 void NTPSnippetsBridge::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) {
173 delete this; 173 delete this;
174 } 174 }
175 175
176 ScopedJavaLocalRef<jintArray> NTPSnippetsBridge::GetCategories( 176 ScopedJavaLocalRef<jintArray> NTPSnippetsBridge::GetCategories(
177 JNIEnv* env, 177 JNIEnv* env,
178 const base::android::JavaParamRef<jobject>& obj) { 178 const JavaParamRef<jobject>& obj) {
179 std::vector<int> category_ids; 179 std::vector<int> category_ids;
180 for (Category category : content_suggestions_service_->GetCategories()) { 180 for (Category category : content_suggestions_service_->GetCategories()) {
181 category_ids.push_back(category.id()); 181 category_ids.push_back(category.id());
182 } 182 }
183 return ToJavaIntArray(env, category_ids); 183 return ToJavaIntArray(env, category_ids);
184 } 184 }
185 185
186 int NTPSnippetsBridge::GetCategoryStatus(JNIEnv* env, 186 int NTPSnippetsBridge::GetCategoryStatus(JNIEnv* env,
187 const JavaParamRef<jobject>& obj, 187 const JavaParamRef<jobject>& obj,
188 jint j_category_id) { 188 jint j_category_id) {
189 return static_cast<int>(content_suggestions_service_->GetCategoryStatus( 189 return static_cast<int>(content_suggestions_service_->GetCategoryStatus(
190 Category::FromIDValue(j_category_id))); 190 Category::FromIDValue(j_category_id)));
191 } 191 }
192 192
193 base::android::ScopedJavaLocalRef<jobject> NTPSnippetsBridge::GetCategoryInfo( 193 ScopedJavaLocalRef<jobject> NTPSnippetsBridge::GetCategoryInfo(
194 JNIEnv* env, 194 JNIEnv* env,
195 const base::android::JavaParamRef<jobject>& obj, 195 const JavaParamRef<jobject>& obj,
196 jint j_category_id) { 196 jint j_category_id) {
197 base::Optional<CategoryInfo> info = 197 base::Optional<CategoryInfo> info =
198 content_suggestions_service_->GetCategoryInfo( 198 content_suggestions_service_->GetCategoryInfo(
199 Category::FromIDValue(j_category_id)); 199 Category::FromIDValue(j_category_id));
200 if (!info) { 200 if (!info) {
201 return base::android::ScopedJavaLocalRef<jobject>(env, nullptr); 201 return ScopedJavaLocalRef<jobject>(env, nullptr);
202 } 202 }
203 return Java_SnippetsBridge_createSuggestionsCategoryInfo( 203 return Java_SnippetsBridge_createSuggestionsCategoryInfo(
204 env, j_category_id, ConvertUTF16ToJavaString(env, info->title()), 204 env, j_category_id, ConvertUTF16ToJavaString(env, info->title()),
205 static_cast<int>(info->card_layout()), 205 static_cast<int>(info->card_layout()),
206 static_cast<int>(info->additional_action()), info->show_if_empty(), 206 static_cast<int>(info->additional_action()), info->show_if_empty(),
207 ConvertUTF16ToJavaString(env, info->no_suggestions_message())); 207 ConvertUTF16ToJavaString(env, info->no_suggestions_message()));
208 } 208 }
209 209
210 ScopedJavaLocalRef<jobject> NTPSnippetsBridge::GetSuggestionsForCategory( 210 ScopedJavaLocalRef<jobject> NTPSnippetsBridge::GetSuggestionsForCategory(
211 JNIEnv* env, 211 JNIEnv* env,
212 const base::android::JavaParamRef<jobject>& obj, 212 const JavaParamRef<jobject>& obj,
213 jint j_category_id) { 213 jint j_category_id) {
214 Category category = Category::FromIDValue(j_category_id); 214 Category category = Category::FromIDValue(j_category_id);
215 return ToJavaSuggestionList( 215 return ToJavaSuggestionList(
216 env, category, 216 env, category,
217 content_suggestions_service_->GetSuggestionsForCategory(category)); 217 content_suggestions_service_->GetSuggestionsForCategory(category));
218 } 218 }
219 219
220 void NTPSnippetsBridge::FetchSuggestionImage( 220 void NTPSnippetsBridge::FetchSuggestionImage(
221 JNIEnv* env, 221 JNIEnv* env,
222 const JavaParamRef<jobject>& obj, 222 const JavaParamRef<jobject>& obj,
223 jint j_category_id, 223 jint j_category_id,
224 const JavaParamRef<jstring>& id_within_category, 224 const JavaParamRef<jstring>& id_within_category,
225 const JavaParamRef<jobject>& j_callback) { 225 const JavaParamRef<jobject>& j_callback) {
226 base::android::ScopedJavaGlobalRef<jobject> callback(j_callback); 226 ScopedJavaGlobalRef<jobject> callback(j_callback);
227 content_suggestions_service_->FetchSuggestionImage( 227 content_suggestions_service_->FetchSuggestionImage(
228 ContentSuggestion::ID(Category::FromIDValue(j_category_id), 228 ContentSuggestion::ID(Category::FromIDValue(j_category_id),
229 ConvertJavaStringToUTF8(env, id_within_category)), 229 ConvertJavaStringToUTF8(env, id_within_category)),
230 base::Bind(&NTPSnippetsBridge::OnImageFetched, 230 base::Bind(&NTPSnippetsBridge::OnImageFetched,
231 weak_ptr_factory_.GetWeakPtr(), callback)); 231 weak_ptr_factory_.GetWeakPtr(), callback));
232 } 232 }
233 233
234 void NTPSnippetsBridge::FetchSuggestionFavicon(
235 JNIEnv* env,
236 const JavaParamRef<jobject>& obj,
237 jint j_category_id,
238 const JavaParamRef<jstring>& id_within_category,
239 jint j_minimum_size_px,
240 jint j_desired_size_px,
241 const JavaParamRef<jobject>& j_callback) {
242 ScopedJavaGlobalRef<jobject> callback(j_callback);
243 content_suggestions_service_->FetchSuggestionFavicon(
244 ContentSuggestion::ID(Category::FromIDValue(j_category_id),
245 ConvertJavaStringToUTF8(env, id_within_category)),
246 j_minimum_size_px, j_desired_size_px,
247 base::Bind(&NTPSnippetsBridge::OnImageFetched,
248 weak_ptr_factory_.GetWeakPtr(), callback));
249 }
250
234 void NTPSnippetsBridge::Fetch( 251 void NTPSnippetsBridge::Fetch(
235 JNIEnv* env, 252 JNIEnv* env,
236 const JavaParamRef<jobject>& obj, 253 const JavaParamRef<jobject>& obj,
237 jint j_category_id, 254 jint j_category_id,
238 const JavaParamRef<jobjectArray>& j_displayed_suggestions) { 255 const JavaParamRef<jobjectArray>& j_displayed_suggestions) {
239 std::vector<std::string> known_suggestion_ids; 256 std::vector<std::string> known_suggestion_ids;
240 AppendJavaStringArrayToStringVector(env, j_displayed_suggestions, 257 AppendJavaStringArrayToStringVector(env, j_displayed_suggestions,
241 &known_suggestion_ids); 258 &known_suggestion_ids);
242 259
243 Category category = Category::FromIDValue(j_category_id); 260 Category category = Category::FromIDValue(j_category_id);
244 content_suggestions_service_->Fetch( 261 content_suggestions_service_->Fetch(
245 category, 262 category,
246 std::set<std::string>(known_suggestion_ids.begin(), 263 std::set<std::string>(known_suggestion_ids.begin(),
247 known_suggestion_ids.end()), 264 known_suggestion_ids.end()),
248 base::Bind(&NTPSnippetsBridge::OnSuggestionsFetched, 265 base::Bind(&NTPSnippetsBridge::OnSuggestionsFetched,
249 weak_ptr_factory_.GetWeakPtr(), category)); 266 weak_ptr_factory_.GetWeakPtr(), category));
250 } 267 }
251 268
252 void NTPSnippetsBridge::ReloadSuggestions( 269 void NTPSnippetsBridge::ReloadSuggestions(JNIEnv* env,
253 JNIEnv* env, 270 const JavaParamRef<jobject>& obj) {
254 const base::android::JavaParamRef<jobject>& obj) {
255 content_suggestions_service_->ReloadSuggestions(); 271 content_suggestions_service_->ReloadSuggestions();
256 } 272 }
257 273
258 void NTPSnippetsBridge::DismissSuggestion( 274 void NTPSnippetsBridge::DismissSuggestion(
259 JNIEnv* env, 275 JNIEnv* env,
260 const JavaParamRef<jobject>& obj, 276 const JavaParamRef<jobject>& obj,
261 const JavaParamRef<jstring>& jurl, 277 const JavaParamRef<jstring>& jurl,
262 jint global_position, 278 jint global_position,
263 jint j_category_id, 279 jint j_category_id,
264 jint position_in_category, 280 jint position_in_category,
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 void NTPSnippetsBridge::OnMoreButtonClicked(JNIEnv* env, 400 void NTPSnippetsBridge::OnMoreButtonClicked(JNIEnv* env,
385 const JavaParamRef<jobject>& obj, 401 const JavaParamRef<jobject>& obj,
386 jint j_category_id, 402 jint j_category_id,
387 jint position) { 403 jint position) {
388 ntp_snippets::metrics::OnMoreButtonClicked( 404 ntp_snippets::metrics::OnMoreButtonClicked(
389 Category::FromIDValue(j_category_id), position); 405 Category::FromIDValue(j_category_id), position);
390 content_suggestions_service_->user_classifier()->OnEvent( 406 content_suggestions_service_->user_classifier()->OnEvent(
391 ntp_snippets::UserClassifier::Metric::SUGGESTIONS_USED); 407 ntp_snippets::UserClassifier::Metric::SUGGESTIONS_USED);
392 } 408 }
393 409
394 void NTPSnippetsBridge::OnNTPInitialized( 410 void NTPSnippetsBridge::OnNTPInitialized(JNIEnv* env,
395 JNIEnv* env, 411 const JavaParamRef<jobject>& obj) {
396 const base::android::JavaParamRef<jobject>& obj) {
397 ntp_snippets::RemoteSuggestionsScheduler* scheduler = 412 ntp_snippets::RemoteSuggestionsScheduler* scheduler =
398 GetRemoteSuggestionsScheduler(); 413 GetRemoteSuggestionsScheduler();
399 // Can be null if the feature has been disabled but the scheduler has not been 414 // Can be null if the feature has been disabled but the scheduler has not been
400 // unregistered yet. The next start should unregister it. 415 // unregistered yet. The next start should unregister it.
401 if (!scheduler) { 416 if (!scheduler) {
402 return; 417 return;
403 } 418 }
404 419
405 scheduler->OnNTPOpened(); 420 scheduler->OnNTPOpened();
406 } 421 }
407 422
408 void NTPSnippetsBridge::OnColdStart( 423 void NTPSnippetsBridge::OnColdStart(JNIEnv* env,
409 JNIEnv* env, 424 const JavaParamRef<jobject>& obj) {
410 const base::android::JavaParamRef<jobject>& obj) {
411 ntp_snippets::RemoteSuggestionsScheduler* scheduler = 425 ntp_snippets::RemoteSuggestionsScheduler* scheduler =
412 GetRemoteSuggestionsScheduler(); 426 GetRemoteSuggestionsScheduler();
413 // TODO(fhorschig): Remove guard when https://crbug.com/678556 is resolved. 427 // TODO(fhorschig): Remove guard when https://crbug.com/678556 is resolved.
414 if (!scheduler) { 428 if (!scheduler) {
415 return; 429 return;
416 } 430 }
417 scheduler->OnBrowserColdStart(); 431 scheduler->OnBrowserColdStart();
418 } 432 }
419 433
420 void NTPSnippetsBridge::OnActivityWarmResumed( 434 void NTPSnippetsBridge::OnActivityWarmResumed(
421 JNIEnv* env, 435 JNIEnv* env,
422 const base::android::JavaParamRef<jobject>& obj) { 436 const JavaParamRef<jobject>& obj) {
423 ntp_snippets::RemoteSuggestionsScheduler* scheduler = 437 ntp_snippets::RemoteSuggestionsScheduler* scheduler =
424 GetRemoteSuggestionsScheduler(); 438 GetRemoteSuggestionsScheduler();
425 // TODO(fhorschig): Remove guard when https://crbug.com/678556 is resolved. 439 // TODO(fhorschig): Remove guard when https://crbug.com/678556 is resolved.
426 if (!scheduler) { 440 if (!scheduler) {
427 return; 441 return;
428 } 442 }
429 scheduler->OnBrowserForegrounded(); 443 scheduler->OnBrowserForegrounded();
430 } 444 }
431 445
432 NTPSnippetsBridge::~NTPSnippetsBridge() {} 446 NTPSnippetsBridge::~NTPSnippetsBridge() {}
433 447
434 void NTPSnippetsBridge::OnNewSuggestions(Category category) { 448 void NTPSnippetsBridge::OnNewSuggestions(Category category) {
435 JNIEnv* env = base::android::AttachCurrentThread(); 449 JNIEnv* env = AttachCurrentThread();
436 Java_SnippetsBridge_onNewSuggestions(env, bridge_, 450 Java_SnippetsBridge_onNewSuggestions(env, bridge_,
437 static_cast<int>(category.id())); 451 static_cast<int>(category.id()));
438 } 452 }
439 453
440 void NTPSnippetsBridge::OnCategoryStatusChanged(Category category, 454 void NTPSnippetsBridge::OnCategoryStatusChanged(Category category,
441 CategoryStatus new_status) { 455 CategoryStatus new_status) {
442 JNIEnv* env = base::android::AttachCurrentThread(); 456 JNIEnv* env = AttachCurrentThread();
443 Java_SnippetsBridge_onCategoryStatusChanged(env, bridge_, 457 Java_SnippetsBridge_onCategoryStatusChanged(env, bridge_,
444 static_cast<int>(category.id()), 458 static_cast<int>(category.id()),
445 static_cast<int>(new_status)); 459 static_cast<int>(new_status));
446 } 460 }
447 461
448 void NTPSnippetsBridge::OnSuggestionInvalidated( 462 void NTPSnippetsBridge::OnSuggestionInvalidated(
449 const ContentSuggestion::ID& suggestion_id) { 463 const ContentSuggestion::ID& suggestion_id) {
450 JNIEnv* env = base::android::AttachCurrentThread(); 464 JNIEnv* env = AttachCurrentThread();
451 Java_SnippetsBridge_onSuggestionInvalidated( 465 Java_SnippetsBridge_onSuggestionInvalidated(
452 env, bridge_.obj(), static_cast<int>(suggestion_id.category().id()), 466 env, bridge_.obj(), static_cast<int>(suggestion_id.category().id()),
453 ConvertUTF8ToJavaString(env, suggestion_id.id_within_category()).obj()); 467 ConvertUTF8ToJavaString(env, suggestion_id.id_within_category()).obj());
454 } 468 }
455 469
456 void NTPSnippetsBridge::OnFullRefreshRequired() { 470 void NTPSnippetsBridge::OnFullRefreshRequired() {
457 JNIEnv* env = base::android::AttachCurrentThread(); 471 JNIEnv* env = AttachCurrentThread();
458 Java_SnippetsBridge_onFullRefreshRequired(env, bridge_.obj()); 472 Java_SnippetsBridge_onFullRefreshRequired(env, bridge_.obj());
459 } 473 }
460 474
461 void NTPSnippetsBridge::ContentSuggestionsServiceShutdown() { 475 void NTPSnippetsBridge::ContentSuggestionsServiceShutdown() {
462 bridge_.Reset(); 476 bridge_.Reset();
463 content_suggestions_service_observer_.Remove(content_suggestions_service_); 477 content_suggestions_service_observer_.Remove(content_suggestions_service_);
464 } 478 }
465 479
466 void NTPSnippetsBridge::OnImageFetched(ScopedJavaGlobalRef<jobject> callback, 480 void NTPSnippetsBridge::OnImageFetched(ScopedJavaGlobalRef<jobject> callback,
467 const gfx::Image& image) { 481 const gfx::Image& image) {
468 ScopedJavaLocalRef<jobject> j_bitmap; 482 ScopedJavaLocalRef<jobject> j_bitmap;
469 if (!image.IsEmpty()) { 483 if (!image.IsEmpty()) {
470 j_bitmap = gfx::ConvertToJavaBitmap(image.ToSkBitmap()); 484 j_bitmap = gfx::ConvertToJavaBitmap(image.ToSkBitmap());
471 } 485 }
472 base::android::RunCallbackAndroid(callback, j_bitmap); 486 RunCallbackAndroid(callback, j_bitmap);
473 } 487 }
474 488
475 void NTPSnippetsBridge::OnSuggestionsFetched( 489 void NTPSnippetsBridge::OnSuggestionsFetched(
476 Category category, 490 Category category,
477 ntp_snippets::Status status, 491 ntp_snippets::Status status,
478 std::vector<ContentSuggestion> suggestions) { 492 std::vector<ContentSuggestion> suggestions) {
479 // TODO(fhorschig, dgn): Allow refetch or show notification acc. to status. 493 // TODO(fhorschig, dgn): Allow refetch or show notification acc. to status.
480 JNIEnv* env = AttachCurrentThread(); 494 JNIEnv* env = AttachCurrentThread();
481 Java_SnippetsBridge_onMoreSuggestions( 495 Java_SnippetsBridge_onMoreSuggestions(
482 env, bridge_, category.id(), 496 env, bridge_, category.id(),
483 ToJavaSuggestionList(env, category, suggestions)); 497 ToJavaSuggestionList(env, category, suggestions));
484 } 498 }
485 499
486 // static 500 // static
487 bool NTPSnippetsBridge::Register(JNIEnv* env) { 501 bool NTPSnippetsBridge::Register(JNIEnv* env) {
488 return RegisterNativesImpl(env); 502 return RegisterNativesImpl(env);
489 } 503 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698