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

Side by Side Diff: chrome/browser/usb/web_usb_permission_provider.cc

Issue 1854483002: Remove WebUSB descriptor data from device.mojom. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@use_interface_associations
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/usb/web_usb_permission_provider.h" 5 #include "chrome/browser/usb/web_usb_permission_provider.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/usb/usb_chooser_context.h" 12 #include "chrome/browser/usb/usb_chooser_context.h"
13 #include "chrome/browser/usb/usb_chooser_context_factory.h" 13 #include "chrome/browser/usb/usb_chooser_context_factory.h"
14 #include "chrome/common/chrome_switches.h" 14 #include "chrome/common/chrome_switches.h"
15 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/render_frame_host.h" 16 #include "content/public/browser/render_frame_host.h"
17 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
18 #include "device/usb/public/interfaces/device.mojom.h" 18 #include "device/usb/usb_device.h"
19 #include "device/usb/webusb_descriptors.h"
19 20
20 using content::WebContents; 21 using content::WebContents;
21 using device::usb::WebUsbDescriptorSet;
22 using device::usb::WebUsbConfigurationSubsetPtr;
23 using device::usb::WebUsbFunctionSubsetPtr;
24 22
25 namespace { 23 namespace {
26 24
27 bool FindOriginInDescriptorSet(const WebUsbDescriptorSet* set, 25 bool FindOriginInDescriptorSet(const device::WebUsbAllowedOrigins* set,
28 const GURL& origin, 26 const GURL& origin,
29 const uint8_t* configuration_value, 27 const uint8_t* configuration_value,
30 const uint8_t* first_interface) { 28 const uint8_t* first_interface) {
31 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 29 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
32 switches::kDisableWebUsbSecurity)) 30 switches::kDisableWebUsbSecurity))
33 return true; 31 return true;
34 32
35 if (!set) 33 if (!set)
36 return false; 34 return false;
37 for (size_t i = 0; i < set->origins.size(); ++i) 35 if (ContainsValue(set->origins, origin))
juncai 2016/04/01 17:05:24 add header: #include "base/stl_util.h" for using C
Reilly Grant (use Gerrit) 2016/04/01 21:56:33 Done.
38 if (origin.spec() == set->origins[i]) 36 return true;
37 for (const auto& configuration : set->configurations) {
38 if (configuration_value &&
39 *configuration_value != configuration.configuration_value)
40 continue;
41 if (ContainsValue(configuration.origins, origin))
39 return true; 42 return true;
40 for (size_t i = 0; i < set->configurations.size(); ++i) { 43 for (const auto& function : configuration.functions) {
41 const WebUsbConfigurationSubsetPtr& config = set->configurations[i]; 44 if (first_interface && *first_interface != function.first_interface)
42 if (configuration_value && 45 continue;
43 *configuration_value != config->configuration_value) 46 if (ContainsValue(function.origins, origin))
44 continue;
45 for (size_t j = 0; i < config->origins.size(); ++j)
46 if (origin.spec() == config->origins[j])
47 return true; 47 return true;
48 for (size_t j = 0; j < config->functions.size(); ++j) {
49 const WebUsbFunctionSubsetPtr& function = config->functions[j];
50 if (first_interface && *first_interface != function->first_interface)
51 continue;
52 for (size_t k = 0; k < function->origins.size(); ++k)
53 if (origin.spec() == function->origins[k])
54 return true;
55 } 48 }
56 } 49 }
57 return false; 50 return false;
58 } 51 }
59 52
60 } // namespace 53 } // namespace
61 54
62 WebUSBPermissionProvider::WebUSBPermissionProvider( 55 WebUSBPermissionProvider::WebUSBPermissionProvider(
63 content::RenderFrameHost* render_frame_host) 56 content::RenderFrameHost* render_frame_host)
64 : render_frame_host_(render_frame_host), weak_factory_(this) { 57 : render_frame_host_(render_frame_host), weak_factory_(this) {
65 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 58 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
66 DCHECK(render_frame_host_); 59 DCHECK(render_frame_host_);
67 } 60 }
68 61
69 WebUSBPermissionProvider::~WebUSBPermissionProvider() {} 62 WebUSBPermissionProvider::~WebUSBPermissionProvider() {}
70 63
71 base::WeakPtr<device::usb::PermissionProvider> 64 base::WeakPtr<device::usb::PermissionProvider>
72 WebUSBPermissionProvider::GetWeakPtr() { 65 WebUSBPermissionProvider::GetWeakPtr() {
73 return weak_factory_.GetWeakPtr(); 66 return weak_factory_.GetWeakPtr();
74 } 67 }
75 68
76 bool WebUSBPermissionProvider::HasDevicePermission( 69 bool WebUSBPermissionProvider::HasDevicePermission(
77 const device::usb::DeviceInfo& device_info) const { 70 scoped_refptr<const device::UsbDevice> device) const {
78 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 71 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
79 WebContents* web_contents = 72 WebContents* web_contents =
80 WebContents::FromRenderFrameHost(render_frame_host_); 73 WebContents::FromRenderFrameHost(render_frame_host_);
81 GURL embedding_origin = 74 GURL embedding_origin =
82 web_contents->GetMainFrame()->GetLastCommittedURL().GetOrigin(); 75 web_contents->GetMainFrame()->GetLastCommittedURL().GetOrigin();
83 GURL requesting_origin = 76 GURL requesting_origin =
84 render_frame_host_->GetLastCommittedURL().GetOrigin(); 77 render_frame_host_->GetLastCommittedURL().GetOrigin();
85 Profile* profile = 78 Profile* profile =
86 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 79 Profile::FromBrowserContext(web_contents->GetBrowserContext());
87 UsbChooserContext* chooser_context = 80 UsbChooserContext* chooser_context =
88 UsbChooserContextFactory::GetForProfile(profile); 81 UsbChooserContextFactory::GetForProfile(profile);
89 82
90 return FindOriginInDescriptorSet(device_info.webusb_allowed_origins.get(), 83 return FindOriginInDescriptorSet(device->webusb_allowed_origins(),
91 requesting_origin, nullptr, nullptr) && 84 requesting_origin, nullptr, nullptr) &&
92 chooser_context->HasDevicePermission(requesting_origin, 85 chooser_context->HasDevicePermission(requesting_origin,
93 embedding_origin, device_info); 86 embedding_origin, device);
94 } 87 }
95 88
96 bool WebUSBPermissionProvider::HasConfigurationPermission( 89 bool WebUSBPermissionProvider::HasConfigurationPermission(
97 uint8_t requested_configuration_value, 90 uint8_t requested_configuration_value,
98 const device::usb::DeviceInfo& device_info) const { 91 scoped_refptr<const device::UsbDevice> device) const {
99 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 92 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
100 return FindOriginInDescriptorSet( 93 return FindOriginInDescriptorSet(
101 device_info.webusb_allowed_origins.get(), 94 device->webusb_allowed_origins(),
102 render_frame_host_->GetLastCommittedURL().GetOrigin(), 95 render_frame_host_->GetLastCommittedURL().GetOrigin(),
103 &requested_configuration_value, nullptr); 96 &requested_configuration_value, nullptr);
104 } 97 }
105 98
106 bool WebUSBPermissionProvider::HasFunctionPermission( 99 bool WebUSBPermissionProvider::HasFunctionPermission(
107 uint8_t requested_function, 100 uint8_t requested_function,
108 uint8_t configuration_value, 101 uint8_t configuration_value,
109 const device::usb::DeviceInfo& device_info) const { 102 scoped_refptr<const device::UsbDevice> device) const {
110 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 103 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
111 return FindOriginInDescriptorSet( 104 return FindOriginInDescriptorSet(
112 device_info.webusb_allowed_origins.get(), 105 device->webusb_allowed_origins(),
113 render_frame_host_->GetLastCommittedURL().GetOrigin(), 106 render_frame_host_->GetLastCommittedURL().GetOrigin(),
114 &configuration_value, &requested_function); 107 &configuration_value, &requested_function);
115 } 108 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698