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

Side by Side Diff: extensions/common/manifest_handlers/kiosk_mode_info.cc

Issue 1301323005: Implement kiosk multiple apps feature. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/common/manifest_handlers/kiosk_mode_info.h" 5 #include "extensions/common/manifest_handlers/kiosk_mode_info.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/strings/string16.h" 8 #include "base/strings/string16.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "extensions/common/api/extensions_manifest_types.h"
12 #include "extensions/common/manifest_constants.h" 13 #include "extensions/common/manifest_constants.h"
13 14
14 namespace extensions { 15 namespace extensions {
15 16
16 namespace keys = manifest_keys; 17 namespace keys = manifest_keys;
17 18
18 KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status) 19 using api::extensions_manifest_types::KioskSecondaryAppsType;
19 : kiosk_status(kiosk_status) { 20
20 } 21 KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status,
22 const std::vector<std::string>& secondary_app_ids)
23 : kiosk_status(kiosk_status), secondary_app_ids(secondary_app_ids) {}
21 24
22 KioskModeInfo::~KioskModeInfo() { 25 KioskModeInfo::~KioskModeInfo() {
23 } 26 }
24 27
25 // static 28 // static
29 KioskModeInfo* KioskModeInfo::Get(const Extension* extension) {
30 return static_cast<KioskModeInfo*>(
31 extension->GetManifestData(keys::kKioskMode));
32 }
33
34 // static
26 bool KioskModeInfo::IsKioskEnabled(const Extension* extension) { 35 bool KioskModeInfo::IsKioskEnabled(const Extension* extension) {
27 KioskModeInfo* info = static_cast<KioskModeInfo*>( 36 KioskModeInfo* info = Get(extension);
28 extension->GetManifestData(keys::kKioskMode));
29 return info ? info->kiosk_status != NONE : false; 37 return info ? info->kiosk_status != NONE : false;
30 } 38 }
31 39
32 // static 40 // static
33 bool KioskModeInfo::IsKioskOnly(const Extension* extension) { 41 bool KioskModeInfo::IsKioskOnly(const Extension* extension) {
34 KioskModeInfo* info = static_cast<KioskModeInfo*>( 42 KioskModeInfo* info = Get(extension);
35 extension->GetManifestData(keys::kKioskMode));
36 return info ? info->kiosk_status == ONLY : false; 43 return info ? info->kiosk_status == ONLY : false;
37 } 44 }
38 45
46 // static
47 bool KioskModeInfo::HasSecondaryApps(const Extension* extension) {
48 KioskModeInfo* info = Get(extension);
49 return info && !info->secondary_app_ids.empty();
50 }
51
39 KioskModeHandler::KioskModeHandler() { 52 KioskModeHandler::KioskModeHandler() {
40 supported_keys_.push_back(keys::kKioskEnabled); 53 supported_keys_.push_back(keys::kKioskEnabled);
41 supported_keys_.push_back(keys::kKioskOnly); 54 supported_keys_.push_back(keys::kKioskOnly);
55 supported_keys_.push_back(keys::kKioskSecondaryApps);
42 } 56 }
43 57
44 KioskModeHandler::~KioskModeHandler() { 58 KioskModeHandler::~KioskModeHandler() {
45 } 59 }
46 60
47 bool KioskModeHandler::Parse(Extension* extension, base::string16* error) { 61 bool KioskModeHandler::Parse(Extension* extension, base::string16* error) {
48 const Manifest* manifest = extension->manifest(); 62 const Manifest* manifest = extension->manifest();
49 DCHECK(manifest->HasKey(keys::kKioskEnabled) || 63 DCHECK(manifest->HasKey(keys::kKioskEnabled) ||
50 manifest->HasKey(keys::kKioskOnly)); 64 manifest->HasKey(keys::kKioskOnly));
51 65
(...skipping 18 matching lines...) Expand all
70 } 84 }
71 85
72 // All other use cases should be already filtered out by manifest feature 86 // All other use cases should be already filtered out by manifest feature
73 // checks. 87 // checks.
74 DCHECK(extension->is_platform_app()); 88 DCHECK(extension->is_platform_app());
75 89
76 KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE; 90 KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE;
77 if (kiosk_enabled) 91 if (kiosk_enabled)
78 kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED; 92 kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED;
79 93
94 // Kiosk secondary apps key is optional.
95 std::vector<std::string> ids;
96 if (extension->manifest()->HasKey(keys::kKioskSecondaryApps)) {
97 const base::Value* secondary_apps = nullptr;
98 const base::ListValue* list = nullptr;
99 if (!extension->manifest()->Get(keys::kKioskSecondaryApps,
100 &secondary_apps) ||
101 !secondary_apps->GetAsList(&list)) {
102 *error = base::ASCIIToUTF16(manifest_errors::kInvalidKioskSecondaryApps);
103 return false;
104 }
105
106 for (const base::Value* value : *list) {
107 scoped_ptr<KioskSecondaryAppsType> app =
108 KioskSecondaryAppsType::FromValue(*value, error);
109 if (!app) {
110 *error = base::ASCIIToUTF16(
111 manifest_errors::kInvalidKioskSecondaryAppsBadAppId);
112 return false;
113 }
114 ids.push_back(app->id);
115 }
116 }
117
80 extension->SetManifestData(keys::kKioskMode, 118 extension->SetManifestData(keys::kKioskMode,
81 new KioskModeInfo(kiosk_status)); 119 new KioskModeInfo(kiosk_status, ids));
82 120
83 return true; 121 return true;
84 } 122 }
85 123
86 const std::vector<std::string> KioskModeHandler::Keys() const { 124 const std::vector<std::string> KioskModeHandler::Keys() const {
87 return supported_keys_; 125 return supported_keys_;
88 } 126 }
89 127
90 } // namespace extensions 128 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/manifest_handlers/kiosk_mode_info.h ('k') | extensions/common/manifest_handlers/kiosk_mode_info_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698