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

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

Issue 2606043004: Perform printer setup on Chrome OS before selecting printer. (Closed)
Patch Set: fix nits Created 3 years, 11 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
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 52ba8300dd4e15b97a553031775d15315ee4afa6..f9719d149980bb628d7a3d1d6743e68629b6b669 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -570,6 +570,9 @@ void PrintPreviewHandler::RegisterMessages() {
"getPrinterCapabilities",
base::Bind(&PrintPreviewHandler::HandleGetPrinterCapabilities,
base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
+ "setupPrinter", base::Bind(&PrintPreviewHandler::HandlePrinterSetup,
+ base::Unretained(this)));
#if BUILDFLAG(ENABLE_BASIC_PRINT_DIALOG)
web_ui()->RegisterMessageCallback("showSystemDialog",
base::Bind(&PrintPreviewHandler::HandleShowSystemDialog,
@@ -1079,6 +1082,26 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities(
cb);
}
+// |args| is expected to contain a string with representing the callback id
+// followed by a list of arguments the first of which should be the printer id.
+void PrintPreviewHandler::HandlePrinterSetup(const base::ListValue* args) {
+ AllowJavascript();
+
+ std::string callback_id;
+ std::string printer_name;
+ if (!args->GetString(0, &callback_id) || !args->GetString(1, &printer_name) ||
+ callback_id.empty() || printer_name.empty()) {
+ RejectJavascriptCallback(base::StringValue(callback_id),
+ base::StringValue(printer_name));
+ return;
+ }
+
+ printer_backend_proxy()->ConfigurePrinterAndFetchCapabilities(
+ printer_name,
+ base::Bind(&PrintPreviewHandler::SendPrinterSetup,
+ weak_factory_.GetWeakPtr(), callback_id, printer_name));
+}
+
void PrintPreviewHandler::OnSigninComplete() {
if (print_preview_ui())
print_preview_ui()->OnReloadPrintersList();
@@ -1279,6 +1302,30 @@ void PrintPreviewHandler::SendPrinterCapabilities(
*settings_info);
}
+void PrintPreviewHandler::SendPrinterSetup(
+ const std::string& callback_id,
+ const std::string& printer_name,
+ std::unique_ptr<base::DictionaryValue> destination_info) {
+ auto response = base::MakeUnique<base::DictionaryValue>();
+ bool success = true;
+ auto caps_value = base::Value::CreateNullValue();
+ auto caps = base::MakeUnique<base::DictionaryValue>();
+ if (destination_info &&
+ destination_info->Remove(printing::kPrinterCapabilities, &caps_value) &&
+ caps_value->IsType(base::Value::Type::DICTIONARY)) {
+ caps = base::DictionaryValue::From(std::move(caps_value));
+ } else {
+ LOG(WARNING) << "Printer setup failed";
+ success = false;
+ }
+
+ response->SetString("printerId", printer_name);
+ response->SetBoolean("success", success);
+ response->Set("capabilities", std::move(caps));
+
+ ResolveJavascriptCallback(base::StringValue(callback_id), *response);
+}
+
void PrintPreviewHandler::SetupPrinterList(
const printing::PrinterList& printer_list) {
base::ListValue printers;

Powered by Google App Engine
This is Rietveld 408576698