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