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

Unified Diff: extensions/common/manifest_handlers/kiosk_mode_info.cc

Issue 1595483004: kiosk: Add kiosk.required_platform_version manifest key (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
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..b8d541a8236995f85bff788c2307dea3017995b8 100644
--- a/extensions/common/manifest_handlers/kiosk_mode_info.cc
+++ b/extensions/common/manifest_handlers/kiosk_mode_info.cc
@@ -6,12 +6,39 @@
#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/string_tokenizer.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "extensions/common/api/extensions_manifest_types.h"
#include "extensions/common/manifest_constants.h"
+namespace {
+
+// Whether the given |version| is a valid platform version. The acceptable
+// format is major[.minor[.micro]], where major, minor and micro are decimals.
+bool IsValidPlatformVersion(const std::string& version) {
+ int count = 0;
+
+ base::StringTokenizer tokenizer(version, ".");
+ while (tokenizer.GetNext()) {
+ int version_number;
+ if (!base::StringToInt(
+ base::StringPiece(tokenizer.token_begin(), tokenizer.token_end()),
+ &version_number)) {
+ return false;
+ }
+ ++count;
+ if (count > 3)
+ return false;
+ }
+
+ return count > 0;
+}
asargent_no_longer_on_chrome 2016/01/15 23:27:33 could you just use base::Version for this instead
xiyuan 2016/01/19 23:40:52 Good call. Done.
+
+} // namespace
+
namespace extensions {
namespace keys = manifest_keys;
@@ -19,8 +46,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() {
}
@@ -53,6 +83,7 @@ KioskModeHandler::KioskModeHandler() {
supported_keys_.push_back(keys::kKioskEnabled);
supported_keys_.push_back(keys::kKioskOnly);
supported_keys_.push_back(keys::kKioskSecondaryApps);
+ supported_keys_.push_back(keys::kRequiredPlatformVersion);
}
KioskModeHandler::~KioskModeHandler() {
@@ -93,11 +124,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 +145,20 @@ bool KioskModeHandler::Parse(Extension* extension, base::string16* error) {
}
}
- extension->SetManifestData(keys::kKioskMode,
- new KioskModeInfo(kiosk_status, ids));
+ // Optional required_platform_version key.
+ std::string required_platform_version;
+ if (manifest->HasKey(keys::kRequiredPlatformVersion) &&
+ (!manifest->GetString(keys::kRequiredPlatformVersion,
+ &required_platform_version) ||
+ !IsValidPlatformVersion(required_platform_version))) {
+ *error =
+ base::ASCIIToUTF16(manifest_errors::kInvalidRequiredPlatformVersion);
+ return false;
+ }
+
+ extension->SetManifestData(
+ keys::kKioskMode,
+ new KioskModeInfo(kiosk_status, ids, required_platform_version));
return true;
}

Powered by Google App Engine
This is Rietveld 408576698