Chromium Code Reviews| Index: chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc |
| diff --git a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc |
| index 33fef4d27f499f3835121bf96781cfab57cb5ec5..05343f71327dcdda75a309f168b5aec38a5c6409 100644 |
| --- a/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc |
| +++ b/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc |
| @@ -54,7 +54,6 @@ std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) { |
| printer_info->SetString("printerDescription", printer.description()); |
| printer_info->SetString("printerManufacturer", printer.manufacturer()); |
| printer_info->SetString("printerModel", printer.model()); |
| - |
| // Get protocol, ip address and queue from the printer's URI. |
| const std::string printer_uri = printer.uri(); |
| url::Parsed parsed; |
| @@ -69,11 +68,20 @@ std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) { |
| host = std::string(printer_uri, parsed.host.begin, parsed.host.len); |
| if (parsed.path.len > 0) |
| path = std::string(printer_uri, parsed.path.begin, parsed.path.len); |
| - |
| - printer_info->SetString("printerAddress", host); |
| + if (base::ToLowerASCII(scheme) == "usb") { |
| + // USB has URI path (and, maybe, query) components that aren't really |
| + // associated with a queue -- the mapping between printing semantics and URI |
| + // semantics breaks down a bit here. From the user's point of view, the |
| + // entire host/path/query block is the printer address for USB. |
| + printer_info->SetString("printerAddress", |
| + printer_uri.substr(parsed.host.begin)); |
| + } else { |
| + printer_info->SetString("printerAddress", host); |
| + if (!path.empty()) { |
| + printer_info->SetString("printerQueue", path.substr(1)); |
| + } |
| + } |
| printer_info->SetString("printerProtocol", base::ToLowerASCII(scheme)); |
| - if (!path.empty()) |
| - printer_info->SetString("printerQueue", path.substr(1)); |
| return printer_info; |
| } |
| @@ -203,8 +211,10 @@ void CupsPrintersHandler::HandleAddCupsPrinter(const base::ListValue* args) { |
| // printerPPDPath might be null for an auto-discovered printer. |
| printer_dict->GetString("printerPPDPath", &printer_ppd_path); |
| - std::string printer_uri = |
| - printer_protocol + "://" + printer_address + "/" + printer_queue; |
| + std::string printer_uri = printer_protocol + "://" + printer_address; |
| + if (!printer_queue.empty()) { |
| + printer_uri += "/" + printer_queue; |
| + } |
|
stevenjb
2017/05/12 17:19:09
nit: no {}
Carlson
2017/05/12 18:14:09
As I understand it, it's optional in C++ and doing
|
| std::unique_ptr<Printer> printer = base::MakeUnique<Printer>(printer_id); |
| printer->set_display_name(printer_name); |