1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file. 4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifndef EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_FILTER_H_ 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_FILTER_H_ 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <string> 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/common/features/feature.h" 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "extensions/common/manifest.h" 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass GURL; 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace base { 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass DictionaryValue; 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace extensions { 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass SimpleFeature; 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// A SimpleFeatureFilter can be attached to SimpleFeature objects to provide 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// additional parsing and availability filtering behavior. 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass SimpleFeatureFilter { 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public: 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch explicit SimpleFeatureFilter(SimpleFeature* feature); 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual ~SimpleFeatureFilter(); 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SimpleFeature* feature() const { return feature_; } 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Parses any additional feature data that may be used by this filter. 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Returns an error string on failure or the empty string on success. 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // The default implementation simply returns the empty string. 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual std::string Parse(const base::DictionaryValue* value); 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Indicates whether or not the owning feature is available within a given 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // extensions context. The default implementation only affirms availability. 39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual Feature::Availability IsAvailableToContext( 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const Extension* extension, 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Feature::Context context, 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const GURL& url, 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Feature::Platform platform) const; 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Indicates whether or not the owning feature is available to a given 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // extension manifest. The default implementation only affirms availability. 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual Feature::Availability IsAvailableToManifest( 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const std::string& extension_id, 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Manifest::Type type, 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Manifest::Location location, 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch int manifest_version, 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Feature::Platform platform) const; 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private: 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // The feature which owns this filter. 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch SimpleFeature* feature_; 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DISALLOW_COPY_AND_ASSIGN(SimpleFeatureFilter); 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}; 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace extensions 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif // EXTENSIONS_COMMON_FEATURES_SIMPLE_FEATURE_FILTER_H_ 64