Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Side by Side Diff: chrome/browser/ui/webui/print_preview_handler.cc

Issue 7056070: PrintPreview: Preview generation should not block print button. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698