diff options
author | reillyg <reillyg@chromium.org> | 2015-09-09 13:58:55 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-09-09 20:59:42 +0000 |
commit | 17b8a58c99537bab4d8944ec2f96023dac0a15e7 (patch) | |
tree | 681eeb93ae7f3adeea7e3c0309d5dcf26c5dbdc1 /chrome/browser/usb | |
parent | 60b43d0fb14581c647034594f29e98f4ec2babf5 (diff) | |
download | chromium_src-17b8a58c99537bab4d8944ec2f96023dac0a15e7.zip chromium_src-17b8a58c99537bab4d8944ec2f96023dac0a15e7.tar.gz chromium_src-17b8a58c99537bab4d8944ec2f96023dac0a15e7.tar.bz2 |
Convert DeviceManagerDelegate to PermissionProvider mojo interface.
This changes the device::usb::DeviceManager service so that instead of
expecting a C++ implementation of the DeviceManagerDelegate interface it
depends on the client connecting to the devices app to provide an
implementation of the PermissionProvider mojo service interface. This
will allow the permissions checker to be injected by the FrameMojoShell
when a renderer requests a connection to the devices app.
BUG=492204
Review URL: https://codereview.chromium.org/1316203006
Cr-Commit-Position: refs/heads/master@{#347998}
Diffstat (limited to 'chrome/browser/usb')
-rw-r--r-- | chrome/browser/usb/DEPS | 3 | ||||
-rw-r--r-- | chrome/browser/usb/OWNERS | 2 | ||||
-rw-r--r-- | chrome/browser/usb/web_usb_permission_provider.cc | 38 | ||||
-rw-r--r-- | chrome/browser/usb/web_usb_permission_provider.h | 38 |
4 files changed, 81 insertions, 0 deletions
diff --git a/chrome/browser/usb/DEPS b/chrome/browser/usb/DEPS new file mode 100644 index 0000000..722f640 --- /dev/null +++ b/chrome/browser/usb/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+device/devices_app/usb/public" +] diff --git a/chrome/browser/usb/OWNERS b/chrome/browser/usb/OWNERS new file mode 100644 index 0000000..b16946a --- /dev/null +++ b/chrome/browser/usb/OWNERS @@ -0,0 +1,2 @@ +reillyg@chromium.org +rockot@chromium.org diff --git a/chrome/browser/usb/web_usb_permission_provider.cc b/chrome/browser/usb/web_usb_permission_provider.cc new file mode 100644 index 0000000..0c86908 --- /dev/null +++ b/chrome/browser/usb/web_usb_permission_provider.cc @@ -0,0 +1,38 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/usb/web_usb_permission_provider.h" + +#include "content/public/browser/browser_thread.h" + +// static +void WebUSBPermissionProvider::Create( + content::RenderFrameHost* render_frame_host, + mojo::InterfaceRequest<PermissionProvider> request) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + DCHECK(render_frame_host); + + // The created object is strongly bound to (and owned by) the pipe. + new WebUSBPermissionProvider(render_frame_host, request.Pass()); +} + +WebUSBPermissionProvider::~WebUSBPermissionProvider() {} + +WebUSBPermissionProvider::WebUSBPermissionProvider( + content::RenderFrameHost* render_frame_host, + mojo::InterfaceRequest<PermissionProvider> request) + : binding_(this, request.Pass()), + render_frame_host_(render_frame_host) {} + +void WebUSBPermissionProvider::HasDevicePermission( + mojo::Array<mojo::String> requested_guids, + const HasDevicePermissionCallback& callback) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + // TODO(reillyg): Look up permissions granted to the render frame host's + // current origin in the render frame process's browser context. Until then + // |render_frame_host_| is unused so this ignore_result() is needed. + ignore_result(render_frame_host_); + mojo::Array<mojo::String> allowed_guids(0); + callback.Run(allowed_guids.Pass()); +} diff --git a/chrome/browser/usb/web_usb_permission_provider.h b/chrome/browser/usb/web_usb_permission_provider.h new file mode 100644 index 0000000..05b1242 --- /dev/null +++ b/chrome/browser/usb/web_usb_permission_provider.h @@ -0,0 +1,38 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_USB_WEB_USB_PERMISSION_PROVIDER_H_ +#define CHROME_BROWSER_USB_WEB_USB_PERMISSION_PROVIDER_H_ + +#include "device/devices_app/usb/public/interfaces/permission_provider.mojom.h" +#include "third_party/mojo/src/mojo/public/cpp/bindings/array.h" +#include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h" +#include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" + +namespace content { +class RenderFrameHost; +} + +class WebUSBPermissionProvider : public device::usb::PermissionProvider { + public: + static void Create( + content::RenderFrameHost* render_frame_host, + mojo::InterfaceRequest<device::usb::PermissionProvider> request); + + ~WebUSBPermissionProvider() override; + + private: + WebUSBPermissionProvider(content::RenderFrameHost* render_frame_host, + mojo::InterfaceRequest<PermissionProvider> request); + + // device::usb::PermissionProvider implementation. + void HasDevicePermission( + mojo::Array<mojo::String> requested_guids, + const HasDevicePermissionCallback& callback) override; + + mojo::StrongBinding<PermissionProvider> binding_; + content::RenderFrameHost* const render_frame_host_; +}; + +#endif // CHROME_BROWSER_USB_WEB_USB_PERMISSION_PROVIDER_H_ |