api_permission.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright 2013 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/permissions/api_permission.h" 6 7#include "ui/base/l10n/l10n_util.h" 8 9namespace { 10 11using extensions::APIPermission; 12using extensions::APIPermissionInfo; 13using extensions::PermissionMessage; 14using extensions::PermissionMessages; 15 16class SimpleAPIPermission : public APIPermission { 17 public: 18 explicit SimpleAPIPermission(const APIPermissionInfo* permission) 19 : APIPermission(permission) { } 20 21 virtual ~SimpleAPIPermission() { } 22 23 virtual bool HasMessages() const OVERRIDE { 24 return info()->message_id() > PermissionMessage::kNone; 25 } 26 27 virtual PermissionMessages GetMessages() const OVERRIDE { 28 DCHECK(HasMessages()); 29 PermissionMessages result; 30 result.push_back(GetMessage_()); 31 return result; 32 } 33 34 virtual bool Check( 35 const APIPermission::CheckParam* param) const OVERRIDE { 36 return !param; 37 } 38 39 virtual bool Contains(const APIPermission* rhs) const OVERRIDE { 40 CHECK_EQ(info(), rhs->info()); 41 return true; 42 } 43 44 virtual bool Equal(const APIPermission* rhs) const OVERRIDE { 45 if (this != rhs) 46 CHECK_EQ(info(), rhs->info()); 47 return true; 48 } 49 50 virtual bool FromValue( 51 const base::Value* value, 52 std::string* /*error*/, 53 std::vector<std::string>* /*unhandled_permissions*/) OVERRIDE { 54 return (value == NULL); 55 } 56 57 virtual scoped_ptr<base::Value> ToValue() const OVERRIDE { 58 return scoped_ptr<base::Value>(); 59 } 60 61 virtual APIPermission* Clone() const OVERRIDE { 62 return new SimpleAPIPermission(info()); 63 } 64 65 virtual APIPermission* Diff(const APIPermission* rhs) const OVERRIDE { 66 CHECK_EQ(info(), rhs->info()); 67 return NULL; 68 } 69 70 virtual APIPermission* Union(const APIPermission* rhs) const OVERRIDE { 71 CHECK_EQ(info(), rhs->info()); 72 return new SimpleAPIPermission(info()); 73 } 74 75 virtual APIPermission* Intersect(const APIPermission* rhs) const OVERRIDE { 76 CHECK_EQ(info(), rhs->info()); 77 return new SimpleAPIPermission(info()); 78 } 79 80 virtual void Write(IPC::Message* m) const OVERRIDE { } 81 82 virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE { 83 return true; 84 } 85 86 virtual void Log(std::string* log) const OVERRIDE { } 87}; 88 89} // namespace 90 91namespace extensions { 92 93APIPermission::APIPermission(const APIPermissionInfo* info) 94 : info_(info) { 95 DCHECK(info_); 96} 97 98APIPermission::~APIPermission() { } 99 100APIPermission::ID APIPermission::id() const { 101 return info()->id(); 102} 103 104const char* APIPermission::name() const { 105 return info()->name(); 106} 107 108PermissionMessage APIPermission::GetMessage_() const { 109 return info()->GetMessage_(); 110} 111 112// 113// APIPermissionInfo 114// 115 116APIPermissionInfo::APIPermissionInfo( 117 APIPermission::ID id, 118 const char* name, 119 int l10n_message_id, 120 PermissionMessage::ID message_id, 121 int flags, 122 APIPermissionConstructor api_permission_constructor) 123 : id_(id), 124 name_(name), 125 flags_(flags), 126 l10n_message_id_(l10n_message_id), 127 message_id_(message_id), 128 api_permission_constructor_(api_permission_constructor) { } 129 130 131APIPermissionInfo::~APIPermissionInfo() { } 132 133APIPermission* APIPermissionInfo::CreateAPIPermission() const { 134 return api_permission_constructor_ ? 135 api_permission_constructor_(this) : new SimpleAPIPermission(this); 136} 137 138PermissionMessage APIPermissionInfo::GetMessage_() const { 139 return PermissionMessage( 140 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); 141} 142 143} // namespace extensions 144