| Index: extensions/common/manifest_handlers/kiosk_mode_info.cc
|
| diff --git a/extensions/common/manifest_handlers/kiosk_mode_info.cc b/extensions/common/manifest_handlers/kiosk_mode_info.cc
|
| index d265c232787237b35eb09cc1e6c1b7f1c658142a..5ab5656e8a33fd084fdc8f4df4676b4002804acf 100644
|
| --- a/extensions/common/manifest_handlers/kiosk_mode_info.cc
|
| +++ b/extensions/common/manifest_handlers/kiosk_mode_info.cc
|
| @@ -9,9 +9,21 @@
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "base/values.h"
|
| +#include "base/version.h"
|
| #include "extensions/common/api/extensions_manifest_types.h"
|
| #include "extensions/common/manifest_constants.h"
|
|
|
| +namespace {
|
| +
|
| +// Whether the given |version_string| is a valid ChromeOS platform version.
|
| +// The acceptable format is major[.minor[.micro]].
|
| +bool IsValidPlatformVersion(const std::string& version_string) {
|
| + const base::Version version(version_string);
|
| + return version.IsValid() && version.components().size() <= 3u;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| namespace extensions {
|
|
|
| namespace keys = manifest_keys;
|
| @@ -19,8 +31,11 @@ namespace keys = manifest_keys;
|
| using api::extensions_manifest_types::KioskSecondaryAppsType;
|
|
|
| KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status,
|
| - const std::vector<std::string>& secondary_app_ids)
|
| - : kiosk_status(kiosk_status), secondary_app_ids(secondary_app_ids) {}
|
| + const std::vector<std::string>& secondary_app_ids,
|
| + const std::string& required_platform_version)
|
| + : kiosk_status(kiosk_status),
|
| + secondary_app_ids(secondary_app_ids),
|
| + required_platform_version(required_platform_version) {}
|
|
|
| KioskModeInfo::~KioskModeInfo() {
|
| }
|
| @@ -50,6 +65,7 @@ bool KioskModeInfo::HasSecondaryApps(const Extension* extension) {
|
| }
|
|
|
| KioskModeHandler::KioskModeHandler() {
|
| + supported_keys_.push_back(keys::kKiosk);
|
| supported_keys_.push_back(keys::kKioskEnabled);
|
| supported_keys_.push_back(keys::kKioskOnly);
|
| supported_keys_.push_back(keys::kKioskSecondaryApps);
|
| @@ -93,11 +109,10 @@ bool KioskModeHandler::Parse(Extension* extension, base::string16* error) {
|
|
|
| // Kiosk secondary apps key is optional.
|
| std::vector<std::string> ids;
|
| - if (extension->manifest()->HasKey(keys::kKioskSecondaryApps)) {
|
| + if (manifest->HasKey(keys::kKioskSecondaryApps)) {
|
| const base::Value* secondary_apps = nullptr;
|
| const base::ListValue* list = nullptr;
|
| - if (!extension->manifest()->Get(keys::kKioskSecondaryApps,
|
| - &secondary_apps) ||
|
| + if (!manifest->Get(keys::kKioskSecondaryApps, &secondary_apps) ||
|
| !secondary_apps->GetAsList(&list)) {
|
| *error = base::ASCIIToUTF16(manifest_errors::kInvalidKioskSecondaryApps);
|
| return false;
|
| @@ -115,8 +130,20 @@ bool KioskModeHandler::Parse(Extension* extension, base::string16* error) {
|
| }
|
| }
|
|
|
| - extension->SetManifestData(keys::kKioskMode,
|
| - new KioskModeInfo(kiosk_status, ids));
|
| + // Optional kiosk.required_platform_version key.
|
| + std::string required_platform_version;
|
| + if (manifest->HasPath(keys::kKioskRequiredPlatformVersion) &&
|
| + (!manifest->GetString(keys::kKioskRequiredPlatformVersion,
|
| + &required_platform_version) ||
|
| + !IsValidPlatformVersion(required_platform_version))) {
|
| + *error = base::ASCIIToUTF16(
|
| + manifest_errors::kInvalidKioskRequiredPlatformVersion);
|
| + return false;
|
| + }
|
| +
|
| + extension->SetManifestData(
|
| + keys::kKioskMode,
|
| + new KioskModeInfo(kiosk_status, ids, required_platform_version));
|
|
|
| return true;
|
| }
|
|
|