Commit de977289 authored by Abhishek Arya's avatar Abhishek Arya Committed by Commit Bot

Revert "[Signin][Android] Add Java side of ConsistencyCookieManager"

This reverts commit e646c056.

Reason for revert: Broke UBSan vptr and Boris is OOO till early May.

Original change's description:
> [Signin][Android] Add Java side of ConsistencyCookieManager
> 
> Adds ConsistencyCookieManager Java class that listens to
> AccountManagerFacade.isUpdatePending and exposes it to the C++ code.
> 
> Bug: 949562
> Change-Id: Ifc375bed3d0d878d89d106807f44f4e7807db999
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1565880
> Commit-Queue: David Roger <droger@chromium.org>
> Reviewed-by: David Roger <droger@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#652073}

TBR=droger@chromium.org,bsazonov@chromium.org

Change-Id: Id672685a05ecea8dcd2bee210369faa9a207c35d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 949562
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1573860Reviewed-by: default avatarAbhishek Arya <inferno@chromium.org>
Commit-Queue: Abhishek Arya <inferno@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652203}
parent b9d12b3e
......@@ -18,7 +18,6 @@
#include "components/signin/core/browser/account_consistency_method.h"
#include "components/signin/core/browser/account_reconcilor.h"
#include "components/signin/core/browser/account_reconcilor_delegate.h"
#include "components/signin/core/browser/consistency_cookie_manager_base.h"
#include "components/signin/core/browser/mirror_account_reconcilor_delegate.h"
#include "components/signin/core/browser/signin_buildflags.h"
......@@ -34,7 +33,6 @@
#endif
#if defined(OS_ANDROID)
#include "components/signin/core/browser/consistency_cookie_manager_android.h"
#include "components/signin/core/browser/mice_account_reconcilor_delegate.h"
#endif
......@@ -140,14 +138,11 @@ AccountReconcilorFactory* AccountReconcilorFactory::GetInstance() {
KeyedService* AccountReconcilorFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const {
Profile* profile = Profile::FromBrowserContext(context);
SigninClient* signin_client =
ChromeSigninClientFactory::GetForProfile(profile);
AccountReconcilor* reconcilor = new AccountReconcilor(
IdentityManagerFactory::GetForProfile(profile), signin_client,
IdentityManagerFactory::GetForProfile(profile),
ChromeSigninClientFactory::GetForProfile(profile),
CreateAccountReconcilorDelegate(profile));
reconcilor->Initialize(true /* start_reconcile_if_tokens_available */);
reconcilor->SetConsistencyCookieManager(
CreateConsistencyCookieManager(signin_client, reconcilor));
return reconcilor;
}
......@@ -200,16 +195,3 @@ AccountReconcilorFactory::CreateAccountReconcilorDelegate(Profile* profile) {
NOTREACHED();
return nullptr;
}
std::unique_ptr<signin::ConsistencyCookieManagerBase>
AccountReconcilorFactory::CreateConsistencyCookieManager(
SigninClient* signin_client,
AccountReconcilor* account_reconcilor) const {
#if defined(OS_ANDROID)
if (base::FeatureList::IsEnabled(signin::kMiceFeature)) {
return std::make_unique<signin::ConsistencyCookieManagerAndroid>(
signin_client, account_reconcilor);
}
#endif
return nullptr;
}
......@@ -12,12 +12,10 @@
namespace signin {
class AccountReconcilorDelegate;
class ConsistencyCookieManagerBase;
}
class AccountReconcilor;
class Profile;
class SigninClient;
// Singleton that owns all AccountReconcilors and associates them with
// Profiles. Listens for the Profile's destruction notification and cleans up.
......@@ -45,10 +43,6 @@ class AccountReconcilorFactory : public BrowserContextKeyedServiceFactory {
// BrowserContextKeyedServiceFactory:
KeyedService* BuildServiceInstanceFor(
content::BrowserContext* profile) const override;
std::unique_ptr<signin::ConsistencyCookieManagerBase>
CreateConsistencyCookieManager(SigninClient* signin_client,
AccountReconcilor* account_reconcilor) const;
};
#endif // CHROME_BROWSER_SIGNIN_ACCOUNT_RECONCILOR_FACTORY_H_
......@@ -134,6 +134,8 @@ static_library("browser") {
"account_reconcilor_delegate.h",
"chrome_connected_header_helper.cc",
"chrome_connected_header_helper.h",
"consistency_cookie_manager_android.cc",
"consistency_cookie_manager_android.h",
"cookie_settings_util.cc",
"cookie_settings_util.h",
"dice_account_reconcilor_delegate.cc",
......@@ -208,16 +210,6 @@ static_library("browser") {
]
}
if (is_android) {
sources += [
"consistency_cookie_manager_android.cc",
"consistency_cookie_manager_android.h",
"consistency_cookie_manager_base.cc",
"consistency_cookie_manager_base.h",
]
deps += [ "android:jni_headers" ]
}
if (!enable_dice_support) {
sources -= [
"dice_account_reconcilor_delegate.cc",
......@@ -271,6 +263,7 @@ source_set("unit_tests") {
"account_reconcilor_unittest.cc",
"account_tracker_service_unittest.cc",
"avatar_icon_util_unittest.cc",
"consistency_cookie_manager_android_unittest.cc",
"device_id_helper_unittest.cc",
"dice_account_reconcilor_delegate_unittest.cc",
"gaia_cookie_manager_service_unittest.cc",
......@@ -320,10 +313,6 @@ source_set("unit_tests") {
deps += [ "//chromeos/components/account_manager" ]
}
if (is_android) {
sources += [ "consistency_cookie_manager_unittest.cc" ]
}
if (!enable_dice_support) {
sources -= [ "dice_account_reconcilor_delegate_unittest.cc" ]
}
......
......@@ -22,7 +22,6 @@
#include "build/build_config.h"
#include "components/signin/core/browser/account_consistency_method.h"
#include "components/signin/core/browser/account_reconcilor_delegate.h"
#include "components/signin/core/browser/consistency_cookie_manager_base.h"
#include "components/signin/core/browser/signin_buildflags.h"
#include "components/signin/core/browser/signin_client.h"
#include "components/signin/core/browser/signin_metrics.h"
......@@ -233,12 +232,16 @@ void AccountReconcilor::Initialize(bool start_reconcile_if_tokens_available) {
if (start_reconcile_if_tokens_available && IsIdentityManagerReady())
StartReconcile();
}
}
void AccountReconcilor::SetConsistencyCookieManager(
std::unique_ptr<signin::ConsistencyCookieManagerBase>
consistency_cookie_manager) {
consistency_cookie_manager_ = std::move(consistency_cookie_manager);
#if defined(OS_ANDROID)
// The ConsistencyCookieManager is not created earlier, because it requires
// the reconcilor state to be initialized.
if (base::FeatureList::IsEnabled(signin::kMiceFeature)) {
consistency_cookie_manager_ =
std::make_unique<signin::ConsistencyCookieManagerAndroid>(client_,
this);
}
#endif
}
#if defined(OS_IOS)
......
......@@ -34,7 +34,10 @@ extern const base::Feature kUseMultiloginEndpoint;
namespace signin {
class AccountReconcilorDelegate;
class ConsistencyCookieManagerBase;
#if defined(OS_ANDROID)
class ConsistencyCookieManagerAndroid;
#endif
}
class SigninClient;
......@@ -102,10 +105,6 @@ class AccountReconcilor : public KeyedService,
// construction.
void Initialize(bool start_reconcile_if_tokens_available);
void SetConsistencyCookieManager(
std::unique_ptr<signin::ConsistencyCookieManagerBase>
consistency_cookie_manager);
#if defined(OS_IOS)
// Sets the WKHTTPSystemCookieStore flag value.
void SetIsWKHTTPSystemCookieStoreEnabled(bool is_enabled);
......@@ -394,8 +393,10 @@ class AccountReconcilor : public KeyedService,
bool is_wkhttp_system_cookie_store_enabled_ = false;
#endif // defined(OS_IOS)
std::unique_ptr<signin::ConsistencyCookieManagerBase>
#if defined(OS_ANDROID)
std::unique_ptr<signin::ConsistencyCookieManagerAndroid>
consistency_cookie_manager_;
#endif
base::WeakPtrFactory<AccountReconcilor> weak_factory_;
......
......@@ -8,7 +8,6 @@ generate_jni("jni_headers") {
sources = [
"java/src/org/chromium/components/signin/AccountTrackerService.java",
"java/src/org/chromium/components/signin/ChildAccountInfoFetcher.java",
"java/src/org/chromium/components/signin/ConsistencyCookieManager.java",
"java/src/org/chromium/components/signin/OAuth2TokenService.java",
]
jni_package = "components/signin"
......@@ -20,7 +19,6 @@ android_library("java") {
"$google_play_services_package:google_play_services_base_java",
"$google_play_services_package:google_play_services_basement_java",
"//base:base_java",
"//base:jni_java",
"//net/android:net_java",
"//third_party/android_deps:android_support_v4_java",
"//third_party/android_deps:com_android_support_support_annotations_java",
......@@ -38,7 +36,6 @@ android_library("java") {
"java/src/org/chromium/components/signin/ChildAccountInfoFetcher.java",
"java/src/org/chromium/components/signin/ChildAccountStatus.java",
"java/src/org/chromium/components/signin/ChromeSigninController.java",
"java/src/org/chromium/components/signin/ConsistencyCookieManager.java",
"java/src/org/chromium/components/signin/GmsAvailabilityException.java",
"java/src/org/chromium/components/signin/GmsJustUpdatedException.java",
"java/src/org/chromium/components/signin/util/PatternMatcher.java",
......@@ -48,8 +45,6 @@ android_library("java") {
"java/src/org/chromium/components/signin/ProfileDataSource.java",
"java/src/org/chromium/components/signin/SystemAccountManagerDelegate.java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
junit_binary("components_signin_junit_tests") {
......
// 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.
package org.chromium.components.signin;
import android.support.annotation.MainThread;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.annotations.NativeMethods;
/**
* Created by native code to get status of {@link AccountManagerFacade#isUpdatePending()} and
* notifications when it changes.
*/
public class ConsistencyCookieManager implements ObservableValue.Observer {
private final long mNativeConsistencyCookieManager;
private final AccountManagerFacade mAccountManagerFacade;
private boolean mIsUpdatePending;
private ConsistencyCookieManager(long nativeConsistencyCookieManager) {
ThreadUtils.assertOnUiThread();
mNativeConsistencyCookieManager = nativeConsistencyCookieManager;
mAccountManagerFacade = AccountManagerFacade.get();
mAccountManagerFacade.isUpdatePending().addObserver(this);
// TODO(https://crbug.com/949562): Observe ongoing sign-in activities.
mIsUpdatePending = calculateIsUpdatePending();
}
@Override
public void onValueChanged() {
boolean state = calculateIsUpdatePending();
if (mIsUpdatePending == state) return;
mIsUpdatePending = state;
ConsistencyCookieManagerJni.get().onIsUpdatePendingChanged(mNativeConsistencyCookieManager);
}
private boolean calculateIsUpdatePending() {
// TODO(https://crbug.com/949562): Check for ongoing sign-in activities.
return mAccountManagerFacade.isUpdatePending().get();
}
@CalledByNative
@MainThread
private static ConsistencyCookieManager create(long nativeConsistencyCookieManager) {
return new ConsistencyCookieManager(nativeConsistencyCookieManager);
}
@CalledByNative
@MainThread
private void destroy() {
ThreadUtils.assertOnUiThread();
mAccountManagerFacade.isUpdatePending().removeObserver(this);
}
@CalledByNative
@MainThread
private boolean getIsUpdatePending() {
ThreadUtils.assertOnUiThread();
return mIsUpdatePending;
}
@JNINamespace("signin")
@NativeMethods
interface Natives {
void onIsUpdatePendingChanged(long nativeConsistencyCookieManagerAndroid);
}
}
......@@ -4,46 +4,82 @@
#include "components/signin/core/browser/consistency_cookie_manager_android.h"
#include "jni/ConsistencyCookieManager_jni.h"
#include "base/logging.h"
#include "base/time/time.h"
#include "components/signin/core/browser/signin_client.h"
#include "google_apis/gaia/gaia_urls.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_options.h"
#include "services/network/public/mojom/cookie_manager.mojom.h"
#include "url/gurl.h"
namespace signin {
namespace {
const char kCookieName[] = "CHROME_ID_CONSISTENCY_STATE";
const char kStateConsistent[] = "Consistent";
const char kStateInconsistent[] = "Inconsistent";
const char kStateUpdating[] = "Updating";
} // namespace
ConsistencyCookieManagerAndroid::ConsistencyCookieManagerAndroid(
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));
java_ref_.Reset(env, java_ref.obj());
is_update_pending_in_java_ =
Java_ConsistencyCookieManager_getIsUpdatePending(env, java_ref_);
: account_reconcilor_state_(reconcilor->GetState()),
signin_client_(signin_client),
account_reconcilor_observer_(this) {
DCHECK(signin_client_);
DCHECK(reconcilor);
account_reconcilor_observer_.Add(reconcilor);
UpdateCookie();
}
ConsistencyCookieManagerAndroid::~ConsistencyCookieManagerAndroid() {
JNIEnv* env = base::android::AttachCurrentThread();
Java_ConsistencyCookieManager_destroy(env, java_ref_);
}
ConsistencyCookieManagerAndroid::~ConsistencyCookieManagerAndroid() = default;
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_)
void ConsistencyCookieManagerAndroid::OnStateChanged(
signin_metrics::AccountReconcilorState state) {
if (state == account_reconcilor_state_)
return;
is_update_pending_in_java_ = is_update_pending_in_java;
account_reconcilor_state_ = state;
UpdateCookie();
}
std::string ConsistencyCookieManagerAndroid::CalculateCookieValue() {
if (is_update_pending_in_java_) {
return kStateUpdating;
void ConsistencyCookieManagerAndroid::UpdateCookie() {
// Compute the new cookie value.
std::string cookie_value;
switch (account_reconcilor_state_) {
case signin_metrics::ACCOUNT_RECONCILOR_OK:
cookie_value = kStateConsistent;
break;
case signin_metrics::ACCOUNT_RECONCILOR_RUNNING:
case signin_metrics::ACCOUNT_RECONCILOR_SCHEDULED:
cookie_value = kStateUpdating;
break;
case signin_metrics::ACCOUNT_RECONCILOR_ERROR:
cookie_value = kStateInconsistent;
break;
case signin_metrics::ACCOUNT_RECONCILOR_HISTOGRAM_COUNT:
NOTREACHED();
break;
}
return ConsistencyCookieManagerBase::CalculateCookieValue();
DCHECK(!cookie_value.empty());
// Update the cookie with the new value.
network::mojom::CookieManager* cookie_manager =
signin_client_->GetCookieManager();
base::Time now = base::Time::Now();
base::Time expiry = now + base::TimeDelta::FromDays(2 * 365); // Two years.
net::CanonicalCookie cookie(
kCookieName, cookie_value,
"." + GaiaUrls::GetInstance()->gaia_url().host(), /*path=*/"/",
/*creation=*/now, /*expiration=*/expiry, /*last_access=*/now,
/*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
net::COOKIE_PRIORITY_DEFAULT);
cookie_manager->SetCanonicalCookie(
cookie, "https", net::CookieOptions(),
network::mojom::CookieManager::SetCanonicalCookieCallback());
}
} // namespace signin
......@@ -5,33 +5,42 @@
#ifndef COMPONENTS_SIGNIN_CORE_BROWSER_CONSISTENCY_COOKIE_MANAGER_ANDROID_H_
#define COMPONENTS_SIGNIN_CORE_BROWSER_CONSISTENCY_COOKIE_MANAGER_ANDROID_H_
#include "base/android/scoped_java_ref.h"
#include "base/macros.h"
#include "components/signin/core/browser/consistency_cookie_manager_base.h"
#include "base/scoped_observer.h"
#include "components/signin/core/browser/account_reconcilor.h"
#include "components/signin/core/browser/signin_metrics.h"
class SigninClient;
namespace signin {
// ConsistencyCookieManagerAndroid subclasses ConsistencyCookieManagerBase to
// watch whether there are pending updates to the account list on the Java side.
class ConsistencyCookieManagerAndroid : public ConsistencyCookieManagerBase {
// The ConsistencyCookieManagerAndroid checks if:
// - the account reconcilor is running
// - the accounts on the device are updating
// - the user has started to interact with device account settings (from Chrome)
// If one of these conditions is true, then this object sets a cookie on Gaia
// with a "Updating" value.
//
// Otherwise the value of the cookie is "Consistent" if the accounts are
// consistent (web accounts match device accounts) or "Inconsistent".
class ConsistencyCookieManagerAndroid : public AccountReconcilor::Observer {
public:
ConsistencyCookieManagerAndroid(SigninClient* signin_client,
AccountReconcilor* reconcilor);
~ConsistencyCookieManagerAndroid() override;
void OnIsUpdatePendingChanged(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& java_self);
private:
// AccountReconcilor::Observer:
void OnStateChanged(signin_metrics::AccountReconcilorState state) override;
protected:
std::string CalculateCookieValue() override;
void UpdateCookie();
private:
bool is_update_pending_in_java_ = false;
base::android::ScopedJavaGlobalRef<jobject> java_ref_;
signin_metrics::AccountReconcilorState account_reconcilor_state_ =
signin_metrics::ACCOUNT_RECONCILOR_OK;
SigninClient* signin_client_ = nullptr;
ScopedObserver<AccountReconcilor, AccountReconcilor::Observer>
account_reconcilor_observer_;
DISALLOW_COPY_AND_ASSIGN(ConsistencyCookieManagerAndroid);
};
......
......@@ -2,7 +2,7 @@
// 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_base.h"
#include "components/signin/core/browser/consistency_cookie_manager_android.h"
#include <memory>
#include <string>
......@@ -49,19 +49,9 @@ class MockCookieManager
network::mojom::CookieManager::SetCanonicalCookieCallback callback));
};
class FakeConsistencyCookieManager
: public signin::ConsistencyCookieManagerBase {
class ConsistencyCookieManagerAndroidTest : public ::testing::Test {
public:
FakeConsistencyCookieManager(SigninClient* signin_client,
AccountReconcilor* reconcilor)
: ConsistencyCookieManagerBase(signin_client, reconcilor) {
UpdateCookie();
}
};
class ConsistencyCookieManagerTest : public ::testing::Test {
public:
ConsistencyCookieManagerTest()
ConsistencyCookieManagerAndroidTest()
: signin_client_(&pref_service_),
identity_test_env_(/*test_url_loader_factory=*/nullptr,
&pref_service_,
......@@ -75,12 +65,10 @@ class ConsistencyCookieManagerTest : public ::testing::Test {
reconcilor_ = std::make_unique<AccountReconcilor>(
identity_test_env_.identity_manager(), &signin_client_,
std::make_unique<AccountReconcilorDelegate>());
reconcilor_->Initialize(/*start_reconcile_if_tokens_available=*/false);
}
~ConsistencyCookieManagerTest() override { reconcilor_->Shutdown(); }
~ConsistencyCookieManagerAndroidTest() override { reconcilor_->Shutdown(); }
SigninClient* signin_client() { return &signin_client_; }
AccountReconcilor* reconcilor() { return reconcilor_.get(); }
MockCookieManager* mock_cookie_manager() {
......@@ -102,12 +90,10 @@ class ConsistencyCookieManagerTest : public ::testing::Test {
};
// Tests that the cookie is updated when the account reconcilor state changes.
TEST_F(ConsistencyCookieManagerTest, AccountReconcilorState) {
TEST_F(ConsistencyCookieManagerAndroidTest, AccountReconcilorState) {
// AccountReconcilor::Initialize() creates the ConsistencyCookieManager.
mock_cookie_manager()->ExpectSetCookieCall("Consistent");
reconcilor()->SetConsistencyCookieManager(
std::make_unique<FakeConsistencyCookieManager>(signin_client(),
reconcilor()));
reconcilor()->Initialize(/*start_reconcile_if_tokens_available=*/false);
testing::Mock::VerifyAndClearExpectations(mock_cookie_manager());
ASSERT_EQ(signin_metrics::ACCOUNT_RECONCILOR_OK, reconcilor()->GetState());
......
// 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_base.h"
#include "base/logging.h"
#include "base/time/time.h"
#include "components/signin/core/browser/signin_client.h"
#include "google_apis/gaia/gaia_urls.h"
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_options.h"
#include "services/network/public/mojom/cookie_manager.mojom.h"
#include "url/gurl.h"
namespace signin {
const char kCookieName[] = "CHROME_ID_CONSISTENCY_STATE";
const char ConsistencyCookieManagerBase::kStateConsistent[] = "Consistent";
const char ConsistencyCookieManagerBase::kStateInconsistent[] = "Inconsistent";
const char ConsistencyCookieManagerBase::kStateUpdating[] = "Updating";
ConsistencyCookieManagerBase::ConsistencyCookieManagerBase(
SigninClient* signin_client,
AccountReconcilor* reconcilor)
: account_reconcilor_state_(reconcilor->GetState()),
signin_client_(signin_client),
account_reconcilor_observer_(this) {
DCHECK(signin_client_);
DCHECK(reconcilor);
account_reconcilor_observer_.Add(reconcilor);
}
ConsistencyCookieManagerBase::~ConsistencyCookieManagerBase() = default;
void ConsistencyCookieManagerBase::OnStateChanged(
signin_metrics::AccountReconcilorState state) {
if (state == account_reconcilor_state_)
return;
account_reconcilor_state_ = state;
UpdateCookie();
}
std::string ConsistencyCookieManagerBase::CalculateCookieValue() {
switch (account_reconcilor_state_) {
case signin_metrics::ACCOUNT_RECONCILOR_OK:
return kStateConsistent;
case signin_metrics::ACCOUNT_RECONCILOR_RUNNING:
case signin_metrics::ACCOUNT_RECONCILOR_SCHEDULED:
return kStateUpdating;
case signin_metrics::ACCOUNT_RECONCILOR_ERROR:
return kStateInconsistent;
case signin_metrics::ACCOUNT_RECONCILOR_HISTOGRAM_COUNT:
NOTREACHED();
return {};
}
}
void ConsistencyCookieManagerBase::UpdateCookie() {
std::string cookie_value = CalculateCookieValue();
DCHECK(!cookie_value.empty());
// Update the cookie with the new value.
network::mojom::CookieManager* cookie_manager =
signin_client_->GetCookieManager();
base::Time now = base::Time::Now();
base::Time expiry = now + base::TimeDelta::FromDays(2 * 365); // Two years.
net::CanonicalCookie cookie(
kCookieName, cookie_value,
"." + GaiaUrls::GetInstance()->gaia_url().host(), /*path=*/"/",
/*creation=*/now, /*expiration=*/expiry, /*last_access=*/now,
/*secure=*/true, /*httponly=*/false, net::CookieSameSite::NO_RESTRICTION,
net::COOKIE_PRIORITY_DEFAULT);
cookie_manager->SetCanonicalCookie(
cookie, "https", net::CookieOptions(),
network::mojom::CookieManager::SetCanonicalCookieCallback());
}
} // namespace signin
// 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.
#ifndef COMPONENTS_SIGNIN_CORE_BROWSER_CONSISTENCY_COOKIE_MANAGER_BASE_H_
#define COMPONENTS_SIGNIN_CORE_BROWSER_CONSISTENCY_COOKIE_MANAGER_BASE_H_
#include "base/macros.h"
#include "base/scoped_observer.h"
#include "components/signin/core/browser/account_reconcilor.h"
#include "components/signin/core/browser/signin_metrics.h"
class SigninClient;
namespace signin {
// The ConsistencyCookieManagerBase checks if:
// - the account reconcilor is running
// - the accounts on the device are updating
// - the user has started to interact with device account settings (from Chrome)
// If one of these conditions is true, then this object sets a cookie on Gaia
// with a "Updating" value.
//
// Otherwise the value of the cookie is "Consistent" if the accounts are
// consistent (web accounts match device accounts) or "Inconsistent".
//
// Subclasses have to call UpdateCookie() at the end of the constructor.
class ConsistencyCookieManagerBase : public AccountReconcilor::Observer {
public:
~ConsistencyCookieManagerBase() override;
protected:
static const char kStateConsistent[];
static const char kStateInconsistent[];
static const char kStateUpdating[];
ConsistencyCookieManagerBase(SigninClient* signin_client,
AccountReconcilor* reconcilor);
// Calculates the cookie value solely based on the reconcilor state.
virtual std::string CalculateCookieValue();
// Gets the new value using CalculateCookieValue and sets the cookie.
void UpdateCookie();
private:
// AccountReconcilor::Observer:
void OnStateChanged(signin_metrics::AccountReconcilorState state) override;
signin_metrics::AccountReconcilorState account_reconcilor_state_ =
signin_metrics::ACCOUNT_RECONCILOR_OK;
SigninClient* signin_client_ = nullptr;
ScopedObserver<AccountReconcilor, AccountReconcilor::Observer>
account_reconcilor_observer_;
DISALLOW_COPY_AND_ASSIGN(ConsistencyCookieManagerBase);
};
} // namespace signin
#endif // COMPONENTS_SIGNIN_CORE_BROWSER_CONSISTENCY_COOKIE_MANAGER_BASE_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment