1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_
6 #define COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_
7 
8 #include <string>
9 #include <vector>
10 
11 #include "base/callback_forward.h"
12 #include "base/macros.h"
13 #include "build/build_config.h"
14 #include "components/signin/internal/identity_manager/oauth_multilogin_helper.h"
15 #include "components/signin/public/identity_manager/accounts_cookie_mutator.h"
16 
17 class AccountTrackerService;
18 class GaiaCookieManagerService;
19 class ProfileOAuth2TokenService;
20 class SigninClient;
21 
22 namespace gaia {
23 class GaiaSource;
24 }
25 
26 namespace signin {
27 
28 // Concrete implementation of the AccountsCookieMutator interface.
29 class AccountsCookieMutatorImpl : public AccountsCookieMutator {
30  public:
31   explicit AccountsCookieMutatorImpl(
32       SigninClient* signin_client,
33       ProfileOAuth2TokenService* token_service,
34       GaiaCookieManagerService* gaia_cookie_manager_service,
35       AccountTrackerService* account_tracker_service);
36   ~AccountsCookieMutatorImpl() override;
37 
38   void AddAccountToCookie(
39       const CoreAccountId& account_id,
40       gaia::GaiaSource source,
41       AddAccountToCookieCompletedCallback completion_callback) override;
42 
43   void AddAccountToCookieWithToken(
44       const CoreAccountId& account_id,
45       const std::string& access_token,
46       gaia::GaiaSource source,
47       AddAccountToCookieCompletedCallback completion_callback) override;
48 
49   void SetAccountsInCookie(
50       const MultiloginParameters& parameters,
51       gaia::GaiaSource source,
52       base::OnceCallback<void(SetAccountsInCookieResult)>
53           set_accounts_in_cookies_completed_callback) override;
54 
55   std::unique_ptr<SetAccountsInCookieTask> SetAccountsInCookieForPartition(
56       PartitionDelegate* partition_delegate,
57       const MultiloginParameters& parameters,
58       base::OnceCallback<void(SetAccountsInCookieResult)>
59           set_accounts_in_cookies_completed_callback) override;
60 
61   void TriggerCookieJarUpdate() override;
62 
63 #if defined(OS_IOS)
64   void ForceTriggerOnCookieChange() override;
65 #endif
66 
67   void LogOutAllAccounts(
68       gaia::GaiaSource source,
69       LogOutFromCookieCompletedCallback completion_callback) override;
70 
71  private:
72   class MultiloginHelperWrapper : public SetAccountsInCookieTask {
73    public:
74     MultiloginHelperWrapper(std::unique_ptr<OAuthMultiloginHelper> helper);
75     ~MultiloginHelperWrapper() override;
76 
77    private:
78     std::unique_ptr<OAuthMultiloginHelper> helper_;
79   };
80 
81   SigninClient* signin_client_;
82   ProfileOAuth2TokenService* token_service_;
83   GaiaCookieManagerService* gaia_cookie_manager_service_;
84   AccountTrackerService* account_tracker_service_;
85 
86   DISALLOW_COPY_AND_ASSIGN(AccountsCookieMutatorImpl);
87 };
88 
89 }  // namespace signin
90 
91 #endif  // COMPONENTS_SIGNIN_INTERNAL_IDENTITY_MANAGER_ACCOUNTS_COOKIE_MUTATOR_IMPL_H_
92