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

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(); 435 ClearInitiatorTabDetails();
434 if (initiator_tab) {
435 RenderViewHost* rvh = initiator_tab->render_view_host();
436 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id()));
437 }
438 436
439 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); 437 scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args));
440 if (!settings.get()) 438 if (!settings.get())
441 return; 439 return;
442 440
443 bool print_to_pdf = false; 441 bool print_to_pdf = false;
444 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf); 442 settings->GetBoolean(printing::kSettingPrintToPDF, &print_to_pdf);
445 443
446 TabContentsWrapper* preview_tab_wrapper = 444 TabContentsWrapper* preview_tab_wrapper =
447 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); 445 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab());
(...skipping 17 matching lines...) Expand all
465 FilePath default_filename(print_job_title); 463 FilePath default_filename(print_job_title);
466 default_filename = 464 default_filename =
467 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf")); 465 default_filename.ReplaceExtension(FILE_PATH_LITERAL("pdf"));
468 466
469 SelectFile(default_filename); 467 SelectFile(default_filename);
470 } else { 468 } else {
471 ReportPrintSettingsStats(*settings); 469 ReportPrintSettingsStats(*settings);
472 ReportUserActionHistogram(PRINT_TO_PRINTER); 470 ReportUserActionHistogram(PRINT_TO_PRINTER);
473 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", 471 UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter",
474 GetPageCountFromSettingsDictionary(*settings)); 472 GetPageCountFromSettingsDictionary(*settings));
475 g_browser_process->background_printing_manager()->OwnTabContents( 473
476 preview_tab_wrapper); 474 HidePreviewTab();
477 475
478 // The PDF being printed contains only the pages that the user selected, 476 // The PDF being printed contains only the pages that the user selected,
479 // so ignore the page range and print all pages. 477 // so ignore the page range and print all pages.
480 settings->Remove(printing::kSettingPageRange, NULL); 478 settings->Remove(printing::kSettingPageRange, NULL);
481 RenderViewHost* rvh = web_ui_->GetRenderViewHost(); 479 RenderViewHost* rvh = web_ui_->GetRenderViewHost();
482 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings)); 480 rvh->Send(new PrintMsg_PrintForPrintPreview(rvh->routing_id(), *settings));
483 } 481 }
484 } 482 }
485 483
484 void PrintPreviewHandler::HandleHidePreview(const ListValue* args) {
485 HidePreviewTab();
486 }
487
486 void PrintPreviewHandler::HandleGetPrinterCapabilities( 488 void PrintPreviewHandler::HandleGetPrinterCapabilities(
487 const ListValue* args) { 489 const ListValue* args) {
488 std::string printer_name; 490 std::string printer_name;
489 bool ret = args->GetString(0, &printer_name); 491 bool ret = args->GetString(0, &printer_name);
490 if (!ret || printer_name.empty()) 492 if (!ret || printer_name.empty())
491 return; 493 return;
492 494
493 scoped_refptr<PrintSystemTaskProxy> task = 495 scoped_refptr<PrintSystemTaskProxy> task =
494 new PrintSystemTaskProxy(AsWeakPtr(), 496 new PrintSystemTaskProxy(AsWeakPtr(),
495 print_backend_.get(), 497 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()); 633 metafile->InitFromData(static_cast<const void*>(data->front()), data->size());
632 634
633 // Updating last_saved_path_ to the newly selected folder. 635 // Updating last_saved_path_ to the newly selected folder.
634 *last_saved_path_ = path.DirName(); 636 *last_saved_path_ = path.DirName();
635 637
636 PrintToPdfTask* task = new PrintToPdfTask(metafile, path); 638 PrintToPdfTask* task = new PrintToPdfTask(metafile, path);
637 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task); 639 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, task);
638 640
639 ActivateInitiatorTabAndClosePreviewTab(); 641 ActivateInitiatorTabAndClosePreviewTab();
640 } 642 }
643
644 void PrintPreviewHandler::HidePreviewTab() {
645 PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
646 if (print_preview_ui->isHidden())
647 return;
648
649 TabContentsWrapper* preview_tab_wrapper =
650 TabContentsWrapper::GetCurrentWrapperForContents(preview_tab());
651 g_browser_process->background_printing_manager()->OwnTabContents(
652 preview_tab_wrapper);
653 print_preview_ui->setTabHiddenForPrint();
654 }
655
656 void PrintPreviewHandler::ClearInitiatorTabDetails() {
657 TabContents* initiator_tab = GetInitiatorTab();
658 if (initiator_tab) {
659 RenderViewHost* rvh = initiator_tab->render_view_host();
660 rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id()));
661
662 // Remove initiator tab association with the preview tab.
663 printing::PrintPreviewTabController* tab_controller =
664 printing::PrintPreviewTabController::GetInstance();
665 if (tab_controller)
666 tab_controller->EraseInitiatorTabInfo(preview_tab());
667 }
668 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698