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(const APIPermissionInfo::InitInfo& info) 117 : id_(info.id), 118 name_(info.name), 119 flags_(info.flags), 120 l10n_message_id_(info.l10n_message_id), 121 message_id_(info.message_id ? info.message_id : PermissionMessage::kNone), 122 api_permission_constructor_(info.constructor) { 123} 124 125APIPermissionInfo::~APIPermissionInfo() { } 126 127APIPermission* APIPermissionInfo::CreateAPIPermission() const { 128 return api_permission_constructor_ ? 129 api_permission_constructor_(this) : new SimpleAPIPermission(this); 130} 131 132PermissionMessage APIPermissionInfo::GetMessage_() const { 133 return PermissionMessage( 134 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); 135} 136 137} // namespace extensions 138