| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/site_engagement/content/android/site_engagement_service_android.h" |
| |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| #include "components/site_engagement/content/site_engagement_score.h" |
| #include "components/site_engagement/content/site_engagement_service.h" |
| #include "content/public/browser/android/browser_context_handle.h" |
| #include "url/gurl.h" |
| |
| // Must come after all headers that specialize FromJniType() / ToJniType(). |
| #include "components/site_engagement/content/android/jni_headers/SiteEngagementService_jni.h" |
| |
| namespace site_engagement { |
| |
| using base::android::JavaParamRef; |
| |
| // static |
| const base::android::ScopedJavaGlobalRef<jobject>& |
| SiteEngagementServiceAndroid::GetOrCreate(JNIEnv* env, |
| SiteEngagementService* service) { |
| SiteEngagementServiceAndroid* android_service = service->GetAndroidService(); |
| if (!android_service) { |
| service->SetAndroidService( |
| std::make_unique<SiteEngagementServiceAndroid>(env, service)); |
| android_service = service->GetAndroidService(); |
| } |
| |
| return android_service->java_service_; |
| } |
| |
| SiteEngagementServiceAndroid::SiteEngagementServiceAndroid( |
| JNIEnv* env, |
| SiteEngagementService* service) |
| : service_(service) { |
| java_service_.Reset(Java_SiteEngagementService_create( |
| env, reinterpret_cast<uintptr_t>(this))); |
| } |
| |
| SiteEngagementServiceAndroid::~SiteEngagementServiceAndroid() { |
| Java_SiteEngagementService_onNativeDestroyed( |
| base::android::AttachCurrentThread(), java_service_); |
| java_service_.Reset(); |
| } |
| |
| double SiteEngagementServiceAndroid::GetScore( |
| JNIEnv* env, |
| const JavaParamRef<jstring>& jurl) const { |
| if (!jurl) |
| return 0; |
| |
| return service_->GetScore( |
| GURL(base::android::ConvertJavaStringToUTF16(env, jurl))); |
| } |
| |
| void SiteEngagementServiceAndroid::ResetBaseScoreForURL( |
| JNIEnv* env, |
| const JavaParamRef<jstring>& jurl, |
| double score) { |
| if (jurl) { |
| service_->ResetBaseScoreForURL( |
| GURL(base::android::ConvertJavaStringToUTF16(env, jurl)), score); |
| } |
| } |
| |
| void JNI_SiteEngagementService_SetParamValuesForTesting(JNIEnv* env) { |
| SiteEngagementScore::SetParamValuesForTesting(); |
| } |
| |
| base::android::ScopedJavaLocalRef<jobject> |
| JNI_SiteEngagementService_SiteEngagementServiceForBrowserContext( |
| JNIEnv* env, |
| const base::android::JavaParamRef<jobject>& jhandle) { |
| SiteEngagementService* service = SiteEngagementService::Get( |
| content::BrowserContextFromJavaHandle(jhandle)); |
| DCHECK(service); |
| |
| return base::android::ScopedJavaLocalRef<jobject>( |
| SiteEngagementServiceAndroid::GetOrCreate(env, service)); |
| } |
| |
| } // namespace site_engagement |