• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
14 namespace signin_internals_util {
15 
16 // Preference prefixes for signin and token values.
17 extern const char kSigninPrefPrefix[];
18 extern const char kTokenPrefPrefix[];
19 
20 // The length of strings returned by GetTruncatedHash() below.
21 const size_t kTruncateTokenStringLength = 6;
22 
23 // Helper enums to access fields from SigninStatus (declared below).
24 enum {
25   SIGNIN_FIELDS_BEGIN = 0,
26   UNTIMED_FIELDS_BEGIN = SIGNIN_FIELDS_BEGIN
27 };
28 
29 enum UntimedSigninStatusField {
30   USERNAME = UNTIMED_FIELDS_BEGIN,
31   UNTIMED_FIELDS_END
32 };
33 
34 enum {
35   UNTIMED_FIELDS_COUNT = UNTIMED_FIELDS_END - UNTIMED_FIELDS_BEGIN,
36   TIMED_FIELDS_BEGIN = UNTIMED_FIELDS_END
37 };
38 
39 enum TimedSigninStatusField {
40   SIGNIN_TYPE = TIMED_FIELDS_BEGIN,
41   AUTHENTICATION_RESULT_RECEIVED,
42   REFRESH_TOKEN_RECEIVED,
43   GET_USER_INFO_STATUS,
44   UBER_TOKEN_STATUS,
45   MERGE_SESSION_STATUS,
46   TIMED_FIELDS_END
47 };
48 
49 enum {
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.
58 std::string TokenPrefPath(const std::string& service_name);
59 
60 // Returns the name of a SigninStatus field.
61 std::string SigninStatusFieldToString(UntimedSigninStatusField field);
62 std::string SigninStatusFieldToString(TimedSigninStatusField field);
63 
64 // An Observer class for authentication and token diagnostic information.
65 class SigninDiagnosticsObserver {
66  public:
67   // Credentials and signin related changes.
NotifySigninValueChanged(const UntimedSigninStatusField & field,const std::string & value)68   virtual void NotifySigninValueChanged(const UntimedSigninStatusField& field,
69                                         const std::string& value) {}
NotifySigninValueChanged(const TimedSigninStatusField & field,const std::string & value)70   virtual void NotifySigninValueChanged(const TimedSigninStatusField& field,
71                                         const std::string& value) {}
72   // OAuth tokens related changes.
NotifyTokenReceivedSuccess(const std::string & token_name,const std::string & token,bool update_time)73   virtual void NotifyTokenReceivedSuccess(const std::string& token_name,
74                                           const std::string& token,
75                                           bool update_time) {}
NotifyTokenReceivedFailure(const std::string & token_name,const std::string & error)76   virtual void NotifyTokenReceivedFailure(const std::string& token_name,
77                                           const std::string& error) {}
NotifyClearStoredToken(const std::string & token_name)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.
86 std::string GetTruncatedHash(const std::string& str);
87 
88 } // namespace signin_internals_util
89 
90 #endif  // COMPONENTS_SIGNIN_CORE_BROWSER_SIGNIN_INTERNALS_UTIL_H_
91