Index: chrome/browser/ui/browser.cc |
=================================================================== |
--- chrome/browser/ui/browser.cc (revision 105275) |
+++ chrome/browser/ui/browser.cc (working copy) |
@@ -69,7 +69,6 @@ |
#include "chrome/browser/prefs/incognito_mode_prefs.h" |
#include "chrome/browser/prefs/pref_service.h" |
#include "chrome/browser/prerender/prerender_tab_helper.h" |
-#include "chrome/browser/printing/background_printing_manager.h" |
#include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h" |
#include "chrome/browser/printing/print_preview_tab_controller.h" |
#include "chrome/browser/printing/print_view_manager.h" |
@@ -3448,19 +3447,6 @@ |
return; |
} |
- // Various sites have a pattern which open a new window with output formatted |
- // for printing, then include a print button, which does window.print(); |
- // window.close(); An example is printing Virgin America boarding |
- // pass. Instead of closing, when a print tab is associated with this tab, |
- // tell the BackgroundPrintingManager to own it, which causes it to be |
- // hidden and eventually closed when the print window is closed. |
- TabContentsWrapper* source_wrapper = |
- TabContentsWrapper::GetCurrentWrapperForContents(source); |
- if (g_browser_process->background_printing_manager()-> |
- OwnInitiatorTab(source_wrapper)) { |
- return; |
- } |
- |
int index = tab_handler_->GetTabStripModel()->GetWrapperIndex(source); |
if (index == TabStripModel::kNoTab) { |
NOTREACHED() << "CloseContents called for tab not in our strip"; |
@@ -3731,6 +3717,21 @@ |
} |
void Browser::RendererUnresponsive(TabContents* source) { |
+ // Ignore hangs if print preview is open. |
+ TabContentsWrapper* source_wrapper = |
+ TabContentsWrapper::GetCurrentWrapperForContents(source); |
+ if (source_wrapper) { |
+ printing::PrintPreviewTabController* controller = |
+ printing::PrintPreviewTabController::GetInstance(); |
+ if (controller) { |
+ TabContentsWrapper* preview_tab = |
+ controller->GetPrintPreviewForTab(source_wrapper); |
+ if (preview_tab && preview_tab != source_wrapper) { |
+ return; |
+ } |
+ } |
+ } |
+ |
browser::ShowHungRendererDialog(source); |
} |
@@ -4498,21 +4499,34 @@ |
} |
void Browser::UpdatePrintingState(int content_restrictions) { |
- bool enabled = true; |
- bool selected_tab_is_preview_tab = false; |
- if (content_restrictions & CONTENT_RESTRICTION_PRINT) { |
- enabled = false; |
- selected_tab_is_preview_tab = |
- printing::PrintPreviewTabController::IsPrintPreviewTab( |
- GetSelectedTabContentsWrapper()); |
- } else if (g_browser_process->local_state()) { |
- enabled = g_browser_process->local_state()-> |
- GetBoolean(prefs::kPrintingEnabled); |
+ bool print_enabled = true; |
+ bool advanced_print_enabled = true; |
+ if (g_browser_process->local_state()) { |
+ print_enabled = |
+ g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled); |
+ advanced_print_enabled = print_enabled; |
} |
- command_updater_.UpdateCommandEnabled(IDC_PRINT, enabled); |
+ if (print_enabled) { |
+ // Cannot print when a constrained window is showing because print preview |
+ // is also a constrained window. |
+ TabContentsWrapper* wrapper = GetSelectedTabContentsWrapper(); |
+ bool has_constrained_window = (wrapper && |
+ wrapper->constrained_window_tab_helper()->constrained_window_count()); |
+ if (has_constrained_window || |
+ content_restrictions & CONTENT_RESTRICTION_PRINT) { |
+ print_enabled = false; |
+ advanced_print_enabled = false; |
+ } |
+ printing::PrintPreviewTabController* controller = |
+ printing::PrintPreviewTabController::GetInstance(); |
+ if (controller && |
+ controller->GetPrintPreviewForTab(GetSelectedTabContentsWrapper())) { |
+ advanced_print_enabled = true; |
+ } |
+ } |
+ command_updater_.UpdateCommandEnabled(IDC_PRINT, print_enabled); |
command_updater_.UpdateCommandEnabled(IDC_ADVANCED_PRINT, |
- selected_tab_is_preview_tab ? true : |
- enabled); |
+ advanced_print_enabled); |
} |
void Browser::UpdateReloadStopState(bool is_loading, bool force) { |