summaryrefslogtreecommitdiffstats
path: root/chrome/browser/usb
diff options
context:
space:
mode:
authorreillyg <reillyg@chromium.org>2015-09-09 13:58:55 -0700
committerCommit bot <commit-bot@chromium.org>2015-09-09 20:59:42 +0000
commit17b8a58c99537bab4d8944ec2f96023dac0a15e7 (patch)
tree681eeb93ae7f3adeea7e3c0309d5dcf26c5dbdc1 /chrome/browser/usb
parent60b43d0fb14581c647034594f29e98f4ec2babf5 (diff)
downloadchromium_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/DEPS3
-rw-r--r--chrome/browser/usb/OWNERS2
-rw-r--r--chrome/browser/usb/web_usb_permission_provider.cc38
-rw-r--r--chrome/browser/usb/web_usb_permission_provider.h38
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_