Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(989)

Side by Side Diff: chrome/common/extensions/permissions/bluetooth_device_permission.cc

Issue 11413099: Bluetooth API Permission Dialogs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 "chrome/common/extensions/permissions/bluetooth_device_permission.h"
6
7 #include <algorithm>
8 #include <string>
9 #include <vector>
10
11 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "base/string16.h"
14 #include "base/string_util.h"
15 #include "base/utf_string_conversions.h"
16 #include "base/values.h"
17 #include "chrome/common/extensions/extension_messages.h"
18 #include "chrome/common/extensions/permissions/permissions_info.h"
19 #include "device/bluetooth/bluetooth_adapter_factory.h"
20 #include "device/bluetooth/bluetooth_adapter.h"
21 #include "device/bluetooth/bluetooth_device.h"
22 #include "grit/generated_resources.h"
23 #include "ui/base/l10n/l10n_util.h"
24
25 namespace {
26
27 const char* kSeparator = "|";
28
29 } // namespace
30
31 namespace extensions {
32
33 BluetoothDevicePermission::BluetoothDevicePermission(
34 const APIPermissionInfo* info) : APIPermission(info) {
35 }
36
37 BluetoothDevicePermission::~BluetoothDevicePermission() {
38 }
39
40 void BluetoothDevicePermission::AddDevicesFromString(
41 const std::string &devices_string) {
Matt Perry 2012/11/27 21:35:32 & before space
bryeung 2012/11/28 21:55:05 Done.
42 std::vector<std::string> devices;
43 Tokenize(devices_string, kSeparator, &devices);
44 for (std::vector<std::string>::const_iterator i = devices.begin();
45 i != devices.end(); ++i) {
46 allowed_devices_.insert(*i);
47 }
48 }
49
50 std::string BluetoothDevicePermission::ToString() const {
51 std::vector<std::string> parts;
52 parts.push_back(name());
53 for (std::set<std::string>::const_iterator i = allowed_devices_.begin();
54 i != allowed_devices_.end(); ++i) {
55 parts.push_back(*i);
56 }
57 return JoinString(parts, kSeparator);
58 }
59
60 bool BluetoothDevicePermission::ManifestEntryRequired() const {
61 return false;
62 }
63
64 bool BluetoothDevicePermission::ManifestEntryForbidden() const {
65 return true;
66 }
67
68 bool BluetoothDevicePermission::HasMessages() const {
69 return !allowed_devices_.empty();
70 }
71
72 PermissionMessages BluetoothDevicePermission::GetMessages() const {
73 DCHECK(HasMessages());
74 PermissionMessages result;
75
76 scoped_refptr<device::BluetoothAdapter> bluetooth_adapter =
77 device::BluetoothAdapterFactory::DefaultAdapter();
78
79 for (std::set<std::string>::const_iterator i = allowed_devices_.begin();
80 i != allowed_devices_.end(); ++i) {
81
82 string16 device_identifier;
83 if (bluetooth_adapter) {
84 device::BluetoothDevice* device = bluetooth_adapter->GetDevice(*i);
85 if (device)
86 device_identifier = device->GetName();
87 }
88
89 if (device_identifier.length() == 0) {
Matt Perry 2012/11/27 21:35:32 nit: device_identifier.empty()
bryeung 2012/11/28 21:55:05 done. (Also fixed braces.)
90 UTF8ToUTF16(i->c_str(), i->length(), &device_identifier);
91 }
92
93 result.push_back(PermissionMessage(
94 PermissionMessage::kBluetoothDevice,
95 l10n_util::GetStringFUTF16(
96 IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_DEVICE,
97 device_identifier)));
98 }
99
100 return result;
101 }
102
103 bool BluetoothDevicePermission::Check(
104 const APIPermission::CheckParam* param) const {
105 const CheckParam* bluetooth_device_parameter =
106 static_cast<const CheckParam*>(param);
107 for (std::set<std::string>::const_iterator i = allowed_devices_.begin();
108 i != allowed_devices_.end(); ++i) {
109 if (*i == bluetooth_device_parameter->device_address)
110 return true;
111 }
112 return false;
113 }
114
115 bool BluetoothDevicePermission::Contains(const APIPermission* rhs) const {
116 CHECK(rhs->info() == info());
117 const BluetoothDevicePermission* perm =
118 static_cast<const BluetoothDevicePermission*>(rhs);
119 return std::includes(
120 allowed_devices_.begin(), allowed_devices_.end(),
121 perm->allowed_devices_.begin(), perm->allowed_devices_.end());
122 }
123
124 bool BluetoothDevicePermission::Equal(const APIPermission* rhs) const {
125 CHECK(rhs->info() == info());
126 const BluetoothDevicePermission* perm =
127 static_cast<const BluetoothDevicePermission*>(rhs);
128 return allowed_devices_ == perm->allowed_devices_;
129 }
130
131 bool BluetoothDevicePermission::FromValue(const base::Value* value) {
132 allowed_devices_.clear();
133 const base::ListValue* list = NULL;
134
135 if (!value)
136 return false;
137
138 if (!value->GetAsList(&list) || list->GetSize() == 0)
139 return false;
140
141 for (size_t i = 0; i < list->GetSize(); ++i) {
142 std::string device_address;
143 if (!list->GetString(i, &device_address))
144 return false;
145 allowed_devices_.insert(device_address);
146 }
147
148 return true;
149 }
150
151 void BluetoothDevicePermission::ToValue(base::Value** value) const {
152 base::ListValue* list = new ListValue();
153 std::set<std::string>::const_iterator i;
154 for (std::set<std::string>::const_iterator i = allowed_devices_.begin();
155 i != allowed_devices_.end(); ++i) {
156 list->Append(base::Value::CreateStringValue(*i));
157 }
158 *value = list;
159 }
160
161 APIPermission* BluetoothDevicePermission::Clone() const {
162 BluetoothDevicePermission* result = new BluetoothDevicePermission(info());
163 result->allowed_devices_ = allowed_devices_;
164 return result;
165 }
166
167 APIPermission* BluetoothDevicePermission::Diff(const APIPermission* rhs) const {
168 CHECK(rhs->info() == info());
169 const BluetoothDevicePermission* perm =
170 static_cast<const BluetoothDevicePermission*>(rhs);
171 scoped_ptr<BluetoothDevicePermission> result(
172 new BluetoothDevicePermission(info()));
173 std::set_difference(
174 allowed_devices_.begin(), allowed_devices_.end(),
175 perm->allowed_devices_.begin(), perm->allowed_devices_.end(),
176 std::inserter<std::set<std::string> >(
177 result->allowed_devices_, result->allowed_devices_.begin()));
178 return result->allowed_devices_.empty() ? NULL : result.release();
179 }
180
181 APIPermission* BluetoothDevicePermission::Union(
182 const APIPermission* rhs) const {
183 CHECK(rhs->info() == info());
184 const BluetoothDevicePermission* perm =
185 static_cast<const BluetoothDevicePermission*>(rhs);
186 scoped_ptr<BluetoothDevicePermission> result(
187 new BluetoothDevicePermission(info()));
188 std::set_union(
189 allowed_devices_.begin(), allowed_devices_.end(),
190 perm->allowed_devices_.begin(), perm->allowed_devices_.end(),
191 std::inserter<std::set<std::string> >(
192 result->allowed_devices_, result->allowed_devices_.begin()));
193 return result->allowed_devices_.empty() ? NULL : result.release();
194 }
195
196 APIPermission* BluetoothDevicePermission::Intersect(
197 const APIPermission* rhs) const {
198 CHECK(rhs->info() == info());
199 const BluetoothDevicePermission* perm =
200 static_cast<const BluetoothDevicePermission*>(rhs);
201 scoped_ptr<BluetoothDevicePermission> result(
202 new BluetoothDevicePermission(info()));
203 std::set_intersection(
204 allowed_devices_.begin(), allowed_devices_.end(),
205 perm->allowed_devices_.begin(), perm->allowed_devices_.end(),
206 std::inserter<std::set<std::string> >(
207 result->allowed_devices_, result->allowed_devices_.begin()));
208 return result->allowed_devices_.empty() ? NULL : result.release();
209 }
210
211 void BluetoothDevicePermission::Write(IPC::Message* m) const {
212 IPC::WriteParam(m, allowed_devices_);
213 }
214
215 bool BluetoothDevicePermission::Read(
216 const IPC::Message* m, PickleIterator* iter) {
217 return IPC::ReadParam(m, iter, &allowed_devices_);
218 }
219
220 void BluetoothDevicePermission::Log(std::string* log) const {
221 IPC::LogParam(allowed_devices_, log);
222 }
223
224 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698