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

Side by Side Diff: extensions/browser/api/device_permissions_prompt.cc

Issue 2390823005: Update device permissions dialog ui for Chrome apps and extensions (Closed)
Patch Set: address more comments Created 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/device_permissions_prompt.h" 5 #include "extensions/browser/api/device_permissions_prompt.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/i18n/message_formatter.h" 10 #include "base/i18n/message_formatter.h"
11 #include "base/scoped_observer.h" 11 #include "base/scoped_observer.h"
12 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "build/build_config.h" 14 #include "build/build_config.h"
15 #include "device/base/device_client.h" 15 #include "device/base/device_client.h"
16 #include "device/hid/hid_device_filter.h" 16 #include "device/hid/hid_device_filter.h"
17 #include "device/hid/hid_device_info.h" 17 #include "device/hid/hid_device_info.h"
18 #include "device/hid/hid_service.h" 18 #include "device/hid/hid_service.h"
19 #include "device/usb/usb_device.h" 19 #include "device/usb/usb_device.h"
20 #include "device/usb/usb_device_filter.h" 20 #include "device/usb/usb_device_filter.h"
21 #include "device/usb/usb_ids.h" 21 #include "device/usb/usb_ids.h"
22 #include "device/usb/usb_service.h" 22 #include "device/usb/usb_service.h"
23 #include "extensions/browser/api/device_permissions_manager.h" 23 #include "extensions/browser/api/device_permissions_manager.h"
24 #include "extensions/common/extension.h" 24 #include "extensions/common/extension.h"
25 #include "extensions/strings/grit/extensions_strings.h"
26 #include "ui/base/l10n/l10n_util.h" 25 #include "ui/base/l10n/l10n_util.h"
27 26
28 #if defined(OS_CHROMEOS) 27 #if defined(OS_CHROMEOS)
29 #include "chromeos/dbus/dbus_thread_manager.h" 28 #include "chromeos/dbus/dbus_thread_manager.h"
30 #include "chromeos/dbus/permission_broker_client.h" 29 #include "chromeos/dbus/permission_broker_client.h"
31 #include "device/hid/hid_device_info_linux.h" 30 #include "device/hid/hid_device_info_linux.h"
32 #endif // defined(OS_CHROMEOS) 31 #endif // defined(OS_CHROMEOS)
33 32
34 using device::HidDeviceFilter; 33 using device::HidDeviceFilter;
35 using device::HidService; 34 using device::HidService;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 if (observer) { 91 if (observer) {
93 UsbService* service = device::DeviceClient::Get()->GetUsbService(); 92 UsbService* service = device::DeviceClient::Get()->GetUsbService();
94 if (service && !service_observer_.IsObserving(service)) { 93 if (service && !service_observer_.IsObserving(service)) {
95 service->GetDevices( 94 service->GetDevices(
96 base::Bind(&UsbDevicePermissionsPrompt::OnDevicesEnumerated, this)); 95 base::Bind(&UsbDevicePermissionsPrompt::OnDevicesEnumerated, this));
97 service_observer_.Add(service); 96 service_observer_.Add(service);
98 } 97 }
99 } 98 }
100 } 99 }
101 100
102 base::string16 GetHeading() const override {
103 return l10n_util::GetSingleOrMultipleStringUTF16(
104 IDS_USB_DEVICE_PERMISSIONS_PROMPT_TITLE, multiple());
105 }
106
107 void Dismissed() override { 101 void Dismissed() override {
108 DevicePermissionsManager* permissions_manager = 102 DevicePermissionsManager* permissions_manager =
109 DevicePermissionsManager::Get(browser_context()); 103 DevicePermissionsManager::Get(browser_context());
110 std::vector<scoped_refptr<UsbDevice>> devices; 104 std::vector<scoped_refptr<UsbDevice>> devices;
111 for (const auto& device : devices_) { 105 for (const auto& device : devices_) {
112 if (device->granted()) { 106 if (device->granted()) {
113 const UsbDeviceInfo* usb_device = 107 const UsbDeviceInfo* usb_device =
114 static_cast<const UsbDeviceInfo*>(device.get()); 108 static_cast<const UsbDeviceInfo*>(device.get());
115 devices.push_back(usb_device->device()); 109 devices.push_back(usb_device->device());
116 if (permissions_manager) { 110 if (permissions_manager) {
(...skipping 16 matching lines...) Expand all
133 device->CheckUsbAccess( 127 device->CheckUsbAccess(
134 base::Bind(&UsbDevicePermissionsPrompt::AddCheckedDevice, this, 128 base::Bind(&UsbDevicePermissionsPrompt::AddCheckedDevice, this,
135 base::Passed(&device_info))); 129 base::Passed(&device_info)));
136 } 130 }
137 131
138 void OnDeviceRemoved(scoped_refptr<UsbDevice> device) override { 132 void OnDeviceRemoved(scoped_refptr<UsbDevice> device) override {
139 for (auto it = devices_.begin(); it != devices_.end(); ++it) { 133 for (auto it = devices_.begin(); it != devices_.end(); ++it) {
140 const UsbDeviceInfo* entry = 134 const UsbDeviceInfo* entry =
141 static_cast<const UsbDeviceInfo*>((*it).get()); 135 static_cast<const UsbDeviceInfo*>((*it).get());
142 if (entry->device() == device) { 136 if (entry->device() == device) {
137 size_t index = it - devices_.begin();
138 base::string16 device_name = (*it)->name();
143 devices_.erase(it); 139 devices_.erase(it);
144 if (observer()) { 140 if (observer())
145 observer()->OnDevicesChanged(); 141 observer()->OnDeviceRemoved(index, device_name);
146 }
147 return; 142 return;
148 } 143 }
149 } 144 }
150 } 145 }
151 146
152 void OnDevicesEnumerated( 147 void OnDevicesEnumerated(
153 const std::vector<scoped_refptr<UsbDevice>>& devices) { 148 const std::vector<scoped_refptr<UsbDevice>>& devices) {
154 for (const auto& device : devices) { 149 for (const auto& device : devices) {
155 OnDeviceAdded(device); 150 OnDeviceAdded(device);
156 } 151 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 if (observer) { 201 if (observer) {
207 HidService* service = device::DeviceClient::Get()->GetHidService(); 202 HidService* service = device::DeviceClient::Get()->GetHidService();
208 if (service && !service_observer_.IsObserving(service)) { 203 if (service && !service_observer_.IsObserving(service)) {
209 service->GetDevices( 204 service->GetDevices(
210 base::Bind(&HidDevicePermissionsPrompt::OnDevicesEnumerated, this)); 205 base::Bind(&HidDevicePermissionsPrompt::OnDevicesEnumerated, this));
211 service_observer_.Add(service); 206 service_observer_.Add(service);
212 } 207 }
213 } 208 }
214 } 209 }
215 210
216 base::string16 GetHeading() const override {
217 return l10n_util::GetSingleOrMultipleStringUTF16(
218 IDS_HID_DEVICE_PERMISSIONS_PROMPT_TITLE, multiple());
219 }
220
221 void Dismissed() override { 211 void Dismissed() override {
222 DevicePermissionsManager* permissions_manager = 212 DevicePermissionsManager* permissions_manager =
223 DevicePermissionsManager::Get(browser_context()); 213 DevicePermissionsManager::Get(browser_context());
224 std::vector<scoped_refptr<device::HidDeviceInfo>> devices; 214 std::vector<scoped_refptr<device::HidDeviceInfo>> devices;
225 for (const auto& device : devices_) { 215 for (const auto& device : devices_) {
226 if (device->granted()) { 216 if (device->granted()) {
227 const HidDeviceInfo* hid_device = 217 const HidDeviceInfo* hid_device =
228 static_cast<const HidDeviceInfo*>(device.get()); 218 static_cast<const HidDeviceInfo*>(device.get());
229 devices.push_back(hid_device->device()); 219 devices.push_back(hid_device->device());
230 if (permissions_manager) { 220 if (permissions_manager) {
(...skipping 26 matching lines...) Expand all
257 AddCheckedDevice(std::move(device_info), true); 247 AddCheckedDevice(std::move(device_info), true);
258 #endif // defined(OS_CHROMEOS) 248 #endif // defined(OS_CHROMEOS)
259 } 249 }
260 } 250 }
261 251
262 void OnDeviceRemoved(scoped_refptr<device::HidDeviceInfo> device) override { 252 void OnDeviceRemoved(scoped_refptr<device::HidDeviceInfo> device) override {
263 for (auto it = devices_.begin(); it != devices_.end(); ++it) { 253 for (auto it = devices_.begin(); it != devices_.end(); ++it) {
264 const HidDeviceInfo* entry = 254 const HidDeviceInfo* entry =
265 static_cast<const HidDeviceInfo*>((*it).get()); 255 static_cast<const HidDeviceInfo*>((*it).get());
266 if (entry->device() == device) { 256 if (entry->device() == device) {
257 size_t index = it - devices_.begin();
258 base::string16 device_name = (*it)->name();
267 devices_.erase(it); 259 devices_.erase(it);
268 if (observer()) { 260 if (observer())
269 observer()->OnDevicesChanged(); 261 observer()->OnDeviceRemoved(index, device_name);
270 }
271 return; 262 return;
272 } 263 }
273 } 264 }
274 } 265 }
275 266
276 void OnDevicesEnumerated( 267 void OnDevicesEnumerated(
277 const std::vector<scoped_refptr<device::HidDeviceInfo>>& devices) { 268 const std::vector<scoped_refptr<device::HidDeviceInfo>>& devices) {
278 for (const auto& device : devices) { 269 for (const auto& device : devices) {
279 OnDeviceAdded(device); 270 OnDeviceAdded(device);
280 } 271 }
(...skipping 27 matching lines...) Expand all
308 DevicePermissionsPrompt::Prompt::Prompt(const Extension* extension, 299 DevicePermissionsPrompt::Prompt::Prompt(const Extension* extension,
309 content::BrowserContext* context, 300 content::BrowserContext* context,
310 bool multiple) 301 bool multiple)
311 : extension_(extension), browser_context_(context), multiple_(multiple) { 302 : extension_(extension), browser_context_(context), multiple_(multiple) {
312 } 303 }
313 304
314 void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) { 305 void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) {
315 observer_ = observer; 306 observer_ = observer;
316 } 307 }
317 308
318 base::string16 DevicePermissionsPrompt::Prompt::GetPromptMessage() const {
319 return base::i18n::MessageFormatter::FormatWithNumberedArgs(
320 l10n_util::GetStringUTF16(IDS_DEVICE_PERMISSIONS_PROMPT),
321 multiple_ ? "multiple" : "single", extension_->name());
322 }
323
324 base::string16 DevicePermissionsPrompt::Prompt::GetDeviceName( 309 base::string16 DevicePermissionsPrompt::Prompt::GetDeviceName(
325 size_t index) const { 310 size_t index) const {
326 DCHECK_LT(index, devices_.size()); 311 DCHECK_LT(index, devices_.size());
327 return devices_[index]->name(); 312 return devices_[index]->name();
328 } 313 }
329 314
330 base::string16 DevicePermissionsPrompt::Prompt::GetDeviceSerialNumber( 315 base::string16 DevicePermissionsPrompt::Prompt::GetDeviceSerialNumber(
331 size_t index) const { 316 size_t index) const {
332 DCHECK_LT(index, devices_.size()); 317 DCHECK_LT(index, devices_.size());
333 return devices_[index]->serial_number(); 318 return devices_[index]->serial_number();
334 } 319 }
335 320
336 void DevicePermissionsPrompt::Prompt::GrantDevicePermission(size_t index) { 321 void DevicePermissionsPrompt::Prompt::GrantDevicePermission(size_t index) {
337 DCHECK_LT(index, devices_.size()); 322 DCHECK_LT(index, devices_.size());
338 devices_[index]->set_granted(); 323 devices_[index]->set_granted();
339 } 324 }
340 325
341 DevicePermissionsPrompt::Prompt::~Prompt() { 326 DevicePermissionsPrompt::Prompt::~Prompt() {
342 } 327 }
343 328
344 void DevicePermissionsPrompt::Prompt::AddCheckedDevice( 329 void DevicePermissionsPrompt::Prompt::AddCheckedDevice(
345 std::unique_ptr<DeviceInfo> device, 330 std::unique_ptr<DeviceInfo> device,
346 bool allowed) { 331 bool allowed) {
347 if (allowed) { 332 if (allowed) {
333 base::string16 device_name = device->name();
348 devices_.push_back(std::move(device)); 334 devices_.push_back(std::move(device));
349 if (observer_) { 335 if (observer_)
350 observer_->OnDevicesChanged(); 336 observer_->OnDeviceAdded(devices_.size() - 1, device_name);
351 }
352 } 337 }
353 } 338 }
354 339
355 DevicePermissionsPrompt::DevicePermissionsPrompt( 340 DevicePermissionsPrompt::DevicePermissionsPrompt(
356 content::WebContents* web_contents) 341 content::WebContents* web_contents)
357 : web_contents_(web_contents) { 342 : web_contents_(web_contents) {
358 } 343 }
359 344
360 DevicePermissionsPrompt::~DevicePermissionsPrompt() { 345 DevicePermissionsPrompt::~DevicePermissionsPrompt() {
361 } 346 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 // static 379 // static
395 scoped_refptr<DevicePermissionsPrompt::Prompt> 380 scoped_refptr<DevicePermissionsPrompt::Prompt>
396 DevicePermissionsPrompt::CreateUsbPromptForTest(const Extension* extension, 381 DevicePermissionsPrompt::CreateUsbPromptForTest(const Extension* extension,
397 bool multiple) { 382 bool multiple) {
398 return make_scoped_refptr(new UsbDevicePermissionsPrompt( 383 return make_scoped_refptr(new UsbDevicePermissionsPrompt(
399 extension, nullptr, multiple, std::vector<UsbDeviceFilter>(), 384 extension, nullptr, multiple, std::vector<UsbDeviceFilter>(),
400 base::Bind(&NoopUsbCallback))); 385 base::Bind(&NoopUsbCallback)));
401 } 386 }
402 387
403 } // namespace extensions 388 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/device_permissions_prompt.h ('k') | extensions/browser/api/device_permissions_prompt_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698