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

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

Issue 7792085: Print Preview: Handling pending print to pdf requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebasing Created 9 years, 3 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_handler.h" 5 #include "chrome/browser/ui/webui/print_preview_handler.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #if !defined(OS_CHROMEOS) 10 #if !defined(OS_CHROMEOS)
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); 622 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf);
623 623
624 settings->SetBoolean(printing::kSettingHeaderFooterEnabled, false); 624 settings->SetBoolean(printing::kSettingHeaderFooterEnabled, false);
625 625
626 bool print_to_cloud = settings->HasKey(printing::kSettingCloudPrintId); 626 bool print_to_cloud = settings->HasKey(printing::kSettingCloudPrintId);
627 if (print_to_cloud) { 627 if (print_to_cloud) {
628 std::string print_ticket; 628 std::string print_ticket;
629 args->GetString(1, &print_ticket); 629 args->GetString(1, &print_ticket);
630 SendCloudPrintJob(*settings, print_ticket); 630 SendCloudPrintJob(*settings, print_ticket);
631 } else if (print_to_pdf) { 631 } else if (print_to_pdf) {
632 HandlePrintToPdf(*settings);
633 } else {
634 ReportPrintSettingsStats(*settings);
635 ReportUserActionHistogram(PRINT_TO_PRINTER);
636 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter",
637 GetPageCountFromSettingsDictionary(*settings));
638
639 // This tries to activate the initiator tab as well, so do not clear the
640 // association with the initiator tab yet.
641 HidePreviewTab();
642
643 // Do this so the initiator tab can open a new print preview tab.
644 ClearInitiatorTabDetails();
645
646 // The PDF being printed contains only the pages that the user selected,
647 // so ignore the page range and print all pages.
648 settings->Remove(printing::kSettingPageRange, NULL);
649 RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host();
650 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings));
651 }
652 }
653
654 void PrintPreviewHandler::HandlePrintToPdf(
655 const base::DictionaryValue& settings) {
656 if (print_to_pdf_path_.get()) {
657 // User has already selected a path, no need to show the dialog again.
658 PostPrintToPdfTask();
659 } else if (!select_file_dialog_.get() || !select_file_dialog_->IsRunning(
660 platform_util::GetTopLevel(preview_tab()->GetNativeView()))) {
632 ReportUserActionHistogram(PRINT_TO_PDF); 661 ReportUserActionHistogram(PRINT_TO_PDF);
633 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", 662 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF",
634 GetPageCountFromSettingsDictionary(*settings)); 663 GetPageCountFromSettingsDictionary(settings));
635 664
636 // Pre-populating select file dialog with print job title. 665 // Pre-populating select file dialog with print job title.
637 string16 print_job_title_utf16 = 666 string16 print_job_title_utf16 =
638 preview_tab_wrapper()->print_view_manager()->RenderSourceName(); 667 preview_tab_wrapper()->print_view_manager()->RenderSourceName();
639 668
640 #if defined(OS_WIN) 669 #if defined(OS_WIN)
641 FilePath::StringType print_job_title(print_job_title_utf16); 670 FilePath::StringType print_job_title(print_job_title_utf16);
642 #elif defined(OS_POSIX) 671 #elif defined(OS_POSIX)
643 FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); 672 FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16);
644 #endif 673 #endif
645 674
646 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); 675 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_');
647 FilePath default_filename(print_job_title); 676 FilePath default_filename(print_job_title);
648 default_filename = 677 default_filename =
649 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); 678 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf"));
650 679
651 SelectFile(default_filename); 680 SelectFile(default_filename);
652 } else {
653 ReportPrintSettingsStats(*settings);
654 ReportUserActionHistogram(PRINT_TO_PRINTER);
655 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter",
656 GetPageCountFromSettingsDictionary(*settings));
657
658 // This tries to activate the initiator tab as well, so do not clear the
659 // association with the initiator tab yet.
660 HidePreviewTab();
661
662 // Do this so the initiator tab can open a new print preview tab.
663 ClearInitiatorTabDetails();
664
665 // The PDF being printed contains only the pages that the user selected,
666 // so ignore the page range and print all pages.
667 settings->Remove(printing::kSettingPageRange, NULL);
668 RenderViewHost* rvh = web_ui_->tab_contents()->render_view_host();
669 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings));
670 } 681 }
671 } 682 }
672 683
673 void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) { 684 void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) {
674 HidePreviewTab(); 685 HidePreviewTab();
675 } 686 }
676 687
677 void PrintPreviewHandler::HandleCancelPendingPrintRequest( 688 void PrintPreviewHandler::HandleCancelPendingPrintRequest(
678 const ListValue* /*args*/) { 689 const ListValue* /*args*/) {
679 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 690 TabContentsWrapper* initiator_tab = GetInitiatorTab();
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
974 reported_failed_preview_ = true; 985 reported_failed_preview_ = true;
975 ReportUserActionHistogram(PREVIEW_FAILED); 986 ReportUserActionHistogram(PREVIEW_FAILED);
976 } 987 }
977 988
978 void PrintPreviewHandler::ShowSystemDialog() { 989 void PrintPreviewHandler::ShowSystemDialog() {
979 HandleShowSystemDialog(NULL); 990 HandleShowSystemDialog(NULL);
980 } 991 }
981 992
982 void PrintPreviewHandler::FileSelected(const FilePath& path, 993 void PrintPreviewHandler::FileSelected(const FilePath& path,
983 int index, void* params) { 994 int index, void* params) {
995 // Updating last_saved_path_ to the newly selected folder.
996 *last_saved_path_ = path.DirName();
997
998 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
999 print_preview_ui->CallJavascriptFunction("fileSelectionCompleted");
1000 scoped_refptr<RefCountedBytes> data;
1001 print_preview_ui->GetPrintPreviewDataForIndex(
1002 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data);
1003 print_to_pdf_path_.reset(new FilePath(path));
1004 if (data.get())
1005 PostPrintToPdfTask();
1006 }
1007
1008 void PrintPreviewHandler::PostPrintToPdfTask() {
984 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 1009 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
985 scoped_refptr<RefCountedBytes> data; 1010 scoped_refptr<RefCountedBytes> data;
986 print_preview_ui->GetPrintPreviewDataForIndex( 1011 print_preview_ui->GetPrintPreviewDataForIndex(
987 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data); 1012 printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data);
988 if (!data.get()) { 1013 DCHECK(data.get());
989 NOTREACHED();
990 return;
991 }
992
993 printing::PreviewMetafile* metafile = new printing::PreviewMetafile; 1014 printing::PreviewMetafile* metafile = new printing::PreviewMetafile;
994 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); 1015 metafile->InitFromData(static_cast<const void*>(data->front()), data->size());
995 1016 PrintToPdfTask* task = new PrintToPdfTask(metafile,
996 // Updating last_saved_path_ to the newly selected folder. 1017 *print_to_pdf_path_);
997 *last_saved_path_ = path.DirName();
998
999 PrintToPdfTask* task = new PrintToPdfTask(metafile, path);
1000 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); 1018 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
1001 1019 print_to_pdf_path_.reset();
1002 ActivateInitiatorTabAndClosePreviewTab(); 1020 ActivateInitiatorTabAndClosePreviewTab();
1003 } 1021 }
1004 1022
1005 void PrintPreviewHandler::FileSelectionCanceled(void* params) { 1023 void PrintPreviewHandler::FileSelectionCanceled(void* params) {
1006 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); 1024 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
1007 print_preview_ui->OnFileSelectionCancelled(); 1025 print_preview_ui->OnFileSelectionCancelled();
1008 } 1026 }
1009 1027
1010 void PrintPreviewHandler::HidePreviewTab() { 1028 void PrintPreviewHandler::HidePreviewTab() {
1011 if (GetBackgroundPrintingManager()->HasPrintPreviewTab(preview_tab_wrapper())) 1029 if (GetBackgroundPrintingManager()->HasPrintPreviewTab(preview_tab_wrapper()))
1012 return; 1030 return;
1013 GetBackgroundPrintingManager()->OwnPrintPreviewTab(preview_tab_wrapper()); 1031 GetBackgroundPrintingManager()->OwnPrintPreviewTab(preview_tab_wrapper());
1014 } 1032 }
1015 1033
1016 void PrintPreviewHandler::ClearInitiatorTabDetails() { 1034 void PrintPreviewHandler::ClearInitiatorTabDetails() {
1017 TabContentsWrapper* initiator_tab = GetInitiatorTab(); 1035 TabContentsWrapper* initiator_tab = GetInitiatorTab();
1018 if (!initiator_tab) 1036 if (!initiator_tab)
1019 return; 1037 return;
1020 1038
1021 // We no longer require the initiator tab details. Remove those details 1039 // We no longer require the initiator tab details. Remove those details
1022 // associated with the preview tab to allow the initiator tab to create 1040 // associated with the preview tab to allow the initiator tab to create
1023 // another preview tab. 1041 // another preview tab.
1024 printing::PrintPreviewTabController* tab_controller = 1042 printing::PrintPreviewTabController* tab_controller =
1025 printing::PrintPreviewTabController::GetInstance(); 1043 printing::PrintPreviewTabController::GetInstance();
1026 if (tab_controller) 1044 if (tab_controller)
1027 tab_controller->EraseInitiatorTabInfo(preview_tab_wrapper()); 1045 tab_controller->EraseInitiatorTabInfo(preview_tab_wrapper());
1028 } 1046 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.h ('k') | chrome/test/data/webui/print_preview.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698