Index: chrome/browser/printing/print_preview_tab_controller.cc |
diff --git a/chrome/browser/printing/print_preview_tab_controller.cc b/chrome/browser/printing/print_preview_tab_controller.cc |
index ba6696a977b2a3fb5f8c2831ccec28c78793c48f..9f542dd3fe8db66c91c3c72bfe6700c7325c8db7 100644 |
--- a/chrome/browser/printing/print_preview_tab_controller.cc |
+++ b/chrome/browser/printing/print_preview_tab_controller.cc |
@@ -252,7 +252,7 @@ void PrintPreviewTabController::OnRendererProcessClosed( |
} |
for (size_t i = 0; i < closed_initiator_tabs.size(); ++i) |
- RemoveInitiatorTab(closed_initiator_tabs[i]); |
+ RemoveInitiatorTab(closed_initiator_tabs[i], false); |
} |
void PrintPreviewTabController::OnTabContentsDestroyed( |
@@ -266,7 +266,7 @@ void PrintPreviewTabController::OnTabContentsDestroyed( |
if (tab == preview_tab) |
RemovePreviewTab(tab); |
else |
- RemoveInitiatorTab(tab); |
+ RemoveInitiatorTab(tab, false); |
} |
void PrintPreviewTabController::OnNavEntryCommitted( |
@@ -310,7 +310,7 @@ void PrintPreviewTabController::OnNavEntryCommitted( |
} |
// Initiator tab navigated. |
- RemoveInitiatorTab(tab); |
+ RemoveInitiatorTab(tab, true); |
} |
// static |
@@ -436,7 +436,7 @@ void PrintPreviewTabController::RemoveObservers(TabContentsWrapper* tab) { |
} |
void PrintPreviewTabController::RemoveInitiatorTab( |
- TabContentsWrapper* initiator_tab) { |
+ TabContentsWrapper* initiator_tab, bool is_navigation) { |
TabContentsWrapper* preview_tab = GetPrintPreviewForTab(initiator_tab); |
DCHECK(preview_tab); |
// Update the map entry first, so when the print preview tab gets destroyed |
@@ -445,6 +445,11 @@ void PrintPreviewTabController::RemoveInitiatorTab( |
preview_tab_map_[preview_tab] = NULL; |
RemoveObservers(initiator_tab); |
+ // For the navigation case, PrintPreviewDone() has already been called in |
+ // PrintPreviewMessageHandler::NavigateToPendingEntry(). |
+ if (!is_navigation) |
+ initiator_tab->print_view_manager()->PrintPreviewDone(); |
+ |
// Initiator tab is closed. Close the print preview tab too. |
PrintPreviewUI* print_preview_ui = |
static_cast<PrintPreviewUI*>(preview_tab->web_ui()); |
@@ -456,8 +461,10 @@ void PrintPreviewTabController::RemovePreviewTab( |
TabContentsWrapper* preview_tab) { |
// Remove the initiator tab's observers before erasing the mapping. |
TabContentsWrapper* initiator_tab = GetInitiatorTab(preview_tab); |
- if (initiator_tab) |
+ if (initiator_tab) { |
RemoveObservers(initiator_tab); |
+ initiator_tab->print_view_manager()->PrintPreviewDone(); |
+ } |
// Print preview TabContents is destroyed. Notify |PrintPreviewUI| to abort |
// the initiator tab preview request. |