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 f5d36afbef02fe14536aeb05a4d34987ab2049e0..d265c232787237b35eb09cc1e6c1b7f1c658142a 100644 |
--- a/extensions/common/manifest_handlers/kiosk_mode_info.cc |
+++ b/extensions/common/manifest_handlers/kiosk_mode_info.cc |
@@ -9,36 +9,50 @@ |
#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 extensions { |
namespace keys = manifest_keys; |
-KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status) |
- : kiosk_status(kiosk_status) { |
-} |
+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) {} |
KioskModeInfo::~KioskModeInfo() { |
} |
// static |
-bool KioskModeInfo::IsKioskEnabled(const Extension* extension) { |
- KioskModeInfo* info = static_cast<KioskModeInfo*>( |
+KioskModeInfo* KioskModeInfo::Get(const Extension* extension) { |
+ return static_cast<KioskModeInfo*>( |
extension->GetManifestData(keys::kKioskMode)); |
+} |
+ |
+// static |
+bool KioskModeInfo::IsKioskEnabled(const Extension* extension) { |
+ KioskModeInfo* info = Get(extension); |
return info ? info->kiosk_status != NONE : false; |
} |
// static |
bool KioskModeInfo::IsKioskOnly(const Extension* extension) { |
- KioskModeInfo* info = static_cast<KioskModeInfo*>( |
- extension->GetManifestData(keys::kKioskMode)); |
+ KioskModeInfo* info = Get(extension); |
return info ? info->kiosk_status == ONLY : false; |
} |
+// static |
+bool KioskModeInfo::HasSecondaryApps(const Extension* extension) { |
+ KioskModeInfo* info = Get(extension); |
+ return info && !info->secondary_app_ids.empty(); |
+} |
+ |
KioskModeHandler::KioskModeHandler() { |
supported_keys_.push_back(keys::kKioskEnabled); |
supported_keys_.push_back(keys::kKioskOnly); |
+ supported_keys_.push_back(keys::kKioskSecondaryApps); |
} |
KioskModeHandler::~KioskModeHandler() { |
@@ -77,8 +91,32 @@ bool KioskModeHandler::Parse(Extension* extension, base::string16* error) { |
if (kiosk_enabled) |
kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED; |
+ // Kiosk secondary apps key is optional. |
+ std::vector<std::string> ids; |
+ if (extension->manifest()->HasKey(keys::kKioskSecondaryApps)) { |
+ const base::Value* secondary_apps = nullptr; |
+ const base::ListValue* list = nullptr; |
+ if (!extension->manifest()->Get(keys::kKioskSecondaryApps, |
+ &secondary_apps) || |
+ !secondary_apps->GetAsList(&list)) { |
+ *error = base::ASCIIToUTF16(manifest_errors::kInvalidKioskSecondaryApps); |
+ return false; |
+ } |
+ |
+ for (const base::Value* value : *list) { |
+ scoped_ptr<KioskSecondaryAppsType> app = |
+ KioskSecondaryAppsType::FromValue(*value, error); |
+ if (!app) { |
+ *error = base::ASCIIToUTF16( |
+ manifest_errors::kInvalidKioskSecondaryAppsBadAppId); |
+ return false; |
+ } |
+ ids.push_back(app->id); |
+ } |
+ } |
+ |
extension->SetManifestData(keys::kKioskMode, |
- new KioskModeInfo(kiosk_status)); |
+ new KioskModeInfo(kiosk_status, ids)); |
return true; |
} |