Chromium Code Reviews| Index: chrome/browser/ui/webui/print_preview_handler.cc |
| diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc |
| index 9d233c40dcb29cf77d3368c869440c0f054c971b..2127acdee85348140706a6f965434494672f8113 100644 |
| --- a/chrome/browser/ui/webui/print_preview_handler.cc |
| +++ b/chrome/browser/ui/webui/print_preview_handler.cc |
| @@ -18,7 +18,6 @@ |
| #include "base/threading/thread.h" |
| #include "base/threading/thread_restrictions.h" |
| #include "base/utf_string_conversions.h" |
| -#include "base/values.h" |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/platform_util.h" |
| #include "chrome/browser/printing/background_printing_manager.h" |
| @@ -608,26 +607,7 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
| args->GetString(1, &print_ticket); |
| SendCloudPrintJob(*settings, print_ticket); |
| } else if (print_to_pdf) { |
| - ReportUserActionHistogram(PRINT_TO_PDF); |
| - UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", |
| - GetPageCountFromSettingsDictionary(*settings)); |
| - |
| - // Pre-populating select file dialog with print job title. |
| - string16 print_job_title_utf16 = |
| - preview_tab_wrapper()->print_view_manager()->RenderSourceName(); |
| - |
| -#if defined(OS_WIN) |
| - FilePath::StringType print_job_title(print_job_title_utf16); |
| -#elif defined(OS_POSIX) |
| - FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); |
| -#endif |
| - |
| - file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); |
| - FilePath default_filename(print_job_title); |
| - default_filename = |
| - default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); |
| - |
| - SelectFile(default_filename); |
| + HandlePrintToPdf(settings.get()); |
| } else { |
| ReportPrintSettingsStats(*settings); |
| ReportUserActionHistogram(PRINT_TO_PRINTER); |
| @@ -649,6 +629,35 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
| } |
| } |
| +void PrintPreviewHandler::HandlePrintToPdf(const DictionaryValue* settings) { |
|
vandebo (ex-Chrome)
2011/09/07 21:38:19
Will this method be called exactly once? If not,
dpapad
2011/09/07 23:42:39
Good catch. This function will be called twice in
|
| + ReportUserActionHistogram(PRINT_TO_PDF); |
| + UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPDF", |
| + GetPageCountFromSettingsDictionary(*settings)); |
| + |
| + if (pending_print_to_pdf_path_.get()) { |
| + // User has already selected a path, no need to show the dialog again. |
| + PostPrintToPdfTask(*pending_print_to_pdf_path_.get()); |
|
vandebo (ex-Chrome)
2011/09/07 21:38:19
Can you explain how we would get to this point, I
dpapad
2011/09/07 23:42:39
In chrome/browser/resources/print_preview/print_he
|
| + } else if (!select_file_dialog_.get() || !select_file_dialog_->IsRunning( |
| + platform_util::GetTopLevel(preview_tab()->GetNativeView()))) { |
| + // Pre-populating select file dialog with print job title. |
| + string16 print_job_title_utf16 = |
| + preview_tab_wrapper()->print_view_manager()->RenderSourceName(); |
| + |
| +#if defined(OS_WIN) |
| + FilePath::StringType print_job_title(print_job_title_utf16); |
| +#elif defined(OS_POSIX) |
| + FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); |
| +#endif |
| + |
| + file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); |
| + FilePath default_filename(print_job_title); |
| + default_filename = |
| + default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); |
| + |
| + SelectFile(default_filename); |
| + } |
| +} |
| + |
| void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) { |
| HidePreviewTab(); |
| } |
| @@ -960,24 +969,30 @@ void PrintPreviewHandler::ShowSystemDialog() { |
| void PrintPreviewHandler::FileSelected(const FilePath& path, |
| int index, void* params) { |
| + // Updating last_saved_path_ to the newly selected folder. |
| + *last_saved_path_ = path.DirName(); |
|
kmadhusu
2011/09/07 20:42:57
I think you need the save the path name only after
dpapad
2011/09/07 23:42:39
At this point the user has demonstrated that he wa
kmadhusu
2011/09/08 00:04:33
ok.. leave the code as it is.
|
| + |
| PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); |
| + print_preview_ui->OnFileSelectionCompleted(); |
|
kmadhusu
2011/09/07 20:42:57
You can remove the changes in print_preview_ui.h a
dpapad
2011/09/07 23:42:39
Done.
|
| scoped_refptr<RefCountedBytes> data; |
| print_preview_ui->GetPrintPreviewDataForIndex( |
| printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data); |
| if (!data.get()) { |
| - NOTREACHED(); |
| - return; |
| + pending_print_to_pdf_path_.reset(new FilePath(path)); |
|
kmadhusu
2011/09/07 20:42:57
How about renaming pending_print_to_pdf_path_ => p
vandebo (ex-Chrome)
2011/09/07 21:38:19
Then you could also free print_to_pdf_path_ in Pos
dpapad
2011/09/07 23:42:39
Done.
dpapad
2011/09/07 23:42:39
Done. print_to_pdf_path_ is a scoped_ptr already.
|
| + } else { |
| + PostPrintToPdfTask(path); |
| } |
| +} |
| +void PrintPreviewHandler::PostPrintToPdfTask(const FilePath& path) { |
| + PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); |
| + scoped_refptr<RefCountedBytes> data; |
| + print_preview_ui->GetPrintPreviewDataForIndex( |
| + printing::COMPLETE_PREVIEW_DOCUMENT_INDEX, &data); |
|
kmadhusu
2011/09/07 20:42:57
Add a dcheck to validate data.
dpapad
2011/09/07 23:42:39
Done.
|
| printing::PreviewMetafile* metafile = new printing::PreviewMetafile; |
| metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); |
| - |
| - // Updating last_saved_path_ to the newly selected folder. |
| - *last_saved_path_ = path.DirName(); |
| - |
| PrintToPdfTask* task = new PrintToPdfTask(metafile, path); |
| BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); |
| - |
| ActivateInitiatorTabAndClosePreviewTab(); |
| } |