• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
~BuildInfo()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.
device()39   const char* device() const {
40     return device_;
41   }
42 
model()43   const char* model() const {
44     return model_;
45   }
46 
brand()47   const char* brand() const {
48     return brand_;
49   }
50 
android_build_id()51   const char* android_build_id() const {
52     return android_build_id_;
53   }
54 
android_build_fp()55   const char* android_build_fp() const {
56     return android_build_fp_;
57   }
58 
package_version_code()59   const char* package_version_code() const {
60     return package_version_code_;
61   }
62 
package_version_name()63   const char* package_version_name() const {
64     return package_version_name_;
65   }
66 
package_label()67   const char* package_label() const {
68     return package_label_;
69   }
70 
package_name()71   const char* package_name() const {
72     return package_name_;
73   }
74 
sdk_int()75   int sdk_int() const {
76     return sdk_int_;
77   }
78 
java_exception_info()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