Chromium Code Reviews| OLD | NEW |
|---|---|
| 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" |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 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 const size_t kLinuxStandardBaseVersionKeysLength = |
| 29 arraysize(kLinuxStandardBaseVersionKeys); | 29 arraysize(kLinuxStandardBaseVersionKeys); |
| 30 | 30 |
| 31 static const char* kChromeOsReleaseNameKey = "CHROMEOS_RELEASE_NAME"; | |
|
satorux1
2013/09/24 04:09:01
nit: 'static' is unnecessary.
const char kChromeO
stevenjb
2013/09/26 22:07:38
Oops, thanks for catching. Done.
| |
| 32 | |
| 33 const char* kChromeOsReleaseNames[] = { | |
| 34 "Chrome OS", | |
| 35 "Chromium OS", | |
| 36 }; | |
| 37 const size_t kChromeOsReleaseNamesLength = arraysize(kChromeOsReleaseNames); | |
| 38 | |
| 31 const char kLinuxStandardBaseReleaseFile[] = "/etc/lsb-release"; | 39 const char kLinuxStandardBaseReleaseFile[] = "/etc/lsb-release"; |
| 32 | 40 |
| 33 class ChromeOSVersionInfo { | 41 class ChromeOSVersionInfo { |
| 34 public: | 42 public: |
| 35 ChromeOSVersionInfo() { | 43 ChromeOSVersionInfo() { |
| 36 Parse(); | 44 Parse(); |
| 37 } | 45 } |
| 38 | 46 |
| 39 void Parse() { | 47 void Parse() { |
| 40 lsb_release_map_.clear(); | 48 lsb_release_map_.clear(); |
| 41 major_version_ = 0; | 49 major_version_ = 0; |
| 42 minor_version_ = 0; | 50 minor_version_ = 0; |
| 43 bugfix_version_ = 0; | 51 bugfix_version_ = 0; |
| 52 is_running_on_chromeos_ = false; | |
| 44 | 53 |
| 45 std::string lsb_release, lsb_release_time_str; | 54 std::string lsb_release, lsb_release_time_str; |
| 46 scoped_ptr<base::Environment> env(base::Environment::Create()); | 55 scoped_ptr<base::Environment> env(base::Environment::Create()); |
| 47 bool parsed_from_env = | 56 bool parsed_from_env = |
| 48 env->GetVar("LSB_RELEASE", &lsb_release) && | 57 env->GetVar("LSB_RELEASE", &lsb_release) && |
| 49 env->GetVar("LSB_RELEASE_TIME", &lsb_release_time_str); | 58 env->GetVar("LSB_RELEASE_TIME", &lsb_release_time_str); |
| 50 if (parsed_from_env) { | 59 if (parsed_from_env) { |
| 51 double us = 0; | 60 double us = 0; |
| 52 StringToDouble(lsb_release_time_str, &us); | 61 StringToDouble(lsb_release_time_str, &us); |
| 53 lsb_release_time_ = base::Time::FromDoubleT(us); | 62 lsb_release_time_ = base::Time::FromDoubleT(us); |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 80 int32* bugfix_version) { | 89 int32* bugfix_version) { |
| 81 *major_version = major_version_; | 90 *major_version = major_version_; |
| 82 *minor_version = minor_version_; | 91 *minor_version = minor_version_; |
| 83 *bugfix_version = bugfix_version_; | 92 *bugfix_version = bugfix_version_; |
| 84 } | 93 } |
| 85 | 94 |
| 86 const base::Time& lsb_release_time() const { return lsb_release_time_; } | 95 const base::Time& lsb_release_time() const { return lsb_release_time_; } |
| 87 const SysInfo::LsbReleaseMap& lsb_release_map() const { | 96 const SysInfo::LsbReleaseMap& lsb_release_map() const { |
| 88 return lsb_release_map_; | 97 return lsb_release_map_; |
| 89 } | 98 } |
| 99 bool is_running_on_chromeos() const { return is_running_on_chromeos_; } | |
| 90 | 100 |
| 91 private: | 101 private: |
| 92 void ParseLsbRelease(const std::string& lsb_release) { | 102 void ParseLsbRelease(const std::string& lsb_release) { |
| 93 // Parse lsb_release key pairs. | 103 // Parse lsb_release key pairs. |
| 94 std::vector<std::pair<std::string, std::string> > pairs; | 104 std::vector<std::pair<std::string, std::string> > pairs; |
| 95 base::SplitStringIntoKeyValuePairs(lsb_release, '=', '\n', &pairs); | 105 base::SplitStringIntoKeyValuePairs(lsb_release, '=', '\n', &pairs); |
| 96 for (size_t i = 0; i < pairs.size(); ++i) { | 106 for (size_t i = 0; i < pairs.size(); ++i) { |
| 97 std::string key, value; | 107 std::string key, value; |
| 98 TrimWhitespaceASCII(pairs[i].first, TRIM_ALL, &key); | 108 TrimWhitespaceASCII(pairs[i].first, TRIM_ALL, &key); |
| 99 TrimWhitespaceASCII(pairs[i].second, TRIM_ALL, &value); | 109 TrimWhitespaceASCII(pairs[i].second, TRIM_ALL, &value); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 114 &major_version_); | 124 &major_version_); |
| 115 } | 125 } |
| 116 if (tokenizer.GetNext()) { | 126 if (tokenizer.GetNext()) { |
| 117 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), | 127 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), |
| 118 &minor_version_); | 128 &minor_version_); |
| 119 } | 129 } |
| 120 if (tokenizer.GetNext()) { | 130 if (tokenizer.GetNext()) { |
| 121 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), | 131 StringToInt(StringPiece(tokenizer.token_begin(), tokenizer.token_end()), |
| 122 &bugfix_version_); | 132 &bugfix_version_); |
| 123 } | 133 } |
| 134 | |
| 135 // Check release name for Chrome OS. | |
| 136 std::string release_name; | |
| 137 if (GetLsbReleaseValue(kChromeOsReleaseNameKey, &release_name)) { | |
| 138 for (size_t i = 0; i < kChromeOsReleaseNamesLength; ++i) { | |
|
satorux1
2013/09/24 04:09:01
remove kChromeOsReleaseNamesLength?
arraysize(kCh
stevenjb
2013/09/26 22:07:38
Done.
| |
| 139 if (release_name == kChromeOsReleaseNames[i]) { | |
| 140 is_running_on_chromeos_ = true; | |
| 141 break; | |
| 142 } | |
| 143 } | |
| 144 } | |
| 124 } | 145 } |
| 125 | 146 |
| 126 base::Time lsb_release_time_; | 147 base::Time lsb_release_time_; |
| 127 SysInfo::LsbReleaseMap lsb_release_map_; | 148 SysInfo::LsbReleaseMap lsb_release_map_; |
| 128 int32 major_version_; | 149 int32 major_version_; |
| 129 int32 minor_version_; | 150 int32 minor_version_; |
| 130 int32 bugfix_version_; | 151 int32 bugfix_version_; |
| 152 bool is_running_on_chromeos_; | |
| 131 }; | 153 }; |
| 132 | 154 |
| 133 static LazyInstance<ChromeOSVersionInfo> | 155 static LazyInstance<ChromeOSVersionInfo> |
| 134 g_chrome_os_version_info = LAZY_INSTANCE_INITIALIZER; | 156 g_chrome_os_version_info = LAZY_INSTANCE_INITIALIZER; |
| 135 | 157 |
| 136 ChromeOSVersionInfo& GetChromeOSVersionInfo() { | 158 ChromeOSVersionInfo& GetChromeOSVersionInfo() { |
| 137 return g_chrome_os_version_info.Get(); | 159 return g_chrome_os_version_info.Get(); |
| 138 } | 160 } |
| 139 | 161 |
| 140 } // namespace | 162 } // namespace |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 165 board = "unknown"; | 187 board = "unknown"; |
| 166 return board; | 188 return board; |
| 167 } | 189 } |
| 168 | 190 |
| 169 // static | 191 // static |
| 170 base::Time SysInfo::GetLsbReleaseTime() { | 192 base::Time SysInfo::GetLsbReleaseTime() { |
| 171 return GetChromeOSVersionInfo().lsb_release_time(); | 193 return GetChromeOSVersionInfo().lsb_release_time(); |
| 172 } | 194 } |
| 173 | 195 |
| 174 // static | 196 // static |
| 197 bool SysInfo::IsRunningOnChromeOS() { | |
| 198 return GetChromeOSVersionInfo().is_running_on_chromeos(); | |
| 199 } | |
| 200 | |
| 201 // static | |
| 175 void SysInfo::SetChromeOSVersionInfoForTest(const std::string& lsb_release, | 202 void SysInfo::SetChromeOSVersionInfoForTest(const std::string& lsb_release, |
| 176 double lsb_release_time) { | 203 double lsb_release_time) { |
| 177 scoped_ptr<base::Environment> env(base::Environment::Create()); | 204 scoped_ptr<base::Environment> env(base::Environment::Create()); |
| 178 env->SetVar("LSB_RELEASE", lsb_release); | 205 env->SetVar("LSB_RELEASE", lsb_release); |
| 179 // LSB_RELEASE_TIME must be set to read LSB_RELEASE from the env. | 206 // LSB_RELEASE_TIME must be set to read LSB_RELEASE from the env. |
| 180 env->SetVar("LSB_RELEASE_TIME", base::DoubleToString(lsb_release_time)); | 207 env->SetVar("LSB_RELEASE_TIME", base::DoubleToString(lsb_release_time)); |
| 181 g_chrome_os_version_info.Get().Parse(); | 208 g_chrome_os_version_info.Get().Parse(); |
| 182 } | 209 } |
| 183 | 210 |
| 184 } // namespace base | 211 } // namespace base |
| OLD | NEW |