blob: f5d6f43046658b919ace59401e4bbf9a7a60b0df [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/sync/test/integration/sync_test_utils_android.h"
#include <memory>
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/token_android.h"
#include "base/functional/callback.h"
#include "base/functional/callback_forward.h"
#include "base/logging.h"
#include "base/notreached.h"
#include "base/run_loop.h"
#include "base/task/thread_pool.h"
#include "base/test/bind.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/ui/android/tab_model/tab_model.h"
#include "chrome/browser/ui/android/tab_model/tab_model_jni_bridge.h"
#include "chrome/browser/ui/android/tab_model/tab_model_list.h"
#include "components/saved_tab_groups/public/android/tab_group_sync_conversions_bridge.h"
#include "components/saved_tab_groups/public/types.h"
#include "url/android/gurl_android.h"
#include "url/gurl.h"
// Must come after all headers that specialize FromJniType() / ToJniType().
#include "chrome/test/sync_integration_test_support_jni_headers/SyncTestSigninUtils_jni.h"
#include "chrome/test/sync_integration_test_support_jni_headers/SyncTestTabGroupHelpers_jni.h"
namespace sync_test_utils_android {
void SetUpAccountAndSignInForTesting() {
base::RunLoop run_loop;
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()}, base::BindLambdaForTesting([&]() {
Java_SyncTestSigninUtils_setUpAccountAndSignInForTesting(
base::android::AttachCurrentThread());
run_loop.Quit();
}));
run_loop.Run();
}
void SetUpAccountAndSignInAndEnableSyncForTesting() {
base::RunLoop run_loop;
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()}, base::BindLambdaForTesting([&]() {
Java_SyncTestSigninUtils_setUpAccountAndSignInAndEnableSyncForTesting(
base::android::AttachCurrentThread());
run_loop.Quit();
}));
run_loop.Run();
}
void SignOutForTesting() {
base::RunLoop run_loop;
base::ThreadPool::PostTask(FROM_HERE, {base::MayBlock()},
base::BindLambdaForTesting([&]() {
Java_SyncTestSigninUtils_signOutForTesting(
base::android::AttachCurrentThread());
run_loop.Quit();
}));
run_loop.Run();
}
void SetUpFakeAuthForTesting() {
Java_SyncTestSigninUtils_setUpFakeAuthForTesting(
base::android::AttachCurrentThread());
}
void TearDownFakeAuthForTesting() {
base::RunLoop run_loop;
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()}, base::BindLambdaForTesting([&]() {
Java_SyncTestSigninUtils_tearDownFakeAuthForTesting(
base::android::AttachCurrentThread());
run_loop.Quit();
}));
run_loop.Run();
}
void SetUpLiveAccountAndSignInForTesting(const std::string& username,
const std::string& password) {
base::RunLoop run_loop;
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()}, base::BindLambdaForTesting([&]() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_SyncTestSigninUtils_setUpLiveAccountAndSignInForTesting(
env, username, password);
run_loop.Quit();
}));
run_loop.Run();
}
void SetUpLiveAccountAndSignInAndEnableSyncForTesting(
const std::string& username,
const std::string& password) {
base::RunLoop run_loop;
base::ThreadPool::PostTask(
FROM_HERE, {base::MayBlock()}, base::BindLambdaForTesting([&]() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_SyncTestSigninUtils_setUpLiveAccountAndSignInAndEnableSyncForTesting(
env, username, password);
run_loop.Quit();
}));
run_loop.Run();
}
void ShutdownLiveAuthForTesting() {
base::RunLoop run_loop;
// The heap instance of the callback will be deleted by
// JNI_SyncTestSigninUtils_OnShutdownComplete when shutdown is completed.
auto heap_callback =
std::make_unique<base::OnceClosure>(run_loop.QuitClosure());
Java_SyncTestSigninUtils_shutdownLiveAuthForTesting(
base::android::AttachCurrentThread(),
reinterpret_cast<intptr_t>(heap_callback.release()));
run_loop.Run();
}
tab_groups::LocalTabGroupID CreateGroupFromTab(TabAndroid* tab) {
CHECK(tab);
JNIEnv* env = base::android::AttachCurrentThread();
auto j_group_id = Java_SyncTestTabGroupHelpers_createGroupFromTab(
env, tab->GetJavaObject());
return base::android::TokenAndroid::FromJavaToken(env, j_group_id);
}
std::optional<tab_groups::LocalTabGroupID> GetGroupIdForTab(TabAndroid* tab) {
CHECK(tab);
JNIEnv* env = base::android::AttachCurrentThread();
auto j_group_id =
Java_SyncTestTabGroupHelpers_getGroupIdForTab(env, tab->GetJavaObject());
if (j_group_id.is_null()) {
return std::nullopt;
}
return base::android::TokenAndroid::FromJavaToken(env, j_group_id);
}
void UpdateTabGroupVisualData(TabAndroid* tab,
const std::string_view& title,
tab_groups::TabGroupColorId color) {
CHECK(tab);
JNIEnv* env = base::android::AttachCurrentThread();
auto j_title = base::android::ConvertUTF8ToJavaString(env, title);
jint j_color = static_cast<jint>(color);
Java_SyncTestTabGroupHelpers_updateGroupVisualData(env, tab->GetJavaObject(),
j_title, j_color);
}
void JNI_SyncTestSigninUtils_OnShutdownComplete(JNIEnv* env,
jlong callbackPtr) {
std::unique_ptr<base::OnceClosure> heap_callback(
reinterpret_cast<base::OnceClosure*>(callbackPtr));
std::move(*heap_callback).Run();
}
} // namespace sync_test_utils_android