signin_internals_util.h revision effb81e5f8246d0db0270817048dc992db66e9fb
1// Copyright 2014 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_CORE_BROWSER_SIGNIN_INTERNALS_UTIL_H_
6#define COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_INTERNALS_UTIL_H_
7
8#include <map>
9#include <string>
10
11#include "base/memory/scoped_ptr.h"
12#include "base/values.h"
13
14namespace signin_internals_util {
15
16// Preference prefixes for signin and token values.
17extern const char kSigninPrefPrefix[];
18extern const char kTokenPrefPrefix[];
19
20// The length of strings returned by GetTruncatedHash() below.
21const size_t kTruncateTokenStringLength = 6;
22
23// Helper enums to access fields from SigninStatus (declared below).
24enum {
25  SIGNIN_FIELDS_BEGIN = 0,
26  UNTIMED_FIELDS_BEGIN = SIGNIN_FIELDS_BEGIN
27};
28
29enum UntimedSigninStatusField {
30  USERNAME = UNTIMED_FIELDS_BEGIN,
31  UNTIMED_FIELDS_END
32};
33
34enum {
35  UNTIMED_FIELDS_COUNT = UNTIMED_FIELDS_END - UNTIMED_FIELDS_BEGIN,
36  TIMED_FIELDS_BEGIN = UNTIMED_FIELDS_END
37};
38
39enum TimedSigninStatusField {
40  SIGNIN_TYPE = TIMED_FIELDS_BEGIN,
41  CLIENT_LOGIN_STATUS,
42  OAUTH_LOGIN_STATUS,
43  GET_USER_INFO_STATUS,
44  UBER_TOKEN_STATUS,
45  MERGE_SESSION_STATUS,
46  TIMED_FIELDS_END
47};
48
49enum {
50  TIMED_FIELDS_COUNT = TIMED_FIELDS_END - TIMED_FIELDS_BEGIN,
51  SIGNIN_FIELDS_END = TIMED_FIELDS_END,
52  SIGNIN_FIELDS_COUNT = SIGNIN_FIELDS_END - SIGNIN_FIELDS_BEGIN
53};
54
55// Returns the root preference path for the service. The path should be
56// qualified with one of .value, .status or .time to get the respective
57// full preference path names.
58std::string TokenPrefPath(const std::string& service_name);
59
60// Returns the name of a SigninStatus field.
61std::string SigninStatusFieldToString(UntimedSigninStatusField field);
62std::string SigninStatusFieldToString(TimedSigninStatusField field);
63
64// An Observer class for authentication and token diagnostic information.
65class SigninDiagnosticsObserver {
66 public:
67  // Credentials and signin related changes.
68  virtual void NotifySigninValueChanged(const UntimedSigninStatusField& field,
69                                        const std::string& value) {}
70  virtual void NotifySigninValueChanged(const TimedSigninStatusField& field,
71                                        const std::string& value) {}
72  // OAuth tokens related changes.
73  virtual void NotifyTokenReceivedSuccess(const std::string& token_name,
74                                          const std::string& token,
75                                          bool update_time) {}
76  virtual void NotifyTokenReceivedFailure(const std::string& token_name,
77                                          const std::string& error) {}
78  virtual void NotifyClearStoredToken(const std::string& token_name) {}};
79
80// Gets the first 6 hex characters of the SHA256 hash of the passed in string.
81// These are enough to perform equality checks across a single users tokens,
82// while preventing outsiders from reverse-engineering the actual token from
83// the displayed value.
84// Note that for readability (in about:signin-internals), an empty string
85// is not hashed, but simply returned as an empty string.
86std::string GetTruncatedHash(const std::string& str);
87
88} // namespace signin_internals_util
89
90#endif  // COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_INTERNALS_UTIL_H_
91