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

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
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698