blob: 9dcd1896f562b7abd913dc32d987314adb1c4d5c [file] [log] [blame]
// Copyright 2024 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/data_sharing/internal/android/data_sharing_service_android.h"
#include <memory>
#include "base/android/scoped_java_ref.h"
#include "components/data_sharing/internal/android/data_sharing_network_loader_android.h"
#include "components/data_sharing/internal/jni_headers/DataSharingServiceImpl_jni.h"
#include "components/data_sharing/public/data_sharing_service.h"
using base::android::AttachCurrentThread;
using base::android::JavaParamRef;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
namespace data_sharing {
namespace {
const char kDataSharingServiceBridgeKey[] = "data_sharing_service_bridge";
} // namespace
// This function is declared in data_sharing_service.h and
// should be linked in to any binary using
// DataSharingService::GetJavaObject.
// static
ScopedJavaLocalRef<jobject> DataSharingService::GetJavaObject(
DataSharingService* service) {
if (!service->GetUserData(kDataSharingServiceBridgeKey)) {
service->SetUserData(kDataSharingServiceBridgeKey,
std::make_unique<DataSharingServiceAndroid>(service));
}
DataSharingServiceAndroid* bridge = static_cast<DataSharingServiceAndroid*>(
service->GetUserData(kDataSharingServiceBridgeKey));
return bridge->GetJavaObject();
}
DataSharingServiceAndroid::DataSharingServiceAndroid(
DataSharingService* data_sharing_service)
: data_sharing_service_(data_sharing_service),
network_loader_(std::make_unique<DataSharingNetworkLoaderAndroid>(
data_sharing_service->GetDataSharingNetworkLoader())) {
DCHECK(data_sharing_service_);
JNIEnv* env = base::android::AttachCurrentThread();
java_obj_.Reset(env, Java_DataSharingServiceImpl_create(
env, reinterpret_cast<int64_t>(this))
.obj());
}
DataSharingServiceAndroid::~DataSharingServiceAndroid() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_DataSharingServiceImpl_clearNativePtr(env, java_obj_);
}
bool DataSharingServiceAndroid::IsEmptyService(
JNIEnv* env,
const JavaParamRef<jobject>& jcaller) {
return data_sharing_service_->IsEmptyService();
}
ScopedJavaLocalRef<jobject> DataSharingServiceAndroid::GetNetworkLoader(
JNIEnv* env) {
return network_loader_->GetJavaObject();
}
ScopedJavaLocalRef<jobject> DataSharingServiceAndroid::GetJavaObject() {
return ScopedJavaLocalRef<jobject>(java_obj_);
}
} // namespace data_sharing