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

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: updated code to use ScopedPtrMap, added #ifdef for mobile platforms 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);
44 } 57 }
45 58
46 void UsbTabHelper::GetPermissionProvider( 59 void UsbTabHelper::GetPermissionProvider(
47 RenderFrameHost* render_frame_host, 60 RenderFrameHost* render_frame_host,
48 mojo::InterfaceRequest<device::usb::PermissionProvider> request) { 61 mojo::InterfaceRequest<device::usb::PermissionProvider> request) {
49 const auto it = permission_provider_.find(render_frame_host); 62 auto it = frame_usb_services_.find(render_frame_host);
50 if (it == permission_provider_.end()) { 63
51 scoped_ptr<WebUSBPermissionProvider> permission_provider( 64 if (it == frame_usb_services_.end()) {
65 scoped_ptr<FrameUsbServices> frame_usb_services(new FrameUsbServices());
66 it = (frame_usb_services_.insert(render_frame_host,
67 frame_usb_services.Pass()))
68 .first;
69 }
70
71 if (!it->second->permission_provider) {
72 it->second->permission_provider.reset(
52 new WebUSBPermissionProvider(render_frame_host)); 73 new WebUSBPermissionProvider(render_frame_host));
53 permission_provider->Bind(request.Pass()); 74 }
54 permission_provider_.set(render_frame_host, permission_provider.Pass()); 75
55 } else { 76 it->second->permission_provider->Bind(request.Pass());
56 it->second->Bind(request.Pass()); 77 }
78
79 void UsbTabHelper::GetPermissionBubble(
80 content::RenderFrameHost* render_frame_host,
81 mojo::InterfaceRequest<webusb::WebUsbPermissionBubble> request) {
82 auto it = frame_usb_services_.find(render_frame_host);
83
84 if (it == frame_usb_services_.end()) {
Reilly Grant (use Gerrit) 2015/10/29 01:11:33 Create a helper function that prevents duplication
juncai 2015/10/31 04:15:36 Done.
85 scoped_ptr<FrameUsbServices> frame_usb_services(new FrameUsbServices());
86 it = (frame_usb_services_.insert(render_frame_host,
87 frame_usb_services.Pass()))
88 .first;
89 }
90
91 if (!it->second->permission_bubble) {
92 it->second->permission_bubble.reset(
93 new ChromeWebUsbPermissionBubble(render_frame_host, request.Pass()));
57 } 94 }
58 } 95 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698