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

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

Issue 2539593002: Fix blank names issue for navigator.usb.requestDevice (Closed)
Patch Set: fix blank names issue for navigator.usb.requestDevice Created 4 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/app/generated_resources.grd ('k') | no next file » | 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_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" 11 #include "base/command_line.h"
12 #include "base/strings/stringprintf.h"
13 #include "base/strings/utf_string_conversions.h"
12 #include "chrome/browser/net/referrer.h" 14 #include "chrome/browser/net/referrer.h"
13 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/profiles/profile_manager.h" 16 #include "chrome/browser/profiles/profile_manager.h"
15 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" 18 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
17 #include "chrome/browser/usb/usb_chooser_context.h" 19 #include "chrome/browser/usb/usb_chooser_context.h"
18 #include "chrome/browser/usb/usb_chooser_context_factory.h" 20 #include "chrome/browser/usb/usb_chooser_context_factory.h"
19 #include "chrome/browser/usb/web_usb_histograms.h" 21 #include "chrome/browser/usb/web_usb_histograms.h"
20 #include "chrome/browser/usb/web_usb_permission_provider.h" 22 #include "chrome/browser/usb/web_usb_permission_provider.h"
21 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
22 #include "chrome/common/url_constants.h" 24 #include "chrome/common/url_constants.h"
23 #include "chrome/grit/generated_resources.h" 25 #include "chrome/grit/generated_resources.h"
24 #include "content/public/browser/render_frame_host.h" 26 #include "content/public/browser/render_frame_host.h"
25 #include "content/public/browser/web_contents.h" 27 #include "content/public/browser/web_contents.h"
26 #include "device/base/device_client.h" 28 #include "device/base/device_client.h"
27 #include "device/usb/mojo/type_converters.h" 29 #include "device/usb/mojo/type_converters.h"
28 #include "device/usb/usb_device.h" 30 #include "device/usb/usb_device.h"
29 #include "device/usb/usb_device_filter.h" 31 #include "device/usb/usb_device_filter.h"
32 #include "device/usb/usb_ids.h"
30 #include "device/usb/webusb_descriptors.h" 33 #include "device/usb/webusb_descriptors.h"
31 #include "ui/base/l10n/l10n_util.h" 34 #include "ui/base/l10n/l10n_util.h"
32 #include "url/gurl.h" 35 #include "url/gurl.h"
33 36
34 namespace { 37 namespace {
35 38
36 Browser* GetBrowser() { 39 Browser* GetBrowser() {
37 chrome::ScopedTabbedBrowserDisplayer browser_displayer( 40 chrome::ScopedTabbedBrowserDisplayer browser_displayer(
38 ProfileManager::GetActiveUserProfile()); 41 ProfileManager::GetActiveUserProfile());
39 DCHECK(browser_displayer.browser()); 42 DCHECK(browser_displayer.browser());
40 return browser_displayer.browser(); 43 return browser_displayer.browser();
41 } 44 }
42 45
46 base::string16 GetDeviceName(scoped_refptr<device::UsbDevice> device) {
47 base::string16 device_name = device->product_string();
48 if (device_name.empty()) {
49 uint16_t vendor_id = device->vendor_id();
50 uint16_t product_id = device->product_id();
51 if (const char* product_name =
52 device::UsbIds::GetProductName(vendor_id, product_id)) {
53 device_name = base::UTF8ToUTF16(product_name);
54 } else if (const char* vendor_name =
55 device::UsbIds::GetVendorName(vendor_id)) {
56 device_name = l10n_util::GetStringFUTF16(
57 IDS_DEVICE_CHOOSER_DEVICE_NAME_UNKNOWN_DEVICE_WITH_VENDOR_NAME,
58 base::UTF8ToUTF16(vendor_name));
59 } else {
60 device_name = l10n_util::GetStringFUTF16(
61 IDS_DEVICE_CHOOSER_DEVICE_NAME_UNKNOWN_DEVICE_WITH_VENDOR_ID_AND_PRODU CT_ID,
62 base::ASCIIToUTF16(base::StringPrintf("%04x", vendor_id)),
63 base::ASCIIToUTF16(base::StringPrintf("%04x", product_id)));
64 }
65 }
66
67 return device_name;
68 }
69
43 } // namespace 70 } // namespace
44 71
45 UsbChooserController::UsbChooserController( 72 UsbChooserController::UsbChooserController(
46 content::RenderFrameHost* owner, 73 content::RenderFrameHost* owner,
47 mojo::Array<device::usb::DeviceFilterPtr> device_filters, 74 mojo::Array<device::usb::DeviceFilterPtr> device_filters,
48 content::RenderFrameHost* render_frame_host, 75 content::RenderFrameHost* render_frame_host,
49 const device::usb::ChooserService::GetPermissionCallback& callback) 76 const device::usb::ChooserService::GetPermissionCallback& callback)
50 : ChooserController(owner, 77 : ChooserController(owner,
51 IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN, 78 IDS_USB_DEVICE_CHOOSER_PROMPT_ORIGIN,
52 IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME), 79 IDS_USB_DEVICE_CHOOSER_PROMPT_EXTENSION_NAME),
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 void UsbChooserController::OpenHelpCenterUrl() const { 174 void UsbChooserController::OpenHelpCenterUrl() const {
148 GetBrowser()->OpenURL(content::OpenURLParams( 175 GetBrowser()->OpenURL(content::OpenURLParams(
149 GURL(chrome::kChooserUsbOverviewURL), content::Referrer(), 176 GURL(chrome::kChooserUsbOverviewURL), content::Referrer(),
150 WindowOpenDisposition::NEW_FOREGROUND_TAB, 177 WindowOpenDisposition::NEW_FOREGROUND_TAB,
151 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false /* is_renderer_initialized */)); 178 ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false /* is_renderer_initialized */));
152 } 179 }
153 180
154 void UsbChooserController::OnDeviceAdded( 181 void UsbChooserController::OnDeviceAdded(
155 scoped_refptr<device::UsbDevice> device) { 182 scoped_refptr<device::UsbDevice> device) {
156 if (DisplayDevice(device)) { 183 if (DisplayDevice(device)) {
157 const base::string16& device_name = device->product_string(); 184 base::string16 device_name = GetDeviceName(device);
158 devices_.push_back(std::make_pair(device, device_name)); 185 devices_.push_back(std::make_pair(device, device_name));
159 ++device_name_map_[device_name]; 186 ++device_name_map_[device_name];
160 if (view()) 187 if (view())
161 view()->OnOptionAdded(devices_.size() - 1); 188 view()->OnOptionAdded(devices_.size() - 1);
162 } 189 }
163 } 190 }
164 191
165 void UsbChooserController::OnDeviceRemoved( 192 void UsbChooserController::OnDeviceRemoved(
166 scoped_refptr<device::UsbDevice> device) { 193 scoped_refptr<device::UsbDevice> device) {
167 for (auto it = devices_.begin(); it != devices_.end(); ++it) { 194 for (auto it = devices_.begin(); it != devices_.end(); ++it) {
168 if (it->first == device) { 195 if (it->first == device) {
169 size_t index = it - devices_.begin(); 196 size_t index = it - devices_.begin();
170 DCHECK_GT(device_name_map_[it->second], 0); 197 DCHECK_GT(device_name_map_[it->second], 0);
171 if (--device_name_map_[it->second] == 0) 198 if (--device_name_map_[it->second] == 0)
172 device_name_map_.erase(it->second); 199 device_name_map_.erase(it->second);
173 devices_.erase(it); 200 devices_.erase(it);
174 if (view()) 201 if (view())
175 view()->OnOptionRemoved(index); 202 view()->OnOptionRemoved(index);
176 return; 203 return;
177 } 204 }
178 } 205 }
179 } 206 }
180 207
181 // Get a list of devices that can be shown in the chooser bubble UI for 208 // Get a list of devices that can be shown in the chooser bubble UI for
182 // user to grant permsssion. 209 // user to grant permsssion.
183 void UsbChooserController::GotUsbDeviceList( 210 void UsbChooserController::GotUsbDeviceList(
184 const std::vector<scoped_refptr<device::UsbDevice>>& devices) { 211 const std::vector<scoped_refptr<device::UsbDevice>>& devices) {
185 for (const auto& device : devices) { 212 for (const auto& device : devices) {
186 if (DisplayDevice(device)) { 213 if (DisplayDevice(device)) {
187 const base::string16& device_name = device->product_string(); 214 base::string16 device_name = GetDeviceName(device);
188 devices_.push_back(std::make_pair(device, device_name)); 215 devices_.push_back(std::make_pair(device, device_name));
189 ++device_name_map_[device_name]; 216 ++device_name_map_[device_name];
190 } 217 }
191 } 218 }
192 if (view()) 219 if (view())
193 view()->OnOptionsInitialized(); 220 view()->OnOptionsInitialized();
194 } 221 }
195 222
196 bool UsbChooserController::DisplayDevice( 223 bool UsbChooserController::DisplayDevice(
197 scoped_refptr<device::UsbDevice> device) const { 224 scoped_refptr<device::UsbDevice> device) const {
198 return device::UsbDeviceFilter::MatchesAny(device, filters_) && 225 return device::UsbDeviceFilter::MatchesAny(device, filters_) &&
199 (base::CommandLine::ForCurrentProcess()->HasSwitch( 226 (base::CommandLine::ForCurrentProcess()->HasSwitch(
200 switches::kDisableWebUsbSecurity) || 227 switches::kDisableWebUsbSecurity) ||
201 device::FindInWebUsbAllowedOrigins( 228 device::FindInWebUsbAllowedOrigins(
202 device->webusb_allowed_origins(), 229 device->webusb_allowed_origins(),
203 render_frame_host_->GetLastCommittedURL().GetOrigin())); 230 render_frame_host_->GetLastCommittedURL().GetOrigin()));
204 } 231 }
OLDNEW
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698