summaryrefslogtreecommitdiff
path: root/chromium/components/signin/core/browser/cookie_reminter.cc
blob: cdad334c8d8c9739387d6b05d5b50fe7671fd538 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// 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/cookie_reminter.h"

#include "base/bind_helpers.h"
#include "base/metrics/histogram_macros.h"
#include "base/syslog_logging.h"
#include "components/signin/public/identity_manager/accounts_cookie_mutator.h"

namespace {

bool DoesAccountRequireCookieReminting(
    const std::vector<CoreAccountInfo>& accounts_requiring_cookie_remint,
    const CoreAccountInfo& account_info) {
  for (const CoreAccountInfo& account_requiring_remint :
       accounts_requiring_cookie_remint) {
    if (account_info.gaia == account_requiring_remint.gaia) {
      return true;
    }
  }

  return false;
}

}  // namespace

CookieReminter::CookieReminter(signin::IdentityManager* identity_manager)
    : identity_manager_(identity_manager) {
  identity_manager_->AddObserver(this);
}

CookieReminter::~CookieReminter() {
  identity_manager_->RemoveObserver(this);
}

void CookieReminter::ForceCookieRemintingOnNextTokenUpdate(
    const CoreAccountInfo& account_info) {
  if (DoesAccountRequireCookieReminting(accounts_requiring_cookie_remint_,
                                        account_info)) {
    return;
  }

  UMA_HISTOGRAM_BOOLEAN("AccountManager.MirrorReauthenticationRequest", true);
  accounts_requiring_cookie_remint_.emplace_back(account_info);
}

void CookieReminter::OnRefreshTokenUpdatedForAccount(
    const CoreAccountInfo& account_info) {
  if (DoesAccountRequireCookieReminting(accounts_requiring_cookie_remint_,
                                        account_info)) {
    // Cookies are going to be reminted for all accounts.
    accounts_requiring_cookie_remint_.clear();
    identity_manager_->GetAccountsCookieMutator()->LogOutAllAccounts(
        gaia::GaiaSource::kChromeOS,
        signin::AccountsCookieMutator::LogOutFromCookieCompletedCallback());
  }
}