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

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, 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/common/features/simple_feature.h ('k') | extensions/common/features/simple_feature_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/common/features/simple_feature.cc
diff --git a/extensions/common/features/simple_feature.cc b/extensions/common/features/simple_feature.cc
index 048fcfb892a81b4015d02173644ccc4551e92e95..b30ba4f8e4d7f6953fcee849cf54131fba3d545a 100644
--- a/extensions/common/features/simple_feature.cc
+++ b/extensions/common/features/simple_feature.cc
@@ -126,6 +126,20 @@ std::string GetDisplayName(version_info::Channel channel) {
return "";
}
+std::string GetDisplayName(FeatureSessionType session_type) {
+ switch (session_type) {
+ case FeatureSessionType::INITIAL:
+ return "user-less";
+ case FeatureSessionType::UNKNOWN:
+ return "unknown";
+ case FeatureSessionType::KIOSK:
+ return "kiosk app";
+ case FeatureSessionType::REGULAR:
+ return "regular user";
+ }
+ 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>
@@ -245,6 +259,12 @@ 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);
+ }
+
return CheckDependencies(base::Bind(&IsAvailableToManifestForBind,
extension_id,
type,
@@ -255,7 +275,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) {
@@ -283,10 +303,16 @@ 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);
+ }
+
// 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(
@@ -294,7 +320,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();
@@ -338,6 +365,14 @@ 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 only allowed to run in %s sessions, but this is %s session.",
+ name().c_str(),
+ ListDisplayNames(std::vector<FeatureSessionType>(
+ session_types_.begin(), session_types_.end()))
+ .c_str(),
+ GetDisplayName(session_type).c_str());
case NOT_PRESENT:
return base::StringPrintf(
"'%s' requires a different Feature that is not present.",
@@ -360,25 +395,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(
@@ -386,7 +422,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(
@@ -394,7 +431,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 {
@@ -498,6 +545,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();
« no previous file with comments | « extensions/common/features/simple_feature.h ('k') | extensions/common/features/simple_feature_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698