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

Unified Diff: chrome/browser/ui/webui/print_preview/print_preview_handler.cc

Issue 1979903002: Print Preview: Get printer info with capabilities. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cups_14
Patch Set: nit Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/webui/print_preview/print_preview_handler.h ('k') | printing/backend/print_backend.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/print_preview/print_preview_handler.cc
diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
index 5068fb081ab50dfb3d593fd7a0a3fbfe77f7150c..69eb887358621af09f9edeceddd366d15f709d39 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -309,7 +309,7 @@ std::string GetDefaultPrinterOnFileThread() {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
scoped_refptr<printing::PrintBackend> print_backend(
- printing::PrintBackend::CreateInstance(NULL));
+ printing::PrintBackend::CreateInstance(nullptr));
std::string default_printer = print_backend->GetDefaultPrinterName();
VLOG(1) << "Default Printer: " << default_printer;
@@ -341,12 +341,9 @@ gfx::Size GetDefaultPdfMediaSizeMicrons() {
pdf_media_size.height() * deviceMicronsPerDeviceUnit);
}
-typedef base::Callback<void(const base::DictionaryValue*)>
- GetPdfCapabilitiesCallback;
-
-std::unique_ptr<base::DictionaryValue> GetPdfCapabilitiesOnFileThread(
+std::unique_ptr<base::DictionaryValue> GetPdfCapabilities(
const std::string& locale) {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
cloud_devices::CloudDeviceDescription description;
using namespace cloud_devices::printer;
@@ -396,117 +393,103 @@ std::unique_ptr<base::DictionaryValue> GetPdfCapabilitiesOnFileThread(
return std::unique_ptr<base::DictionaryValue>(description.root().DeepCopy());
}
-std::unique_ptr<base::DictionaryValue> GetLocalPrinterCapabilitiesOnFileThread(
- const std::string& printer_name) {
- DCHECK_CURRENTLY_ON(BrowserThread::FILE);
-
- scoped_refptr<printing::PrintBackend> print_backend(
- printing::PrintBackend::CreateInstance(NULL));
-
- VLOG(1) << "Get printer capabilities start for " << printer_name;
- crash_keys::ScopedPrinterInfo crash_key(
- print_backend->GetPrinterDriverInfo(printer_name));
-
- if (!print_backend->IsValidPrinter(printer_name)) {
- LOG(WARNING) << "Invalid printer " << printer_name;
- return std::unique_ptr<base::DictionaryValue>();
- }
-
- printing::PrinterSemanticCapsAndDefaults info;
- if (!print_backend->GetPrinterSemanticCapsAndDefaults(printer_name, &info)) {
- LOG(WARNING) << "Failed to get capabilities for " << printer_name;
- return std::unique_ptr<base::DictionaryValue>();
- }
-
- std::unique_ptr<base::DictionaryValue> description(
- cloud_print::PrinterSemanticCapsAndDefaultsToCdd(info));
- if (!description) {
- LOG(WARNING) << "Failed to convert capabilities for " << printer_name;
- return std::unique_ptr<base::DictionaryValue>();
- }
-
- return description;
+std::pair<std::string, std::string> GetPrinterNameAndDescription(
+ const printing::PrinterBasicInfo& printer) {
+#if defined(OS_MACOSX)
+ // On Mac, |printer.printer_description| specifies the printer name and
+ // |printer.printer_name| specifies the device name / printer queue name.
+ const std::string& real_name = printer.printer_description;
+ std::string real_description;
+ const auto it = printer.options.find(kDriverNameTagName);
+ if (it != printer.options.end())
+ real_description = it->second;
+ return std::make_pair(real_name, real_description);
+#else
+ return std::make_pair(printer.printer_name, printer.printer_description);
+#endif
}
void EnumeratePrintersOnFileThread(base::ListValue* printers) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
scoped_refptr<printing::PrintBackend> print_backend(
- printing::PrintBackend::CreateInstance(NULL));
+ printing::PrintBackend::CreateInstance(nullptr));
VLOG(1) << "Enumerate printers start";
printing::PrinterList printer_list;
print_backend->EnumeratePrinters(&printer_list);
- for (printing::PrinterList::iterator it = printer_list.begin();
- it != printer_list.end(); ++it) {
+ for (const printing::PrinterBasicInfo& printer : printer_list) {
base::DictionaryValue* printer_info = new base::DictionaryValue;
printers->Append(printer_info);
- std::string printer_name;
- std::string printer_description;
-#if defined(OS_MACOSX)
- // On Mac, |it->printer_description| specifies the printer name and
- // |it->printer_name| specifies the device name / printer queue name.
- printer_name = it->printer_description;
- if (!it->options[kDriverNameTagName].empty())
- printer_description = it->options[kDriverNameTagName];
-#else
- printer_name = it->printer_name;
- printer_description = it->printer_description;
-#endif
- printer_info->SetString(printing::kSettingDeviceName, it->printer_name);
+
+ const auto printer_name_description = GetPrinterNameAndDescription(printer);
+ const std::string& printer_name = printer_name_description.first;
+ const std::string& printer_description = printer_name_description.second;
+ printer_info->SetString(printing::kSettingDeviceName, printer.printer_name);
+ printer_info->SetString(printing::kSettingPrinterName, printer_name);
printer_info->SetString(printing::kSettingPrinterDescription,
printer_description);
- printer_info->SetString(printing::kSettingPrinterName, printer_name);
- VLOG(1) << "Found printer " << printer_name
- << " with device name " << it->printer_name;
base::DictionaryValue* options = new base::DictionaryValue;
printer_info->Set(printing::kSettingPrinterOptions, options);
- for (std::map<std::string, std::string>::iterator opt = it->options.begin();
- opt != it->options.end();
- ++opt) {
- options->SetString(opt->first, opt->second);
- }
+ for (const auto opt_it : printer.options)
+ options->SetString(opt_it.first, opt_it.second);
VLOG(1) << "Found printer " << printer_name << " with device name "
- << it->printer_name;
+ << printer.printer_name;
}
VLOG(1) << "Enumerate printers finished, found " << printers->GetSize()
<< " printers";
}
-typedef base::Callback<void(const base::DictionaryValue*)>
- GetPrinterCapabilitiesSuccessCallback;
-typedef base::Callback<void(const std::string&)>
- GetPrinterCapabilitiesFailureCallback;
-
-void GetPrinterCapabilitiesOnFileThread(
- const std::string& printer_name,
- const std::string& locale,
- const GetPrinterCapabilitiesSuccessCallback& success_cb,
- const GetPrinterCapabilitiesFailureCallback& failure_cb) {
+std::unique_ptr<base::DictionaryValue> GetPrinterCapabilitiesOnFileThread(
+ const std::string& device_name) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- DCHECK(!printer_name.empty());
+ DCHECK(!device_name.empty());
+
+ scoped_refptr<printing::PrintBackend> print_backend(
+ printing::PrintBackend::CreateInstance(nullptr));
+
+ VLOG(1) << "Get printer capabilities start for " << device_name;
+ crash_keys::ScopedPrinterInfo crash_key(
+ print_backend->GetPrinterDriverInfo(device_name));
- std::unique_ptr<base::DictionaryValue> printer_capabilities(
- printer_name == kLocalPdfPrinterId
- ? GetPdfCapabilitiesOnFileThread(locale)
- : GetLocalPrinterCapabilitiesOnFileThread(printer_name));
+ std::unique_ptr<base::DictionaryValue> printer_info;
+ if (!print_backend->IsValidPrinter(device_name)) {
+ LOG(WARNING) << "Invalid printer " << device_name;
+ return printer_info;
+ }
+
+ printing::PrinterSemanticCapsAndDefaults info;
+ if (!print_backend->GetPrinterSemanticCapsAndDefaults(device_name, &info)) {
+ LOG(WARNING) << "Failed to get capabilities for " << device_name;
+ return printer_info;
+ }
+
+ std::unique_ptr<base::DictionaryValue> printer_capabilities =
+ cloud_print::PrinterSemanticCapsAndDefaultsToCdd(info);
if (!printer_capabilities) {
- BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
- base::Bind(failure_cb, printer_name));
- return;
+ LOG(WARNING) << "Failed to convert capabilities for " << device_name;
+ return printer_info;
}
- std::unique_ptr<base::DictionaryValue> printer_info(
- new base::DictionaryValue);
- printer_info->SetString(kPrinterId, printer_name);
- printer_info->Set(kPrinterCapabilities, printer_capabilities.release());
+ printing::PrinterBasicInfo basic_info;
+ if (!print_backend->GetPrinterBasicInfo(device_name, &basic_info))
+ return printer_info;
+
+ const auto printer_name_description =
+ GetPrinterNameAndDescription(basic_info);
+ const std::string& printer_name = printer_name_description.first;
+ const std::string& printer_description = printer_name_description.second;
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(success_cb, base::Owned(printer_info.release())));
+ printer_info.reset(new base::DictionaryValue);
+ printer_info->SetString(kPrinterId, device_name);
+ printer_info->SetString(printing::kSettingPrinterName, printer_name);
+ printer_info->SetString(printing::kSettingPrinterDescription,
+ printer_description);
+ printer_info->Set(kPrinterCapabilities, printer_capabilities.release());
+ return printer_info;
}
base::LazyInstance<printing::StickySettings> g_sticky_settings =
@@ -1120,17 +1103,22 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities(
if (!ret || printer_name.empty())
return;
- GetPrinterCapabilitiesSuccessCallback success_cb =
+ if (printer_name == kLocalPdfPrinterId) {
+ std::unique_ptr<base::DictionaryValue> printer_info(
+ new base::DictionaryValue);
+ printer_info->SetString(kPrinterId, printer_name);
+ printer_info->Set(
+ kPrinterCapabilities,
+ GetPdfCapabilities(g_browser_process->GetApplicationLocale()));
+ SendPrinterCapabilities(printer_name, std::move(printer_info));
+ return;
+ }
+
+ BrowserThread::PostTaskAndReplyWithResult(
+ BrowserThread::FILE, FROM_HERE,
+ base::Bind(&GetPrinterCapabilitiesOnFileThread, printer_name),
base::Bind(&PrintPreviewHandler::SendPrinterCapabilities,
- weak_factory_.GetWeakPtr());
- GetPrinterCapabilitiesFailureCallback failure_cb =
- base::Bind(&PrintPreviewHandler::SendFailedToGetPrinterCapabilities,
- weak_factory_.GetWeakPtr());
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
- base::Bind(&GetPrinterCapabilitiesOnFileThread,
- printer_name,
- g_browser_process->GetApplicationLocale(),
- success_cb, failure_cb));
+ weak_factory_.GetWeakPtr(), printer_name));
}
void PrintPreviewHandler::OnSigninComplete() {
@@ -1245,7 +1233,7 @@ void PrintPreviewHandler::GetNumberFormatAndMeasurementSystem(
void PrintPreviewHandler::HandleGetInitialSettings(
const base::ListValue* /*args*/) {
- // Send before SendInitialSettings to allow cloud printer auto select.
+ // Send before SendInitialSettings() to allow cloud printer auto select.
SendCloudPrintEnabled();
BrowserThread::PostTaskAndReplyWithResult(
BrowserThread::FILE, FROM_HERE,
@@ -1324,20 +1312,19 @@ void PrintPreviewHandler::SendAccessToken(const std::string& type,
}
void PrintPreviewHandler::SendPrinterCapabilities(
- const base::DictionaryValue* settings_info) {
+ const std::string& printer_name,
+ std::unique_ptr<base::DictionaryValue> settings_info) {
+ if (!settings_info) {
+ VLOG(1) << "Get printer capabilities failed";
+ web_ui()->CallJavascriptFunction("failedToGetPrinterCapabilities",
+ base::StringValue(printer_name));
+ return;
+ }
VLOG(1) << "Get printer capabilities finished";
web_ui()->CallJavascriptFunction("updateWithPrinterCapabilities",
*settings_info);
}
-void PrintPreviewHandler::SendFailedToGetPrinterCapabilities(
- const std::string& printer_name) {
- VLOG(1) << "Get printer capabilities failed";
- base::StringValue printer_name_value(printer_name);
- web_ui()->CallJavascriptFunction("failedToGetPrinterCapabilities",
- printer_name_value);
-}
-
void PrintPreviewHandler::SetupPrinterList(const base::ListValue* printers) {
if (!has_logged_printers_count_) {
UMA_HISTOGRAM_COUNTS("PrintPreview.NumberOfPrinters", printers->GetSize());
« no previous file with comments | « chrome/browser/ui/webui/print_preview/print_preview_handler.h ('k') | printing/backend/print_backend.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698