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

Side by Side Diff: chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc

Issue 2825153002: Update CUPS settings UI to allow USB printers to be added via discovery. (Closed)
Patch Set: Fixup overlooked test revealed by CQ. Created 3 years, 7 months 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/ui/webui/settings/chromeos/cups_printers_handler.h" 5 #include "chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 void OnRemovedPrinter(bool success) {} 47 void OnRemovedPrinter(bool success) {}
48 48
49 std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) { 49 std::unique_ptr<base::DictionaryValue> GetPrinterInfo(const Printer& printer) {
50 std::unique_ptr<base::DictionaryValue> printer_info = 50 std::unique_ptr<base::DictionaryValue> printer_info =
51 base::MakeUnique<base::DictionaryValue>(); 51 base::MakeUnique<base::DictionaryValue>();
52 printer_info->SetString("printerId", printer.id()); 52 printer_info->SetString("printerId", printer.id());
53 printer_info->SetString("printerName", printer.display_name()); 53 printer_info->SetString("printerName", printer.display_name());
54 printer_info->SetString("printerDescription", printer.description()); 54 printer_info->SetString("printerDescription", printer.description());
55 printer_info->SetString("printerManufacturer", printer.manufacturer()); 55 printer_info->SetString("printerManufacturer", printer.manufacturer());
56 printer_info->SetString("printerModel", printer.model()); 56 printer_info->SetString("printerModel", printer.model());
57
58 // Get protocol, ip address and queue from the printer's URI. 57 // Get protocol, ip address and queue from the printer's URI.
59 const std::string printer_uri = printer.uri(); 58 const std::string printer_uri = printer.uri();
60 url::Parsed parsed; 59 url::Parsed parsed;
61 url::ParseStandardURL(printer_uri.c_str(), printer_uri.length(), &parsed); 60 url::ParseStandardURL(printer_uri.c_str(), printer_uri.length(), &parsed);
62 61
63 std::string scheme; 62 std::string scheme;
64 std::string host; 63 std::string host;
65 std::string path; 64 std::string path;
66 if (parsed.scheme.len > 0) 65 if (parsed.scheme.len > 0)
67 scheme = std::string(printer_uri, parsed.scheme.begin, parsed.scheme.len); 66 scheme = std::string(printer_uri, parsed.scheme.begin, parsed.scheme.len);
68 if (parsed.host.len > 0) 67 if (parsed.host.len > 0)
69 host = std::string(printer_uri, parsed.host.begin, parsed.host.len); 68 host = std::string(printer_uri, parsed.host.begin, parsed.host.len);
70 if (parsed.path.len > 0) 69 if (parsed.path.len > 0)
71 path = std::string(printer_uri, parsed.path.begin, parsed.path.len); 70 path = std::string(printer_uri, parsed.path.begin, parsed.path.len);
72 71 if (base::ToLowerASCII(scheme) == "usb") {
73 printer_info->SetString("printerAddress", host); 72 // USB has URI path (and, maybe, query) components that aren't really
73 // associated with a queue -- the mapping between printing semantics and URI
74 // semantics breaks down a bit here. From the user's point of view, the
75 // entire host/path/query block is the printer address for USB.
76 printer_info->SetString("printerAddress",
77 printer_uri.substr(parsed.host.begin));
78 } else {
79 printer_info->SetString("printerAddress", host);
80 if (!path.empty()) {
81 printer_info->SetString("printerQueue", path.substr(1));
82 }
83 }
74 printer_info->SetString("printerProtocol", base::ToLowerASCII(scheme)); 84 printer_info->SetString("printerProtocol", base::ToLowerASCII(scheme));
75 if (!path.empty())
76 printer_info->SetString("printerQueue", path.substr(1));
77 85
78 return printer_info; 86 return printer_info;
79 } 87 }
80 88
81 } // namespace 89 } // namespace
82 90
83 CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui) 91 CupsPrintersHandler::CupsPrintersHandler(content::WebUI* webui)
84 : printer_discoverer_(nullptr), 92 : printer_discoverer_(nullptr),
85 profile_(Profile::FromWebUI(webui)), 93 profile_(Profile::FromWebUI(webui)),
86 weak_factory_(this) { 94 weak_factory_(this) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 CHECK(printer_dict->GetString("printerDescription", &printer_description)); 204 CHECK(printer_dict->GetString("printerDescription", &printer_description));
197 CHECK(printer_dict->GetString("printerManufacturer", &printer_manufacturer)); 205 CHECK(printer_dict->GetString("printerManufacturer", &printer_manufacturer));
198 CHECK(printer_dict->GetString("printerModel", &printer_model)); 206 CHECK(printer_dict->GetString("printerModel", &printer_model));
199 CHECK(printer_dict->GetString("printerAddress", &printer_address)); 207 CHECK(printer_dict->GetString("printerAddress", &printer_address));
200 CHECK(printer_dict->GetString("printerProtocol", &printer_protocol)); 208 CHECK(printer_dict->GetString("printerProtocol", &printer_protocol));
201 // printerQueue might be null for a printer whose protocol is not 'LPD'. 209 // printerQueue might be null for a printer whose protocol is not 'LPD'.
202 printer_dict->GetString("printerQueue", &printer_queue); 210 printer_dict->GetString("printerQueue", &printer_queue);
203 211
204 // printerPPDPath might be null for an auto-discovered printer. 212 // printerPPDPath might be null for an auto-discovered printer.
205 printer_dict->GetString("printerPPDPath", &printer_ppd_path); 213 printer_dict->GetString("printerPPDPath", &printer_ppd_path);
206 std::string printer_uri = 214 std::string printer_uri = printer_protocol + "://" + printer_address;
207 printer_protocol + "://" + printer_address + "/" + printer_queue; 215 if (!printer_queue.empty()) {
216 printer_uri += "/" + printer_queue;
217 }
208 218
209 std::unique_ptr<Printer> printer = base::MakeUnique<Printer>(printer_id); 219 std::unique_ptr<Printer> printer = base::MakeUnique<Printer>(printer_id);
210 printer->set_display_name(printer_name); 220 printer->set_display_name(printer_name);
211 printer->set_description(printer_description); 221 printer->set_description(printer_description);
212 printer->set_manufacturer(printer_manufacturer); 222 printer->set_manufacturer(printer_manufacturer);
213 printer->set_model(printer_model); 223 printer->set_model(printer_model);
214 printer->set_uri(printer_uri); 224 printer->set_uri(printer_uri);
215 225
216 // Verify a valid ppd path is present. 226 // Verify a valid ppd path is present.
217 if (!printer_ppd_path.empty()) { 227 if (!printer_ppd_path.empty()) {
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 base::Value("on-printer-discovered"), *printers_list); 411 base::Value("on-printer-discovered"), *printers_list);
402 } 412 }
403 413
404 void CupsPrintersHandler::OnDiscoveryInitialScanDone() { 414 void CupsPrintersHandler::OnDiscoveryInitialScanDone() {
405 CallJavascriptFunction("cr.webUIListenerCallback", 415 CallJavascriptFunction("cr.webUIListenerCallback",
406 base::Value("on-printer-discovery-done")); 416 base::Value("on-printer-discovery-done"));
407 } 417 }
408 418
409 } // namespace settings 419 } // namespace settings
410 } // namespace chromeos 420 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698