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/strings/utf_string_conversions.h" 8 #include "base/version.h" 9 #include "chrome/common/chrome_version_info.h" 10 #include "extensions/common/error_utils.h" 11 #include "extensions/common/extension.h" 12 #include "extensions/common/manifest_constants.h" 13 #include "grit/chromium_strings.h" 14 #include "ui/base/l10n/l10n_util.h" 15 16 namespace extensions { 17 18 namespace keys = manifest_keys; 19 namespace errors = manifest_errors; 20 21 MinimumChromeVersionChecker::MinimumChromeVersionChecker() { 22 } 23 24 MinimumChromeVersionChecker::~MinimumChromeVersionChecker() { 25 } 26 27 bool MinimumChromeVersionChecker::Parse(Extension* extension, 28 base::string16* error) { 29 std::string minimum_version_string; 30 if (!extension->manifest()->GetString(keys::kMinimumChromeVersion, 31 &minimum_version_string)) { 32 *error = base::ASCIIToUTF16(errors::kInvalidMinimumChromeVersion); 33 return false; 34 } 35 36 Version minimum_version(minimum_version_string); 37 if (!minimum_version.IsValid()) { 38 *error = base::ASCIIToUTF16(errors::kInvalidMinimumChromeVersion); 39 return false; 40 } 41 42 chrome::VersionInfo current_version_info; 43 Version current_version(current_version_info.Version()); 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 59 const std::vector<std::string> MinimumChromeVersionChecker::Keys() const { 60 return SingleKey(keys::kMinimumChromeVersion); 61 } 62 63 } // namespace extensions 64