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 9811baf05001402a808f2ac6898a8fa00ca94682..7b7adf4e1639b3847181c1bc0bda97938566f83e 100644 |
| --- a/chrome/browser/ui/webui/print_preview_handler.cc |
| +++ b/chrome/browser/ui/webui/print_preview_handler.cc |
| @@ -6,21 +6,29 @@ |
| #include <string> |
| +#include "base/i18n/file_util_icu.h" |
| #include "base/json/json_reader.h" |
| +#include "base/path_service.h" |
| #include "base/threading/thread.h" |
| +#include "base/threading/thread_restrictions.h" |
| +#include "base/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "chrome/browser/platform_util.h" |
| #include "chrome/browser/printing/print_preview_tab_controller.h" |
| +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| #include "chrome/browser/ui/webui/print_preview_ui_html_source.h" |
| #include "chrome/browser/ui/webui/print_preview_ui.h" |
| +#include "chrome/common/chrome_paths.h" |
| #include "chrome/common/print_messages.h" |
| #include "content/browser/browser_thread.h" |
| #include "content/browser/renderer_host/render_view_host.h" |
| #include "content/browser/tab_contents/tab_contents.h" |
| +#include "grit/generated_resources.h" |
| #include "printing/backend/print_backend.h" |
| #include "printing/metafile.h" |
| #include "printing/metafile_impl.h" |
| #include "printing/print_job_constants.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| namespace { |
| @@ -140,11 +148,18 @@ class PrintToPdfTask : public Task { |
| FilePath path_; |
| }; |
| +FilePath* PrintPreviewHandler::last_saved_path_ = NULL; |
| + |
| PrintPreviewHandler::PrintPreviewHandler() |
| : print_backend_(printing::PrintBackend::CreateInstance(NULL)), |
| need_to_generate_preview_(true), |
| color_(kColorDefaultValue), |
| landscape_(kLandscapeDefaultValue) { |
| + if (!last_saved_path_) { |
| + last_saved_path_ = new FilePath(); |
|
Lei Zhang
2011/04/14 21:00:37
I think you're going to leak the new FilePath if y
dpapad
2011/04/14 21:25:32
I did this because that is what the style guide su
Lei Zhang
2011/04/14 21:29:56
Oh right. Have you considered using a LazyInstance
|
| + base::ThreadRestrictions::ScopedAllowIO allow_io; |
| + PathService::Get(chrome::DIR_USER_DOCUMENTS, last_saved_path_); |
|
Lei Zhang
2011/04/14 21:00:37
You can do this in later in SelectFile().
dpapad
2011/04/14 21:25:32
Done.
|
| + } |
| } |
| PrintPreviewHandler::~PrintPreviewHandler() { |
| @@ -202,11 +217,33 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
| if (!settings.get()) |
| return; |
| - bool print_to_pdf; |
| + bool print_to_pdf = false; |
| settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); |
| if (print_to_pdf) { |
| - SelectFile(); |
| + // Pre-populating select file dialog with print job title. |
| + TabContentsWrapper* wrapper = |
| + TabContentsWrapper::GetCurrentWrapperForContents( |
| + web_ui_->tab_contents()); |
| + |
| + string16 print_job_title_temp = wrapper->print_view_manager() |
| + ->RenderSourceName(); |
|
Lei Zhang
2011/04/14 21:00:37
nit: this looks kind of weird style-wise.
dpapad
2011/04/14 21:25:32
Done.
|
| + |
| + if (print_job_title_temp.length() == 0) |
|
Lei Zhang
2011/04/14 21:00:37
You don't need this. PrintViewManager::RenderSourc
dpapad
2011/04/14 21:25:32
Done.
|
| + print_job_title_temp = l10n_util::GetStringUTF16( |
| + IDS_DEFAULT_PRINT_DOCUMENT_TITLE); |
| +#if defined(OS_WIN) |
| + FilePath::StringType print_job_title(print_job_title_temp); |
| +#else |
|
dpapad
2011/04/14 02:33:35
Should this be #elif defined(OS_POSIX)?
Lei Zhang
2011/04/14 21:00:37
Sure.
dpapad
2011/04/14 21:25:32
Done.
|
| + FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_temp); |
| +#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); |
| } else { |
| RenderViewHost* rvh = web_ui_->GetRenderViewHost(); |
| rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); |
| @@ -240,7 +277,7 @@ void PrintPreviewHandler::ProcessLandscapeSetting( |
| } |
| } |
| -void PrintPreviewHandler::SelectFile() { |
| +void PrintPreviewHandler::SelectFile(const FilePath& default_filename) { |
| SelectFileDialog::FileTypeInfo file_type_info; |
| file_type_info.extensions.resize(1); |
| file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pdf")); |
| @@ -251,7 +288,7 @@ void PrintPreviewHandler::SelectFile() { |
| select_file_dialog_->SelectFile( |
| SelectFileDialog::SELECT_SAVEAS_FILE, |
| string16(), |
| - FilePath(), |
| + last_saved_path_->Append(default_filename), |
| &file_type_info, |
| 0, |
| FILE_PATH_LITERAL(""), |
| @@ -271,6 +308,9 @@ void PrintPreviewHandler::FileSelected(const FilePath& path, |
| printing::PreviewMetafile* metafile = new printing::PreviewMetafile; |
| metafile->InitFromData(data.first->memory(), data.second); |
| + // 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); |
| } |