Home | History | Annotate | Download | only in android
      1 // Copyright (c) 2012 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 BASE_ANDROID_BUILD_INFO_H_
      6 #define BASE_ANDROID_BUILD_INFO_H_
      7 
      8 #include <jni.h>
      9 
     10 #include <string>
     11 
     12 #include "base/base_export.h"
     13 #include "base/memory/singleton.h"
     14 
     15 namespace base {
     16 namespace android {
     17 
     18 // BuildInfo is a singleton class that stores android build and device
     19 // information. It will be called from Android specific code and gets used
     20 // primarily in crash reporting.
     21 
     22 // It is also used to store the last java exception seen during JNI.
     23 // TODO(nileshagrawal): Find a better place to store this info.
     24 class BASE_EXPORT BuildInfo {
     25  public:
     26 
     27   ~BuildInfo() {}
     28 
     29   // Static factory method for getting the singleton BuildInfo instance.
     30   // Note that ownership is not conferred on the caller and the BuildInfo in
     31   // question isn't actually freed until shutdown. This is ok because there
     32   // should only be one instance of BuildInfo ever created.
     33   static BuildInfo* GetInstance();
     34 
     35   // Const char* is used instead of std::strings because these values must be
     36   // available even if the process is in a crash state. Sadly
     37   // std::string.c_str() doesn't guarantee that memory won't be allocated when
     38   // it is called.
     39   const char* device() const {
     40     return device_;
     41   }
     42 
     43   const char* model() const {
     44     return model_;
     45   }
     46 
     47   const char* brand() const {
     48     return brand_;
     49   }
     50 
     51   const char* android_build_id() const {
     52     return android_build_id_;
     53   }
     54 
     55   const char* android_build_fp() const {
     56     return android_build_fp_;
     57   }
     58 
     59   const char* package_version_code() const {
     60     return package_version_code_;
     61   }
     62 
     63   const char* package_version_name() const {
     64     return package_version_name_;
     65   }
     66 
     67   const char* package_label() const {
     68     return package_label_;
     69   }
     70 
     71   const char* package_name() const {
     72     return package_name_;
     73   }
     74 
     75   int sdk_int() const {
     76     return sdk_int_;
     77   }
     78 
     79   const char* java_exception_info() const {
     80     return java_exception_info_;
     81   }
     82 
     83   void set_java_exception_info(const std::string& info);
     84 
     85   static bool RegisterBindings(JNIEnv* env);
     86 
     87  private:
     88   friend struct BuildInfoSingletonTraits;
     89 
     90   explicit BuildInfo(JNIEnv* env);
     91 
     92   // Const char* is used instead of std::strings because these values must be
     93   // available even if the process is in a crash state. Sadly
     94   // std::string.c_str() doesn't guarantee that memory won't be allocated when
     95   // it is called.
     96   const char* const device_;
     97   const char* const model_;
     98   const char* const brand_;
     99   const char* const android_build_id_;
    100   const char* const android_build_fp_;
    101   const char* const package_version_code_;
    102   const char* const package_version_name_;
    103   const char* const package_label_;
    104   const char* const package_name_;
    105   const int sdk_int_;
    106   // This is set via set_java_exception_info, not at constructor time.
    107   const char* java_exception_info_;
    108 
    109   DISALLOW_COPY_AND_ASSIGN(BuildInfo);
    110 };
    111 
    112 }  // namespace android
    113 }  // namespace base
    114 
    115 #endif  // BASE_ANDROID_BUILD_INFO_H_
    116