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

Unified Diff: extensions/browser/api/device_permissions_prompt.cc

Issue 1034333002: Check USB device path access when prompting users to select a device. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move MockPermissionBrokerClient into its own header. Created 5 years, 8 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/api/device_permissions_prompt.h ('k') | extensions/browser/api/usb/usb_api.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/api/device_permissions_prompt.cc
diff --git a/extensions/browser/api/device_permissions_prompt.cc b/extensions/browser/api/device_permissions_prompt.cc
index afb895cd642490596df8e226c8f8c4ef25c512a2..f45ae5638bf196a1ff974ec5fe3e490b3b72b2f6 100644
--- a/extensions/browser/api/device_permissions_prompt.cc
+++ b/extensions/browser/api/device_permissions_prompt.cc
@@ -4,6 +4,7 @@
#include "extensions/browser/api/device_permissions_prompt.h"
+#include "base/barrier_closure.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "content/public/browser/browser_thread.h"
@@ -17,6 +18,7 @@
#include "extensions/strings/grit/extensions_strings.h"
#include "ui/base/l10n/l10n_util.h"
+using content::BrowserThread;
using device::UsbDevice;
using device::UsbDeviceFilter;
using device::UsbService;
@@ -81,8 +83,8 @@ void DevicePermissionsPrompt::Prompt::SetObserver(Observer* observer) {
observer_ = observer;
if (observer_) {
- content::BrowserThread::PostTask(
- content::BrowserThread::FILE, FROM_HERE,
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
base::Bind(&DevicePermissionsPrompt::Prompt::DoDeviceQuery, this));
}
}
@@ -136,24 +138,55 @@ void DevicePermissionsPrompt::Prompt::DoDeviceQuery() {
std::vector<scoped_refptr<UsbDevice>> devices;
service->GetDevices(&devices);
- std::vector<DeviceInfo> device_info;
+ if (!usb_service_observer_.IsObserving(service)) {
+ usb_service_observer_.Add(service);
+ }
+
+ std::vector<DeviceInfo>* device_info = new std::vector<DeviceInfo>();
+ base::Closure barrier = base::BarrierClosure(
+ devices.size(),
+ base::Bind(&DevicePermissionsPrompt::Prompt::DeviceQueryComplete, this,
+ base::Owned(device_info)));
+
for (const auto& device : devices) {
- if (!(filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_))) {
- continue;
+ if (filters_.empty() || UsbDeviceFilter::MatchesAny(device, filters_)) {
+ device->CheckUsbAccess(
+ base::Bind(&DevicePermissionsPrompt::Prompt::AppendCheckedUsbDevice,
+ this, device_info, device, barrier));
+ } else {
+ barrier.Run();
}
+ }
+}
- device_info.push_back(DeviceInfo(device));
+void DevicePermissionsPrompt::Prompt::AppendCheckedUsbDevice(
+ std::vector<DeviceInfo>* device_info,
+ scoped_refptr<UsbDevice> device,
+ const base::Closure& callback,
+ bool allowed) {
+ if (allowed) {
+ device_info->push_back(DeviceInfo(device));
}
+ callback.Run();
+}
- if (!usb_service_observer_.IsObserving(service)) {
- usb_service_observer_.Add(service);
+void DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice(
+ scoped_refptr<UsbDevice> device,
+ bool allowed) {
+ if (allowed) {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&DevicePermissionsPrompt::Prompt::AddDevice, this,
+ DeviceInfo(device)));
}
+}
- content::BrowserThread::PostTask(
- content::BrowserThread::UI,
- FROM_HERE,
- base::Bind(
- &DevicePermissionsPrompt::Prompt::SetDevices, this, device_info));
+void DevicePermissionsPrompt::Prompt::DeviceQueryComplete(
+ std::vector<DeviceInfo>* device_info) {
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(&DevicePermissionsPrompt::Prompt::SetDevices, this,
+ *device_info));
}
void DevicePermissionsPrompt::Prompt::SetDevices(
@@ -193,16 +226,14 @@ void DevicePermissionsPrompt::Prompt::OnDeviceAdded(
return;
}
- content::BrowserThread::PostTask(
- content::BrowserThread::UI, FROM_HERE,
- base::Bind(&DevicePermissionsPrompt::Prompt::AddDevice, this,
- DeviceInfo(device)));
+ device->CheckUsbAccess(base::Bind(
+ &DevicePermissionsPrompt::Prompt::AddCheckedUsbDevice, this, device));
}
void DevicePermissionsPrompt::Prompt::OnDeviceRemoved(
scoped_refptr<UsbDevice> device) {
- content::BrowserThread::PostTask(
- content::BrowserThread::UI, FROM_HERE,
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
base::Bind(&DevicePermissionsPrompt::Prompt::RemoveDevice, this, device));
}
« no previous file with comments | « extensions/browser/api/device_permissions_prompt.h ('k') | extensions/browser/api/usb/usb_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698