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

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

Issue 1408193003: Add chrome side webusb permission UI code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: call UsbChooserContext::GrantDevicePermission when user grants permission to a device Created 5 years, 1 month 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_tab_helper.h" 5 #include "chrome/browser/usb/usb_tab_helper.h"
6 6
7 #include "base/memory/scoped_ptr.h"
8 #include "chrome/browser/usb/web_usb_permission_bubble.h"
7 #include "chrome/browser/usb/web_usb_permission_provider.h" 9 #include "chrome/browser/usb/web_usb_permission_provider.h"
8 #include "device/devices_app/usb/device_manager_impl.h" 10 #include "device/devices_app/usb/device_manager_impl.h"
9 11
10 using content::RenderFrameHost; 12 using content::RenderFrameHost;
11 using content::WebContents; 13 using content::WebContents;
12 14
13 DEFINE_WEB_CONTENTS_USER_DATA_KEY(UsbTabHelper); 15 DEFINE_WEB_CONTENTS_USER_DATA_KEY(UsbTabHelper);
14 16
17 struct FrameUsbServices {
18 scoped_ptr<WebUSBPermissionProvider> permission_provider;
19 scoped_ptr<ChromeWebUsbPermissionBubble> permission_bubble;
20 };
21
15 // static 22 // static
16 UsbTabHelper* UsbTabHelper::GetOrCreateForWebContents( 23 UsbTabHelper* UsbTabHelper::GetOrCreateForWebContents(
17 WebContents* web_contents) { 24 WebContents* web_contents) {
18 UsbTabHelper* tab_helper = FromWebContents(web_contents); 25 UsbTabHelper* tab_helper = FromWebContents(web_contents);
19 if (!tab_helper) { 26 if (!tab_helper) {
20 CreateForWebContents(web_contents); 27 CreateForWebContents(web_contents);
21 tab_helper = FromWebContents(web_contents); 28 tab_helper = FromWebContents(web_contents);
22 } 29 }
23 return tab_helper; 30 return tab_helper;
24 } 31 }
25 32
26 UsbTabHelper::~UsbTabHelper() {} 33 UsbTabHelper::~UsbTabHelper() {}
27 34
28 void UsbTabHelper::CreateDeviceManager( 35 void UsbTabHelper::CreateDeviceManager(
29 RenderFrameHost* render_frame_host, 36 RenderFrameHost* render_frame_host,
30 mojo::InterfaceRequest<device::usb::DeviceManager> request) { 37 mojo::InterfaceRequest<device::usb::DeviceManager> request) {
31 DCHECK(WebContents::FromRenderFrameHost(render_frame_host) == web_contents()); 38 DCHECK(WebContents::FromRenderFrameHost(render_frame_host) == web_contents());
32 device::usb::PermissionProviderPtr permission_provider; 39 device::usb::PermissionProviderPtr permission_provider;
33 GetPermissionProvider(render_frame_host, 40 GetPermissionProvider(render_frame_host,
34 mojo::GetProxy(&permission_provider)); 41 mojo::GetProxy(&permission_provider));
35 device::usb::DeviceManagerImpl::Create(permission_provider.Pass(), 42 device::usb::DeviceManagerImpl::Create(permission_provider.Pass(),
36 request.Pass()); 43 request.Pass());
37 } 44 }
38 45
46 void UsbTabHelper::CreatePermissionBubble(
47 content::RenderFrameHost* render_frame_host,
48 mojo::InterfaceRequest<webusb::WebUsbPermissionBubble> request) {
49 GetPermissionBubble(render_frame_host, request.Pass());
50 }
51
39 UsbTabHelper::UsbTabHelper(WebContents* web_contents) 52 UsbTabHelper::UsbTabHelper(WebContents* web_contents)
40 : content::WebContentsObserver(web_contents) {} 53 : content::WebContentsObserver(web_contents) {}
41 54
42 void UsbTabHelper::RenderFrameDeleted(RenderFrameHost* render_frame_host) { 55 void UsbTabHelper::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
43 permission_provider_.erase(render_frame_host); 56 frame_usb_services_.erase(render_frame_host);
57 }
58
59 FrameUsbServicesMap::const_iterator UsbTabHelper::GetFrameUsbService(
60 content::RenderFrameHost* render_frame_host) {
61 FrameUsbServicesMap::const_iterator it =
62 frame_usb_services_.find(render_frame_host);
63 if (it == frame_usb_services_.end()) {
64 scoped_ptr<FrameUsbServices> frame_usb_services(new FrameUsbServices());
65 it = (frame_usb_services_.insert(render_frame_host,
66 frame_usb_services.Pass()))
67 .first;
68 }
69 return it;
44 } 70 }
45 71
46 void UsbTabHelper::GetPermissionProvider( 72 void UsbTabHelper::GetPermissionProvider(
47 RenderFrameHost* render_frame_host, 73 RenderFrameHost* render_frame_host,
48 mojo::InterfaceRequest<device::usb::PermissionProvider> request) { 74 mojo::InterfaceRequest<device::usb::PermissionProvider> request) {
49 const auto it = permission_provider_.find(render_frame_host); 75 const auto it = GetFrameUsbService(render_frame_host);
50 if (it == permission_provider_.end()) { 76 if (!it->second->permission_provider) {
51 scoped_ptr<WebUSBPermissionProvider> permission_provider( 77 it->second->permission_provider.reset(
52 new WebUSBPermissionProvider(render_frame_host)); 78 new WebUSBPermissionProvider(render_frame_host));
53 permission_provider->Bind(request.Pass()); 79 }
54 permission_provider_.set(render_frame_host, permission_provider.Pass()); 80 it->second->permission_provider->Bind(request.Pass());
55 } else { 81 }
56 it->second->Bind(request.Pass()); 82
83 void UsbTabHelper::GetPermissionBubble(
84 content::RenderFrameHost* render_frame_host,
85 mojo::InterfaceRequest<webusb::WebUsbPermissionBubble> request) {
86 const auto it = GetFrameUsbService(render_frame_host);
87 if (!it->second->permission_bubble) {
Reilly Grant (use Gerrit) 2015/11/12 21:44:37 This is just going to drop the interface request o
juncai 2015/11/14 01:54:36 Done.
88 it->second->permission_bubble.reset(
89 new ChromeWebUsbPermissionBubble(render_frame_host, request.Pass()));
57 } 90 }
58 } 91 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698