blob: 34458ca7f074961814fed6e708f7ac4318dbc04a [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/engagement/site_engagement_service_android.h"
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "chrome/browser/engagement/site_engagement_score.h"
#include "chrome/browser/profiles/profile_android.h"
#include "jni/SiteEngagementService_jni.h"
#include "url/gurl.h"
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<jobject>& caller,
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<jobject>& caller,
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_SiteEngagementServiceForProfile(
JNIEnv* env,
const JavaParamRef<jobject>& jprofile) {
Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile);
SiteEngagementService* service = SiteEngagementService::Get(profile);
DCHECK(service);
return base::android::ScopedJavaLocalRef<jobject>(
SiteEngagementServiceAndroid::GetOrCreate(env, service));
}