Index: extensions/common/features/simple_feature.cc |
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc |
index b30ba4f8e4d7f6953fcee849cf54131fba3d545a..d901cd9a70cb765eb6e0abd76ff46fab218bc7c5 100644 |
--- a/extensions/common/features/simple_feature.cc |
+++ b/extensions/common/features/simple_feature.cc |
@@ -134,6 +134,8 @@ std::string GetDisplayName(FeatureSessionType session_type) { |
return "unknown"; |
case FeatureSessionType::KIOSK: |
return "kiosk app"; |
+ case FeatureSessionType::AUTOLAUNCHED_KIOSK: |
+ return "auto-launched kiosk app"; |
case FeatureSessionType::REGULAR: |
return "regular user"; |
} |
@@ -259,11 +261,9 @@ Feature::Availability SimpleFeature::IsAvailableToManifest( |
if (channel_ && *channel_ < GetCurrentChannel()) |
return CreateAvailability(UNSUPPORTED_CHANNEL, *channel_); |
- FeatureSessionType session = GetCurrentFeatureSessionType(); |
- if (!session_types_.empty() && |
- !base::ContainsValue(session_types_, session)) { |
- return CreateAvailability(INVALID_SESSION_TYPE, session); |
- } |
+ const FeatureSessionType session_type = GetCurrentFeatureSessionType(); |
+ if (!MatchesSessionTypes(session_type)) |
+ return CreateAvailability(INVALID_SESSION_TYPE, session_type); |
return CheckDependencies(base::Bind(&IsAvailableToManifestForBind, |
extension_id, |
@@ -303,10 +303,9 @@ Feature::Availability SimpleFeature::IsAvailableToContext( |
return CreateAvailability(INVALID_URL, url); |
} |
- FeatureSessionType session = GetCurrentFeatureSessionType(); |
- if (!session_types_.empty() && |
- !base::ContainsValue(session_types_, session)) { |
- return CreateAvailability(INVALID_SESSION_TYPE, session); |
+ const FeatureSessionType session_type = GetCurrentFeatureSessionType(); |
+ if (!MatchesSessionTypes(session_type)) { |
+ return CreateAvailability(INVALID_SESSION_TYPE, session_type); |
} |
// TODO(kalman): Assert that if the context was a webpage or WebUI context |
@@ -497,6 +496,20 @@ bool SimpleFeature::MatchesManifestLocation( |
return false; |
} |
+bool SimpleFeature::MatchesSessionTypes(FeatureSessionType session_type) const { |
+ if (session_types_.empty()) |
+ return true; |
+ |
+ if (base::ContainsValue(session_types_, session_type)) |
+ return true; |
+ |
+ // AUTOLAUNCHED_KIOSK session type is subset of KIOSK - accept auto-lauched |
+ // kiosk session if kiosk session is allowed. This is the only exception to |
+ // rejecting session type that is not present in |session_types_| |
+ return session_type == FeatureSessionType::AUTOLAUNCHED_KIOSK && |
+ base::ContainsValue(session_types_, FeatureSessionType::KIOSK); |
+} |
+ |
Feature::Availability SimpleFeature::CheckDependencies( |
const base::Callback<Availability(const Feature*)>& checker) const { |
for (const auto& dep_name : dependencies_) { |