diff options
Diffstat (limited to 'chromium/extensions/common/features/permission_feature.cc')
-rw-r--r-- | chromium/extensions/common/features/permission_feature.cc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/chromium/extensions/common/features/permission_feature.cc b/chromium/extensions/common/features/permission_feature.cc new file mode 100644 index 00000000000..529ecd1188a --- /dev/null +++ b/chromium/extensions/common/features/permission_feature.cc @@ -0,0 +1,52 @@ +// 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. + +#include "extensions/common/features/permission_feature.h" + +#include "extensions/common/permissions/permission_set.h" +#include "extensions/common/permissions/permissions_data.h" + +namespace extensions { + +PermissionFeature::PermissionFeature() { +} + +PermissionFeature::~PermissionFeature() { +} + +Feature::Availability PermissionFeature::IsAvailableToContext( + const Extension* extension, + Feature::Context context, + const GURL& url, + Feature::Platform platform) const { + Availability availability = SimpleFeature::IsAvailableToContext(extension, + context, + url, + platform); + if (!availability.is_available()) + return availability; + + if (extension && !extension->permissions_data()->HasAPIPermission(name())) + return CreateAvailability(NOT_PRESENT, extension->GetType()); + + return CreateAvailability(IS_AVAILABLE); +} + +std::string PermissionFeature::Parse(const base::DictionaryValue* value) { + std::string error = SimpleFeature::Parse(value); + if (!error.empty()) + return error; + + if (extension_types()->empty()) { + return name() + ": Permission features must specify at least one " + + "value for extension_types."; + } + + if (value->HasKey("contexts")) + return name() + ": Permission features do not support contexts."; + + return std::string(); +} + +} // namespace extensions |