| // 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_ |