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

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: Remove the special case for disabling external cache for kiosk mode. 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
26 bool KioskModeInfo::IsKioskEnabled(const Extension* extension) { 29 bool KioskModeInfo::IsKioskEnabled(const Extension* extension) {
27 KioskModeInfo* info = static_cast<KioskModeInfo*>( 30 KioskModeInfo* info = static_cast<KioskModeInfo*>(
28 extension->GetManifestData(keys::kKioskMode)); 31 extension->GetManifestData(keys::kKioskMode));
29 return info ? info->kiosk_status != NONE : false; 32 return info ? info->kiosk_status != NONE : false;
30 } 33 }
31 34
32 // static 35 // static
33 bool KioskModeInfo::IsKioskOnly(const Extension* extension) { 36 bool KioskModeInfo::IsKioskOnly(const Extension* extension) {
34 KioskModeInfo* info = static_cast<KioskModeInfo*>( 37 KioskModeInfo* info = static_cast<KioskModeInfo*>(
35 extension->GetManifestData(keys::kKioskMode)); 38 extension->GetManifestData(keys::kKioskMode));
36 return info ? info->kiosk_status == ONLY : false; 39 return info ? info->kiosk_status == ONLY : false;
37 } 40 }
38 41
42 // static
43 bool KioskModeInfo::HasSecondaryApps(const Extension* extension) {
44 KioskModeInfo* info =
45 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.
46 return info && !info->secondary_app_ids.empty();
47 }
48
49 // static
50 KioskModeInfo* KioskModeInfo::Get(const Extension* extension) {
51 return static_cast<KioskModeInfo*>(
52 extension->GetManifestData(keys::kKioskMode));
53 }
54
39 KioskModeHandler::KioskModeHandler() { 55 KioskModeHandler::KioskModeHandler() {
40 supported_keys_.push_back(keys::kKioskEnabled); 56 supported_keys_.push_back(keys::kKioskEnabled);
41 supported_keys_.push_back(keys::kKioskOnly); 57 supported_keys_.push_back(keys::kKioskOnly);
58 supported_keys_.push_back(keys::kKioskSecondaryApps);
42 } 59 }
43 60
44 KioskModeHandler::~KioskModeHandler() { 61 KioskModeHandler::~KioskModeHandler() {
45 } 62 }
46 63
47 bool KioskModeHandler::Parse(Extension* extension, base::string16* error) { 64 bool KioskModeHandler::Parse(Extension* extension, base::string16* error) {
48 const Manifest* manifest = extension->manifest(); 65 const Manifest* manifest = extension->manifest();
49 DCHECK(manifest->HasKey(keys::kKioskEnabled) || 66 DCHECK(manifest->HasKey(keys::kKioskEnabled) ||
50 manifest->HasKey(keys::kKioskOnly)); 67 manifest->HasKey(keys::kKioskOnly));
51 68
(...skipping 18 matching lines...) Expand all
70 } 87 }
71 88
72 // All other use cases should be already filtered out by manifest feature 89 // All other use cases should be already filtered out by manifest feature
73 // checks. 90 // checks.
74 DCHECK(extension->is_platform_app()); 91 DCHECK(extension->is_platform_app());
75 92
76 KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE; 93 KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE;
77 if (kiosk_enabled) 94 if (kiosk_enabled)
78 kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED; 95 kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED;
79 96
97 // Kiosk secondary apps key is optional.
98 std::vector<std::string> ids;
99 if (extension->manifest()->HasKey(keys::kKioskSecondaryApps)) {
100 const base::Value* secondary_apps = nullptr;
101 const base::ListValue* list = nullptr;
102 if (!extension->manifest()->Get(keys::kKioskSecondaryApps,
103 &secondary_apps) ||
104 !secondary_apps->GetAsList(&list)) {
105 *error = base::ASCIIToUTF16(manifest_errors::kInvalidKioskSecondaryApps);
106 return false;
107 }
108
109 for (const base::Value* value : *list) {
110 scoped_ptr<KioskSecondaryAppsType> app =
111 KioskSecondaryAppsType::FromValue(*value, error);
112 if (!app) {
113 *error = base::ASCIIToUTF16(
114 manifest_errors::kInvalidKioskSecondaryAppsBadAppId);
115 return false;
116 }
117 ids.push_back(app->id);
118 }
119 }
120
80 extension->SetManifestData(keys::kKioskMode, 121 extension->SetManifestData(keys::kKioskMode,
81 new KioskModeInfo(kiosk_status)); 122 new KioskModeInfo(kiosk_status, ids));
82 123
83 return true; 124 return true;
84 } 125 }
85 126
86 const std::vector<std::string> KioskModeHandler::Keys() const { 127 const std::vector<std::string> KioskModeHandler::Keys() const {
87 return supported_keys_; 128 return supported_keys_;
88 } 129 }
89 130
90 } // namespace extensions 131 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698