blob: 3f389b30e69a3a0ba2d3df9c18e1d810b6f1f555 [file] [log] [blame]
// Copyright 2019 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/android/send_tab_to_self/send_tab_to_self_android_bridge.h"
#include <string>
#include <vector>
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/time/time.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_android.h"
#include "chrome/browser/sync/send_tab_to_self_sync_service_factory.h"
#include "components/send_tab_to_self/send_tab_to_self_entry.h"
#include "components/send_tab_to_self/send_tab_to_self_model.h"
#include "components/send_tab_to_self/send_tab_to_self_sync_service.h"
#include "jni/SendTabToSelfAndroidBridge_jni.h"
#include "jni/SendTabToSelfEntry_jni.h"
#include "url/gurl.h"
using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::JavaParamRef;
using base::android::JavaRef;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
namespace send_tab_to_self {
namespace {
ScopedJavaLocalRef<jobject> CreateJavaSendTabToSelfEntry(
JNIEnv* env,
const SendTabToSelfEntry* entry) {
return Java_SendTabToSelfEntry_createSendTabToSelfEntry(
env, ConvertUTF8ToJavaString(env, entry->GetGUID()),
ConvertUTF8ToJavaString(env, entry->GetURL().spec()),
ConvertUTF8ToJavaString(env, entry->GetTitle()),
entry->GetSharedTime().ToJavaTime(),
entry->GetOriginalNavigationTime().ToJavaTime(),
ConvertUTF8ToJavaString(env, entry->GetDeviceName()));
}
} // namespace
SendTabToSelfAndroidBridge::SendTabToSelfAndroidBridge(
JNIEnv* env,
const JavaRef<jobject>& obj,
const JavaRef<jobject>& j_profile)
: send_tab_to_self_model_(nullptr), weak_java_ref_(env, obj) {
Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile);
send_tab_to_self_model_ = SendTabToSelfSyncServiceFactory::GetInstance()
->GetForProfile(profile)
->GetSendTabToSelfModel();
}
static jlong JNI_SendTabToSelfAndroidBridge_Init(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& j_profile) {
SendTabToSelfAndroidBridge* send_tab_to_self_android_bridge =
new SendTabToSelfAndroidBridge(env, obj, j_profile);
return reinterpret_cast<intptr_t>(send_tab_to_self_android_bridge);
}
void SendTabToSelfAndroidBridge::Destroy(JNIEnv*,
const JavaParamRef<jobject>&) {
delete this;
}
void SendTabToSelfAndroidBridge::GetAllGuids(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& j_guid_list_obj) {
// TODO(tgupta): Check that the model is loaded
// if (!send_tab_to_self_model_->loaded()())
// return;
std::vector<std::string> all_ids = send_tab_to_self_model_->GetAllGuids();
for (std::vector<std::string>::iterator it = all_ids.begin();
it != all_ids.end(); ++it) {
ScopedJavaLocalRef<jstring> j_guid = ConvertUTF8ToJavaString(env, *it);
Java_SendTabToSelfAndroidBridge_addToGuidList(env, j_guid_list_obj, j_guid);
}
}
void SendTabToSelfAndroidBridge::DeleteAllEntries(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
send_tab_to_self_model_->DeleteAllEntries();
}
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::AddEntry(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& j_url,
const JavaParamRef<jstring>& j_title,
jlong j_navigation_time) {
const std::string url = ConvertJavaStringToUTF8(env, j_url);
const std::string title = ConvertJavaStringToUTF8(env, j_title);
const SendTabToSelfEntry* persisted_entry = send_tab_to_self_model_->AddEntry(
GURL(url), title, base::Time::FromJavaTime(j_navigation_time));
if (persisted_entry == nullptr) {
return nullptr;
}
return CreateJavaSendTabToSelfEntry(env, persisted_entry);
}
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::GetEntryByGUID(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& j_guid) {
const std::string guid = ConvertJavaStringToUTF8(env, j_guid);
const SendTabToSelfEntry* found_entry =
send_tab_to_self_model_->GetEntryByGUID(guid);
if (found_entry == nullptr) {
return nullptr;
}
return CreateJavaSendTabToSelfEntry(env, found_entry);
}
} // namespace send_tab_to_self