| 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 |