| OLD | NEW |
| 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> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "chrome/browser/ui/browser_finder.h" |
| 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 10 #include "chrome/browser/usb/web_usb_permission_provider.h" | 12 #include "chrome/browser/usb/web_usb_permission_provider.h" |
| 11 #include "device/usb/mojo/device_manager_impl.h" | 13 #include "device/usb/mojo/device_manager_impl.h" |
| 12 | 14 |
| 13 #if defined(OS_ANDROID) | 15 #if defined(OS_ANDROID) |
| 14 #include "chrome/browser/android/usb/web_usb_chooser_service_android.h" | 16 #include "chrome/browser/android/usb/web_usb_chooser_service_android.h" |
| 15 #else | 17 #else |
| 16 #include "chrome/browser/usb/web_usb_chooser_service.h" | 18 #include "chrome/browser/usb/web_usb_chooser_service.h" |
| 17 #endif // defined(OS_ANDROID) | 19 #endif // defined(OS_ANDROID) |
| 18 | 20 |
| 19 using content::RenderFrameHost; | 21 using content::RenderFrameHost; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 50 device::usb::DeviceManagerImpl::Create( | 52 device::usb::DeviceManagerImpl::Create( |
| 51 GetPermissionProvider(render_frame_host), std::move(request)); | 53 GetPermissionProvider(render_frame_host), std::move(request)); |
| 52 } | 54 } |
| 53 | 55 |
| 54 void UsbTabHelper::CreateChooserService( | 56 void UsbTabHelper::CreateChooserService( |
| 55 content::RenderFrameHost* render_frame_host, | 57 content::RenderFrameHost* render_frame_host, |
| 56 mojo::InterfaceRequest<device::usb::ChooserService> request) { | 58 mojo::InterfaceRequest<device::usb::ChooserService> request) { |
| 57 GetChooserService(render_frame_host, std::move(request)); | 59 GetChooserService(render_frame_host, std::move(request)); |
| 58 } | 60 } |
| 59 | 61 |
| 62 void UsbTabHelper::IncrementConnectionCount() { |
| 63 device_connection_count_++; |
| 64 NotifyTabStateChanged(); |
| 65 } |
| 66 |
| 67 void UsbTabHelper::DecrementConnectionCount() { |
| 68 DCHECK_GT(device_connection_count_, 0); |
| 69 device_connection_count_--; |
| 70 NotifyTabStateChanged(); |
| 71 } |
| 72 |
| 73 bool UsbTabHelper::IsDeviceConnected() const { |
| 74 return device_connection_count_ > 0; |
| 75 } |
| 76 |
| 60 UsbTabHelper::UsbTabHelper(WebContents* web_contents) | 77 UsbTabHelper::UsbTabHelper(WebContents* web_contents) |
| 61 : content::WebContentsObserver(web_contents) {} | 78 : content::WebContentsObserver(web_contents), device_connection_count_(0) {} |
| 62 | 79 |
| 63 void UsbTabHelper::RenderFrameDeleted(RenderFrameHost* render_frame_host) { | 80 void UsbTabHelper::RenderFrameDeleted(RenderFrameHost* render_frame_host) { |
| 64 frame_usb_services_.erase(render_frame_host); | 81 frame_usb_services_.erase(render_frame_host); |
| 65 } | 82 } |
| 66 | 83 |
| 67 FrameUsbServices* UsbTabHelper::GetFrameUsbService( | 84 FrameUsbServices* UsbTabHelper::GetFrameUsbService( |
| 68 content::RenderFrameHost* render_frame_host) { | 85 content::RenderFrameHost* render_frame_host) { |
| 69 FrameUsbServicesMap::const_iterator it = | 86 FrameUsbServicesMap::const_iterator it = |
| 70 frame_usb_services_.find(render_frame_host); | 87 frame_usb_services_.find(render_frame_host); |
| 71 if (it == frame_usb_services_.end()) { | 88 if (it == frame_usb_services_.end()) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 94 if (!frame_usb_services->chooser_service) { | 111 if (!frame_usb_services->chooser_service) { |
| 95 frame_usb_services->chooser_service.reset( | 112 frame_usb_services->chooser_service.reset( |
| 96 #if defined(OS_ANDROID) | 113 #if defined(OS_ANDROID) |
| 97 new WebUsbChooserServiceAndroid(render_frame_host)); | 114 new WebUsbChooserServiceAndroid(render_frame_host)); |
| 98 #else | 115 #else |
| 99 new WebUsbChooserService(render_frame_host)); | 116 new WebUsbChooserService(render_frame_host)); |
| 100 #endif // defined(OS_ANDROID) | 117 #endif // defined(OS_ANDROID) |
| 101 } | 118 } |
| 102 frame_usb_services->chooser_service->Bind(std::move(request)); | 119 frame_usb_services->chooser_service->Bind(std::move(request)); |
| 103 } | 120 } |
| 121 |
| 122 void UsbTabHelper::NotifyTabStateChanged() const { |
| 123 // TODO(https://crbug.com/601627): Implement tab indicator for Android. |
| 124 #if !defined(OS_ANDROID) |
| 125 Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); |
| 126 if (browser) { |
| 127 TabStripModel* tab_strip_model = browser->tab_strip_model(); |
| 128 tab_strip_model->UpdateWebContentsStateAt( |
| 129 tab_strip_model->GetIndexOfWebContents(web_contents()), |
| 130 TabStripModelObserver::ALL); |
| 131 } |
| 132 #endif |
| 133 } |
| OLD | NEW |