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

Unified Diff: chrome/browser/printing/print_preview_tab_controller.cc

Issue 8515017: Print Preview: Properly handle window.print(). (Closed)
Patch Set: fail instead of crash when 2 views both do window.print() Created 9 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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.

Powered by Google App Engine
This is Rietveld 408576698