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

Unified Diff: extensions/common/features/simple_feature.cc

Issue 2255613003: Introduce session type parameter to extension features (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Introduce session type parameter to extension features Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: extensions/common/features/simple_feature.cc
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc
index 37a0c80dc2572469423bd7d6ceb31b2d15ca6067..76172cc75b0fd9f70142a7baff84dcfd8931686f 100644
--- a/extensions/common/features/simple_feature.cc
+++ b/extensions/common/features/simple_feature.cc
@@ -207,6 +207,19 @@ std::string GetDisplayName(version_info::Channel channel) {
return "";
}
+std::string GetSessionTypeDisplayName(FeatureSessionType session_type) {
+ switch (session_type) {
+ case FeatureSessionType::UNKNOWN:
+ return "unknown";
+ case FeatureSessionType::KIOSK:
+ return "kiosk app";
+ case FeatureSessionType::REGULAR:
+ return "regular user";
+ default:
+ return "";
+ }
+}
+
// Gets a human-readable list of the display names (pluralized, comma separated
// with the "and" in the correct place) for each of |enum_types|.
template <typename EnumType>
@@ -297,6 +310,9 @@ struct SimpleFeature::Mappings {
channels["dev"] = version_info::Channel::DEV;
channels["beta"] = version_info::Channel::BETA;
channels["stable"] = version_info::Channel::STABLE;
+
+ session_types["regular"] = FeatureSessionType::REGULAR;
+ session_types["kiosk"] = FeatureSessionType::KIOSK;
}
std::map<std::string, Manifest::Type> extension_types;
@@ -304,6 +320,7 @@ struct SimpleFeature::Mappings {
std::map<std::string, SimpleFeature::Location> locations;
std::map<std::string, Feature::Platform> platforms;
std::map<std::string, version_info::Channel> channels;
+ std::map<std::string, FeatureSessionType> session_types;
};
SimpleFeature::SimpleFeature()
@@ -339,6 +356,9 @@ void SimpleFeature::Parse(const base::DictionaryValue* dictionary) {
} else if (key == "contexts") {
ParseEnumVector<Context>(value, &contexts_,
mappings.Get().contexts);
+ } else if (key == "session_types") {
+ ParseEnumVector<FeatureSessionType>(value, &session_types_,
+ mappings.Get().session_types);
} else if (key == "location") {
ParseEnum<Location>(value, &location_, mappings.Get().locations);
} else if (key == "platforms") {
@@ -448,7 +468,7 @@ Feature::Availability SimpleFeature::IsAvailableToManifest(
Feature::Availability SimpleFeature::IsAvailableToContext(
const Extension* extension,
- SimpleFeature::Context context,
+ Feature::Context context,
const GURL& url,
SimpleFeature::Platform platform) const {
if (extension) {
@@ -476,10 +496,16 @@ Feature::Availability SimpleFeature::IsAvailableToContext(
return CreateAvailability(INVALID_URL, url);
}
+ FeatureSessionType session_type = GetCurrentFeatureSessionType();
+ if (!session_types_.empty() &&
+ !base::ContainsValue(session_types_, session_type)) {
+ return CreateAvailability(INVALID_SESSION_TYPE, session_type);
+ }
+
// TODO(kalman): Assert that if the context was a webpage or WebUI context
// then at some point a "matches" restriction was checked.
- return CheckDependencies(base::Bind(
- &IsAvailableToContextForBind, extension, context, url, platform));
+ return CheckDependencies(base::Bind(&IsAvailableToContextForBind, extension,
+ context, url, platform));
}
std::string SimpleFeature::GetAvailabilityMessage(
@@ -487,7 +513,8 @@ std::string SimpleFeature::GetAvailabilityMessage(
Manifest::Type type,
const GURL& url,
Context context,
- version_info::Channel channel) const {
+ version_info::Channel channel,
+ FeatureSessionType session_type) const {
switch (result) {
case IS_AVAILABLE:
return std::string();
@@ -531,6 +558,10 @@ std::string SimpleFeature::GetAvailabilityMessage(
"'%s' requires manifest version of %d or lower.",
name().c_str(),
max_manifest_version_);
+ case INVALID_SESSION_TYPE:
+ return base::StringPrintf(
+ "'%s' is not allowed in %s session", name().c_str(),
+ GetSessionTypeDisplayName(session_type).c_str());
case NOT_PRESENT:
return base::StringPrintf(
"'%s' requires a different Feature that is not present.",
@@ -553,25 +584,26 @@ std::string SimpleFeature::GetAvailabilityMessage(
Feature::Availability SimpleFeature::CreateAvailability(
AvailabilityResult result) const {
return Availability(
- result, GetAvailabilityMessage(result, Manifest::TYPE_UNKNOWN, GURL(),
- UNSPECIFIED_CONTEXT,
- version_info::Channel::UNKNOWN));
+ result, GetAvailabilityMessage(
+ result, Manifest::TYPE_UNKNOWN, GURL(), UNSPECIFIED_CONTEXT,
+ version_info::Channel::UNKNOWN, FeatureSessionType::UNKNOWN));
}
Feature::Availability SimpleFeature::CreateAvailability(
AvailabilityResult result, Manifest::Type type) const {
return Availability(
result, GetAvailabilityMessage(result, type, GURL(), UNSPECIFIED_CONTEXT,
- version_info::Channel::UNKNOWN));
+ version_info::Channel::UNKNOWN,
+ FeatureSessionType::UNKNOWN));
}
Feature::Availability SimpleFeature::CreateAvailability(
AvailabilityResult result,
const GURL& url) const {
return Availability(
- result, GetAvailabilityMessage(result, Manifest::TYPE_UNKNOWN, url,
- UNSPECIFIED_CONTEXT,
- version_info::Channel::UNKNOWN));
+ result, GetAvailabilityMessage(
+ result, Manifest::TYPE_UNKNOWN, url, UNSPECIFIED_CONTEXT,
+ version_info::Channel::UNKNOWN, FeatureSessionType::UNKNOWN));
}
Feature::Availability SimpleFeature::CreateAvailability(
@@ -579,7 +611,8 @@ Feature::Availability SimpleFeature::CreateAvailability(
Context context) const {
return Availability(
result, GetAvailabilityMessage(result, Manifest::TYPE_UNKNOWN, GURL(),
- context, version_info::Channel::UNKNOWN));
+ context, version_info::Channel::UNKNOWN,
+ FeatureSessionType::UNKNOWN));
}
Feature::Availability SimpleFeature::CreateAvailability(
@@ -587,7 +620,17 @@ Feature::Availability SimpleFeature::CreateAvailability(
version_info::Channel channel) const {
return Availability(
result, GetAvailabilityMessage(result, Manifest::TYPE_UNKNOWN, GURL(),
- UNSPECIFIED_CONTEXT, channel));
+ UNSPECIFIED_CONTEXT, channel,
+ FeatureSessionType::UNKNOWN));
+}
+
+Feature::Availability SimpleFeature::CreateAvailability(
+ AvailabilityResult result,
+ FeatureSessionType session_type) const {
+ return Availability(
+ result, GetAvailabilityMessage(
+ result, Manifest::TYPE_UNKNOWN, GURL(), UNSPECIFIED_CONTEXT,
+ version_info::Channel::UNKNOWN, session_type));
}
bool SimpleFeature::IsInternal() const {
@@ -691,6 +734,11 @@ void SimpleFeature::set_extension_types(
extension_types_ = types;
}
+void SimpleFeature::set_session_types(
+ std::initializer_list<FeatureSessionType> types) {
+ session_types_ = types;
+}
+
void SimpleFeature::set_matches(
std::initializer_list<const char* const> matches) {
matches_.ClearPatterns();

Powered by Google App Engine
This is Rietveld 408576698