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. 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. 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