summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/manifest_handlers
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/extensions/manifest_handlers')
-rw-r--r--chrome/common/extensions/manifest_handlers/kiosk_enabled_info.cc60
-rw-r--r--chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h42
-rw-r--r--chrome/common/extensions/manifest_handlers/kiosk_mode_info.cc89
-rw-r--r--chrome/common/extensions/manifest_handlers/kiosk_mode_info.h55
4 files changed, 144 insertions, 102 deletions
diff --git a/chrome/common/extensions/manifest_handlers/kiosk_enabled_info.cc b/chrome/common/extensions/manifest_handlers/kiosk_enabled_info.cc
deleted file mode 100644
index 4c50de5..0000000
--- a/chrome/common/extensions/manifest_handlers/kiosk_enabled_info.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h"
-
-#include "base/memory/scoped_ptr.h"
-#include "base/strings/string16.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
-#include "extensions/common/manifest_constants.h"
-
-namespace extensions {
-
-namespace keys = manifest_keys;
-
-KioskEnabledInfo::KioskEnabledInfo(bool is_kiosk_enabled)
- : kiosk_enabled(is_kiosk_enabled) {
-}
-
-KioskEnabledInfo::~KioskEnabledInfo() {
-}
-
-// static
-bool KioskEnabledInfo::IsKioskEnabled(const Extension* extension) {
- KioskEnabledInfo* info = static_cast<KioskEnabledInfo*>(
- extension->GetManifestData(keys::kKioskEnabled));
- return info ? info->kiosk_enabled : false;
-}
-
-KioskEnabledHandler::KioskEnabledHandler() {
-}
-
-KioskEnabledHandler::~KioskEnabledHandler() {
-}
-
-bool KioskEnabledHandler::Parse(Extension* extension, string16* error) {
- DCHECK(extension->manifest()->HasKey(keys::kKioskEnabled));
-
- bool kiosk_enabled = false;
- if (!extension->manifest()->GetBoolean(keys::kKioskEnabled, &kiosk_enabled)) {
- *error = ASCIIToUTF16(manifest_errors::kInvalidKioskEnabled);
- return false;
- }
-
- // All other use cases should be already filtered out by manifest feature
- // checks.
- DCHECK(extension->is_platform_app());
-
- extension->SetManifestData(keys::kKioskEnabled,
- new KioskEnabledInfo(kiosk_enabled));
- return true;
-}
-
-const std::vector<std::string> KioskEnabledHandler::Keys() const {
- return SingleKey(keys::kKioskEnabled);
-}
-
-} // namespace extensions
diff --git a/chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h b/chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h
deleted file mode 100644
index 3c61b08..0000000
--- a/chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_KIOSK_ENABLED_INFO_H_
-#define CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_KIOSK_ENABLED_INFO_H_
-
-#include <string>
-#include <vector>
-
-#include "chrome/common/extensions/extension.h"
-#include "chrome/common/extensions/manifest_handler.h"
-#include "extensions/common/manifest.h"
-
-namespace extensions {
-
-struct KioskEnabledInfo : public Extension::ManifestData {
- explicit KioskEnabledInfo(bool is_kiosk_enabled);
- virtual ~KioskEnabledInfo();
-
- bool kiosk_enabled;
-
- // Whether the extension or app should be enabled in app kiosk mode.
- static bool IsKioskEnabled(const Extension* extension);
-};
-
-// Parses the "kiosk_enabled" manifest key.
-class KioskEnabledHandler : public ManifestHandler {
- public:
- KioskEnabledHandler();
- virtual ~KioskEnabledHandler();
-
- virtual bool Parse(Extension* extension, string16* error) OVERRIDE;
- private:
- virtual const std::vector<std::string> Keys() const OVERRIDE;
-
- DISALLOW_COPY_AND_ASSIGN(KioskEnabledHandler);
-};
-
-} // namespace extensions
-
-#endif // CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_KIOSK_ENABLED_INFO_H_
diff --git a/chrome/common/extensions/manifest_handlers/kiosk_mode_info.cc b/chrome/common/extensions/manifest_handlers/kiosk_mode_info.cc
new file mode 100644
index 0000000..e610490
--- /dev/null
+++ b/chrome/common/extensions/manifest_handlers/kiosk_mode_info.cc
@@ -0,0 +1,89 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/extensions/manifest_handlers/kiosk_mode_info.h"
+
+#include "base/memory/scoped_ptr.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
+#include "extensions/common/manifest_constants.h"
+
+namespace extensions {
+
+namespace keys = manifest_keys;
+
+KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status)
+ : kiosk_status(kiosk_status) {
+}
+
+KioskModeInfo::~KioskModeInfo() {
+}
+
+// static
+bool KioskModeInfo::IsKioskEnabled(const Extension* extension) {
+ KioskModeInfo* info = static_cast<KioskModeInfo*>(
+ extension->GetManifestData(keys::kKioskMode));
+ return info ? info->kiosk_status != NONE : false;
+}
+
+// static
+bool KioskModeInfo::IsKioskOnly(const Extension* extension) {
+ KioskModeInfo* info = static_cast<KioskModeInfo*>(
+ extension->GetManifestData(keys::kKioskMode));
+ return info ? info->kiosk_status == ONLY : false;
+}
+
+KioskModeHandler::KioskModeHandler() {
+ supported_keys_.push_back(keys::kKioskEnabled);
+ supported_keys_.push_back(keys::kKioskOnly);
+}
+
+KioskModeHandler::~KioskModeHandler() {
+}
+
+bool KioskModeHandler::Parse(Extension* extension, string16* error) {
+ const Manifest* manifest = extension->manifest();
+ DCHECK(manifest->HasKey(keys::kKioskEnabled) ||
+ manifest->HasKey(keys::kKioskOnly));
+
+ bool kiosk_enabled = false;
+ if (manifest->HasKey(keys::kKioskEnabled) &&
+ !manifest->GetBoolean(keys::kKioskEnabled, &kiosk_enabled)) {
+ *error = ASCIIToUTF16(manifest_errors::kInvalidKioskEnabled);
+ return false;
+ }
+
+ bool kiosk_only = false;
+ if (manifest->HasKey(keys::kKioskOnly) &&
+ !manifest->GetBoolean(keys::kKioskOnly, &kiosk_only)) {
+ *error = ASCIIToUTF16(manifest_errors::kInvalidKioskOnly);
+ return false;
+ }
+
+ if (kiosk_only && !kiosk_enabled) {
+ *error = ASCIIToUTF16(manifest_errors::kInvalidKioskOnlyButNotEnabled);
+ return false;
+ }
+
+ // All other use cases should be already filtered out by manifest feature
+ // checks.
+ DCHECK(extension->is_platform_app());
+
+ KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE;
+ if (kiosk_enabled)
+ kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED;
+
+ extension->SetManifestData(keys::kKioskMode,
+ new KioskModeInfo(kiosk_status));
+
+ return true;
+}
+
+const std::vector<std::string> KioskModeHandler::Keys() const {
+ return supported_keys_;
+}
+
+} // namespace extensions
diff --git a/chrome/common/extensions/manifest_handlers/kiosk_mode_info.h b/chrome/common/extensions/manifest_handlers/kiosk_mode_info.h
new file mode 100644
index 0000000..05a553a
--- /dev/null
+++ b/chrome/common/extensions/manifest_handlers/kiosk_mode_info.h
@@ -0,0 +1,55 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_KIOSK_MODE_INFO_H_
+#define CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_KIOSK_MODE_INFO_H_
+
+#include <string>
+#include <vector>
+
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/manifest_handler.h"
+#include "extensions/common/manifest.h"
+
+namespace extensions {
+
+struct KioskModeInfo : public Extension::ManifestData {
+ public:
+ enum KioskStatus {
+ NONE,
+ ENABLED,
+ ONLY
+ };
+
+ explicit KioskModeInfo(KioskStatus kiosk_status);
+ virtual ~KioskModeInfo();
+
+ KioskStatus kiosk_status;
+
+ // Whether the extension or app is enabled for app kiosk mode.
+ static bool IsKioskEnabled(const Extension* extension);
+
+ // Whether the extension or app should only be available in kiosk mode.
+ static bool IsKioskOnly(const Extension* extension);
+};
+
+// Parses the "kiosk_enabled" and "kiosk_only" manifest keys.
+class KioskModeHandler : public ManifestHandler {
+ public:
+ KioskModeHandler();
+ virtual ~KioskModeHandler();
+
+ virtual bool Parse(Extension* extension, string16* error) OVERRIDE;
+
+ private:
+ virtual const std::vector<std::string> Keys() const OVERRIDE;
+
+ std::vector<std::string> supported_keys_;
+
+ DISALLOW_COPY_AND_ASSIGN(KioskModeHandler);
+};
+
+} // namespace extensions
+
+#endif // CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_KIOSK_MODE_INFO_H_