blob: 2e4bdbc74b28494d0500d9a0e845afa1c095ba5e [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 "components/signin/core/browser/consistency_cookie_manager_android.h"
#include "components/signin/core/browser/android/jni_headers/ConsistencyCookieManager_jni.h"
#include "services/identity/public/cpp/identity_manager.h"
namespace signin {
ConsistencyCookieManagerAndroid::ConsistencyCookieManagerAndroid(
identity::IdentityManager* identity_manager,
SigninClient* signin_client,
AccountReconcilor* reconcilor)
: ConsistencyCookieManagerBase(signin_client, reconcilor) {
JNIEnv* env = base::android::AttachCurrentThread();
base::android::ScopedJavaLocalRef<jobject> java_ref =
Java_ConsistencyCookieManager_create(
env, reinterpret_cast<intptr_t>(this),
identity_manager->LegacyGetAccountTrackerServiceJavaObject());
java_ref_.Reset(env, java_ref.obj());
is_update_pending_in_java_ =
Java_ConsistencyCookieManager_getIsUpdatePending(env, java_ref_);
UpdateCookie();
}
ConsistencyCookieManagerAndroid::~ConsistencyCookieManagerAndroid() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_ConsistencyCookieManager_destroy(env, java_ref_);
}
void ConsistencyCookieManagerAndroid::OnIsUpdatePendingChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& java_obj) {
bool is_update_pending_in_java =
Java_ConsistencyCookieManager_getIsUpdatePending(env, java_ref_);
if (is_update_pending_in_java == is_update_pending_in_java_)
return;
is_update_pending_in_java_ = is_update_pending_in_java;
UpdateCookie();
}
std::string ConsistencyCookieManagerAndroid::CalculateCookieValue() {
if (is_update_pending_in_java_) {
return kStateUpdating;
}
return ConsistencyCookieManagerBase::CalculateCookieValue();
}
} // namespace signin