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

Side by Side Diff: chrome/browser/ui/webui/print_preview/print_preview_handler.cc

Issue 2948723002: Print Preview: Change print to cr.sendWithPromise (Closed)
Patch Set: nit 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/print_preview/print_preview_handler.h" 5 #include "chrome/browser/ui/webui/print_preview/print_preview_handler.h"
6 6
7 #include <ctype.h> 7 #include <ctype.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <map> 10 #include <map>
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 198
199 // Id of the predefined PDF printer. 199 // Id of the predefined PDF printer.
200 const char kLocalPdfPrinterId[] = "Save as PDF"; 200 const char kLocalPdfPrinterId[] = "Save as PDF";
201 201
202 // Timeout for searching for privet printers, in seconds. 202 // Timeout for searching for privet printers, in seconds.
203 const int kPrivetTimeoutSec = 5; 203 const int kPrivetTimeoutSec = 5;
204 204
205 // Get the print job settings dictionary from |args|. The caller takes 205 // Get the print job settings dictionary from |args|. The caller takes
206 // ownership of the returned DictionaryValue. Returns NULL on failure. 206 // ownership of the returned DictionaryValue. Returns NULL on failure.
207 std::unique_ptr<base::DictionaryValue> GetSettingsDictionary( 207 std::unique_ptr<base::DictionaryValue> GetSettingsDictionary(
208 const base::ListValue* args) { 208 std::string json_str) {
209 std::string json_str;
210 if (!args->GetString(0, &json_str)) {
211 NOTREACHED() << "Could not read JSON argument";
212 return NULL;
213 }
214 if (json_str.empty()) { 209 if (json_str.empty()) {
215 NOTREACHED() << "Empty print job settings"; 210 NOTREACHED() << "Empty print job settings";
216 return NULL; 211 return NULL;
217 } 212 }
218 std::unique_ptr<base::DictionaryValue> settings = 213 std::unique_ptr<base::DictionaryValue> settings =
219 base::DictionaryValue::From(base::JSONReader::Read(json_str)); 214 base::DictionaryValue::From(base::JSONReader::Read(json_str));
220 if (!settings) { 215 if (!settings) {
221 NOTREACHED() << "Print job settings must be a dictionary."; 216 NOTREACHED() << "Print job settings must be a dictionary.";
222 return NULL; 217 return NULL;
223 } 218 }
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 676
682 AllowJavascript(); 677 AllowJavascript();
683 678
684 if (!PrivetPrintingEnabled()) { 679 if (!PrivetPrintingEnabled()) {
685 RejectJavascriptCallback(base::Value(callback_id), base::Value()); 680 RejectJavascriptCallback(base::Value(callback_id), base::Value());
686 } 681 }
687 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY) 682 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
688 using local_discovery::ServiceDiscoverySharedClient; 683 using local_discovery::ServiceDiscoverySharedClient;
689 scoped_refptr<ServiceDiscoverySharedClient> service_discovery = 684 scoped_refptr<ServiceDiscoverySharedClient> service_discovery =
690 ServiceDiscoverySharedClient::GetInstance(); 685 ServiceDiscoverySharedClient::GetInstance();
691 DCHECK(privet_callback_id_.empty()); 686 DCHECK(privet_search_callback_id_.empty());
692 privet_callback_id_ = callback_id; 687 privet_search_callback_id_ = callback_id;
693 StartPrivetLister(service_discovery); 688 StartPrivetLister(service_discovery);
694 #endif 689 #endif
695 } 690 }
696 691
697 void PrintPreviewHandler::StopPrivetLister() { 692 void PrintPreviewHandler::StopPrivetLister() {
698 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY) 693 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
699 privet_lister_timer_.reset(); 694 privet_lister_timer_.reset();
700 if (PrivetPrintingEnabled() && printer_lister_) { 695 if (PrivetPrintingEnabled() && printer_lister_) {
701 printer_lister_->Stop(); 696 printer_lister_->Stop();
702 } 697 }
703 ResolveJavascriptCallback(base::Value(privet_callback_id_), base::Value()); 698 ResolveJavascriptCallback(base::Value(privet_search_callback_id_),
704 privet_callback_id_ = ""; 699 base::Value());
700 privet_search_callback_id_.clear();
705 #endif 701 #endif
706 } 702 }
707 703
708 void PrintPreviewHandler::HandleGetPrivetPrinterCapabilities( 704 void PrintPreviewHandler::HandleGetPrivetPrinterCapabilities(
709 const base::ListValue* args) { 705 const base::ListValue* args) {
710 AllowJavascript(); 706 AllowJavascript();
711 707
712 std::string callback_id; 708 std::string callback_id;
713 std::string printer_name; 709 std::string printer_name;
714 if (!args->GetString(0, &callback_id) || !args->GetString(1, &printer_name) || 710 if (!args->GetString(0, &callback_id) || !args->GetString(1, &printer_name) ||
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 765
770 EnsureExtensionPrinterHandlerSet(); 766 EnsureExtensionPrinterHandlerSet();
771 extension_printer_handler_->StartGetCapability( 767 extension_printer_handler_->StartGetCapability(
772 printer_name, 768 printer_name,
773 base::Bind(&PrintPreviewHandler::OnGotExtensionPrinterCapabilities, 769 base::Bind(&PrintPreviewHandler::OnGotExtensionPrinterCapabilities,
774 weak_factory_.GetWeakPtr(), callback_id)); 770 weak_factory_.GetWeakPtr(), callback_id));
775 } 771 }
776 772
777 void PrintPreviewHandler::HandleGetPreview(const base::ListValue* args) { 773 void PrintPreviewHandler::HandleGetPreview(const base::ListValue* args) {
778 DCHECK_EQ(2U, args->GetSize()); 774 DCHECK_EQ(2U, args->GetSize());
779 std::unique_ptr<base::DictionaryValue> settings = GetSettingsDictionary(args); 775 std::string json_str;
776 if (!args->GetString(0, &json_str))
777 return;
778 std::unique_ptr<base::DictionaryValue> settings =
779 GetSettingsDictionary(json_str);
780 if (!settings) 780 if (!settings)
781 return; 781 return;
782 int request_id = -1; 782 int request_id = -1;
783 if (!settings->GetInteger(printing::kPreviewRequestID, &request_id)) 783 if (!settings->GetInteger(printing::kPreviewRequestID, &request_id))
784 return; 784 return;
785 785
786 print_preview_ui()->OnPrintPreviewRequest(request_id); 786 print_preview_ui()->OnPrintPreviewRequest(request_id);
787 // Add an additional key in order to identify |print_preview_ui| later on 787 // Add an additional key in order to identify |print_preview_ui| later on
788 // when calling PrintPreviewUI::GetCurrentPrintPreviewStatus() on the IO 788 // when calling PrintPreviewUI::GetCurrentPrintPreviewStatus() on the IO
789 // thread. 789 // thread.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 } 855 }
856 856
857 void PrintPreviewHandler::HandlePrint(const base::ListValue* args) { 857 void PrintPreviewHandler::HandlePrint(const base::ListValue* args) {
858 ReportStats(); 858 ReportStats();
859 859
860 // Record the number of times the user requests to regenerate preview data 860 // Record the number of times the user requests to regenerate preview data
861 // before printing. 861 // before printing.
862 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint", 862 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint",
863 regenerate_preview_request_count_); 863 regenerate_preview_request_count_);
864 864
865 std::unique_ptr<base::DictionaryValue> settings = GetSettingsDictionary(args); 865 AllowJavascript();
866
867 std::string callback_id;
868 CHECK(args->GetString(0, &callback_id) && !callback_id.empty());
869 std::string json_str;
870 if (!args->GetString(1, &json_str))
871 RejectJavascriptCallback(base::Value(callback_id), base::Value(-1));
872
873 std::unique_ptr<base::DictionaryValue> settings =
874 GetSettingsDictionary(json_str);
866 if (!settings) 875 if (!settings)
867 return; 876 RejectJavascriptCallback(base::Value(callback_id), base::Value(-1));
868 877
869 ReportPrintSettingsStats(*settings); 878 ReportPrintSettingsStats(*settings);
870 879
871 // Report whether the user printed a PDF or an HTML document. 880 // Report whether the user printed a PDF or an HTML document.
872 ReportPrintDocumentTypeHistogram(print_preview_ui()->source_is_modifiable() ? 881 ReportPrintDocumentTypeHistogram(print_preview_ui()->source_is_modifiable() ?
873 HTML_DOCUMENT : PDF_DOCUMENT); 882 HTML_DOCUMENT : PDF_DOCUMENT);
874 883
875 bool print_to_pdf = false; 884 bool print_to_pdf = false;
876 bool is_cloud_printer = false; 885 bool is_cloud_printer = false;
877 bool print_with_privet = false; 886 bool print_with_privet = false;
(...skipping 11 matching lines...) Expand all
889 &print_with_extension); 898 &print_with_extension);
890 is_cloud_printer = settings->HasKey(printing::kSettingCloudPrintId); 899 is_cloud_printer = settings->HasKey(printing::kSettingCloudPrintId);
891 } 900 }
892 901
893 int page_count = 0; 902 int page_count = 0;
894 settings->GetInteger(printing::kSettingPreviewPageCount, &page_count); 903 settings->GetInteger(printing::kSettingPreviewPageCount, &page_count);
895 904
896 if (print_to_pdf) { 905 if (print_to_pdf) {
897 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", page_count); 906 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", page_count);
898 ReportUserActionHistogram(PRINT_TO_PDF); 907 ReportUserActionHistogram(PRINT_TO_PDF);
908 DCHECK(pdf_callback_id_.empty());
909 pdf_callback_id_ = callback_id;
899 PrintToPdf(); 910 PrintToPdf();
900 return; 911 return;
901 } 912 }
902 913
903 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY) 914 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
904 if (print_with_privet && PrivetPrintingEnabled()) { 915 if (print_with_privet && PrivetPrintingEnabled()) {
905 std::string printer_name; 916 std::string printer_name;
906 std::string print_ticket; 917 std::string print_ticket;
907 std::string capabilities; 918 std::string capabilities;
908 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithPrivet", page_count); 919 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithPrivet", page_count);
909 ReportUserActionHistogram(PRINT_WITH_PRIVET); 920 ReportUserActionHistogram(PRINT_WITH_PRIVET);
910 921
911 int width = 0; 922 int width = 0;
912 int height = 0; 923 int height = 0;
913 if (!settings->GetString(printing::kSettingDeviceName, &printer_name) || 924 if (!settings->GetString(printing::kSettingDeviceName, &printer_name) ||
914 !settings->GetString(printing::kSettingTicket, &print_ticket) || 925 !settings->GetString(printing::kSettingTicket, &print_ticket) ||
915 !settings->GetString(printing::kSettingCapabilities, &capabilities) || 926 !settings->GetString(printing::kSettingCapabilities, &capabilities) ||
916 !settings->GetInteger(printing::kSettingPageWidth, &width) || 927 !settings->GetInteger(printing::kSettingPageWidth, &width) ||
917 !settings->GetInteger(printing::kSettingPageHeight, &height) || 928 !settings->GetInteger(printing::kSettingPageHeight, &height) ||
918 width <= 0 || height <= 0) { 929 width <= 0 || height <= 0) {
919 NOTREACHED(); 930 NOTREACHED();
920 FireWebUIListener("print-failed", base::Value(-1)); 931 RejectJavascriptCallback(base::Value(callback_id), base::Value(-1));
921 return; 932 return;
922 } 933 }
923 934
924 PrintToPrivetPrinter( 935 DCHECK(privet_print_callback_id_.empty());
925 printer_name, print_ticket, capabilities, gfx::Size(width, height)); 936 privet_print_callback_id_ = callback_id;
937 PrintToPrivetPrinter(callback_id, printer_name, print_ticket, capabilities,
938 gfx::Size(width, height));
926 return; 939 return;
927 } 940 }
928 #endif 941 #endif
929 942
930 if (print_with_extension) { 943 if (print_with_extension) {
931 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithExtension", 944 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithExtension",
932 page_count); 945 page_count);
933 ReportUserActionHistogram(PRINT_WITH_EXTENSION); 946 ReportUserActionHistogram(PRINT_WITH_EXTENSION);
934 947
935 std::string destination_id; 948 std::string destination_id;
936 std::string print_ticket; 949 std::string print_ticket;
937 std::string capabilities; 950 std::string capabilities;
938 int width = 0; 951 int width = 0;
939 int height = 0; 952 int height = 0;
940 if (!settings->GetString(printing::kSettingDeviceName, &destination_id) || 953 if (!settings->GetString(printing::kSettingDeviceName, &destination_id) ||
941 !settings->GetString(printing::kSettingTicket, &print_ticket) || 954 !settings->GetString(printing::kSettingTicket, &print_ticket) ||
942 !settings->GetString(printing::kSettingCapabilities, &capabilities) || 955 !settings->GetString(printing::kSettingCapabilities, &capabilities) ||
943 !settings->GetInteger(printing::kSettingPageWidth, &width) || 956 !settings->GetInteger(printing::kSettingPageWidth, &width) ||
944 !settings->GetInteger(printing::kSettingPageHeight, &height) || 957 !settings->GetInteger(printing::kSettingPageHeight, &height) ||
945 width <= 0 || height <= 0) { 958 width <= 0 || height <= 0) {
946 NOTREACHED(); 959 NOTREACHED();
947 OnExtensionPrintResult(false, "FAILED"); 960 RejectJavascriptCallback(base::Value(callback_id), base::Value("FAILED"));
948 return; 961 return;
949 } 962 }
950 963
951 base::string16 title; 964 base::string16 title;
952 scoped_refptr<base::RefCountedBytes> data; 965 scoped_refptr<base::RefCountedBytes> data;
953 if (!GetPreviewDataAndTitle(&data, &title)) { 966 if (!GetPreviewDataAndTitle(&data, &title)) {
954 LOG(ERROR) << "Nothing to print; no preview available."; 967 LOG(ERROR) << "Nothing to print; no preview available.";
955 OnExtensionPrintResult(false, "NO_DATA"); 968 RejectJavascriptCallback(base::Value(callback_id),
969 base::Value("NO_DATA"));
956 return; 970 return;
957 } 971 }
958 972
959 EnsureExtensionPrinterHandlerSet(); 973 EnsureExtensionPrinterHandlerSet();
960 extension_printer_handler_->StartPrint( 974 extension_printer_handler_->StartPrint(
961 destination_id, capabilities, title, print_ticket, 975 destination_id, capabilities, title, print_ticket,
962 gfx::Size(width, height), data, 976 gfx::Size(width, height), data,
963 base::Bind(&PrintPreviewHandler::OnExtensionPrintResult, 977 base::Bind(&PrintPreviewHandler::OnExtensionPrintResult,
964 weak_factory_.GetWeakPtr())); 978 weak_factory_.GetWeakPtr(), callback_id));
965 return; 979 return;
966 } 980 }
967 981
968 scoped_refptr<base::RefCountedBytes> data; 982 scoped_refptr<base::RefCountedBytes> data;
969 base::string16 title; 983 base::string16 title;
970 if (!GetPreviewDataAndTitle(&data, &title)) { 984 if (!GetPreviewDataAndTitle(&data, &title)) {
971 // Nothing to print, no preview available. 985 // Nothing to print, no preview available.
972 return; 986 RejectJavascriptCallback(base::Value(callback_id), base::Value());
973 } 987 }
974 988
975 if (is_cloud_printer) { 989 if (is_cloud_printer) {
976 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToCloudPrint", 990 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToCloudPrint",
977 page_count); 991 page_count);
978 ReportUserActionHistogram(PRINT_WITH_CLOUD_PRINT); 992 ReportUserActionHistogram(PRINT_WITH_CLOUD_PRINT);
979 SendCloudPrintJob(data.get()); 993 SendCloudPrintJob(callback_id, data.get());
980 return; 994 return;
981 } 995 }
982 996
983 #if BUILDFLAG(ENABLE_BASIC_PRINTING) 997 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
984 bool system_dialog = false; 998 bool system_dialog = false;
985 settings->GetBoolean(printing::kSettingShowSystemDialog, &system_dialog); 999 settings->GetBoolean(printing::kSettingShowSystemDialog, &system_dialog);
986 if (system_dialog) { 1000 if (system_dialog) {
987 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.SystemDialog", page_count); 1001 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.SystemDialog", page_count);
988 ReportUserActionHistogram(FALLBACK_TO_ADVANCED_SETTINGS_DIALOG); 1002 ReportUserActionHistogram(FALLBACK_TO_ADVANCED_SETTINGS_DIALOG);
989 } else { 1003 } else {
990 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", page_count); 1004 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", page_count);
991 ReportUserActionHistogram(PRINT_TO_PRINTER); 1005 ReportUserActionHistogram(PRINT_TO_PRINTER);
992 } 1006 }
993 1007
994 // This tries to activate the initiator as well, so do not clear the 1008 // This tries to activate the initiator as well, so do not clear the
995 // association with the initiator yet. 1009 // association with the initiator yet.
996 print_preview_ui()->OnHidePreviewDialog(); 1010 ResolveJavascriptCallback(base::Value(callback_id), base::Value());
rbpotter 2017/06/20 20:46:07 Moved this to JS side - hide will be called from t
997 1011
998 // Grab the current initiator before calling ClearInitiatorDetails() below. 1012 // Grab the current initiator before calling ClearInitiatorDetails() below.
999 // Otherwise calling GetInitiator() later will return the wrong WebContents. 1013 // Otherwise calling GetInitiator() later will return the wrong WebContents.
1000 // https://crbug.com/407080 1014 // https://crbug.com/407080
1001 WebContents* initiator = GetInitiator(); 1015 WebContents* initiator = GetInitiator();
1002 if (initiator) { 1016 if (initiator) {
1003 // Save initiator IDs. PrintMsg_PrintForPrintPreview below should cause 1017 // Save initiator IDs. PrintMsg_PrintForPrintPreview below should cause
1004 // the renderer to send PrintHostMsg_UpdatePrintSettings and trigger 1018 // the renderer to send PrintHostMsg_UpdatePrintSettings and trigger
1005 // PrintingMessageFilter::OnUpdatePrintSettings(), which needs this info. 1019 // PrintingMessageFilter::OnUpdatePrintSettings(), which needs this info.
1006 auto* main_render_frame = initiator->GetMainFrame(); 1020 auto* main_render_frame = initiator->GetMainFrame();
(...skipping 22 matching lines...) Expand all
1029 print_view_manager->PrintPreviewDone(); 1043 print_view_manager->PrintPreviewDone();
1030 } 1044 }
1031 #else 1045 #else
1032 NOTREACHED(); 1046 NOTREACHED();
1033 #endif // BUILDFLAG(ENABLE_BASIC_PRINTING) 1047 #endif // BUILDFLAG(ENABLE_BASIC_PRINTING)
1034 } 1048 }
1035 1049
1036 void PrintPreviewHandler::PrintToPdf() { 1050 void PrintPreviewHandler::PrintToPdf() {
1037 if (!print_to_pdf_path_.empty()) { 1051 if (!print_to_pdf_path_.empty()) {
1038 // User has already selected a path, no need to show the dialog again. 1052 // User has already selected a path, no need to show the dialog again.
1053 ResolveJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1054 pdf_callback_id_.clear();
1039 PostPrintToPdfTask(); 1055 PostPrintToPdfTask();
1040 } else if (!select_file_dialog_.get() || 1056 } else if (!select_file_dialog_.get() ||
1041 !select_file_dialog_->IsRunning(platform_util::GetTopLevel( 1057 !select_file_dialog_->IsRunning(platform_util::GetTopLevel(
1042 preview_web_contents()->GetNativeView()))) { 1058 preview_web_contents()->GetNativeView()))) {
1043 // Pre-populating select file dialog with print job title. 1059 // Pre-populating select file dialog with print job title.
1044 const base::string16& print_job_title_utf16 = 1060 const base::string16& print_job_title_utf16 =
1045 print_preview_ui()->initiator_title(); 1061 print_preview_ui()->initiator_title();
1046 1062
1047 #if defined(OS_WIN) 1063 #if defined(OS_WIN)
1048 base::FilePath::StringType print_job_title(print_job_title_utf16); 1064 base::FilePath::StringType print_job_title(print_job_title_utf16);
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 PrefService* prefs = profile->GetPrefs(); 1403 PrefService* prefs = profile->GetPrefs();
1388 if (prefs->GetBoolean(prefs::kCloudPrintSubmitEnabled)) { 1404 if (prefs->GetBoolean(prefs::kCloudPrintSubmitEnabled)) {
1389 base::DictionaryValue settings; 1405 base::DictionaryValue settings;
1390 settings.SetString(kCloudPrintUrl, 1406 settings.SetString(kCloudPrintUrl,
1391 GURL(cloud_devices::GetCloudPrintURL()).spec()); 1407 GURL(cloud_devices::GetCloudPrintURL()).spec());
1392 settings.SetBoolean(kAppKioskMode, chrome::IsRunningInForcedAppMode()); 1408 settings.SetBoolean(kAppKioskMode, chrome::IsRunningInForcedAppMode());
1393 web_ui()->CallJavascriptFunctionUnsafe("setUseCloudPrint", settings); 1409 web_ui()->CallJavascriptFunctionUnsafe("setUseCloudPrint", settings);
1394 } 1410 }
1395 } 1411 }
1396 1412
1397 void PrintPreviewHandler::SendCloudPrintJob(const base::RefCountedBytes* data) { 1413 void PrintPreviewHandler::SendCloudPrintJob(const std::string& callback_id,
1414 const base::RefCountedBytes* data) {
1398 // BASE64 encode the job data. 1415 // BASE64 encode the job data.
1399 const base::StringPiece raw_data(reinterpret_cast<const char*>(data->front()), 1416 const base::StringPiece raw_data(reinterpret_cast<const char*>(data->front()),
1400 data->size()); 1417 data->size());
1401 std::string base64_data; 1418 std::string base64_data;
1402 base::Base64Encode(raw_data, &base64_data); 1419 base::Base64Encode(raw_data, &base64_data);
1403 base::Value data_value(base64_data);
1404 1420
1405 web_ui()->CallJavascriptFunctionUnsafe("printToCloud", data_value); 1421 ResolveJavascriptCallback(base::Value(callback_id), base::Value(base64_data));
1406 } 1422 }
1407 1423
1408 WebContents* PrintPreviewHandler::GetInitiator() const { 1424 WebContents* PrintPreviewHandler::GetInitiator() const {
1409 printing::PrintPreviewDialogController* dialog_controller = 1425 printing::PrintPreviewDialogController* dialog_controller =
1410 printing::PrintPreviewDialogController::GetInstance(); 1426 printing::PrintPreviewDialogController::GetInstance();
1411 if (!dialog_controller) 1427 if (!dialog_controller)
1412 return NULL; 1428 return NULL;
1413 return dialog_controller->GetInitiator(preview_web_contents()); 1429 return dialog_controller->GetInitiator(preview_web_contents());
1414 } 1430 }
1415 1431
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 int /* index */, 1503 int /* index */,
1488 void* /* params */) { 1504 void* /* params */) {
1489 // Update downloads location and save sticky settings. 1505 // Update downloads location and save sticky settings.
1490 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext( 1506 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext(
1491 preview_web_contents()->GetBrowserContext()); 1507 preview_web_contents()->GetBrowserContext());
1492 download_prefs->SetSaveFilePath(path.DirName()); 1508 download_prefs->SetSaveFilePath(path.DirName());
1493 printing::StickySettings* sticky_settings = GetStickySettings(); 1509 printing::StickySettings* sticky_settings = GetStickySettings();
1494 sticky_settings->SaveInPrefs( 1510 sticky_settings->SaveInPrefs(
1495 Profile::FromBrowserContext(preview_web_contents()->GetBrowserContext()) 1511 Profile::FromBrowserContext(preview_web_contents()->GetBrowserContext())
1496 ->GetPrefs()); 1512 ->GetPrefs());
1497 web_ui()->CallJavascriptFunctionUnsafe("fileSelectionCompleted"); 1513 ResolveJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1514 pdf_callback_id_.clear();
1498 print_to_pdf_path_ = path; 1515 print_to_pdf_path_ = path;
1499 PostPrintToPdfTask(); 1516 PostPrintToPdfTask();
1500 } 1517 }
1501 1518
1502 void PrintPreviewHandler::PostPrintToPdfTask() { 1519 void PrintPreviewHandler::PostPrintToPdfTask() {
1503 scoped_refptr<base::RefCountedBytes> data; 1520 scoped_refptr<base::RefCountedBytes> data;
1504 base::string16 title; 1521 base::string16 title;
1505 if (!GetPreviewDataAndTitle(&data, &title)) { 1522 if (!GetPreviewDataAndTitle(&data, &title)) {
1506 NOTREACHED() << "Preview data was checked before file dialog."; 1523 NOTREACHED() << "Preview data was checked before file dialog.";
1507 return; 1524 return;
1508 } 1525 }
1509 1526
1510 base::PostTaskWithTraits( 1527 base::PostTaskWithTraits(
1511 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, 1528 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
1512 base::BindOnce(&PrintToPdfCallback, data, print_to_pdf_path_, 1529 base::BindOnce(&PrintToPdfCallback, data, print_to_pdf_path_,
1513 pdf_file_saved_closure_)); 1530 pdf_file_saved_closure_));
1514 print_to_pdf_path_.clear(); 1531 print_to_pdf_path_.clear();
1515 ClosePreviewDialog(); 1532 ClosePreviewDialog();
1516 } 1533 }
1517 1534
1518 void PrintPreviewHandler::FileSelectionCanceled(void* params) { 1535 void PrintPreviewHandler::FileSelectionCanceled(void* params) {
1519 print_preview_ui()->OnFileSelectionCancelled(); 1536 RejectJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1537 pdf_callback_id_.clear();
1520 } 1538 }
1521 1539
1522 void PrintPreviewHandler::ClearInitiatorDetails() { 1540 void PrintPreviewHandler::ClearInitiatorDetails() {
1523 WebContents* initiator = GetInitiator(); 1541 WebContents* initiator = GetInitiator();
1524 if (!initiator) 1542 if (!initiator)
1525 return; 1543 return;
1526 1544
1527 // We no longer require the initiator details. Remove those details associated 1545 // We no longer require the initiator details. Remove those details associated
1528 // with the preview dialog to allow the initiator to create another preview 1546 // with the preview dialog to allow the initiator to create another preview
1529 // dialog. 1547 // dialog.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1597 privet_http_client_->CreateCapabilitiesOperation( 1615 privet_http_client_->CreateCapabilitiesOperation(
1598 base::Bind(&PrintPreviewHandler::OnPrivetCapabilities, 1616 base::Bind(&PrintPreviewHandler::OnPrivetCapabilities,
1599 weak_factory_.GetWeakPtr(), callback_id)); 1617 weak_factory_.GetWeakPtr(), callback_id));
1600 privet_capabilities_operation_->Start(); 1618 privet_capabilities_operation_->Start();
1601 } 1619 }
1602 1620
1603 bool PrintPreviewHandler::PrivetUpdateClient( 1621 bool PrintPreviewHandler::PrivetUpdateClient(
1604 const std::string& callback_id, 1622 const std::string& callback_id,
1605 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) { 1623 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
1606 if (!http_client) { 1624 if (!http_client) {
1607 if (callback_id.empty()) { 1625 RejectJavascriptCallback(base::Value(callback_id), base::Value());
1608 // This was an attempt to print to a privet printer and has failed.
1609 FireWebUIListener("print-failed", base::Value(-1));
1610 } else { // Capabilities update failed
1611 RejectJavascriptCallback(base::Value(callback_id), base::Value());
1612 }
1613 privet_http_resolution_.reset(); 1626 privet_http_resolution_.reset();
1627 if (callback_id == privet_print_callback_id_)
1628 privet_print_callback_id_.clear();
1614 return false; 1629 return false;
1615 } 1630 }
1616 1631
1617 privet_local_print_operation_.reset(); 1632 privet_local_print_operation_.reset();
1618 privet_capabilities_operation_.reset(); 1633 privet_capabilities_operation_.reset();
1619 privet_http_client_ = cloud_print::PrivetV1HTTPClient::CreateDefault( 1634 privet_http_client_ = cloud_print::PrivetV1HTTPClient::CreateDefault(
1620 std::move(http_client)); 1635 std::move(http_client));
1621 1636
1622 privet_http_resolution_.reset(); 1637 privet_http_resolution_.reset();
1623 1638
1624 return true; 1639 return true;
1625 } 1640 }
1626 1641
1627 void PrintPreviewHandler::PrivetLocalPrintUpdateClient( 1642 void PrintPreviewHandler::PrivetLocalPrintUpdateClient(
1643 const std::string& callback_id,
1628 std::string print_ticket, 1644 std::string print_ticket,
1629 std::string capabilities, 1645 std::string capabilities,
1630 gfx::Size page_size, 1646 gfx::Size page_size,
1631 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) { 1647 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
1632 if (!PrivetUpdateClient("", std::move(http_client))) 1648 if (!PrivetUpdateClient(callback_id, std::move(http_client)))
1633 return; 1649 return;
1634 1650
1635 StartPrivetLocalPrint(print_ticket, capabilities, page_size); 1651 StartPrivetLocalPrint(print_ticket, capabilities, page_size);
1636 } 1652 }
1637 1653
1638 void PrintPreviewHandler::StartPrivetLocalPrint(const std::string& print_ticket, 1654 void PrintPreviewHandler::StartPrivetLocalPrint(const std::string& print_ticket,
1639 const std::string& capabilities, 1655 const std::string& capabilities,
1640 const gfx::Size& page_size) { 1656 const gfx::Size& page_size) {
1641 privet_local_print_operation_ = 1657 privet_local_print_operation_ =
1642 privet_http_client_->CreateLocalPrintOperation(this); 1658 privet_http_client_->CreateLocalPrintOperation(this);
1643 1659
1644 privet_local_print_operation_->SetTicket(print_ticket); 1660 privet_local_print_operation_->SetTicket(print_ticket);
1645 privet_local_print_operation_->SetCapabilities(capabilities); 1661 privet_local_print_operation_->SetCapabilities(capabilities);
1646 1662
1647 scoped_refptr<base::RefCountedBytes> data; 1663 scoped_refptr<base::RefCountedBytes> data;
1648 base::string16 title; 1664 base::string16 title;
1649 1665
1650 if (!GetPreviewDataAndTitle(&data, &title)) { 1666 if (!GetPreviewDataAndTitle(&data, &title)) {
1651 FireWebUIListener("print-failed", base::Value(-1)); 1667 RejectJavascriptCallback(base::Value(privet_print_callback_id_),
1668 base::Value(-1));
1669 privet_print_callback_id_.clear();
1652 return; 1670 return;
1653 } 1671 }
1654 1672
1655 privet_local_print_operation_->SetJobname(base::UTF16ToUTF8(title)); 1673 privet_local_print_operation_->SetJobname(base::UTF16ToUTF8(title));
1656 privet_local_print_operation_->SetPageSize(page_size); 1674 privet_local_print_operation_->SetPageSize(page_size);
1657 privet_local_print_operation_->SetData(data.get()); 1675 privet_local_print_operation_->SetData(data.get());
1658 1676
1659 Profile* profile = Profile::FromWebUI(web_ui()); 1677 Profile* profile = Profile::FromWebUI(web_ui());
1660 SigninManagerBase* signin_manager = 1678 SigninManagerBase* signin_manager =
1661 SigninManagerFactory::GetForProfileIfExists(profile); 1679 SigninManagerFactory::GetForProfileIfExists(profile);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1694 printer_info_and_caps.SetDictionary("printer", std::move(printer_info)); 1712 printer_info_and_caps.SetDictionary("printer", std::move(printer_info));
1695 std::unique_ptr<base::DictionaryValue> capabilities_copy = 1713 std::unique_ptr<base::DictionaryValue> capabilities_copy =
1696 capabilities->CreateDeepCopy(); 1714 capabilities->CreateDeepCopy();
1697 printer_info_and_caps.SetDictionary("capabilities", 1715 printer_info_and_caps.SetDictionary("capabilities",
1698 std::move(capabilities_copy)); 1716 std::move(capabilities_copy));
1699 ResolveJavascriptCallback(base::Value(callback_id), printer_info_and_caps); 1717 ResolveJavascriptCallback(base::Value(callback_id), printer_info_and_caps);
1700 1718
1701 privet_capabilities_operation_.reset(); 1719 privet_capabilities_operation_.reset();
1702 } 1720 }
1703 1721
1704 void PrintPreviewHandler::PrintToPrivetPrinter(const std::string& device_name, 1722 void PrintPreviewHandler::PrintToPrivetPrinter(const std::string& callback_id,
1723 const std::string& device_name,
1705 const std::string& ticket, 1724 const std::string& ticket,
1706 const std::string& capabilities, 1725 const std::string& capabilities,
1707 const gfx::Size& page_size) { 1726 const gfx::Size& page_size) {
1708 if (!CreatePrivetHTTP( 1727 if (!CreatePrivetHTTP(
1709 device_name, 1728 device_name,
1710 base::Bind(&PrintPreviewHandler::PrivetLocalPrintUpdateClient, 1729 base::Bind(&PrintPreviewHandler::PrivetLocalPrintUpdateClient,
1711 weak_factory_.GetWeakPtr(), ticket, capabilities, 1730 weak_factory_.GetWeakPtr(), callback_id, ticket,
1712 page_size))) { 1731 capabilities, page_size))) {
1713 FireWebUIListener("print-failed", base::Value(-1)); 1732 RejectJavascriptCallback(base::Value(privet_print_callback_id_),
1733 base::Value(-1));
1734 privet_print_callback_id_.clear();
1714 } 1735 }
1715 } 1736 }
1716 1737
1717 bool PrintPreviewHandler::CreatePrivetHTTP( 1738 bool PrintPreviewHandler::CreatePrivetHTTP(
1718 const std::string& name, 1739 const std::string& name,
1719 const cloud_print::PrivetHTTPAsynchronousFactory::ResultCallback& 1740 const cloud_print::PrivetHTTPAsynchronousFactory::ResultCallback&
1720 callback) { 1741 callback) {
1721 const cloud_print::DeviceDescription* device_description = 1742 const cloud_print::DeviceDescription* device_description =
1722 printer_lister_ ? printer_lister_->GetDeviceDescription(name) : NULL; 1743 printer_lister_ ? printer_lister_->GetDeviceDescription(name) : NULL;
1723 1744
1724 if (!device_description) 1745 if (!device_description)
1725 return false; 1746 return false;
1726 1747
1727 privet_http_factory_ = 1748 privet_http_factory_ =
1728 cloud_print::PrivetHTTPAsynchronousFactory::CreateInstance( 1749 cloud_print::PrivetHTTPAsynchronousFactory::CreateInstance(
1729 Profile::FromWebUI(web_ui())->GetRequestContext()); 1750 Profile::FromWebUI(web_ui())->GetRequestContext());
1730 privet_http_resolution_ = privet_http_factory_->CreatePrivetHTTP(name); 1751 privet_http_resolution_ = privet_http_factory_->CreatePrivetHTTP(name);
1731 privet_http_resolution_->Start(device_description->address, callback); 1752 privet_http_resolution_->Start(device_description->address, callback);
1732 1753
1733 return true; 1754 return true;
1734 } 1755 }
1735 1756
1736 void PrintPreviewHandler::OnPrivetPrintingDone( 1757 void PrintPreviewHandler::OnPrivetPrintingDone(
1737 const cloud_print::PrivetLocalPrintOperation* print_operation) { 1758 const cloud_print::PrivetLocalPrintOperation* print_operation) {
1738 ClosePreviewDialog(); 1759 ResolveJavascriptCallback(base::Value(privet_print_callback_id_),
rbpotter 2017/06/20 20:46:07 Now done from JS
1760 base::Value());
1761 privet_print_callback_id_.clear();
1739 } 1762 }
1740 1763
1741 void PrintPreviewHandler::OnPrivetPrintingError( 1764 void PrintPreviewHandler::OnPrivetPrintingError(
1742 const cloud_print::PrivetLocalPrintOperation* print_operation, 1765 const cloud_print::PrivetLocalPrintOperation* print_operation,
1743 int http_code) { 1766 int http_code) {
1744 FireWebUIListener("print-failed", base::Value(http_code)); 1767 RejectJavascriptCallback(base::Value(privet_print_callback_id_),
1768 base::Value(http_code));
1769 privet_print_callback_id_.clear();
1745 } 1770 }
1746 1771
1747 void PrintPreviewHandler::FillPrinterDescription( 1772 void PrintPreviewHandler::FillPrinterDescription(
1748 const std::string& name, 1773 const std::string& name,
1749 const cloud_print::DeviceDescription& description, 1774 const cloud_print::DeviceDescription& description,
1750 bool has_local_printing, 1775 bool has_local_printing,
1751 base::DictionaryValue* printer_value) { 1776 base::DictionaryValue* printer_value) {
1752 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 1777 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
1753 1778
1754 printer_value->SetString("serviceName", name); 1779 printer_value->SetString("serviceName", name);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1798 void PrintPreviewHandler::OnGotExtensionPrinterCapabilities( 1823 void PrintPreviewHandler::OnGotExtensionPrinterCapabilities(
1799 const std::string& callback_id, 1824 const std::string& callback_id,
1800 const base::DictionaryValue& capabilities) { 1825 const base::DictionaryValue& capabilities) {
1801 if (capabilities.empty()) { 1826 if (capabilities.empty()) {
1802 RejectJavascriptCallback(base::Value(callback_id), base::Value()); 1827 RejectJavascriptCallback(base::Value(callback_id), base::Value());
1803 return; 1828 return;
1804 } 1829 }
1805 ResolveJavascriptCallback(base::Value(callback_id), capabilities); 1830 ResolveJavascriptCallback(base::Value(callback_id), capabilities);
1806 } 1831 }
1807 1832
1808 void PrintPreviewHandler::OnExtensionPrintResult(bool success, 1833 void PrintPreviewHandler::OnExtensionPrintResult(const std::string& callback_id,
1834 bool success,
1809 const std::string& status) { 1835 const std::string& status) {
1810 if (success) { 1836 if (success) {
1811 ClosePreviewDialog(); 1837 ResolveJavascriptCallback(base::Value(callback_id), base::Value());
rbpotter 2017/06/20 20:46:07 Now done from JS
1812 return; 1838 return;
1813 } 1839 }
1814 FireWebUIListener("print-failed", base::Value(status)); 1840 RejectJavascriptCallback(base::Value(callback_id), base::Value(status));
1815 } 1841 }
1816 1842
1817 void PrintPreviewHandler::RegisterForGaiaCookieChanges() { 1843 void PrintPreviewHandler::RegisterForGaiaCookieChanges() {
1818 DCHECK(!gaia_cookie_manager_service_); 1844 DCHECK(!gaia_cookie_manager_service_);
1819 Profile* profile = Profile::FromWebUI(web_ui()); 1845 Profile* profile = Profile::FromWebUI(web_ui());
1820 if (switches::IsAccountConsistencyMirrorEnabled() && 1846 if (switches::IsAccountConsistencyMirrorEnabled() &&
1821 !profile->IsOffTheRecord()) { 1847 !profile->IsOffTheRecord()) {
1822 gaia_cookie_manager_service_ = 1848 gaia_cookie_manager_service_ =
1823 GaiaCookieManagerServiceFactory::GetForProfile(profile); 1849 GaiaCookieManagerServiceFactory::GetForProfile(profile);
1824 if (gaia_cookie_manager_service_) 1850 if (gaia_cookie_manager_service_)
1825 gaia_cookie_manager_service_->AddObserver(this); 1851 gaia_cookie_manager_service_->AddObserver(this);
1826 } 1852 }
1827 } 1853 }
1828 1854
1829 void PrintPreviewHandler::UnregisterForGaiaCookieChanges() { 1855 void PrintPreviewHandler::UnregisterForGaiaCookieChanges() {
1830 if (gaia_cookie_manager_service_) 1856 if (gaia_cookie_manager_service_)
1831 gaia_cookie_manager_service_->RemoveObserver(this); 1857 gaia_cookie_manager_service_->RemoveObserver(this);
1832 } 1858 }
1833 1859
1834 void PrintPreviewHandler::SetPdfSavedClosureForTesting( 1860 void PrintPreviewHandler::SetPdfSavedClosureForTesting(
1835 const base::Closure& closure) { 1861 const base::Closure& closure) {
1836 pdf_file_saved_closure_ = closure; 1862 pdf_file_saved_closure_ = closure;
1837 } 1863 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698