| Index: components/signin/public/interfaces/account_id_traits.h
|
| diff --git a/components/signin/public/interfaces/account_id_traits.h b/components/signin/public/interfaces/account_id_traits.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cc1d39de91773289c8fe34eaeb1a56d05b334390
|
| --- /dev/null
|
| +++ b/components/signin/public/interfaces/account_id_traits.h
|
| @@ -0,0 +1,107 @@
|
| +// Copyright 2017 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_PUBLIC_INTERFACES_ACCOUNT_ID_TRAITS_H_
|
| +#define COMPONENTS_SIGNIN_PUBLIC_INTERFACES_ACCOUNT_ID_TRAITS_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "components/signin/core/account_id/account_id.h"
|
| +#include "components/signin/public/interfaces/account_id.mojom.h"
|
| +
|
| +namespace mojo {
|
| +
|
| +template <>
|
| +struct EnumTraits<signin::mojom::AccountType, AccountType> {
|
| + static signin::mojom::AccountType ToMojom(AccountType input) {
|
| + switch (input) {
|
| + case AccountType::UNKNOWN:
|
| + return signin::mojom::AccountType::UNKNOWN;
|
| + case AccountType::GOOGLE:
|
| + return signin::mojom::AccountType::GOOGLE;
|
| + case AccountType::ACTIVE_DIRECTORY:
|
| + return signin::mojom::AccountType::ACTIVE_DIRECTORY;
|
| + }
|
| + NOTREACHED();
|
| + return signin::mojom::AccountType::UNKNOWN;
|
| + }
|
| +
|
| + static bool FromMojom(signin::mojom::AccountType input,
|
| + AccountType* out) {
|
| + switch (input) {
|
| + case signin::mojom::AccountType::UNKNOWN:
|
| + *out = AccountType::UNKNOWN;
|
| + return true;
|
| + case signin::mojom::AccountType::GOOGLE:
|
| + *out = AccountType::GOOGLE;
|
| + return true;
|
| + case signin::mojom::AccountType::ACTIVE_DIRECTORY:
|
| + *out = AccountType::ACTIVE_DIRECTORY;
|
| + return true;
|
| + }
|
| + NOTREACHED();
|
| + return false;
|
| + }
|
| +};
|
| +
|
| +
|
| +template <>
|
| +struct StructTraits<signin::mojom::AccountIdDataView, AccountId> {
|
| + static AccountType account_type(const AccountId& r) {
|
| + return r.GetAccountType();
|
| + }
|
| + static std::string id(const AccountId& r) {
|
| + switch (r.GetAccountType()) {
|
| + case AccountType::GOOGLE:
|
| + return r.GetGaiaId();
|
| + case AccountType::ACTIVE_DIRECTORY:
|
| + return r.GetObjGuid();
|
| + case AccountType::UNKNOWN:
|
| + // UNKNOWN type is used for users that have only email (e.g. in tests
|
| + // or legacy users that have not run through migration code).
|
| + // Return an empty string for such accounts.
|
| + return std::string();
|
| + }
|
| + NOTREACHED();
|
| + return std::string();
|
| + }
|
| + static std::string user_email(const AccountId& r) {
|
| + return r.GetUserEmail();
|
| + }
|
| +
|
| + static bool Read(signin::mojom::AccountIdDataView data, AccountId* out) {
|
| + AccountType account_type;
|
| + std::string id;
|
| + std::string user_email;
|
| + if (!data.ReadAccountType(&account_type) ||
|
| + !data.ReadId(&id) ||
|
| + !data.ReadUserEmail(&user_email)) {
|
| + return false;
|
| + }
|
| +
|
| + switch (account_type) {
|
| + case AccountType::GOOGLE:
|
| + *out = AccountId::FromUserEmailGaiaId(user_email, id);
|
| + break;
|
| + case AccountType::ACTIVE_DIRECTORY:
|
| + *out = AccountId::AdFromUserEmailObjGuid(user_email, id);
|
| + break;
|
| + case AccountType::UNKNOWN:
|
| + // UNKNOWN type is used for users that have only email (e.g. in tests
|
| + // or legacy users that have not run through migration code).
|
| + // Bail if there is no user email.
|
| + if (user_email.empty())
|
| + return false;
|
| +
|
| + *out = AccountId::FromUserEmail(user_email);
|
| + break;
|
| + }
|
| +
|
| + return out->is_valid();
|
| + }
|
| +};
|
| +
|
| +} // namespace mojo
|
| +
|
| +#endif // COMPONENTS_SIGNIN_PUBLIC_INTERFACES_ACCOUNT_ID_TRAITS_H_
|
|
|