| OLD | NEW |
| 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 | 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" |
| 11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
| 12 #include "base/android/scoped_java_ref.h" | 12 #include "base/android/scoped_java_ref.h" |
| 13 #include "chrome/browser/ntp_snippets/ntp_snippets_service_factory.h" | 13 #include "chrome/browser/ntp_snippets/ntp_snippets_service_factory.h" |
| 14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
| 15 #include "chrome/browser/profiles/profile_android.h" | 15 #include "chrome/browser/profiles/profile_android.h" |
| 16 #include "components/ntp_snippets/ntp_snippet.h" | 16 #include "components/ntp_snippets/ntp_snippet.h" |
| 17 #include "components/ntp_snippets/ntp_snippets_service.h" | 17 #include "components/ntp_snippets/ntp_snippets_service.h" |
| 18 #include "jni/SnippetsBridge_jni.h" | 18 #include "jni/SnippetsBridge_jni.h" |
| 19 | 19 |
| 20 using base::android::ConvertJavaStringToUTF8; | 20 using base::android::ConvertJavaStringToUTF8; |
| 21 using base::android::JavaParamRef; | 21 using base::android::JavaParamRef; |
| 22 using base::android::ToJavaArrayOfStrings; | 22 using base::android::ToJavaArrayOfStrings; |
| 23 using base::android::ToJavaLongArray; | 23 using base::android::ToJavaLongArray; |
| 24 using ntp_snippets::NTPSnippetsService; | |
| 25 using ntp_snippets::NTPSnippetsServiceObserver; | |
| 26 | 24 |
| 27 static jlong Init(JNIEnv* env, | 25 static jlong Init(JNIEnv* env, |
| 28 const JavaParamRef<jobject>& obj, | 26 const JavaParamRef<jobject>& obj, |
| 29 const JavaParamRef<jobject>& j_profile) { | 27 const JavaParamRef<jobject>& j_profile) { |
| 30 NTPSnippetsBridge* snippets_bridge = new NTPSnippetsBridge(env, j_profile); | 28 NTPSnippetsBridge* snippets_bridge = new NTPSnippetsBridge(env, j_profile); |
| 31 return reinterpret_cast<intptr_t>(snippets_bridge); | 29 return reinterpret_cast<intptr_t>(snippets_bridge); |
| 32 } | 30 } |
| 33 | 31 |
| 34 NTPSnippetsBridge::NTPSnippetsBridge(JNIEnv* env, | 32 NTPSnippetsBridge::NTPSnippetsBridge(JNIEnv* env, |
| 35 const JavaParamRef<jobject>& j_profile) | 33 const JavaParamRef<jobject>& j_profile) |
| 36 : snippet_service_observer_(this) { | 34 : snippet_service_observer_(this) { |
| 37 Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile); | 35 Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile); |
| 38 ntp_snippets_service_ = NTPSnippetsServiceFactory::GetForProfile(profile); | 36 ntp_snippets_service_ = NTPSnippetsServiceFactory::GetForProfile(profile); |
| 39 snippet_service_observer_.Add(ntp_snippets_service_); | |
| 40 } | 37 } |
| 41 | 38 |
| 42 void NTPSnippetsBridge::SetObserver(JNIEnv* env, | 39 void NTPSnippetsBridge::SetObserver(JNIEnv* env, |
| 43 const JavaParamRef<jobject>& obj, | 40 const JavaParamRef<jobject>& obj, |
| 44 const JavaParamRef<jobject>& j_observer) { | 41 const JavaParamRef<jobject>& j_observer) { |
| 45 observer_.Reset(env, j_observer); | 42 observer_.Reset(env, j_observer); |
| 46 NTPSnippetsServiceLoaded(ntp_snippets_service_); | 43 // This will call NTPSnippetsServiceLoaded. |
| 44 snippet_service_observer_.Add(ntp_snippets_service_); |
| 47 } | 45 } |
| 48 | 46 |
| 49 NTPSnippetsBridge::~NTPSnippetsBridge() {} | 47 NTPSnippetsBridge::~NTPSnippetsBridge() {} |
| 50 | 48 |
| 51 void NTPSnippetsBridge::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 49 void NTPSnippetsBridge::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 52 delete this; | 50 delete this; |
| 53 } | 51 } |
| 54 | 52 |
| 55 void NTPSnippetsBridge::DiscardSnippet(JNIEnv* env, | 53 void NTPSnippetsBridge::DiscardSnippet(JNIEnv* env, |
| 56 const JavaParamRef<jobject>& obj, | 54 const JavaParamRef<jobject>& obj, |
| 57 const JavaParamRef<jstring>& url) { | 55 const JavaParamRef<jstring>& url) { |
| 58 ntp_snippets_service_->DiscardSnippet( | 56 ntp_snippets_service_->DiscardSnippet( |
| 59 GURL(ConvertJavaStringToUTF8(env, url))); | 57 GURL(ConvertJavaStringToUTF8(env, url))); |
| 60 } | 58 } |
| 61 | 59 |
| 62 void NTPSnippetsBridge::NTPSnippetsServiceLoaded(NTPSnippetsService* service) { | 60 void NTPSnippetsBridge::NTPSnippetsServiceLoaded() { |
| 63 if (observer_.is_null()) | 61 DCHECK(!observer_.is_null()); |
| 64 return; | |
| 65 | 62 |
| 66 std::vector<std::string> titles; | 63 std::vector<std::string> titles; |
| 67 std::vector<std::string> urls; | 64 std::vector<std::string> urls; |
| 68 std::vector<std::string> thumbnail_urls; | 65 std::vector<std::string> thumbnail_urls; |
| 69 std::vector<std::string> snippets; | 66 std::vector<std::string> snippets; |
| 70 std::vector<int64_t> timestamps; | 67 std::vector<int64_t> timestamps; |
| 71 for (const ntp_snippets::NTPSnippet& snippet : *service) { | 68 for (const ntp_snippets::NTPSnippet& snippet : *ntp_snippets_service_) { |
| 72 titles.push_back(snippet.title()); | 69 titles.push_back(snippet.title()); |
| 73 urls.push_back(snippet.url().spec()); | 70 urls.push_back(snippet.url().spec()); |
| 74 thumbnail_urls.push_back(snippet.salient_image_url().spec()); | 71 thumbnail_urls.push_back(snippet.salient_image_url().spec()); |
| 75 snippets.push_back(snippet.snippet()); | 72 snippets.push_back(snippet.snippet()); |
| 76 timestamps.push_back(snippet.publish_date().ToJavaTime()); | 73 timestamps.push_back(snippet.publish_date().ToJavaTime()); |
| 77 } | 74 } |
| 78 | 75 |
| 79 JNIEnv* env = base::android::AttachCurrentThread(); | 76 JNIEnv* env = base::android::AttachCurrentThread(); |
| 80 Java_SnippetsBridge_onSnippetsAvailable( | 77 Java_SnippetsBridge_onSnippetsAvailable( |
| 81 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), | 78 env, observer_.obj(), ToJavaArrayOfStrings(env, titles).obj(), |
| 82 ToJavaArrayOfStrings(env, urls).obj(), | 79 ToJavaArrayOfStrings(env, urls).obj(), |
| 83 ToJavaArrayOfStrings(env, thumbnail_urls).obj(), | 80 ToJavaArrayOfStrings(env, thumbnail_urls).obj(), |
| 84 ToJavaArrayOfStrings(env, snippets).obj(), | 81 ToJavaArrayOfStrings(env, snippets).obj(), |
| 85 ToJavaLongArray(env, timestamps).obj()); | 82 ToJavaLongArray(env, timestamps).obj()); |
| 86 } | 83 } |
| 87 | 84 |
| 88 void NTPSnippetsBridge::NTPSnippetsServiceShutdown( | 85 void NTPSnippetsBridge::NTPSnippetsServiceShutdown() { |
| 89 NTPSnippetsService* service) { | |
| 90 observer_.Reset(); | 86 observer_.Reset(); |
| 91 snippet_service_observer_.Remove(ntp_snippets_service_); | 87 snippet_service_observer_.Remove(ntp_snippets_service_); |
| 92 } | 88 } |
| 93 | 89 |
| 94 // static | 90 // static |
| 95 bool NTPSnippetsBridge::Register(JNIEnv* env) { | 91 bool NTPSnippetsBridge::Register(JNIEnv* env) { |
| 96 return RegisterNativesImpl(env); | 92 return RegisterNativesImpl(env); |
| 97 } | 93 } |
| OLD | NEW |