1 // Copyright 2013 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 #include "chrome/common/extensions/manifest_handlers/minimum_chrome_version_checker.h" 6 7 #include "base/notreached.h" 8 #include "base/strings/utf_string_conversions.h" 9 #include "base/version.h" 10 #include "chrome/grit/chromium_strings.h" 11 #include "components/version_info/version_info.h" 12 #include "extensions/common/error_utils.h" 13 #include "extensions/common/extension.h" 14 #include "extensions/common/manifest_constants.h" 15 #include "ui/base/l10n/l10n_util.h" 16 17 namespace extensions { 18 19 namespace keys = manifest_keys; 20 namespace errors = manifest_errors; 21 MinimumChromeVersionChecker()22MinimumChromeVersionChecker::MinimumChromeVersionChecker() { 23 } 24 ~MinimumChromeVersionChecker()25MinimumChromeVersionChecker::~MinimumChromeVersionChecker() { 26 } 27 Parse(Extension * extension,base::string16 * error)28bool MinimumChromeVersionChecker::Parse(Extension* extension, 29 base::string16* error) { 30 std::string minimum_version_string; 31 if (!extension->manifest()->GetString(keys::kMinimumChromeVersion, 32 &minimum_version_string)) { 33 *error = base::ASCIIToUTF16(errors::kInvalidMinimumChromeVersion); 34 return false; 35 } 36 37 base::Version minimum_version(minimum_version_string); 38 if (!minimum_version.IsValid()) { 39 *error = base::ASCIIToUTF16(errors::kInvalidMinimumChromeVersion); 40 return false; 41 } 42 43 const base::Version& current_version = version_info::GetVersion(); 44 if (!current_version.IsValid()) { 45 NOTREACHED(); 46 return false; 47 } 48 49 if (current_version.CompareTo(minimum_version) < 0) { 50 *error = ErrorUtils::FormatErrorMessageUTF16( 51 errors::kChromeVersionTooLow, 52 l10n_util::GetStringUTF8(IDS_PRODUCT_NAME), 53 minimum_version_string); 54 return false; 55 } 56 return true; 57 } 58 Keys() const59base::span<const char* const> MinimumChromeVersionChecker::Keys() const { 60 static constexpr const char* kKeys[] = {keys::kMinimumChromeVersion}; 61 return kKeys; 62 } 63 64 } // namespace extensions 65