OLD | NEW |
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/i18n/file_util_icu.h" | 9 #include "base/i18n/file_util_icu.h" |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 | 145 |
146 int duplex_mode; | 146 int duplex_mode; |
147 if (settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode)) | 147 if (settings.GetInteger(printing::kSettingDuplexMode, &duplex_mode)) |
148 ReportPrintSettingHistogram(duplex_mode ? DUPLEX : SIMPLEX); | 148 ReportPrintSettingHistogram(duplex_mode ? DUPLEX : SIMPLEX); |
149 | 149 |
150 bool is_color; | 150 bool is_color; |
151 if (settings.GetBoolean(printing::kSettingColor, &is_color)) | 151 if (settings.GetBoolean(printing::kSettingColor, &is_color)) |
152 ReportPrintSettingHistogram(is_color ? COLOR : BLACK_AND_WHITE); | 152 ReportPrintSettingHistogram(is_color ? COLOR : BLACK_AND_WHITE); |
153 } | 153 } |
154 | 154 |
| 155 printing::BackgroundPrintingManager* GetBackgroundPrintingManager() { |
| 156 return g_browser_process->background_printing_manager(); |
| 157 } |
| 158 |
155 } // namespace | 159 } // namespace |
156 | 160 |
157 class PrintSystemTaskProxy | 161 class PrintSystemTaskProxy |
158 : public base::RefCountedThreadSafe<PrintSystemTaskProxy, | 162 : public base::RefCountedThreadSafe<PrintSystemTaskProxy, |
159 BrowserThread::DeleteOnUIThread> { | 163 BrowserThread::DeleteOnUIThread> { |
160 public: | 164 public: |
161 PrintSystemTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, | 165 PrintSystemTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, |
162 printing::PrintBackend* print_backend, | 166 printing::PrintBackend* print_backend, |
163 bool has_logged_printers_count) | 167 bool has_logged_printers_count) |
164 : handler_(handler), | 168 : handler_(handler), |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 web_ui_->RegisterMessageCallback("print", | 371 web_ui_->RegisterMessageCallback("print", |
368 NewCallback(this, &PrintPreviewHandler::HandlePrint)); | 372 NewCallback(this, &PrintPreviewHandler::HandlePrint)); |
369 web_ui_->RegisterMessageCallback("getPrinterCapabilities", | 373 web_ui_->RegisterMessageCallback("getPrinterCapabilities", |
370 NewCallback(this, &PrintPreviewHandler::HandleGetPrinterCapabilities)); | 374 NewCallback(this, &PrintPreviewHandler::HandleGetPrinterCapabilities)); |
371 web_ui_->RegisterMessageCallback("showSystemDialog", | 375 web_ui_->RegisterMessageCallback("showSystemDialog", |
372 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); | 376 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); |
373 web_ui_->RegisterMessageCallback("managePrinters", | 377 web_ui_->RegisterMessageCallback("managePrinters", |
374 NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); | 378 NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); |
375 web_ui_->RegisterMessageCallback("closePrintPreviewTab", | 379 web_ui_->RegisterMessageCallback("closePrintPreviewTab", |
376 NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); | 380 NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); |
| 381 web_ui_->RegisterMessageCallback("hidePreview", |
| 382 NewCallback(this, &PrintPreviewHandler::HandleHidePreview)); |
377 } | 383 } |
378 | 384 |
379 TabContents* PrintPreviewHandler::preview_tab() { | 385 TabContents* PrintPreviewHandler::preview_tab() { |
380 return web_ui_->tab_contents(); | 386 return web_ui_->tab_contents(); |
381 } | 387 } |
382 | 388 |
383 void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { | 389 void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { |
384 scoped_refptr<PrintSystemTaskProxy> task = | 390 scoped_refptr<PrintSystemTaskProxy> task = |
385 new PrintSystemTaskProxy(AsWeakPtr(), | 391 new PrintSystemTaskProxy(AsWeakPtr(), |
386 print_backend_.get(), | 392 print_backend_.get(), |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); | 477 FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); |
472 #endif | 478 #endif |
473 | 479 |
474 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); | 480 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); |
475 FilePath default_filename(print_job_title); | 481 FilePath default_filename(print_job_title); |
476 default_filename = | 482 default_filename = |
477 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); | 483 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); |
478 | 484 |
479 SelectFile(default_filename); | 485 SelectFile(default_filename); |
480 } else { | 486 } else { |
| 487 ClearInitiatorTabDetails(); |
481 ReportPrintSettingsStats(*settings); | 488 ReportPrintSettingsStats(*settings); |
482 ReportUserActionHistogram(PRINT_TO_PRINTER); | 489 ReportUserActionHistogram(PRINT_TO_PRINTER); |
483 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", | 490 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", |
484 GetPageCountFromSettingsDictionary(*settings)); | 491 GetPageCountFromSettingsDictionary(*settings)); |
485 g_browser_process->background_printing_manager()->OwnTabContents( | 492 |
486 preview_tab_wrapper); | 493 HidePreviewTab(); |
487 | 494 |
488 // The PDF being printed contains only the pages that the user selected, | 495 // The PDF being printed contains only the pages that the user selected, |
489 // so ignore the page range and print all pages. | 496 // so ignore the page range and print all pages. |
490 settings->Remove(printing::kSettingPageRange, NULL); | 497 settings->Remove(printing::kSettingPageRange, NULL); |
491 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); | 498 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); |
492 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); | 499 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); |
493 } | 500 } |
494 } | 501 } |
495 | 502 |
| 503 void PrintPreviewHandler::HandleHidePreview(const ListValue* args) { |
| 504 HidePreviewTab(); |
| 505 } |
| 506 |
496 void PrintPreviewHandler::HandleGetPrinterCapabilities( | 507 void PrintPreviewHandler::HandleGetPrinterCapabilities( |
497 const ListValue* args) { | 508 const ListValue* args) { |
498 std::string printer_name; | 509 std::string printer_name; |
499 bool ret = args->GetString(0, &printer_name); | 510 bool ret = args->GetString(0, &printer_name); |
500 if (!ret || printer_name.empty()) | 511 if (!ret || printer_name.empty()) |
501 return; | 512 return; |
502 | 513 |
503 scoped_refptr<PrintSystemTaskProxy> task = | 514 scoped_refptr<PrintSystemTaskProxy> task = |
504 new PrintSystemTaskProxy(AsWeakPtr(), | 515 new PrintSystemTaskProxy(AsWeakPtr(), |
505 print_backend_.get(), | 516 print_backend_.get(), |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); | 649 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); |
639 | 650 |
640 // Updating last_saved_path_ to the newly selected folder. | 651 // Updating last_saved_path_ to the newly selected folder. |
641 *last_saved_path_ = path.DirName(); | 652 *last_saved_path_ = path.DirName(); |
642 | 653 |
643 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); | 654 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); |
644 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); | 655 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); |
645 | 656 |
646 ActivateInitiatorTabAndClosePreviewTab(); | 657 ActivateInitiatorTabAndClosePreviewTab(); |
647 } | 658 } |
| 659 |
| 660 void PrintPreviewHandler::HidePreviewTab() { |
| 661 TabContentsWrapper* preview_tab_wrapper = |
| 662 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
| 663 if (GetBackgroundPrintingManager()->HasTabContents(preview_tab_wrapper)) |
| 664 return; |
| 665 GetBackgroundPrintingManager()->OwnTabContents(preview_tab_wrapper); |
| 666 } |
| 667 |
| 668 void PrintPreviewHandler::ClearInitiatorTabDetails() { |
| 669 TabContents* initiator_tab = GetInitiatorTab(); |
| 670 if (initiator_tab) { |
| 671 // We no longer require the intiator tab details. Remove those details |
| 672 // associated with the preview tab to allow the initiator tab to create |
| 673 // another preview tab. |
| 674 printing::PrintPreviewTabController* tab_controller = |
| 675 printing::PrintPreviewTabController::GetInstance(); |
| 676 if (tab_controller) |
| 677 tab_controller->EraseInitiatorTabInfo(preview_tab()); |
| 678 } |
| 679 } |
OLD | NEW |