Chromium Code Reviews| 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..1863239f95b6e77b29726c3a8574709ae8502278 100644 |
| --- a/extensions/common/manifest_handlers/kiosk_mode_info.cc |
| +++ b/extensions/common/manifest_handlers/kiosk_mode_info.cc |
| @@ -9,15 +9,18 @@ |
| #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() { |
| } |
| @@ -36,9 +39,23 @@ bool KioskModeInfo::IsKioskOnly(const Extension* extension) { |
| return info ? info->kiosk_status == ONLY : false; |
| } |
| +// static |
| +bool KioskModeInfo::HasSecondaryApps(const Extension* extension) { |
| + KioskModeInfo* info = |
| + static_cast<KioskModeInfo*>(extension->GetManifestData(keys::kKioskMode)); |
|
not at google - send to devlin
2015/09/01 22:51:10
More concise, just "KioskModeInfo* info = Get(exte
jennyz
2015/09/02 21:42:23
Done.
|
| + return info && !info->secondary_app_ids.empty(); |
| +} |
| + |
| +// static |
| +KioskModeInfo* KioskModeInfo::Get(const Extension* extension) { |
| + return static_cast<KioskModeInfo*>( |
| + extension->GetManifestData(keys::kKioskMode)); |
| +} |
| + |
| KioskModeHandler::KioskModeHandler() { |
| supported_keys_.push_back(keys::kKioskEnabled); |
| supported_keys_.push_back(keys::kKioskOnly); |
| + supported_keys_.push_back(keys::kKioskSecondaryApps); |
| } |
| KioskModeHandler::~KioskModeHandler() { |
| @@ -77,8 +94,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; |
| } |