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

Unified Diff: chrome/common/extensions/features/complex_feature.cc

Issue 224163002: Move core features code to //extensions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move tests Created 6 years, 9 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: chrome/common/extensions/features/complex_feature.cc
diff --git a/chrome/common/extensions/features/complex_feature.cc b/chrome/common/extensions/features/complex_feature.cc
deleted file mode 100644
index 5a7791ef6aff12dd15c6cc3197710aab2386c503..0000000000000000000000000000000000000000
--- a/chrome/common/extensions/features/complex_feature.cc
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/common/extensions/features/complex_feature.h"
-
-namespace extensions {
-
-ComplexFeature::ComplexFeature(scoped_ptr<FeatureList> features) {
- DCHECK_GT(features->size(), 0UL);
- features_.swap(*features);
-
-#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
- // Verify GetContexts, IsInternal, & IsBlockedInServiceWorker are consistent
- // across all features.
- std::set<Feature::Context>* first_contexts = features_[0]->GetContexts();
- bool first_is_internal = features_[0]->IsInternal();
- bool first_blocked_in_service_worker =
- features_[0]->IsBlockedInServiceWorker();
- for (FeatureList::const_iterator it = features_.begin() + 1;
- it != features_.end();
- ++it) {
- DCHECK(*first_contexts == *(*it)->GetContexts())
- << "Complex feature must have consistent values of "
- "contexts across all sub features.";
- DCHECK(first_is_internal == (*it)->IsInternal())
- << "Complex feature must have consistent values of "
- "internal across all sub features.";
- DCHECK(first_blocked_in_service_worker == (*it)->IsBlockedInServiceWorker())
- << "Complex feature must have consistent values of "
- "blocked_in_service_worker across all sub features.";
- }
-#endif
-}
-
-ComplexFeature::~ComplexFeature() {
-}
-
-Feature::Availability ComplexFeature::IsAvailableToManifest(
- const std::string& extension_id, Manifest::Type type, Location location,
- int manifest_version, Platform platform) const {
- Feature::Availability first_availability =
- features_[0]->IsAvailableToManifest(
- extension_id, type, location, manifest_version, platform);
- if (first_availability.is_available())
- return first_availability;
-
- for (FeatureList::const_iterator it = features_.begin() + 1;
- it != features_.end(); ++it) {
- Availability availability = (*it)->IsAvailableToManifest(
- extension_id, type, location, manifest_version, platform);
- if (availability.is_available())
- return availability;
- }
- // If none of the SimpleFeatures are available, we return the availability
- // info of the first SimpleFeature that was not available.
- return first_availability;
-}
-
-Feature::Availability ComplexFeature::IsAvailableToContext(
- const Extension* extension,
- Context context,
- const GURL& url,
- Platform platform) const {
- Feature::Availability first_availability =
- features_[0]->IsAvailableToContext(extension, context, url, platform);
- if (first_availability.is_available())
- return first_availability;
-
- for (FeatureList::const_iterator it = features_.begin() + 1;
- it != features_.end(); ++it) {
- Availability availability =
- (*it)->IsAvailableToContext(extension, context, url, platform);
- if (availability.is_available())
- return availability;
- }
- // If none of the SimpleFeatures are available, we return the availability
- // info of the first SimpleFeature that was not available.
- return first_availability;
-}
-
-bool ComplexFeature::IsIdInWhitelist(const std::string& extension_id) const {
- for (FeatureList::const_iterator it = features_.begin();
- it != features_.end();
- ++it) {
- if ((*it)->IsIdInWhitelist(extension_id))
- return true;
- }
- return false;
-}
-
-bool ComplexFeature::IsBlockedInServiceWorker() const {
- // Constructor verifies that composed features are consistent, thus we can
- // return just the first feature's value.
- return features_[0]->IsBlockedInServiceWorker();
-}
-
-std::set<Feature::Context>* ComplexFeature::GetContexts() {
- // TODO(justinlin): Current use cases for ComplexFeatures are simple (e.g.
- // allow API in dev channel for everyone but stable channel for a whitelist),
- // but if they get more complicated, we need to return some meaningful context
- // set. Either that or remove this method from the Feature interface.
- return features_[0]->GetContexts();
-}
-
-bool ComplexFeature::IsInternal() const {
- // TODO(justinlin): Same as the above TODO.
- return features_[0]->IsInternal();
-}
-
-std::string ComplexFeature::GetAvailabilityMessage(AvailabilityResult result,
- Manifest::Type type,
- const GURL& url,
- Context context) const {
- if (result == IS_AVAILABLE)
- return std::string();
-
- // TODO(justinlin): Form some kind of combined availabilities/messages from
- // SimpleFeatures.
- return features_[0]->GetAvailabilityMessage(result, type, url, context);
-}
-
-} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698