Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / base / android / build_info.h
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   const char* build_type() const {
76     return build_type_;
77   }
78
79   int sdk_int() const {
80     return sdk_int_;
81   }
82
83   const char* java_exception_info() const {
84     return java_exception_info_;
85   }
86
87   void set_java_exception_info(const std::string& info);
88
89   static bool RegisterBindings(JNIEnv* env);
90
91  private:
92   friend struct BuildInfoSingletonTraits;
93
94   explicit BuildInfo(JNIEnv* env);
95
96   // Const char* is used instead of std::strings because these values must be
97   // available even if the process is in a crash state. Sadly
98   // std::string.c_str() doesn't guarantee that memory won't be allocated when
99   // it is called.
100   const char* const device_;
101   const char* const model_;
102   const char* const brand_;
103   const char* const android_build_id_;
104   const char* const android_build_fp_;
105   const char* const package_version_code_;
106   const char* const package_version_name_;
107   const char* const package_label_;
108   const char* const package_name_;
109   const char* const build_type_;
110   const int sdk_int_;
111   // This is set via set_java_exception_info, not at constructor time.
112   const char* java_exception_info_;
113
114   DISALLOW_COPY_AND_ASSIGN(BuildInfo);
115 };
116
117 }  // namespace android
118 }  // namespace base
119
120 #endif  // BASE_ANDROID_BUILD_INFO_H_