Home | History | Annotate | Download | only in browser
      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