// 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