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

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

Issue 2611773004: Allow top-level frames to request any USB device. (Closed)
Patch Set: Add comments explaining how the mock devices are being used. Created 3 years, 11 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/usb_chooser_controller.h" 5 #include "chrome/browser/usb/usb_chooser_controller.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h"
12 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
14 #include "chrome/browser/net/referrer.h" 13 #include "chrome/browser/net/referrer.h"
15 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/browser/profiles/profile_manager.h" 15 #include "chrome/browser/profiles/profile_manager.h"
17 #include "chrome/browser/ui/browser.h" 16 #include "chrome/browser/ui/browser.h"
18 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" 17 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
19 #include "chrome/browser/usb/usb_blocklist.h" 18 #include "chrome/browser/usb/usb_blocklist.h"
20 #include "chrome/browser/usb/usb_chooser_context.h" 19 #include "chrome/browser/usb/usb_chooser_context.h"
21 #include "chrome/browser/usb/usb_chooser_context_factory.h" 20 #include "chrome/browser/usb/usb_chooser_context_factory.h"
22 #include "chrome/browser/usb/web_usb_histograms.h" 21 #include "chrome/browser/usb/web_usb_histograms.h"
23 #include "chrome/browser/usb/web_usb_permission_provider.h" 22 #include "chrome/browser/usb/web_usb_permission_provider.h"
24 #include "chrome/common/chrome_switches.h"
25 #include "chrome/common/url_constants.h" 23 #include "chrome/common/url_constants.h"
26 #include "chrome/grit/generated_resources.h" 24 #include "chrome/grit/generated_resources.h"
27 #include "content/public/browser/render_frame_host.h" 25 #include "content/public/browser/render_frame_host.h"
28 #include "content/public/browser/web_contents.h" 26 #include "content/public/browser/web_contents.h"
29 #include "device/base/device_client.h" 27 #include "device/base/device_client.h"
30 #include "device/usb/mojo/type_converters.h" 28 #include "device/usb/mojo/type_converters.h"
31 #include "device/usb/usb_device.h" 29 #include "device/usb/usb_device.h"
32 #include "device/usb/usb_device_filter.h" 30 #include "device/usb/usb_device_filter.h"
33 #include "device/usb/usb_ids.h" 31 #include "device/usb/usb_ids.h"
34 #include "device/usb/webusb_descriptors.h" 32 #include "device/usb/webusb_descriptors.h"
35 #include "ui/base/l10n/l10n_util.h" 33 #include "ui/base/l10n/l10n_util.h"
36 #include "url/gurl.h" 34 #include "url/gurl.h"
37 35
36 using content::RenderFrameHost;
37 using content::WebContents;
38
38 namespace { 39 namespace {
39 40
40 Browser* GetBrowser() { 41 Browser* GetBrowser() {
41 chrome::ScopedTabbedBrowserDisplayer browser_displayer( 42 chrome::ScopedTabbedBrowserDisplayer browser_displayer(
42 ProfileManager::GetActiveUserProfile()); 43 ProfileManager::GetActiveUserProfile());
43 DCHECK(browser_displayer.browser()); 44 DCHECK(browser_displayer.browser());
44 return browser_displayer.browser(); 45 return browser_displayer.browser();
45 } 46 }
46 47
47 base::string16 GetDeviceName(scoped_refptr<device::UsbDevice> device) { 48 base::string16 GetDeviceName(scoped_refptr<device::UsbDevice> device) {
(...skipping 16 matching lines...) Expand all
64 base::ASCIIToUTF16(base::StringPrintf("%04x", product_id))); 65 base::ASCIIToUTF16(base::StringPrintf("%04x", product_id)));
65 } 66 }
66 } 67 }
67 68
68 return device_name; 69 return device_name;
69 } 70 }
70 71
71 } // namespace 72 } // namespace
72 73
73 UsbChooserController::UsbChooserController( 74 UsbChooserController::UsbChooserController(
74 content::RenderFrameHost* owner, 75 RenderFrameHost* render_frame_host,
75 mojo::Array<device::usb::DeviceFilterPtr> device_filters, 76 mojo::Array<device::usb::DeviceFilterPtr> device_filters,
76 content::RenderFrameHost* render_frame_host,
77 const device::usb::ChooserService::GetPermissionCallback& callback) 77 const device::usb::ChooserService::GetPermissionCallback& callback)
78 : ChooserController(owner, 78 : ChooserController(render_frame_host,
79 IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN, 79 IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN,
80 IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME), 80 IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME),
81 render_frame_host_(render_frame_host), 81 render_frame_host_(render_frame_host),
82 callback_(callback), 82 callback_(callback),
83 usb_service_observer_(this), 83 usb_service_observer_(this),
84 weak_factory_(this) { 84 weak_factory_(this) {
85 device::UsbService* usb_service = 85 device::UsbService* usb_service =
86 device::DeviceClient::Get()->GetUsbService(); 86 device::DeviceClient::Get()->GetUsbService();
87 if (!usb_service) 87 if (!usb_service)
88 return; 88 return;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 void UsbChooserController::RefreshOptions() {} 134 void UsbChooserController::RefreshOptions() {}
135 135
136 base::string16 UsbChooserController::GetStatus() const { 136 base::string16 UsbChooserController::GetStatus() const {
137 return base::string16(); 137 return base::string16();
138 } 138 }
139 139
140 void UsbChooserController::Select(const std::vector<size_t>& indices) { 140 void UsbChooserController::Select(const std::vector<size_t>& indices) {
141 DCHECK_EQ(1u, indices.size()); 141 DCHECK_EQ(1u, indices.size());
142 size_t index = indices[0]; 142 size_t index = indices[0];
143 DCHECK_LT(index, devices_.size()); 143 DCHECK_LT(index, devices_.size());
144 content::WebContents* web_contents = 144 WebContents* web_contents =
145 content::WebContents::FromRenderFrameHost(render_frame_host_); 145 WebContents::FromRenderFrameHost(render_frame_host_);
146 GURL embedding_origin = 146 GURL embedding_origin =
147 web_contents->GetMainFrame()->GetLastCommittedURL().GetOrigin(); 147 web_contents->GetMainFrame()->GetLastCommittedURL().GetOrigin();
148 Profile* profile = 148 Profile* profile =
149 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 149 Profile::FromBrowserContext(web_contents->GetBrowserContext());
150 UsbChooserContext* chooser_context = 150 UsbChooserContext* chooser_context =
151 UsbChooserContextFactory::GetForProfile(profile); 151 UsbChooserContextFactory::GetForProfile(profile);
152 chooser_context->GrantDevicePermission( 152 chooser_context->GrantDevicePermission(
153 render_frame_host_->GetLastCommittedURL().GetOrigin(), embedding_origin, 153 render_frame_host_->GetLastCommittedURL().GetOrigin(), embedding_origin,
154 devices_[index].first->guid()); 154 devices_[index].first->guid());
155 155
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 devices_.push_back(std::make_pair(device, device_name)); 216 devices_.push_back(std::make_pair(device, device_name));
217 ++device_name_map_[device_name]; 217 ++device_name_map_[device_name];
218 } 218 }
219 } 219 }
220 if (view()) 220 if (view())
221 view()->OnOptionsInitialized(); 221 view()->OnOptionsInitialized();
222 } 222 }
223 223
224 bool UsbChooserController::DisplayDevice( 224 bool UsbChooserController::DisplayDevice(
225 scoped_refptr<device::UsbDevice> device) const { 225 scoped_refptr<device::UsbDevice> device) const {
226 return device::UsbDeviceFilter::MatchesAny(device, filters_) && 226 if (!device::UsbDeviceFilter::MatchesAny(device, filters_))
227 !UsbBlocklist::Get().IsExcluded(device) && 227 return false;
228 (base::CommandLine::ForCurrentProcess()->HasSwitch( 228
229 switches::kDisableWebUsbSecurity) || 229 if (UsbBlocklist::Get().IsExcluded(device))
230 device::FindInWebUsbAllowedOrigins( 230 return false;
231 device->webusb_allowed_origins(), 231
232 render_frame_host_->GetLastCommittedURL().GetOrigin())); 232 // Embedded frames must have their origin in the list provided by the device.
233 RenderFrameHost* main_frame =
234 WebContents::FromRenderFrameHost(render_frame_host_)->GetMainFrame();
235 if (render_frame_host_ != main_frame) {
236 return device::FindInWebUsbAllowedOrigins(
237 device->webusb_allowed_origins(),
238 render_frame_host_->GetLastCommittedURL().GetOrigin());
239 }
240
241 return true;
233 } 242 }
OLDNEW
« no previous file with comments | « chrome/browser/usb/usb_chooser_controller.h ('k') | chrome/browser/usb/usb_chooser_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698