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

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

Issue 1595483004: kiosk: Add kiosk.required_platform_version manifest key (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: put required_platform_version under kiosk and target dev channel Created 4 years, 11 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 "base/version.h"
12 #include "extensions/common/api/extensions_manifest_types.h" 13 #include "extensions/common/api/extensions_manifest_types.h"
13 #include "extensions/common/manifest_constants.h" 14 #include "extensions/common/manifest_constants.h"
14 15
16 namespace {
17
18 // Whether the given |version_string| is a valid ChromeOS platform version.
19 // The acceptable format is major[.minor[.micro]].
20 bool IsValidPlatformVersion(const std::string& version_string) {
21 const base::Version version(version_string);
22 return version.IsValid() && version.components().size() <= 3u;
23 }
24
25 } // namespace
26
15 namespace extensions { 27 namespace extensions {
16 28
17 namespace keys = manifest_keys; 29 namespace keys = manifest_keys;
18 30
19 using api::extensions_manifest_types::KioskSecondaryAppsType; 31 using api::extensions_manifest_types::KioskSecondaryAppsType;
20 32
21 KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status, 33 KioskModeInfo::KioskModeInfo(KioskStatus kiosk_status,
22 const std::vector<std::string>& secondary_app_ids) 34 const std::vector<std::string>& secondary_app_ids,
23 : kiosk_status(kiosk_status), secondary_app_ids(secondary_app_ids) {} 35 const std::string& required_platform_version)
36 : kiosk_status(kiosk_status),
37 secondary_app_ids(secondary_app_ids),
38 required_platform_version(required_platform_version) {}
24 39
25 KioskModeInfo::~KioskModeInfo() { 40 KioskModeInfo::~KioskModeInfo() {
26 } 41 }
27 42
28 // static 43 // static
29 KioskModeInfo* KioskModeInfo::Get(const Extension* extension) { 44 KioskModeInfo* KioskModeInfo::Get(const Extension* extension) {
30 return static_cast<KioskModeInfo*>( 45 return static_cast<KioskModeInfo*>(
31 extension->GetManifestData(keys::kKioskMode)); 46 extension->GetManifestData(keys::kKioskMode));
32 } 47 }
33 48
34 // static 49 // static
35 bool KioskModeInfo::IsKioskEnabled(const Extension* extension) { 50 bool KioskModeInfo::IsKioskEnabled(const Extension* extension) {
36 KioskModeInfo* info = Get(extension); 51 KioskModeInfo* info = Get(extension);
37 return info ? info->kiosk_status != NONE : false; 52 return info ? info->kiosk_status != NONE : false;
38 } 53 }
39 54
40 // static 55 // static
41 bool KioskModeInfo::IsKioskOnly(const Extension* extension) { 56 bool KioskModeInfo::IsKioskOnly(const Extension* extension) {
42 KioskModeInfo* info = Get(extension); 57 KioskModeInfo* info = Get(extension);
43 return info ? info->kiosk_status == ONLY : false; 58 return info ? info->kiosk_status == ONLY : false;
44 } 59 }
45 60
46 // static 61 // static
47 bool KioskModeInfo::HasSecondaryApps(const Extension* extension) { 62 bool KioskModeInfo::HasSecondaryApps(const Extension* extension) {
48 KioskModeInfo* info = Get(extension); 63 KioskModeInfo* info = Get(extension);
49 return info && !info->secondary_app_ids.empty(); 64 return info && !info->secondary_app_ids.empty();
50 } 65 }
51 66
52 KioskModeHandler::KioskModeHandler() { 67 KioskModeHandler::KioskModeHandler() {
68 supported_keys_.push_back(keys::kKiosk);
53 supported_keys_.push_back(keys::kKioskEnabled); 69 supported_keys_.push_back(keys::kKioskEnabled);
54 supported_keys_.push_back(keys::kKioskOnly); 70 supported_keys_.push_back(keys::kKioskOnly);
55 supported_keys_.push_back(keys::kKioskSecondaryApps); 71 supported_keys_.push_back(keys::kKioskSecondaryApps);
56 } 72 }
57 73
58 KioskModeHandler::~KioskModeHandler() { 74 KioskModeHandler::~KioskModeHandler() {
59 } 75 }
60 76
61 bool KioskModeHandler::Parse(Extension* extension, base::string16* error) { 77 bool KioskModeHandler::Parse(Extension* extension, base::string16* error) {
62 const Manifest* manifest = extension->manifest(); 78 const Manifest* manifest = extension->manifest();
(...skipping 23 matching lines...) Expand all
86 // All other use cases should be already filtered out by manifest feature 102 // All other use cases should be already filtered out by manifest feature
87 // checks. 103 // checks.
88 DCHECK(extension->is_platform_app()); 104 DCHECK(extension->is_platform_app());
89 105
90 KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE; 106 KioskModeInfo::KioskStatus kiosk_status = KioskModeInfo::NONE;
91 if (kiosk_enabled) 107 if (kiosk_enabled)
92 kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED; 108 kiosk_status = kiosk_only ? KioskModeInfo::ONLY : KioskModeInfo::ENABLED;
93 109
94 // Kiosk secondary apps key is optional. 110 // Kiosk secondary apps key is optional.
95 std::vector<std::string> ids; 111 std::vector<std::string> ids;
96 if (extension->manifest()->HasKey(keys::kKioskSecondaryApps)) { 112 if (manifest->HasKey(keys::kKioskSecondaryApps)) {
97 const base::Value* secondary_apps = nullptr; 113 const base::Value* secondary_apps = nullptr;
98 const base::ListValue* list = nullptr; 114 const base::ListValue* list = nullptr;
99 if (!extension->manifest()->Get(keys::kKioskSecondaryApps, 115 if (!manifest->Get(keys::kKioskSecondaryApps, &secondary_apps) ||
100 &secondary_apps) ||
101 !secondary_apps->GetAsList(&list)) { 116 !secondary_apps->GetAsList(&list)) {
102 *error = base::ASCIIToUTF16(manifest_errors::kInvalidKioskSecondaryApps); 117 *error = base::ASCIIToUTF16(manifest_errors::kInvalidKioskSecondaryApps);
103 return false; 118 return false;
104 } 119 }
105 120
106 for (const base::Value* value : *list) { 121 for (const base::Value* value : *list) {
107 scoped_ptr<KioskSecondaryAppsType> app = 122 scoped_ptr<KioskSecondaryAppsType> app =
108 KioskSecondaryAppsType::FromValue(*value, error); 123 KioskSecondaryAppsType::FromValue(*value, error);
109 if (!app) { 124 if (!app) {
110 *error = base::ASCIIToUTF16( 125 *error = base::ASCIIToUTF16(
111 manifest_errors::kInvalidKioskSecondaryAppsBadAppId); 126 manifest_errors::kInvalidKioskSecondaryAppsBadAppId);
112 return false; 127 return false;
113 } 128 }
114 ids.push_back(app->id); 129 ids.push_back(app->id);
115 } 130 }
116 } 131 }
117 132
118 extension->SetManifestData(keys::kKioskMode, 133 // Optional kiosk.required_platform_version key.
119 new KioskModeInfo(kiosk_status, ids)); 134 std::string required_platform_version;
135 if (manifest->HasPath(keys::kKioskRequiredPlatformVersion) &&
136 (!manifest->GetString(keys::kKioskRequiredPlatformVersion,
137 &required_platform_version) ||
138 !IsValidPlatformVersion(required_platform_version))) {
139 *error = base::ASCIIToUTF16(
140 manifest_errors::kInvalidKioskRequiredPlatformVersion);
141 return false;
142 }
143
144 extension->SetManifestData(
145 keys::kKioskMode,
146 new KioskModeInfo(kiosk_status, ids, required_platform_version));
120 147
121 return true; 148 return true;
122 } 149 }
123 150
124 const std::vector<std::string> KioskModeHandler::Keys() const { 151 const std::vector<std::string> KioskModeHandler::Keys() const {
125 return supported_keys_; 152 return supported_keys_;
126 } 153 }
127 154
128 } // namespace extensions 155 } // 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