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 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 web_ui_->RegisterMessageCallback("print", | 363 web_ui_->RegisterMessageCallback("print", |
364 NewCallback(this, &PrintPreviewHandler::HandlePrint)); | 364 NewCallback(this, &PrintPreviewHandler::HandlePrint)); |
365 web_ui_->RegisterMessageCallback("getPrinterCapabilities", | 365 web_ui_->RegisterMessageCallback("getPrinterCapabilities", |
366 NewCallback(this, &PrintPreviewHandler::HandleGetPrinterCapabilities)); | 366 NewCallback(this, &PrintPreviewHandler::HandleGetPrinterCapabilities)); |
367 web_ui_->RegisterMessageCallback("showSystemDialog", | 367 web_ui_->RegisterMessageCallback("showSystemDialog", |
368 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); | 368 NewCallback(this, &PrintPreviewHandler::HandleShowSystemDialog)); |
369 web_ui_->RegisterMessageCallback("managePrinters", | 369 web_ui_->RegisterMessageCallback("managePrinters", |
370 NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); | 370 NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); |
371 web_ui_->RegisterMessageCallback("closePrintPreviewTab", | 371 web_ui_->RegisterMessageCallback("closePrintPreviewTab", |
372 NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); | 372 NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); |
| 373 web_ui_->RegisterMessageCallback("hidePreview", |
| 374 NewCallback(this, &PrintPreviewHandler::HandleHidePreview)); |
373 } | 375 } |
374 | 376 |
375 TabContents* PrintPreviewHandler::preview_tab() { | 377 TabContents* PrintPreviewHandler::preview_tab() { |
376 return web_ui_->tab_contents(); | 378 return web_ui_->tab_contents(); |
377 } | 379 } |
378 | 380 |
379 void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { | 381 void PrintPreviewHandler::HandleGetDefaultPrinter(const ListValue*) { |
380 scoped_refptr<PrintSystemTaskProxy> task = | 382 scoped_refptr<PrintSystemTaskProxy> task = |
381 new PrintSystemTaskProxy(AsWeakPtr(), | 383 new PrintSystemTaskProxy(AsWeakPtr(), |
382 print_backend_.get(), | 384 print_backend_.get(), |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
423 } | 425 } |
424 | 426 |
425 void PrintPreviewHandler::HandlePrint(const ListValue* args) { | 427 void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
426 ReportStats(); | 428 ReportStats(); |
427 | 429 |
428 // Record the number of times the user requests to regenerate preview data | 430 // Record the number of times the user requests to regenerate preview data |
429 // before printing. | 431 // before printing. |
430 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint", | 432 UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint", |
431 regenerate_preview_request_count_); | 433 regenerate_preview_request_count_); |
432 | 434 |
433 TabContents* initiator_tab = GetInitiatorTab(); | |
434 if (initiator_tab) { | |
435 RenderViewHost* rvh = initiator_tab->render_view_host(); | |
436 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); | |
437 } | |
438 | |
439 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); | 435 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); |
440 if (!settings.get()) | 436 if (!settings.get()) |
441 return; | 437 return; |
442 | 438 |
443 bool print_to_pdf = false; | 439 bool print_to_pdf = false; |
444 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); | 440 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); |
445 | 441 |
446 TabContentsWrapper* preview_tab_wrapper = | 442 TabContentsWrapper* preview_tab_wrapper = |
447 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); | 443 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
448 | 444 |
(...skipping 12 matching lines...) Expand all Loading... |
461 FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); | 457 FilePath::StringType print_job_title = UTF16ToUTF8(print_job_title_utf16); |
462 #endif | 458 #endif |
463 | 459 |
464 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); | 460 file_util::ReplaceIllegalCharactersInPath(&print_job_title, '_'); |
465 FilePath default_filename(print_job_title); | 461 FilePath default_filename(print_job_title); |
466 default_filename = | 462 default_filename = |
467 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); | 463 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); |
468 | 464 |
469 SelectFile(default_filename); | 465 SelectFile(default_filename); |
470 } else { | 466 } else { |
| 467 ClearInitiatorTabDetails(); |
471 ReportPrintSettingsStats(*settings); | 468 ReportPrintSettingsStats(*settings); |
472 ReportUserActionHistogram(PRINT_TO_PRINTER); | 469 ReportUserActionHistogram(PRINT_TO_PRINTER); |
473 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", | 470 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", |
474 GetPageCountFromSettingsDictionary(*settings)); | 471 GetPageCountFromSettingsDictionary(*settings)); |
475 g_browser_process->background_printing_manager()->OwnTabContents( | 472 |
476 preview_tab_wrapper); | 473 HidePreviewTab(); |
477 | 474 |
478 // The PDF being printed contains only the pages that the user selected, | 475 // The PDF being printed contains only the pages that the user selected, |
479 // so ignore the page range and print all pages. | 476 // so ignore the page range and print all pages. |
480 settings->Remove(printing::kSettingPageRange, NULL); | 477 settings->Remove(printing::kSettingPageRange, NULL); |
481 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); | 478 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); |
482 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); | 479 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); |
483 } | 480 } |
484 } | 481 } |
485 | 482 |
| 483 void PrintPreviewHandler::HandleHidePreview(const ListValue* args) { |
| 484 HidePreviewTab(); |
| 485 } |
| 486 |
486 void PrintPreviewHandler::HandleGetPrinterCapabilities( | 487 void PrintPreviewHandler::HandleGetPrinterCapabilities( |
487 const ListValue* args) { | 488 const ListValue* args) { |
488 std::string printer_name; | 489 std::string printer_name; |
489 bool ret = args->GetString(0, &printer_name); | 490 bool ret = args->GetString(0, &printer_name); |
490 if (!ret || printer_name.empty()) | 491 if (!ret || printer_name.empty()) |
491 return; | 492 return; |
492 | 493 |
493 scoped_refptr<PrintSystemTaskProxy> task = | 494 scoped_refptr<PrintSystemTaskProxy> task = |
494 new PrintSystemTaskProxy(AsWeakPtr(), | 495 new PrintSystemTaskProxy(AsWeakPtr(), |
495 print_backend_.get(), | 496 print_backend_.get(), |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); | 632 metafile->InitFromData(static_cast<const void*>(data->front()), data->size()); |
632 | 633 |
633 // Updating last_saved_path_ to the newly selected folder. | 634 // Updating last_saved_path_ to the newly selected folder. |
634 *last_saved_path_ = path.DirName(); | 635 *last_saved_path_ = path.DirName(); |
635 | 636 |
636 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); | 637 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); |
637 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); | 638 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); |
638 | 639 |
639 ActivateInitiatorTabAndClosePreviewTab(); | 640 ActivateInitiatorTabAndClosePreviewTab(); |
640 } | 641 } |
| 642 |
| 643 void PrintPreviewHandler::HidePreviewTab() { |
| 644 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); |
| 645 if (print_preview_ui->isHidden()) |
| 646 return; |
| 647 |
| 648 TabContentsWrapper* preview_tab_wrapper = |
| 649 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
| 650 g_browser_process->background_printing_manager()->OwnTabContents( |
| 651 preview_tab_wrapper); |
| 652 print_preview_ui->setTabHiddenForPrint(); |
| 653 } |
| 654 |
| 655 void PrintPreviewHandler::ClearInitiatorTabDetails() { |
| 656 TabContents* initiator_tab = GetInitiatorTab(); |
| 657 if (initiator_tab) { |
| 658 RenderViewHost* rvh = initiator_tab->render_view_host(); |
| 659 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); |
| 660 |
| 661 // Remove initiator tab association with the preview tab. |
| 662 printing::PrintPreviewTabController* tab_controller = |
| 663 printing::PrintPreviewTabController::GetInstance(); |
| 664 if (tab_controller) |
| 665 tab_controller->EraseInitiatorTabInfo(preview_tab()); |
| 666 } |
| 667 } |
OLD | NEW |