// 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 "extensions/common/permissions/api_permission_set.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) { } ~SimpleAPIPermission() override {} extensions::PermissionIDSet GetPermissions() const override { extensions::PermissionIDSet permissions; permissions.insert(id()); return permissions; } bool HasMessages() const override { return info()->message_id() > PermissionMessage::kNone; } PermissionMessages GetMessages() const override { DCHECK(HasMessages()); PermissionMessages result; result.push_back(GetMessage_()); return result; } bool Check(const APIPermission::CheckParam* param) const override { return !param; } bool Contains(const APIPermission* rhs) const override { CHECK_EQ(info(), rhs->info()); return true; } bool Equal(const APIPermission* rhs) const override { if (this != rhs) CHECK_EQ(info(), rhs->info()); return true; } bool FromValue(const base::Value* value, std::string* /*error*/, std::vector* /*unhandled_permissions*/) override { return (value == NULL); } scoped_ptr ToValue() const override { return scoped_ptr(); } APIPermission* Clone() const override { return new SimpleAPIPermission(info()); } APIPermission* Diff(const APIPermission* rhs) const override { CHECK_EQ(info(), rhs->info()); return NULL; } APIPermission* Union(const APIPermission* rhs) const override { CHECK_EQ(info(), rhs->info()); return new SimpleAPIPermission(info()); } APIPermission* Intersect(const APIPermission* rhs) const override { CHECK_EQ(info(), rhs->info()); return new SimpleAPIPermission(info()); } void Write(IPC::Message* m) const override {} bool Read(const IPC::Message* m, PickleIterator* iter) override { return true; } 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(const APIPermissionInfo::InitInfo& info) : id_(info.id), name_(info.name), flags_(info.flags), l10n_message_id_(info.l10n_message_id), message_id_(info.message_id ? info.message_id : PermissionMessage::kNone), api_permission_constructor_(info.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