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

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

Issue 2931843003: Print Preview: Change getPrinterCapabilities to cr.sendWithPromise (Closed)
Patch Set: Address comments Created 3 years, 6 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 e0a11e50259acc571042f4c1fd52dff7783983fe..16b30f20fc7d5228d2b432c3b1731fcef5c20de9 100644
--- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
@@ -682,7 +682,7 @@ void PrintPreviewHandler::HandleGetPrivetPrinters(const base::ListValue* args) {
AllowJavascript();
if (!PrivetPrintingEnabled()) {
- RejectJavascriptCallback(base::Value(callback_id), base::Value(false));
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
}
#if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
using local_discovery::ServiceDiscoverySharedClient;
@@ -701,20 +701,30 @@ void PrintPreviewHandler::StopPrivetLister() {
printer_lister_->Stop();
}
ResolveJavascriptCallback(base::Value(privet_callback_id_), base::Value());
+ privet_callback_id_ = "";
#endif
}
void PrintPreviewHandler::HandleGetPrivetPrinterCapabilities(
const base::ListValue* args) {
-#if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
- std::string name;
- bool success = args->GetString(0, &name);
- DCHECK(success);
+ AllowJavascript();
- CreatePrivetHTTP(
- name, base::Bind(&PrintPreviewHandler::PrivetCapabilitiesUpdateClient,
- weak_factory_.GetWeakPtr()));
+ 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::Value(callback_id), base::Value());
+ return;
+ }
+#if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
+ if (CreatePrivetHTTP(
+ printer_name,
+ base::Bind(&PrintPreviewHandler::PrivetCapabilitiesUpdateClient,
+ weak_factory_.GetWeakPtr(), callback_id))) {
+ return;
+ }
#endif
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
}
void PrintPreviewHandler::HandleGetExtensionPrinters(
@@ -747,15 +757,21 @@ void PrintPreviewHandler::HandleGrantExtensionPrinterAccess(
void PrintPreviewHandler::HandleGetExtensionPrinterCapabilities(
const base::ListValue* args) {
- std::string printer_id;
- bool ok = args->GetString(0, &printer_id);
- DCHECK(ok);
+ 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::Value(callback_id), base::Value());
+ return;
+ }
EnsureExtensionPrinterHandlerSet();
extension_printer_handler_->StartGetCapability(
- printer_id,
+ printer_name,
base::Bind(&PrintPreviewHandler::OnGotExtensionPrinterCapabilities,
- weak_factory_.GetWeakPtr()));
+ weak_factory_.GetWeakPtr(), callback_id));
}
void PrintPreviewHandler::HandleGetPreview(const base::ListValue* args) {
@@ -1071,10 +1087,15 @@ void PrintPreviewHandler::HandleSaveAppState(const base::ListValue* args) {
void PrintPreviewHandler::HandleGetPrinterCapabilities(
const base::ListValue* args) {
+ AllowJavascript();
+
+ std::string callback_id;
std::string printer_name;
- bool ret = args->GetString(0, &printer_name);
- if (!ret || printer_name.empty())
+ if (!args->GetString(0, &callback_id) || !args->GetString(1, &printer_name) ||
+ callback_id.empty() || printer_name.empty()) {
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
return;
+ }
if (printer_name == kLocalPdfPrinterId) {
auto printer_info = base::MakeUnique<base::DictionaryValue>();
@@ -1082,13 +1103,13 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities(
printer_info->Set(
printing::kPrinterCapabilities,
GetPdfCapabilities(g_browser_process->GetApplicationLocale()));
- SendPrinterCapabilities(printer_name, std::move(printer_info));
+ SendPrinterCapabilities(callback_id, printer_name, std::move(printer_info));
return;
}
printing::PrinterSetupCallback cb =
base::Bind(&PrintPreviewHandler::SendPrinterCapabilities,
- weak_factory_.GetWeakPtr(), printer_name);
+ weak_factory_.GetWeakPtr(), callback_id, printer_name);
printer_backend_proxy()->ConfigurePrinterAndFetchCapabilities(printer_name,
cb);
@@ -1307,19 +1328,18 @@ void PrintPreviewHandler::SendAccessToken(const std::string& type,
}
void PrintPreviewHandler::SendPrinterCapabilities(
+ const std::string& callback_id,
const std::string& printer_name,
std::unique_ptr<base::DictionaryValue> settings_info) {
// Check that |settings_info| is valid.
if (settings_info && settings_info->Get("capabilities", nullptr)) {
VLOG(1) << "Get printer capabilities finished";
- web_ui()->CallJavascriptFunctionUnsafe("updateWithPrinterCapabilities",
- *settings_info);
+ ResolveJavascriptCallback(base::Value(callback_id), *settings_info);
return;
}
VLOG(1) << "Get printer capabilities failed";
- web_ui()->CallJavascriptFunctionUnsafe("failedToGetPrinterCapabilities",
- base::Value(printer_name));
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
}
void PrintPreviewHandler::SendPrinterSetup(
@@ -1570,21 +1590,30 @@ void PrintPreviewHandler::LocalPrinterCacheFlushed() {
}
void PrintPreviewHandler::PrivetCapabilitiesUpdateClient(
+ const std::string& callback_id,
std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
- if (!PrivetUpdateClient(std::move(http_client)))
+ if (!PrivetUpdateClient(callback_id, std::move(http_client)))
return;
privet_capabilities_operation_ =
privet_http_client_->CreateCapabilitiesOperation(
base::Bind(&PrintPreviewHandler::OnPrivetCapabilities,
- weak_factory_.GetWeakPtr()));
+ weak_factory_.GetWeakPtr(), callback_id));
privet_capabilities_operation_->Start();
}
bool PrintPreviewHandler::PrivetUpdateClient(
+ const std::string& callback_id,
std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
if (!http_client) {
- SendPrivetCapabilitiesError(privet_http_resolution_->GetName());
+ if (callback_id.empty()) {
+ // This was an attempt to print to a privet printer and has failed.
+ base::Value http_code_value(-1);
+ web_ui()->CallJavascriptFunctionUnsafe("onPrivetPrintFailed",
+ http_code_value);
+ } else { // Capabilities update failed
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
+ }
privet_http_resolution_.reset();
return false;
}
@@ -1604,7 +1633,7 @@ void PrintPreviewHandler::PrivetLocalPrintUpdateClient(
std::string capabilities,
gfx::Size page_size,
std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
- if (!PrivetUpdateClient(std::move(http_client)))
+ if (!PrivetUpdateClient("", std::move(http_client)))
return;
StartPrivetLocalPrint(print_ticket, capabilities, page_size);
@@ -1645,49 +1674,52 @@ void PrintPreviewHandler::StartPrivetLocalPrint(const std::string& print_ticket,
privet_local_print_operation_->Start();
}
-
void PrintPreviewHandler::OnPrivetCapabilities(
+ const std::string& callback_id,
const base::DictionaryValue* capabilities) {
std::string name = privet_capabilities_operation_->GetHTTPClient()->GetName();
if (!capabilities || capabilities->HasKey(cloud_print::kPrivetKeyError) ||
!printer_lister_) {
- SendPrivetCapabilitiesError(name);
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
return;
}
- base::DictionaryValue printer_info;
const cloud_print::DeviceDescription* description =
printer_lister_->GetDeviceDescription(name);
if (!description) {
- SendPrivetCapabilitiesError(name);
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
return;
}
- FillPrinterDescription(name, *description, true, &printer_info);
-
- web_ui()->CallJavascriptFunctionUnsafe("onPrivetCapabilitiesSet",
- printer_info, *capabilities);
+ std::unique_ptr<base::DictionaryValue> printer_info =
+ base::MakeUnique<base::DictionaryValue>();
+ FillPrinterDescription(name, *description, true, printer_info.get());
+ base::DictionaryValue printer_info_and_caps;
+ printer_info_and_caps.SetDictionary("printer", std::move(printer_info));
+ std::unique_ptr<base::DictionaryValue> capabilities_copy =
+ capabilities->CreateDeepCopy();
+ printer_info_and_caps.SetDictionary("capabilities",
+ std::move(capabilities_copy));
+ ResolveJavascriptCallback(base::Value(callback_id), printer_info_and_caps);
privet_capabilities_operation_.reset();
}
-void PrintPreviewHandler::SendPrivetCapabilitiesError(
- const std::string& device_name) {
- base::Value name_value(device_name);
- web_ui()->CallJavascriptFunctionUnsafe("failedToGetPrivetPrinterCapabilities",
- name_value);
-}
-
void PrintPreviewHandler::PrintToPrivetPrinter(const std::string& device_name,
const std::string& ticket,
const std::string& capabilities,
const gfx::Size& page_size) {
- CreatePrivetHTTP(
- device_name,
- base::Bind(&PrintPreviewHandler::PrivetLocalPrintUpdateClient,
- weak_factory_.GetWeakPtr(), ticket, capabilities, page_size));
+ if (!CreatePrivetHTTP(
+ device_name,
+ base::Bind(&PrintPreviewHandler::PrivetLocalPrintUpdateClient,
+ weak_factory_.GetWeakPtr(), ticket, capabilities,
+ page_size))) {
+ base::Value http_code_value(-1);
+ web_ui()->CallJavascriptFunctionUnsafe("onPrivetPrintFailed",
+ http_code_value);
+ }
}
bool PrintPreviewHandler::CreatePrivetHTTP(
@@ -1697,10 +1729,8 @@ bool PrintPreviewHandler::CreatePrivetHTTP(
const cloud_print::DeviceDescription* device_description =
printer_lister_ ? printer_lister_->GetDeviceDescription(name) : NULL;
- if (!device_description) {
- SendPrivetCapabilitiesError(name);
+ if (!device_description)
return false;
- }
privet_http_factory_ =
cloud_print::PrivetHTTPAsynchronousFactory::CreateInstance(
@@ -1776,16 +1806,13 @@ void PrintPreviewHandler::OnGotExtensionPrinterInfo(
}
void PrintPreviewHandler::OnGotExtensionPrinterCapabilities(
- const std::string& printer_id,
+ const std::string& callback_id,
const base::DictionaryValue& capabilities) {
if (capabilities.empty()) {
- web_ui()->CallJavascriptFunctionUnsafe(
- "failedToGetExtensionPrinterCapabilities", base::Value(printer_id));
+ RejectJavascriptCallback(base::Value(callback_id), base::Value());
return;
}
-
- web_ui()->CallJavascriptFunctionUnsafe("onExtensionCapabilitiesSet",
- base::Value(printer_id), capabilities);
+ ResolveJavascriptCallback(base::Value(callback_id), capabilities);
}
void PrintPreviewHandler::OnExtensionPrintResult(bool success,
« no previous file with comments | « chrome/browser/ui/webui/print_preview/print_preview_handler.h ('k') | chrome/browser/ui/webui/print_preview/printer_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698