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

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: address sky@'s comments, added TODO to chrome_bubble_manager.cc Created 5 years 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
« no previous file with comments | « chrome/browser/usb/usb_tab_helper.h ('k') | chrome/browser/usb/web_usb_permission_bubble.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <utility>
8
9 #include "base/memory/scoped_ptr.h"
10 #include "chrome/browser/usb/web_usb_permission_bubble.h"
7 #include "chrome/browser/usb/web_usb_permission_provider.h" 11 #include "chrome/browser/usb/web_usb_permission_provider.h"
8 #include "device/devices_app/usb/device_manager_impl.h" 12 #include "device/devices_app/usb/device_manager_impl.h"
9 13
10 using content::RenderFrameHost; 14 using content::RenderFrameHost;
11 using content::WebContents; 15 using content::WebContents;
12 16
13 DEFINE_WEB_CONTENTS_USER_DATA_KEY(UsbTabHelper); 17 DEFINE_WEB_CONTENTS_USER_DATA_KEY(UsbTabHelper);
14 18
19 struct FrameUsbServices {
20 scoped_ptr<WebUSBPermissionProvider> permission_provider;
21 scoped_ptr<ChromeWebUsbPermissionBubble> permission_bubble;
22 };
23
15 // static 24 // static
16 UsbTabHelper* UsbTabHelper::GetOrCreateForWebContents( 25 UsbTabHelper* UsbTabHelper::GetOrCreateForWebContents(
17 WebContents* web_contents) { 26 WebContents* web_contents) {
18 UsbTabHelper* tab_helper = FromWebContents(web_contents); 27 UsbTabHelper* tab_helper = FromWebContents(web_contents);
19 if (!tab_helper) { 28 if (!tab_helper) {
20 CreateForWebContents(web_contents); 29 CreateForWebContents(web_contents);
21 tab_helper = FromWebContents(web_contents); 30 tab_helper = FromWebContents(web_contents);
22 } 31 }
23 return tab_helper; 32 return tab_helper;
24 } 33 }
25 34
26 UsbTabHelper::~UsbTabHelper() {} 35 UsbTabHelper::~UsbTabHelper() {}
27 36
28 void UsbTabHelper::CreateDeviceManager( 37 void UsbTabHelper::CreateDeviceManager(
29 RenderFrameHost* render_frame_host, 38 RenderFrameHost* render_frame_host,
30 mojo::InterfaceRequest<device::usb::DeviceManager> request) { 39 mojo::InterfaceRequest<device::usb::DeviceManager> request) {
31 DCHECK(WebContents::FromRenderFrameHost(render_frame_host) == web_contents()); 40 DCHECK(WebContents::FromRenderFrameHost(render_frame_host) == web_contents());
32 device::usb::PermissionProviderPtr permission_provider; 41 device::usb::PermissionProviderPtr permission_provider;
33 GetPermissionProvider(render_frame_host, 42 GetPermissionProvider(render_frame_host,
34 mojo::GetProxy(&permission_provider)); 43 mojo::GetProxy(&permission_provider));
35 device::usb::DeviceManagerImpl::Create(permission_provider.Pass(), 44 device::usb::DeviceManagerImpl::Create(permission_provider.Pass(),
36 request.Pass()); 45 request.Pass());
37 } 46 }
38 47
48 void UsbTabHelper::CreatePermissionBubble(
49 content::RenderFrameHost* render_frame_host,
50 mojo::InterfaceRequest<webusb::WebUsbPermissionBubble> request) {
51 GetPermissionBubble(render_frame_host, request.Pass());
52 }
53
39 UsbTabHelper::UsbTabHelper(WebContents* web_contents) 54 UsbTabHelper::UsbTabHelper(WebContents* web_contents)
40 : content::WebContentsObserver(web_contents) {} 55 : content::WebContentsObserver(web_contents) {}
41 56
42 void UsbTabHelper::RenderFrameDeleted(RenderFrameHost* render_frame_host) { 57 void UsbTabHelper::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
43 permission_provider_.erase(render_frame_host); 58 frame_usb_services_.erase(render_frame_host);
59 }
60
61 FrameUsbServices* UsbTabHelper::GetFrameUsbService(
62 content::RenderFrameHost* render_frame_host) {
63 FrameUsbServicesMap::const_iterator it =
64 frame_usb_services_.find(render_frame_host);
65 if (it == frame_usb_services_.end()) {
66 scoped_ptr<FrameUsbServices> frame_usb_services(new FrameUsbServices());
67 it = (frame_usb_services_.insert(
68 std::make_pair(render_frame_host, frame_usb_services.Pass())))
69 .first;
70 }
71 return it->second.get();
44 } 72 }
45 73
46 void UsbTabHelper::GetPermissionProvider( 74 void UsbTabHelper::GetPermissionProvider(
47 RenderFrameHost* render_frame_host, 75 RenderFrameHost* render_frame_host,
48 mojo::InterfaceRequest<device::usb::PermissionProvider> request) { 76 mojo::InterfaceRequest<device::usb::PermissionProvider> request) {
49 const auto it = permission_provider_.find(render_frame_host); 77 FrameUsbServices* frame_usb_services = GetFrameUsbService(render_frame_host);
50 if (it == permission_provider_.end()) { 78 if (!frame_usb_services->permission_provider) {
51 scoped_ptr<WebUSBPermissionProvider> permission_provider( 79 frame_usb_services->permission_provider.reset(
52 new WebUSBPermissionProvider(render_frame_host)); 80 new WebUSBPermissionProvider(render_frame_host));
53 permission_provider->Bind(request.Pass());
54 permission_provider_[render_frame_host] = permission_provider.Pass();
55 } else {
56 it->second->Bind(request.Pass());
57 } 81 }
82 frame_usb_services->permission_provider->Bind(request.Pass());
58 } 83 }
84
85 void UsbTabHelper::GetPermissionBubble(
86 content::RenderFrameHost* render_frame_host,
87 mojo::InterfaceRequest<webusb::WebUsbPermissionBubble> request) {
88 FrameUsbServices* frame_usb_services = GetFrameUsbService(render_frame_host);
89 if (!frame_usb_services->permission_bubble) {
90 frame_usb_services->permission_bubble.reset(
91 new ChromeWebUsbPermissionBubble(render_frame_host));
92 }
93 frame_usb_services->permission_bubble->Bind(request.Pass());
94 }
OLDNEW
« no previous file with comments | « chrome/browser/usb/usb_tab_helper.h ('k') | chrome/browser/usb/web_usb_permission_bubble.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698