Index: chrome/browser/ui/webui/print_preview_handler.cc |
diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc |
index 70b2b48f1db514d31e5a042a8150db22bdbbee74..35f0538afa3bf9d4fac2a96d526ba74fea298425 100644 |
--- a/chrome/browser/ui/webui/print_preview_handler.cc |
+++ b/chrome/browser/ui/webui/print_preview_handler.cc |
@@ -370,6 +370,8 @@ void PrintPreviewHandler::RegisterMessages() { |
NewCallback(this, &PrintPreviewHandler::HandleManagePrinters)); |
web_ui_->RegisterMessageCallback("closePrintPreviewTab", |
NewCallback(this, &PrintPreviewHandler::HandleClosePreviewTab)); |
+ web_ui_->RegisterMessageCallback("hidePreview", |
+ NewCallback(this, &PrintPreviewHandler::HandleHidePreview)); |
} |
TabContents* PrintPreviewHandler::preview_tab() { |
@@ -430,12 +432,6 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforePrint", |
regenerate_preview_request_count_); |
- TabContents* initiator_tab = GetInitiatorTab(); |
- if (initiator_tab) { |
- RenderViewHost* rvh = initiator_tab->render_view_host(); |
- rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); |
- } |
- |
scoped_ptr<DictionaryValue> settings(GetSettingsDictionary(args)); |
if (!settings.get()) |
return; |
@@ -468,12 +464,13 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
SelectFile(default_filename); |
} else { |
+ ClearInitiatorTabDetails(); |
ReportPrintSettingsStats(*settings); |
ReportUserActionHistogram(PRINT_TO_PRINTER); |
UMA_HISTOGRAM_COUNTS("PrintPreview.PageCount.PrintToPrinter", |
GetPageCountFromSettingsDictionary(*settings)); |
- g_browser_process->background_printing_manager()->OwnTabContents( |
- preview_tab_wrapper); |
+ |
+ HidePreviewTab(); |
// The PDF being printed contains only the pages that the user selected, |
// so ignore the page range and print all pages. |
@@ -483,6 +480,10 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
} |
} |
+void PrintPreviewHandler::HandleHidePreview(const ListValue* args) { |
+ HidePreviewTab(); |
+} |
+ |
void PrintPreviewHandler::HandleGetPrinterCapabilities( |
const ListValue* args) { |
std::string printer_name; |
@@ -638,3 +639,29 @@ void PrintPreviewHandler::FileSelected(const FilePath& path, |
ActivateInitiatorTabAndClosePreviewTab(); |
} |
+ |
+void PrintPreviewHandler::HidePreviewTab() { |
+ PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_); |
+ if (print_preview_ui->isHidden()) |
+ return; |
+ |
+ TabContentsWrapper* preview_tab_wrapper = |
+ TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
+ g_browser_process->background_printing_manager()->OwnTabContents( |
+ preview_tab_wrapper); |
+ print_preview_ui->setTabHiddenForPrint(); |
+} |
+ |
+void PrintPreviewHandler::ClearInitiatorTabDetails() { |
+ TabContents* initiator_tab = GetInitiatorTab(); |
+ if (initiator_tab) { |
+ RenderViewHost* rvh = initiator_tab->render_view_host(); |
+ rvh->Send(new PrintMsg_ResetScriptedPrintCount(rvh->routing_id())); |
+ |
+ // Remove initiator tab association with the preview tab. |
+ printing::PrintPreviewTabController* tab_controller = |
+ printing::PrintPreviewTabController::GetInstance(); |
+ if (tab_controller) |
+ tab_controller->EraseInitiatorTabInfo(preview_tab()); |
+ } |
+} |