| 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;
|
| }
|
|
|