blob: c325250b6b1235938a6fe6972d78bd475bbfebcd [file] [log] [blame]
// Copyright 2014 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.
#ifndef EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_FILTER_H_
#define EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_FILTER_H_
#include <string>
#include "extensions/common/features/feature.h"
#include "extensions/common/manifest.h"
class GURL;
namespace base {
class DictionaryValue;
}
namespace extensions {
class SimpleFeature;
// A SimpleFeatureFilter can be attached to SimpleFeature objects to provide
// additional parsing and availability filtering behavior.
class SimpleFeatureFilter {
public:
explicit SimpleFeatureFilter(SimpleFeature* feature);
virtual ~SimpleFeatureFilter();
SimpleFeature* feature() const { return feature_; }
// Parses any additional feature data that may be used by this filter.
// Returns an error string on failure or the empty string on success.
// The default implementation simply returns the empty string.
virtual std::string Parse(const base::DictionaryValue* value);
// Indicates whether or not the owning feature is available within a given
// extensions context. The default implementation only affirms availability.
virtual Feature::Availability IsAvailableToContext(
const Extension* extension,
Feature::Context context,
const GURL& url,
Feature::Platform platform) const;
// Indicates whether or not the owning feature is available to a given
// extension manifest. The default implementation only affirms availability.
virtual Feature::Availability IsAvailableToManifest(
const std::string& extension_id,
Manifest::Type type,
Manifest::Location location,
int manifest_version,
Feature::Platform platform) const;
private:
// The feature which owns this filter.
SimpleFeature* feature_;
DISALLOW_COPY_AND_ASSIGN(SimpleFeatureFilter);
};
} // namespace extensions
#endif // EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_FILTER_H_