diff options
Diffstat (limited to 'extensions/common/permissions/api_permission.cc')
-rw-r--r-- | extensions/common/permissions/api_permission.cc | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/extensions/common/permissions/api_permission.cc b/extensions/common/permissions/api_permission.cc new file mode 100644 index 0000000..f183ed2 --- /dev/null +++ b/extensions/common/permissions/api_permission.cc @@ -0,0 +1,143 @@ +// Copyright 2013 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/permissions/api_permission.h" + +#include "ui/base/l10n/l10n_util.h" + +namespace { + +using extensions::APIPermission; +using extensions::APIPermissionInfo; +using extensions::PermissionMessage; +using extensions::PermissionMessages; + +class SimpleAPIPermission : public APIPermission { + public: + explicit SimpleAPIPermission(const APIPermissionInfo* permission) + : APIPermission(permission) { } + + virtual ~SimpleAPIPermission() { } + + virtual bool HasMessages() const OVERRIDE { + return info()->message_id() > PermissionMessage::kNone; + } + + virtual PermissionMessages GetMessages() const OVERRIDE { + DCHECK(HasMessages()); + PermissionMessages result; + result.push_back(GetMessage_()); + return result; + } + + virtual bool Check( + const APIPermission::CheckParam* param) const OVERRIDE { + return !param; + } + + virtual bool Contains(const APIPermission* rhs) const OVERRIDE { + CHECK(info() == rhs->info()); + return true; + } + + virtual bool Equal(const APIPermission* rhs) const OVERRIDE { + if (this == rhs) + return true; + CHECK(info() == rhs->info()); + return true; + } + + virtual bool FromValue(const base::Value* value) OVERRIDE { + if (value) + return false; + return true; + } + + virtual scoped_ptr<base::Value> ToValue() const OVERRIDE { + return scoped_ptr<base::Value>(); + } + + virtual APIPermission* Clone() const OVERRIDE { + return new SimpleAPIPermission(info()); + } + + virtual APIPermission* Diff(const APIPermission* rhs) const OVERRIDE { + CHECK(info() == rhs->info()); + return NULL; + } + + virtual APIPermission* Union(const APIPermission* rhs) const OVERRIDE { + CHECK(info() == rhs->info()); + return new SimpleAPIPermission(info()); + } + + virtual APIPermission* Intersect(const APIPermission* rhs) const OVERRIDE { + CHECK(info() == rhs->info()); + return new SimpleAPIPermission(info()); + } + + virtual void Write(IPC::Message* m) const OVERRIDE { } + + virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE { + return true; + } + + virtual void Log(std::string* log) const OVERRIDE { } +}; + +} // namespace + +namespace extensions { + +APIPermission::APIPermission(const APIPermissionInfo* info) + : info_(info) { + DCHECK(info_); +} + +APIPermission::~APIPermission() { } + +APIPermission::ID APIPermission::id() const { + return info()->id(); +} + +const char* APIPermission::name() const { + return info()->name(); +} + +PermissionMessage APIPermission::GetMessage_() const { + return info()->GetMessage_(); +} + +// +// APIPermissionInfo +// + +APIPermissionInfo::APIPermissionInfo( + APIPermission::ID id, + const char* name, + int l10n_message_id, + PermissionMessage::ID message_id, + int flags, + APIPermissionConstructor api_permission_constructor) + : id_(id), + name_(name), + flags_(flags), + l10n_message_id_(l10n_message_id), + message_id_(message_id), + api_permission_constructor_(api_permission_constructor) { } + + +APIPermissionInfo::~APIPermissionInfo() { } + +APIPermission* APIPermissionInfo::CreateAPIPermission() const { + return api_permission_constructor_ ? + api_permission_constructor_(this) : new SimpleAPIPermission(this); +} + +PermissionMessage APIPermissionInfo::GetMessage_() const { + return PermissionMessage( + message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); +} + +} // namespace extensions |