1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "extensions/common/features/permission_feature.h"
6
7#include "extensions/common/permissions/permission_set.h"
8#include "extensions/common/permissions/permissions_data.h"
9
10namespace extensions {
11
12PermissionFeature::PermissionFeature() {
13}
14
15PermissionFeature::~PermissionFeature() {
16}
17
18Feature::Availability PermissionFeature::IsAvailableToContext(
19    const Extension* extension,
20    Feature::Context context,
21    const GURL& url,
22    Feature::Platform platform) const {
23  Availability availability = SimpleFeature::IsAvailableToContext(extension,
24                                                                  context,
25                                                                  url,
26                                                                  platform);
27  if (!availability.is_available())
28    return availability;
29
30  if (extension && !extension->permissions_data()->HasAPIPermission(name()))
31    return CreateAvailability(NOT_PRESENT, extension->GetType());
32
33  return CreateAvailability(IS_AVAILABLE);
34}
35
36std::string PermissionFeature::Parse(const base::DictionaryValue* value) {
37  std::string error = SimpleFeature::Parse(value);
38  if (!error.empty())
39    return error;
40
41  if (extension_types()->empty()) {
42    return name() + ": Permission features must specify at least one " +
43        "value for extension_types.";
44  }
45
46  if (value->HasKey("contexts"))
47    return name() + ": Permission features do not support contexts.";
48
49  return std::string();
50}
51
52}  // namespace extensions
53