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

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: Address comments and add close_ param 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 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 // Dictionary field holding the default destination selection rules. 195 // Dictionary field holding the default destination selection rules.
196 const char kDefaultDestinationSelectionRules[] = 196 const char kDefaultDestinationSelectionRules[] =
197 "defaultDestinationSelectionRules"; 197 "defaultDestinationSelectionRules";
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 |json_str|. Returns NULL on
206 // ownership of the returned DictionaryValue. Returns NULL on failure. 206 // failure.
207 std::unique_ptr<base::DictionaryValue> GetSettingsDictionary( 207 std::unique_ptr<base::DictionaryValue> GetSettingsDictionary(
208 const base::ListValue* args) { 208 const 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));
869 CHECK(!callback_id.empty());
870 std::string json_str;
871 if (!args->GetString(1, &json_str))
872 RejectJavascriptCallback(base::Value(callback_id), base::Value(-1));
Lei Zhang 2017/07/11 05:11:10 Wait, don't we need to return after a failure like
rbpotter 2017/07/11 16:35:50 Yes for the case below. Should probably just crash
873
874 std::unique_ptr<base::DictionaryValue> settings =
875 GetSettingsDictionary(json_str);
866 if (!settings) 876 if (!settings)
867 return; 877 RejectJavascriptCallback(base::Value(callback_id), base::Value(-1));
868 878
869 ReportPrintSettingsStats(*settings); 879 ReportPrintSettingsStats(*settings);
870 880
871 // Report whether the user printed a PDF or an HTML document. 881 // Report whether the user printed a PDF or an HTML document.
872 ReportPrintDocumentTypeHistogram(print_preview_ui()->source_is_modifiable() ? 882 ReportPrintDocumentTypeHistogram(print_preview_ui()->source_is_modifiable() ?
873 HTML_DOCUMENT : PDF_DOCUMENT); 883 HTML_DOCUMENT : PDF_DOCUMENT);
874 884
875 bool print_to_pdf = false; 885 bool print_to_pdf = false;
876 bool is_cloud_printer = false; 886 bool is_cloud_printer = false;
877 bool print_with_privet = false; 887 bool print_with_privet = false;
(...skipping 11 matching lines...) Expand all
889 &print_with_extension); 899 &print_with_extension);
890 is_cloud_printer = settings->HasKey(printing::kSettingCloudPrintId); 900 is_cloud_printer = settings->HasKey(printing::kSettingCloudPrintId);
891 } 901 }
892 902
893 int page_count = 0; 903 int page_count = 0;
894 settings->GetInteger(printing::kSettingPreviewPageCount, &page_count); 904 settings->GetInteger(printing::kSettingPreviewPageCount, &page_count);
895 905
896 if (print_to_pdf) { 906 if (print_to_pdf) {
897 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", page_count); 907 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", page_count);
898 ReportUserActionHistogram(PRINT_TO_PDF); 908 ReportUserActionHistogram(PRINT_TO_PDF);
909 DCHECK(pdf_callback_id_.empty());
910 pdf_callback_id_ = callback_id;
899 PrintToPdf(); 911 PrintToPdf();
900 return; 912 return;
901 } 913 }
902 914
903 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY) 915 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
904 if (print_with_privet && PrivetPrintingEnabled()) { 916 if (print_with_privet && PrivetPrintingEnabled()) {
905 std::string printer_name; 917 std::string printer_name;
906 std::string print_ticket; 918 std::string print_ticket;
907 std::string capabilities; 919 std::string capabilities;
908 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithPrivet", page_count); 920 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithPrivet", page_count);
909 ReportUserActionHistogram(PRINT_WITH_PRIVET); 921 ReportUserActionHistogram(PRINT_WITH_PRIVET);
910 922
911 int width = 0; 923 int width = 0;
912 int height = 0; 924 int height = 0;
913 if (!settings->GetString(printing::kSettingDeviceName, &printer_name) || 925 if (!settings->GetString(printing::kSettingDeviceName, &printer_name) ||
914 !settings->GetString(printing::kSettingTicket, &print_ticket) || 926 !settings->GetString(printing::kSettingTicket, &print_ticket) ||
915 !settings->GetString(printing::kSettingCapabilities, &capabilities) || 927 !settings->GetString(printing::kSettingCapabilities, &capabilities) ||
916 !settings->GetInteger(printing::kSettingPageWidth, &width) || 928 !settings->GetInteger(printing::kSettingPageWidth, &width) ||
917 !settings->GetInteger(printing::kSettingPageHeight, &height) || 929 !settings->GetInteger(printing::kSettingPageHeight, &height) ||
918 width <= 0 || height <= 0) { 930 width <= 0 || height <= 0) {
919 NOTREACHED(); 931 NOTREACHED();
920 FireWebUIListener("print-failed", base::Value(-1)); 932 RejectJavascriptCallback(base::Value(callback_id), base::Value(-1));
921 return; 933 return;
922 } 934 }
923 935
924 PrintToPrivetPrinter( 936 DCHECK(privet_print_callback_id_.empty());
925 printer_name, print_ticket, capabilities, gfx::Size(width, height)); 937 privet_print_callback_id_ = callback_id;
938 PrintToPrivetPrinter(callback_id, printer_name, print_ticket, capabilities,
939 gfx::Size(width, height));
926 return; 940 return;
927 } 941 }
928 #endif 942 #endif
929 943
930 if (print_with_extension) { 944 if (print_with_extension) {
931 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithExtension", 945 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintWithExtension",
932 page_count); 946 page_count);
933 ReportUserActionHistogram(PRINT_WITH_EXTENSION); 947 ReportUserActionHistogram(PRINT_WITH_EXTENSION);
934 948
935 std::string destination_id; 949 std::string destination_id;
936 std::string print_ticket; 950 std::string print_ticket;
937 std::string capabilities; 951 std::string capabilities;
938 int width = 0; 952 int width = 0;
939 int height = 0; 953 int height = 0;
940 if (!settings->GetString(printing::kSettingDeviceName, &destination_id) || 954 if (!settings->GetString(printing::kSettingDeviceName, &destination_id) ||
941 !settings->GetString(printing::kSettingTicket, &print_ticket) || 955 !settings->GetString(printing::kSettingTicket, &print_ticket) ||
942 !settings->GetString(printing::kSettingCapabilities, &capabilities) || 956 !settings->GetString(printing::kSettingCapabilities, &capabilities) ||
943 !settings->GetInteger(printing::kSettingPageWidth, &width) || 957 !settings->GetInteger(printing::kSettingPageWidth, &width) ||
944 !settings->GetInteger(printing::kSettingPageHeight, &height) || 958 !settings->GetInteger(printing::kSettingPageHeight, &height) ||
945 width <= 0 || height <= 0) { 959 width <= 0 || height <= 0) {
946 NOTREACHED(); 960 NOTREACHED();
947 OnExtensionPrintResult(false, "FAILED"); 961 RejectJavascriptCallback(base::Value(callback_id), base::Value("FAILED"));
948 return; 962 return;
949 } 963 }
950 964
951 base::string16 title; 965 base::string16 title;
952 scoped_refptr<base::RefCountedBytes> data; 966 scoped_refptr<base::RefCountedBytes> data;
953 if (!GetPreviewDataAndTitle(&data, &title)) { 967 if (!GetPreviewDataAndTitle(&data, &title)) {
954 LOG(ERROR) << "Nothing to print; no preview available."; 968 LOG(ERROR) << "Nothing to print; no preview available.";
955 OnExtensionPrintResult(false, "NO_DATA"); 969 RejectJavascriptCallback(base::Value(callback_id),
970 base::Value("NO_DATA"));
956 return; 971 return;
957 } 972 }
958 973
959 EnsureExtensionPrinterHandlerSet(); 974 EnsureExtensionPrinterHandlerSet();
960 extension_printer_handler_->StartPrint( 975 extension_printer_handler_->StartPrint(
961 destination_id, capabilities, title, print_ticket, 976 destination_id, capabilities, title, print_ticket,
962 gfx::Size(width, height), data, 977 gfx::Size(width, height), data,
963 base::Bind(&PrintPreviewHandler::OnExtensionPrintResult, 978 base::Bind(&PrintPreviewHandler::OnExtensionPrintResult,
964 weak_factory_.GetWeakPtr())); 979 weak_factory_.GetWeakPtr(), callback_id));
965 return; 980 return;
966 } 981 }
967 982
968 scoped_refptr<base::RefCountedBytes> data; 983 scoped_refptr<base::RefCountedBytes> data;
969 base::string16 title; 984 base::string16 title;
970 if (!GetPreviewDataAndTitle(&data, &title)) { 985 if (!GetPreviewDataAndTitle(&data, &title)) {
971 // Nothing to print, no preview available. 986 // Nothing to print, no preview available.
987 RejectJavascriptCallback(base::Value(callback_id), base::Value());
972 return; 988 return;
973 } 989 }
974 990
975 if (is_cloud_printer) { 991 if (is_cloud_printer) {
976 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToCloudPrint", 992 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToCloudPrint",
977 page_count); 993 page_count);
978 ReportUserActionHistogram(PRINT_WITH_CLOUD_PRINT); 994 ReportUserActionHistogram(PRINT_WITH_CLOUD_PRINT);
979 SendCloudPrintJob(data.get()); 995 SendCloudPrintJob(callback_id, data.get());
980 return; 996 return;
981 } 997 }
982 998
983 #if BUILDFLAG(ENABLE_BASIC_PRINTING) 999 #if BUILDFLAG(ENABLE_BASIC_PRINTING)
984 bool system_dialog = false; 1000 bool system_dialog = false;
985 settings->GetBoolean(printing::kSettingShowSystemDialog, &system_dialog); 1001 settings->GetBoolean(printing::kSettingShowSystemDialog, &system_dialog);
986 if (system_dialog) { 1002 if (system_dialog) {
987 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.SystemDialog", page_count); 1003 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.SystemDialog", page_count);
988 ReportUserActionHistogram(FALLBACK_TO_ADVANCED_SETTINGS_DIALOG); 1004 ReportUserActionHistogram(FALLBACK_TO_ADVANCED_SETTINGS_DIALOG);
989 } else { 1005 } else {
990 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", page_count); 1006 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", page_count);
991 ReportUserActionHistogram(PRINT_TO_PRINTER); 1007 ReportUserActionHistogram(PRINT_TO_PRINTER);
992 } 1008 }
993 1009
994 // This tries to activate the initiator as well, so do not clear the
995 // association with the initiator yet.
996 print_preview_ui()->OnHidePreviewDialog();
997
998 // Grab the current initiator before calling ClearInitiatorDetails() below.
999 // Otherwise calling GetInitiator() later will return the wrong WebContents.
1000 // https://crbug.com/407080
1001 WebContents* initiator = GetInitiator(); 1010 WebContents* initiator = GetInitiator();
1002 if (initiator) { 1011 if (initiator) {
1003 // Save initiator IDs. PrintMsg_PrintForPrintPreview below should cause 1012 // Save initiator IDs. PrintMsg_PrintForPrintPreview below should cause
1004 // the renderer to send PrintHostMsg_UpdatePrintSettings and trigger 1013 // the renderer to send PrintHostMsg_UpdatePrintSettings and trigger
1005 // PrintingMessageFilter::OnUpdatePrintSettings(), which needs this info. 1014 // PrintingMessageFilter::OnUpdatePrintSettings(), which needs this info.
1006 auto* main_render_frame = initiator->GetMainFrame(); 1015 auto* main_render_frame = initiator->GetMainFrame();
1007 settings->SetInteger(printing::kPreviewInitiatorHostId, 1016 settings->SetInteger(printing::kPreviewInitiatorHostId,
1008 main_render_frame->GetProcess()->GetID()); 1017 main_render_frame->GetProcess()->GetID());
1009 settings->SetInteger(printing::kPreviewInitiatorRoutingId, 1018 settings->SetInteger(printing::kPreviewInitiatorRoutingId,
1010 main_render_frame->GetRoutingID()); 1019 main_render_frame->GetRoutingID());
1011 } 1020 }
1012 1021
1013 // Do this so the initiator can open a new print preview dialog, while the
1014 // current print preview dialog is still handling its print job.
1015 ClearInitiatorDetails();
1016
1017 // Set ID to know whether printing is for preview. 1022 // Set ID to know whether printing is for preview.
1018 settings->SetInteger(printing::kPreviewUIID, 1023 settings->SetInteger(printing::kPreviewUIID,
1019 print_preview_ui()->GetIDForPrintPreviewUI()); 1024 print_preview_ui()->GetIDForPrintPreviewUI());
1020 RenderFrameHost* rfh = preview_web_contents()->GetMainFrame(); 1025 RenderFrameHost* rfh = preview_web_contents()->GetMainFrame();
1021 rfh->Send(new PrintMsg_PrintForPrintPreview(rfh->GetRoutingID(), *settings)); 1026 rfh->Send(new PrintMsg_PrintForPrintPreview(rfh->GetRoutingID(), *settings));
1022 1027
1023 // For all other cases above, the preview dialog will stay open until the 1028 // Set this so when print preview sends "hidePreviewDialog" we clear the
1024 // printing has finished. Then the dialog closes and PrintPreviewDone() gets 1029 // initiator and call PrintPreviewDone(). In the cases above, the preview
1025 // called. In the case below, since the preview dialog will be hidden and 1030 // dialog stays open until printing is finished and we do this when the
1026 // not closed, we need to make this call. 1031 // dialog is closed. In this case, we set this so that these tasks are
1027 if (initiator) { 1032 // done in HandleHidePreview().
1028 auto* print_view_manager = PrintViewManager::FromWebContents(initiator); 1033 printing_started_ = true;
1029 print_view_manager->PrintPreviewDone(); 1034
1030 } 1035 // This will ultimately try to activate the initiator as well, so do not
1036 // clear the association with the initiator until "hidePreviewDialog" is
1037 // received from JS.
1038 ResolveJavascriptCallback(base::Value(callback_id), base::Value());
1039
1031 #else 1040 #else
1032 NOTREACHED(); 1041 NOTREACHED();
1033 #endif // BUILDFLAG(ENABLE_BASIC_PRINTING) 1042 #endif // BUILDFLAG(ENABLE_BASIC_PRINTING)
1034 } 1043 }
1035 1044
1036 void PrintPreviewHandler::PrintToPdf() { 1045 void PrintPreviewHandler::PrintToPdf() {
1037 if (!print_to_pdf_path_.empty()) { 1046 if (!print_to_pdf_path_.empty()) {
1038 // User has already selected a path, no need to show the dialog again. 1047 // User has already selected a path, no need to show the dialog again.
1048 ResolveJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1049 pdf_callback_id_.clear();
1039 PostPrintToPdfTask(); 1050 PostPrintToPdfTask();
1040 } else if (!select_file_dialog_.get() || 1051 } else if (!select_file_dialog_.get() ||
1041 !select_file_dialog_->IsRunning(platform_util::GetTopLevel( 1052 !select_file_dialog_->IsRunning(platform_util::GetTopLevel(
1042 preview_web_contents()->GetNativeView()))) { 1053 preview_web_contents()->GetNativeView()))) {
1043 // Pre-populating select file dialog with print job title. 1054 // Pre-populating select file dialog with print job title.
1044 const base::string16& print_job_title_utf16 = 1055 const base::string16& print_job_title_utf16 =
1045 print_preview_ui()->initiator_title(); 1056 print_preview_ui()->initiator_title();
1046 1057
1047 #if defined(OS_WIN) 1058 #if defined(OS_WIN)
1048 base::FilePath::StringType print_job_title(print_job_title_utf16); 1059 base::FilePath::StringType print_job_title(print_job_title_utf16);
1049 #elif defined(OS_POSIX) 1060 #elif defined(OS_POSIX)
1050 base::FilePath::StringType print_job_title = 1061 base::FilePath::StringType print_job_title =
1051 base::UTF16ToUTF8(print_job_title_utf16); 1062 base::UTF16ToUTF8(print_job_title_utf16);
1052 #endif 1063 #endif
1053 1064
1054 base::i18n::ReplaceIllegalCharactersInPath(&print_job_title, '_'); 1065 base::i18n::ReplaceIllegalCharactersInPath(&print_job_title, '_');
1055 base::FilePath default_filename(print_job_title); 1066 base::FilePath default_filename(print_job_title);
1056 default_filename = 1067 default_filename =
1057 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); 1068 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf"));
1058 1069
1059 base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); 1070 base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
1060 bool prompt_user = !cmdline->HasSwitch(switches::kKioskModePrinting); 1071 bool prompt_user = !cmdline->HasSwitch(switches::kKioskModePrinting);
1061 SelectFile(default_filename, prompt_user); 1072 SelectFile(default_filename, prompt_user);
1062 } 1073 }
1063 } 1074 }
1064 1075
1065 void PrintPreviewHandler::HandleHidePreview(const base::ListValue* /*args*/) { 1076 void PrintPreviewHandler::HandleHidePreview(const base::ListValue* /*args*/) {
1077 if (printing_started_) {
1078 // Printing has started, so clear the initiator so that it can open a new
1079 // print preview dialog, while the current print preview dialog is still
1080 // handling its print job.
1081 WebContents* initiator = GetInitiator();
1082 ClearInitiatorDetails();
1083
1084 // Since the preview dialog will be hidden and not closed, we need to make
1085 // this call.
1086 if (initiator) {
1087 auto* print_view_manager = PrintViewManager::FromWebContents(initiator);
1088 print_view_manager->PrintPreviewDone();
1089 }
1090
1091 // Since the initiator is cleared, only want to do this once.
1092 printing_started_ = false;
1093 }
1094
1066 print_preview_ui()->OnHidePreviewDialog(); 1095 print_preview_ui()->OnHidePreviewDialog();
1067 } 1096 }
1068 1097
1069 void PrintPreviewHandler::HandleCancelPendingPrintRequest( 1098 void PrintPreviewHandler::HandleCancelPendingPrintRequest(
1070 const base::ListValue* /*args*/) { 1099 const base::ListValue* /*args*/) {
1071 WebContents* initiator = GetInitiator(); 1100 WebContents* initiator = GetInitiator();
1072 if (initiator) 1101 if (initiator)
1073 ClearInitiatorDetails(); 1102 ClearInitiatorDetails();
1074 chrome::ShowPrintErrorDialog(); 1103 chrome::ShowPrintErrorDialog();
1075 } 1104 }
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 PrefService* prefs = profile->GetPrefs(); 1416 PrefService* prefs = profile->GetPrefs();
1388 if (prefs->GetBoolean(prefs::kCloudPrintSubmitEnabled)) { 1417 if (prefs->GetBoolean(prefs::kCloudPrintSubmitEnabled)) {
1389 base::DictionaryValue settings; 1418 base::DictionaryValue settings;
1390 settings.SetString(kCloudPrintUrl, 1419 settings.SetString(kCloudPrintUrl,
1391 GURL(cloud_devices::GetCloudPrintURL()).spec()); 1420 GURL(cloud_devices::GetCloudPrintURL()).spec());
1392 settings.SetBoolean(kAppKioskMode, chrome::IsRunningInForcedAppMode()); 1421 settings.SetBoolean(kAppKioskMode, chrome::IsRunningInForcedAppMode());
1393 web_ui()->CallJavascriptFunctionUnsafe("setUseCloudPrint", settings); 1422 web_ui()->CallJavascriptFunctionUnsafe("setUseCloudPrint", settings);
1394 } 1423 }
1395 } 1424 }
1396 1425
1397 void PrintPreviewHandler::SendCloudPrintJob(const base::RefCountedBytes* data) { 1426 void PrintPreviewHandler::SendCloudPrintJob(const std::string& callback_id,
1427 const base::RefCountedBytes* data) {
1398 // BASE64 encode the job data. 1428 // BASE64 encode the job data.
1399 const base::StringPiece raw_data(reinterpret_cast<const char*>(data->front()), 1429 const base::StringPiece raw_data(reinterpret_cast<const char*>(data->front()),
1400 data->size()); 1430 data->size());
1401 std::string base64_data; 1431 std::string base64_data;
1402 base::Base64Encode(raw_data, &base64_data); 1432 base::Base64Encode(raw_data, &base64_data);
1403 base::Value data_value(base64_data);
1404 1433
1405 web_ui()->CallJavascriptFunctionUnsafe("printToCloud", data_value); 1434 ResolveJavascriptCallback(base::Value(callback_id), base::Value(base64_data));
1406 } 1435 }
1407 1436
1408 WebContents* PrintPreviewHandler::GetInitiator() const { 1437 WebContents* PrintPreviewHandler::GetInitiator() const {
1409 printing::PrintPreviewDialogController* dialog_controller = 1438 printing::PrintPreviewDialogController* dialog_controller =
1410 printing::PrintPreviewDialogController::GetInstance(); 1439 printing::PrintPreviewDialogController::GetInstance();
1411 if (!dialog_controller) 1440 if (!dialog_controller)
1412 return NULL; 1441 return NULL;
1413 return dialog_controller->GetInitiator(preview_web_contents()); 1442 return dialog_controller->GetInitiator(preview_web_contents());
1414 } 1443 }
1415 1444
1416 void PrintPreviewHandler::OnAddAccountToCookieCompleted( 1445 void PrintPreviewHandler::OnAddAccountToCookieCompleted(
1417 const std::string& account_id, 1446 const std::string& account_id,
1418 const GoogleServiceAuthError& error) { 1447 const GoogleServiceAuthError& error) {
1419 OnSigninComplete(); 1448 OnSigninComplete();
1420 } 1449 }
1421 1450
1422 void PrintPreviewHandler::SelectFile(const base::FilePath& default_filename, 1451 void PrintPreviewHandler::SelectFile(const base::FilePath& default_filename,
1423 bool prompt_user) { 1452 bool prompt_user) {
1424 if (prompt_user) { 1453 if (prompt_user) {
1425 ChromeSelectFilePolicy policy(GetInitiator()); 1454 ChromeSelectFilePolicy policy(GetInitiator());
1426 if (!policy.CanOpenSelectFileDialog()) { 1455 if (!policy.CanOpenSelectFileDialog()) {
1427 policy.SelectFileDenied(); 1456 policy.SelectFileDenied();
1428 return ClosePreviewDialog(); 1457 RejectJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1458 pdf_callback_id_.clear();
1459 return;
1429 } 1460 }
1430 } 1461 }
1431 1462
1432 // Get save location from Download Preferences. 1463 // Get save location from Download Preferences.
1433 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext( 1464 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext(
1434 preview_web_contents()->GetBrowserContext()); 1465 preview_web_contents()->GetBrowserContext());
1435 base::FilePath file_path = download_prefs->SaveFilePath(); 1466 base::FilePath file_path = download_prefs->SaveFilePath();
1436 printing::StickySettings* sticky_settings = GetStickySettings(); 1467 printing::StickySettings* sticky_settings = GetStickySettings();
1437 sticky_settings->SaveInPrefs(Profile::FromBrowserContext( 1468 sticky_settings->SaveInPrefs(Profile::FromBrowserContext(
1438 preview_web_contents()->GetBrowserContext())->GetPrefs()); 1469 preview_web_contents()->GetBrowserContext())->GetPrefs());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1487 int /* index */, 1518 int /* index */,
1488 void* /* params */) { 1519 void* /* params */) {
1489 // Update downloads location and save sticky settings. 1520 // Update downloads location and save sticky settings.
1490 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext( 1521 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext(
1491 preview_web_contents()->GetBrowserContext()); 1522 preview_web_contents()->GetBrowserContext());
1492 download_prefs->SetSaveFilePath(path.DirName()); 1523 download_prefs->SetSaveFilePath(path.DirName());
1493 printing::StickySettings* sticky_settings = GetStickySettings(); 1524 printing::StickySettings* sticky_settings = GetStickySettings();
1494 sticky_settings->SaveInPrefs( 1525 sticky_settings->SaveInPrefs(
1495 Profile::FromBrowserContext(preview_web_contents()->GetBrowserContext()) 1526 Profile::FromBrowserContext(preview_web_contents()->GetBrowserContext())
1496 ->GetPrefs()); 1527 ->GetPrefs());
1497 web_ui()->CallJavascriptFunctionUnsafe("fileSelectionCompleted"); 1528 ResolveJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1529 pdf_callback_id_.clear();
1498 print_to_pdf_path_ = path; 1530 print_to_pdf_path_ = path;
1499 PostPrintToPdfTask(); 1531 PostPrintToPdfTask();
1500 } 1532 }
1501 1533
1502 void PrintPreviewHandler::PostPrintToPdfTask() { 1534 void PrintPreviewHandler::PostPrintToPdfTask() {
1503 scoped_refptr<base::RefCountedBytes> data; 1535 scoped_refptr<base::RefCountedBytes> data;
1504 base::string16 title; 1536 base::string16 title;
1505 if (!GetPreviewDataAndTitle(&data, &title)) { 1537 if (!GetPreviewDataAndTitle(&data, &title)) {
1506 NOTREACHED() << "Preview data was checked before file dialog."; 1538 NOTREACHED() << "Preview data was checked before file dialog.";
1507 return; 1539 return;
1508 } 1540 }
1509 1541
1510 base::PostTaskWithTraits( 1542 base::PostTaskWithTraits(
1511 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND}, 1543 FROM_HERE, {base::MayBlock(), base::TaskPriority::BACKGROUND},
1512 base::BindOnce(&PrintToPdfCallback, data, print_to_pdf_path_, 1544 base::BindOnce(&PrintToPdfCallback, data, print_to_pdf_path_,
1513 pdf_file_saved_closure_)); 1545 pdf_file_saved_closure_));
1514 print_to_pdf_path_.clear(); 1546 print_to_pdf_path_.clear();
1515 ClosePreviewDialog(); 1547 ClosePreviewDialog();
1516 } 1548 }
1517 1549
1518 void PrintPreviewHandler::FileSelectionCanceled(void* params) { 1550 void PrintPreviewHandler::FileSelectionCanceled(void* params) {
1519 print_preview_ui()->OnFileSelectionCancelled(); 1551 RejectJavascriptCallback(base::Value(pdf_callback_id_), base::Value());
1552 pdf_callback_id_.clear();
1520 } 1553 }
1521 1554
1522 void PrintPreviewHandler::ClearInitiatorDetails() { 1555 void PrintPreviewHandler::ClearInitiatorDetails() {
1523 WebContents* initiator = GetInitiator(); 1556 WebContents* initiator = GetInitiator();
1524 if (!initiator) 1557 if (!initiator)
1525 return; 1558 return;
1526 1559
1527 // We no longer require the initiator details. Remove those details associated 1560 // We no longer require the initiator details. Remove those details associated
1528 // with the preview dialog to allow the initiator to create another preview 1561 // with the preview dialog to allow the initiator to create another preview
1529 // dialog. 1562 // dialog.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1597 privet_http_client_->CreateCapabilitiesOperation( 1630 privet_http_client_->CreateCapabilitiesOperation(
1598 base::Bind(&PrintPreviewHandler::OnPrivetCapabilities, 1631 base::Bind(&PrintPreviewHandler::OnPrivetCapabilities,
1599 weak_factory_.GetWeakPtr(), callback_id)); 1632 weak_factory_.GetWeakPtr(), callback_id));
1600 privet_capabilities_operation_->Start(); 1633 privet_capabilities_operation_->Start();
1601 } 1634 }
1602 1635
1603 bool PrintPreviewHandler::PrivetUpdateClient( 1636 bool PrintPreviewHandler::PrivetUpdateClient(
1604 const std::string& callback_id, 1637 const std::string& callback_id,
1605 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) { 1638 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
1606 if (!http_client) { 1639 if (!http_client) {
1607 if (callback_id.empty()) { 1640 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(); 1641 privet_http_resolution_.reset();
1642 if (callback_id == privet_print_callback_id_)
1643 privet_print_callback_id_.clear();
1614 return false; 1644 return false;
1615 } 1645 }
1616 1646
1617 privet_local_print_operation_.reset(); 1647 privet_local_print_operation_.reset();
1618 privet_capabilities_operation_.reset(); 1648 privet_capabilities_operation_.reset();
1619 privet_http_client_ = cloud_print::PrivetV1HTTPClient::CreateDefault( 1649 privet_http_client_ = cloud_print::PrivetV1HTTPClient::CreateDefault(
1620 std::move(http_client)); 1650 std::move(http_client));
1621 1651
1622 privet_http_resolution_.reset(); 1652 privet_http_resolution_.reset();
1623 1653
1624 return true; 1654 return true;
1625 } 1655 }
1626 1656
1627 void PrintPreviewHandler::PrivetLocalPrintUpdateClient( 1657 void PrintPreviewHandler::PrivetLocalPrintUpdateClient(
1658 const std::string& callback_id,
1628 std::string print_ticket, 1659 std::string print_ticket,
1629 std::string capabilities, 1660 std::string capabilities,
1630 gfx::Size page_size, 1661 gfx::Size page_size,
1631 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) { 1662 std::unique_ptr<cloud_print::PrivetHTTPClient> http_client) {
1632 if (!PrivetUpdateClient("", std::move(http_client))) 1663 if (!PrivetUpdateClient(callback_id, std::move(http_client)))
1633 return; 1664 return;
1634 1665
1635 StartPrivetLocalPrint(print_ticket, capabilities, page_size); 1666 StartPrivetLocalPrint(print_ticket, capabilities, page_size);
1636 } 1667 }
1637 1668
1638 void PrintPreviewHandler::StartPrivetLocalPrint(const std::string& print_ticket, 1669 void PrintPreviewHandler::StartPrivetLocalPrint(const std::string& print_ticket,
1639 const std::string& capabilities, 1670 const std::string& capabilities,
1640 const gfx::Size& page_size) { 1671 const gfx::Size& page_size) {
1641 privet_local_print_operation_ = 1672 privet_local_print_operation_ =
1642 privet_http_client_->CreateLocalPrintOperation(this); 1673 privet_http_client_->CreateLocalPrintOperation(this);
1643 1674
1644 privet_local_print_operation_->SetTicket(print_ticket); 1675 privet_local_print_operation_->SetTicket(print_ticket);
1645 privet_local_print_operation_->SetCapabilities(capabilities); 1676 privet_local_print_operation_->SetCapabilities(capabilities);
1646 1677
1647 scoped_refptr<base::RefCountedBytes> data; 1678 scoped_refptr<base::RefCountedBytes> data;
1648 base::string16 title; 1679 base::string16 title;
1649 1680
1650 if (!GetPreviewDataAndTitle(&data, &title)) { 1681 if (!GetPreviewDataAndTitle(&data, &title)) {
1651 FireWebUIListener("print-failed", base::Value(-1)); 1682 RejectJavascriptCallback(base::Value(privet_print_callback_id_),
1683 base::Value(-1));
1684 privet_print_callback_id_.clear();
1652 return; 1685 return;
1653 } 1686 }
1654 1687
1655 privet_local_print_operation_->SetJobname(base::UTF16ToUTF8(title)); 1688 privet_local_print_operation_->SetJobname(base::UTF16ToUTF8(title));
1656 privet_local_print_operation_->SetPageSize(page_size); 1689 privet_local_print_operation_->SetPageSize(page_size);
1657 privet_local_print_operation_->SetData(data.get()); 1690 privet_local_print_operation_->SetData(data.get());
1658 1691
1659 Profile* profile = Profile::FromWebUI(web_ui()); 1692 Profile* profile = Profile::FromWebUI(web_ui());
1660 SigninManagerBase* signin_manager = 1693 SigninManagerBase* signin_manager =
1661 SigninManagerFactory::GetForProfileIfExists(profile); 1694 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)); 1727 printer_info_and_caps.SetDictionary("printer", std::move(printer_info));
1695 std::unique_ptr<base::DictionaryValue> capabilities_copy = 1728 std::unique_ptr<base::DictionaryValue> capabilities_copy =
1696 capabilities->CreateDeepCopy(); 1729 capabilities->CreateDeepCopy();
1697 printer_info_and_caps.SetDictionary("capabilities", 1730 printer_info_and_caps.SetDictionary("capabilities",
1698 std::move(capabilities_copy)); 1731 std::move(capabilities_copy));
1699 ResolveJavascriptCallback(base::Value(callback_id), printer_info_and_caps); 1732 ResolveJavascriptCallback(base::Value(callback_id), printer_info_and_caps);
1700 1733
1701 privet_capabilities_operation_.reset(); 1734 privet_capabilities_operation_.reset();
1702 } 1735 }
1703 1736
1704 void PrintPreviewHandler::PrintToPrivetPrinter(const std::string& device_name, 1737 void PrintPreviewHandler::PrintToPrivetPrinter(const std::string& callback_id,
1738 const std::string& device_name,
1705 const std::string& ticket, 1739 const std::string& ticket,
1706 const std::string& capabilities, 1740 const std::string& capabilities,
1707 const gfx::Size& page_size) { 1741 const gfx::Size& page_size) {
1708 if (!CreatePrivetHTTP( 1742 if (!CreatePrivetHTTP(
1709 device_name, 1743 device_name,
1710 base::Bind(&PrintPreviewHandler::PrivetLocalPrintUpdateClient, 1744 base::Bind(&PrintPreviewHandler::PrivetLocalPrintUpdateClient,
1711 weak_factory_.GetWeakPtr(), ticket, capabilities, 1745 weak_factory_.GetWeakPtr(), callback_id, ticket,
1712 page_size))) { 1746 capabilities, page_size))) {
1713 FireWebUIListener("print-failed", base::Value(-1)); 1747 RejectJavascriptCallback(base::Value(privet_print_callback_id_),
1748 base::Value(-1));
1749 privet_print_callback_id_.clear();
1714 } 1750 }
1715 } 1751 }
1716 1752
1717 bool PrintPreviewHandler::CreatePrivetHTTP( 1753 bool PrintPreviewHandler::CreatePrivetHTTP(
1718 const std::string& name, 1754 const std::string& name,
1719 const cloud_print::PrivetHTTPAsynchronousFactory::ResultCallback& 1755 const cloud_print::PrivetHTTPAsynchronousFactory::ResultCallback&
1720 callback) { 1756 callback) {
1721 const cloud_print::DeviceDescription* device_description = 1757 const cloud_print::DeviceDescription* device_description =
1722 printer_lister_ ? printer_lister_->GetDeviceDescription(name) : NULL; 1758 printer_lister_ ? printer_lister_->GetDeviceDescription(name) : NULL;
1723 1759
1724 if (!device_description) 1760 if (!device_description)
1725 return false; 1761 return false;
1726 1762
1727 privet_http_factory_ = 1763 privet_http_factory_ =
1728 cloud_print::PrivetHTTPAsynchronousFactory::CreateInstance( 1764 cloud_print::PrivetHTTPAsynchronousFactory::CreateInstance(
1729 Profile::FromWebUI(web_ui())->GetRequestContext()); 1765 Profile::FromWebUI(web_ui())->GetRequestContext());
1730 privet_http_resolution_ = privet_http_factory_->CreatePrivetHTTP(name); 1766 privet_http_resolution_ = privet_http_factory_->CreatePrivetHTTP(name);
1731 privet_http_resolution_->Start(device_description->address, callback); 1767 privet_http_resolution_->Start(device_description->address, callback);
1732 1768
1733 return true; 1769 return true;
1734 } 1770 }
1735 1771
1736 void PrintPreviewHandler::OnPrivetPrintingDone( 1772 void PrintPreviewHandler::OnPrivetPrintingDone(
1737 const cloud_print::PrivetLocalPrintOperation* print_operation) { 1773 const cloud_print::PrivetLocalPrintOperation* print_operation) {
1738 ClosePreviewDialog(); 1774 ResolveJavascriptCallback(base::Value(privet_print_callback_id_),
1775 base::Value());
1776 privet_print_callback_id_.clear();
1739 } 1777 }
1740 1778
1741 void PrintPreviewHandler::OnPrivetPrintingError( 1779 void PrintPreviewHandler::OnPrivetPrintingError(
1742 const cloud_print::PrivetLocalPrintOperation* print_operation, 1780 const cloud_print::PrivetLocalPrintOperation* print_operation,
1743 int http_code) { 1781 int http_code) {
1744 FireWebUIListener("print-failed", base::Value(http_code)); 1782 RejectJavascriptCallback(base::Value(privet_print_callback_id_),
1783 base::Value(http_code));
1784 privet_print_callback_id_.clear();
1745 } 1785 }
1746 1786
1747 void PrintPreviewHandler::FillPrinterDescription( 1787 void PrintPreviewHandler::FillPrinterDescription(
1748 const std::string& name, 1788 const std::string& name,
1749 const cloud_print::DeviceDescription& description, 1789 const cloud_print::DeviceDescription& description,
1750 bool has_local_printing, 1790 bool has_local_printing,
1751 base::DictionaryValue* printer_value) { 1791 base::DictionaryValue* printer_value) {
1752 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 1792 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
1753 1793
1754 printer_value->SetString("serviceName", name); 1794 printer_value->SetString("serviceName", name);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1798 void PrintPreviewHandler::OnGotExtensionPrinterCapabilities( 1838 void PrintPreviewHandler::OnGotExtensionPrinterCapabilities(
1799 const std::string& callback_id, 1839 const std::string& callback_id,
1800 const base::DictionaryValue& capabilities) { 1840 const base::DictionaryValue& capabilities) {
1801 if (capabilities.empty()) { 1841 if (capabilities.empty()) {
1802 RejectJavascriptCallback(base::Value(callback_id), base::Value()); 1842 RejectJavascriptCallback(base::Value(callback_id), base::Value());
1803 return; 1843 return;
1804 } 1844 }
1805 ResolveJavascriptCallback(base::Value(callback_id), capabilities); 1845 ResolveJavascriptCallback(base::Value(callback_id), capabilities);
1806 } 1846 }
1807 1847
1808 void PrintPreviewHandler::OnExtensionPrintResult(bool success, 1848 void PrintPreviewHandler::OnExtensionPrintResult(const std::string& callback_id,
1849 bool success,
1809 const std::string& status) { 1850 const std::string& status) {
1810 if (success) { 1851 if (success) {
1811 ClosePreviewDialog(); 1852 ResolveJavascriptCallback(base::Value(callback_id), base::Value());
1812 return; 1853 return;
1813 } 1854 }
1814 FireWebUIListener("print-failed", base::Value(status)); 1855 RejectJavascriptCallback(base::Value(callback_id), base::Value(status));
1815 } 1856 }
1816 1857
1817 void PrintPreviewHandler::RegisterForGaiaCookieChanges() { 1858 void PrintPreviewHandler::RegisterForGaiaCookieChanges() {
1818 DCHECK(!gaia_cookie_manager_service_); 1859 DCHECK(!gaia_cookie_manager_service_);
1819 Profile* profile = Profile::FromWebUI(web_ui()); 1860 Profile* profile = Profile::FromWebUI(web_ui());
1820 if (switches::IsAccountConsistencyMirrorEnabled() && 1861 if (switches::IsAccountConsistencyMirrorEnabled() &&
1821 !profile->IsOffTheRecord()) { 1862 !profile->IsOffTheRecord()) {
1822 gaia_cookie_manager_service_ = 1863 gaia_cookie_manager_service_ =
1823 GaiaCookieManagerServiceFactory::GetForProfile(profile); 1864 GaiaCookieManagerServiceFactory::GetForProfile(profile);
1824 if (gaia_cookie_manager_service_) 1865 if (gaia_cookie_manager_service_)
1825 gaia_cookie_manager_service_->AddObserver(this); 1866 gaia_cookie_manager_service_->AddObserver(this);
1826 } 1867 }
1827 } 1868 }
1828 1869
1829 void PrintPreviewHandler::UnregisterForGaiaCookieChanges() { 1870 void PrintPreviewHandler::UnregisterForGaiaCookieChanges() {
1830 if (gaia_cookie_manager_service_) 1871 if (gaia_cookie_manager_service_)
1831 gaia_cookie_manager_service_->RemoveObserver(this); 1872 gaia_cookie_manager_service_->RemoveObserver(this);
1832 } 1873 }
1833 1874
1834 void PrintPreviewHandler::SetPdfSavedClosureForTesting( 1875 void PrintPreviewHandler::SetPdfSavedClosureForTesting(
1835 const base::Closure& closure) { 1876 const base::Closure& closure) {
1836 pdf_file_saved_closure_ = closure; 1877 pdf_file_saved_closure_ = closure;
1837 } 1878 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698