Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: base/sys_info_chromeos.cc

Issue 23904025: Move IsRunningOnChromeOS to SysInfo (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge fix Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/sys_info.h ('k') | base/sys_info_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/sys_info.h" 5 #include "base/sys_info.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/environment.h" 8 #include "base/environment.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
13 #include "base/strings/string_piece.h" 13 #include "base/strings/string_piece.h"
14 #include "base/strings/string_split.h" 14 #include "base/strings/string_split.h"
15 #include "base/strings/string_tokenizer.h" 15 #include "base/strings/string_tokenizer.h"
16 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
17 #include "base/threading/thread_restrictions.h" 17 #include "base/threading/thread_restrictions.h"
18 18
19 namespace base { 19 namespace base {
20 20
21 namespace { 21 namespace {
22 22
23 const char* kLinuxStandardBaseVersionKeys[] = { 23 const char* kLinuxStandardBaseVersionKeys[] = {
24 "CHROMEOS_RELEASE_VERSION", 24 "CHROMEOS_RELEASE_VERSION",
25 "GOOGLE_RELEASE", 25 "GOOGLE_RELEASE",
26 "DISTRIB_RELEASE", 26 "DISTRIB_RELEASE",
27 }; 27 };
28 const size_t kLinuxStandardBaseVersionKeysLength = 28
29 arraysize(kLinuxStandardBaseVersionKeys); 29 const char kChromeOsReleaseNameKey[] = "CHROMEOS_RELEASE_NAME";
30
31 const char* const kChromeOsReleaseNames[] = {
32 "Chrome OS",
33 "Chromium OS",
34 };
30 35
31 const char kLinuxStandardBaseReleaseFile[] = "/etc/lsb-release"; 36 const char kLinuxStandardBaseReleaseFile[] = "/etc/lsb-release";
32 37
33 const char kLsbReleaseKey[] = "LSB_RELEASE"; 38 const char kLsbReleaseKey[] = "LSB_RELEASE";
34 const char kLsbReleaseTimeKey[] = "LSB_RELEASE_TIME"; // Seconds since epoch 39 const char kLsbReleaseTimeKey[] = "LSB_RELEASE_TIME"; // Seconds since epoch
35 40
36 const char kLsbReleaseSourceKey[] = "lsb-release"; 41 const char kLsbReleaseSourceKey[] = "lsb-release";
37 const char kLsbReleaseSourceEnv[] = "env"; 42 const char kLsbReleaseSourceEnv[] = "env";
38 const char kLsbReleaseSourceFile[] = "file"; 43 const char kLsbReleaseSourceFile[] = "file";
39 44
40 class ChromeOSVersionInfo { 45 class ChromeOSVersionInfo {
41 public: 46 public:
42 ChromeOSVersionInfo() { 47 ChromeOSVersionInfo() {
43 Parse(); 48 Parse();
44 } 49 }
45 50
46 void Parse() { 51 void Parse() {
47 lsb_release_map_.clear(); 52 lsb_release_map_.clear();
48 major_version_ = 0; 53 major_version_ = 0;
49 minor_version_ = 0; 54 minor_version_ = 0;
50 bugfix_version_ = 0; 55 bugfix_version_ = 0;
56 is_running_on_chromeos_ = false;
51 57
52 std::string lsb_release, lsb_release_time_str; 58 std::string lsb_release, lsb_release_time_str;
53 scoped_ptr<base::Environment> env(base::Environment::Create()); 59 scoped_ptr<base::Environment> env(base::Environment::Create());
54 bool parsed_from_env = 60 bool parsed_from_env =
55 env->GetVar(kLsbReleaseKey, &lsb_release) && 61 env->GetVar(kLsbReleaseKey, &lsb_release) &&
56 env->GetVar(kLsbReleaseTimeKey, &lsb_release_time_str); 62 env->GetVar(kLsbReleaseTimeKey, &lsb_release_time_str);
57 if (parsed_from_env) { 63 if (parsed_from_env) {
58 double us = 0; 64 double us = 0;
59 if (StringToDouble(lsb_release_time_str, &us)) 65 if (StringToDouble(lsb_release_time_str, &us))
60 lsb_release_time_ = base::Time::FromDoubleT(us); 66 lsb_release_time_ = base::Time::FromDoubleT(us);
(...skipping 27 matching lines...) Expand all
88 int32* bugfix_version) { 94 int32* bugfix_version) {
89 *major_version = major_version_; 95 *major_version = major_version_;
90 *minor_version = minor_version_; 96 *minor_version = minor_version_;
91 *bugfix_version = bugfix_version_; 97 *bugfix_version = bugfix_version_;
92 } 98 }
93 99
94 const base::Time& lsb_release_time() const { return lsb_release_time_; } 100 const base::Time& lsb_release_time() const { return lsb_release_time_; }
95 const SysInfo::LsbReleaseMap& lsb_release_map() const { 101 const SysInfo::LsbReleaseMap& lsb_release_map() const {
96 return lsb_release_map_; 102 return lsb_release_map_;
97 } 103 }
104 bool is_running_on_chromeos() const { return is_running_on_chromeos_; }
98 105
99 private: 106 private:
100 void ParseLsbRelease(const std::string& lsb_release) { 107 void ParseLsbRelease(const std::string& lsb_release) {
101 // Parse and cache lsb_release key pairs. There should only be a handful 108 // Parse and cache lsb_release key pairs. There should only be a handful
102 // of entries so the overhead for this will be small, and it can be 109 // of entries so the overhead for this will be small, and it can be
103 // useful for debugging. 110 // useful for debugging.
104 std::vector<std::pair<std::string, std::string> > pairs; 111 std::vector<std::pair<std::string, std::string> > pairs;
105 base::SplitStringIntoKeyValuePairs(lsb_release, '=', '\n', &pairs); 112 base::SplitStringIntoKeyValuePairs(lsb_release, '=', '\n', &pairs);
106 for (size_t i = 0; i < pairs.size(); ++i) { 113 for (size_t i = 0; i < pairs.size(); ++i) {
107 std::string key, value; 114 std::string key, value;
108 TrimWhitespaceASCII(pairs[i].first, TRIM_ALL, &key); 115 TrimWhitespaceASCII(pairs[i].first, TRIM_ALL, &key);
109 TrimWhitespaceASCII(pairs[i].second, TRIM_ALL, &value); 116 TrimWhitespaceASCII(pairs[i].second, TRIM_ALL, &value);
110 if (key.empty()) 117 if (key.empty())
111 continue; 118 continue;
112 lsb_release_map_[key] = value; 119 lsb_release_map_[key] = value;
113 } 120 }
114 // Parse the version from the first matching recognized version key. 121 // Parse the version from the first matching recognized version key.
115 std::string version; 122 std::string version;
116 for (size_t i = 0; i < kLinuxStandardBaseVersionKeysLength; ++i) { 123 for (size_t i = 0; i < arraysize(kLinuxStandardBaseVersionKeys); ++i) {
117 std::string key = kLinuxStandardBaseVersionKeys[i]; 124 std::string key = kLinuxStandardBaseVersionKeys[i];
118 if (GetLsbReleaseValue(key, &version) && !version.empty()) 125 if (GetLsbReleaseValue(key, &version) && !version.empty())
119 break; 126 break;
120 } 127 }
121 StringTokenizer tokenizer(version, "."); 128 StringTokenizer tokenizer(version, ".");
122 if (tokenizer.GetNext()) { 129 if (tokenizer.GetNext()) {
123 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), 130 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()),
124 &major_version_); 131 &major_version_);
125 } 132 }
126 if (tokenizer.GetNext()) { 133 if (tokenizer.GetNext()) {
127 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), 134 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()),
128 &minor_version_); 135 &minor_version_);
129 } 136 }
130 if (tokenizer.GetNext()) { 137 if (tokenizer.GetNext()) {
131 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), 138 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()),
132 &bugfix_version_); 139 &bugfix_version_);
133 } 140 }
141
142 // Check release name for Chrome OS.
143 std::string release_name;
144 if (GetLsbReleaseValue(kChromeOsReleaseNameKey, &release_name)) {
145 for (size_t i = 0; i < arraysize(kChromeOsReleaseNames); ++i) {
146 if (release_name == kChromeOsReleaseNames[i]) {
147 is_running_on_chromeos_ = true;
148 break;
149 }
150 }
151 }
134 } 152 }
135 153
136 base::Time lsb_release_time_; 154 base::Time lsb_release_time_;
137 SysInfo::LsbReleaseMap lsb_release_map_; 155 SysInfo::LsbReleaseMap lsb_release_map_;
138 int32 major_version_; 156 int32 major_version_;
139 int32 minor_version_; 157 int32 minor_version_;
140 int32 bugfix_version_; 158 int32 bugfix_version_;
159 bool is_running_on_chromeos_;
141 }; 160 };
142 161
143 static LazyInstance<ChromeOSVersionInfo> 162 static LazyInstance<ChromeOSVersionInfo>
144 g_chrome_os_version_info = LAZY_INSTANCE_INITIALIZER; 163 g_chrome_os_version_info = LAZY_INSTANCE_INITIALIZER;
145 164
146 ChromeOSVersionInfo& GetChromeOSVersionInfo() { 165 ChromeOSVersionInfo& GetChromeOSVersionInfo() {
147 return g_chrome_os_version_info.Get(); 166 return g_chrome_os_version_info.Get();
148 } 167 }
149 168
150 } // namespace 169 } // namespace
(...skipping 24 matching lines...) Expand all
175 board = "unknown"; 194 board = "unknown";
176 return board; 195 return board;
177 } 196 }
178 197
179 // static 198 // static
180 base::Time SysInfo::GetLsbReleaseTime() { 199 base::Time SysInfo::GetLsbReleaseTime() {
181 return GetChromeOSVersionInfo().lsb_release_time(); 200 return GetChromeOSVersionInfo().lsb_release_time();
182 } 201 }
183 202
184 // static 203 // static
204 bool SysInfo::IsRunningOnChromeOS() {
205 return GetChromeOSVersionInfo().is_running_on_chromeos();
206 }
207
208 // static
185 void SysInfo::SetChromeOSVersionInfoForTest(const std::string& lsb_release, 209 void SysInfo::SetChromeOSVersionInfoForTest(const std::string& lsb_release,
186 const Time& lsb_release_time) { 210 const Time& lsb_release_time) {
187 scoped_ptr<base::Environment> env(base::Environment::Create()); 211 scoped_ptr<base::Environment> env(base::Environment::Create());
188 env->SetVar(kLsbReleaseKey, lsb_release); 212 env->SetVar(kLsbReleaseKey, lsb_release);
189 env->SetVar(kLsbReleaseTimeKey, 213 env->SetVar(kLsbReleaseTimeKey,
190 base::DoubleToString(lsb_release_time.ToDoubleT())); 214 base::DoubleToString(lsb_release_time.ToDoubleT()));
191 g_chrome_os_version_info.Get().Parse(); 215 g_chrome_os_version_info.Get().Parse();
192 } 216 }
193 217
194 } // namespace base 218 } // namespace base
OLDNEW
« no previous file with comments | « base/sys_info.h ('k') | base/sys_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698