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

Side by Side Diff: chrome/browser/ui/browser.cc

Issue 8136027: Print Preview: Make print preview tab modal. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rebase, more fixes Created 9 years, 2 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
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/browser.h" 5 #include "chrome/browser/ui/browser.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #include <shellapi.h> 9 #include <shellapi.h>
10 #endif // OS_WIN 10 #endif // OS_WIN
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 #include "chrome/browser/instant/instant_unload_handler.h" 62 #include "chrome/browser/instant/instant_unload_handler.h"
63 #include "chrome/browser/intents/register_intent_handler_infobar_delegate.h" 63 #include "chrome/browser/intents/register_intent_handler_infobar_delegate.h"
64 #include "chrome/browser/intents/web_intents_registry_factory.h" 64 #include "chrome/browser/intents/web_intents_registry_factory.h"
65 #include "chrome/browser/net/browser_url_util.h" 65 #include "chrome/browser/net/browser_url_util.h"
66 #include "chrome/browser/net/url_fixer_upper.h" 66 #include "chrome/browser/net/url_fixer_upper.h"
67 #include "chrome/browser/notifications/notification_ui_manager.h" 67 #include "chrome/browser/notifications/notification_ui_manager.h"
68 #include "chrome/browser/platform_util.h" 68 #include "chrome/browser/platform_util.h"
69 #include "chrome/browser/prefs/incognito_mode_prefs.h" 69 #include "chrome/browser/prefs/incognito_mode_prefs.h"
70 #include "chrome/browser/prefs/pref_service.h" 70 #include "chrome/browser/prefs/pref_service.h"
71 #include "chrome/browser/prerender/prerender_tab_helper.h" 71 #include "chrome/browser/prerender/prerender_tab_helper.h"
72 #include "chrome/browser/printing/background_printing_manager.h"
73 #include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h" 72 #include "chrome/browser/printing/cloud_print/cloud_print_setup_flow.h"
74 #include "chrome/browser/printing/print_preview_tab_controller.h" 73 #include "chrome/browser/printing/print_preview_tab_controller.h"
75 #include "chrome/browser/printing/print_view_manager.h" 74 #include "chrome/browser/printing/print_view_manager.h"
76 #include "chrome/browser/profiles/profile.h" 75 #include "chrome/browser/profiles/profile.h"
77 #include "chrome/browser/sessions/restore_tab_helper.h" 76 #include "chrome/browser/sessions/restore_tab_helper.h"
78 #include "chrome/browser/sessions/session_service.h" 77 #include "chrome/browser/sessions/session_service.h"
79 #include "chrome/browser/sessions/session_service_factory.h" 78 #include "chrome/browser/sessions/session_service_factory.h"
80 #include "chrome/browser/sessions/session_types.h" 79 #include "chrome/browser/sessions/session_types.h"
81 #include "chrome/browser/sessions/tab_restore_service.h" 80 #include "chrome/browser/sessions/tab_restore_service.h"
82 #include "chrome/browser/sessions/tab_restore_service_factory.h" 81 #include "chrome/browser/sessions/tab_restore_service_factory.h"
(...skipping 3358 matching lines...) Expand 10 before | Expand all | Expand 10 after
3441 void Browser::CloseContents(TabContents* source) { 3440 void Browser::CloseContents(TabContents* source) {
3442 if (is_attempting_to_close_browser_) { 3441 if (is_attempting_to_close_browser_) {
3443 // If we're trying to close the browser, just clear the state related to 3442 // If we're trying to close the browser, just clear the state related to
3444 // waiting for unload to fire. Don't actually try to close the tab as it 3443 // waiting for unload to fire. Don't actually try to close the tab as it
3445 // will go down the slow shutdown path instead of the fast path of killing 3444 // will go down the slow shutdown path instead of the fast path of killing
3446 // all the renderer processes. 3445 // all the renderer processes.
3447 ClearUnloadState(source, true); 3446 ClearUnloadState(source, true);
3448 return; 3447 return;
3449 } 3448 }
3450 3449
3451 // Various sites have a pattern which open a new window with output formatted
3452 // for printing, then include a print button, which does window.print();
3453 // window.close(); An example is printing Virgin America boarding
3454 // pass. Instead of closing, when a print tab is associated with this tab,
3455 // tell the BackgroundPrintingManager to own it, which causes it to be
3456 // hidden and eventually closed when the print window is closed.
3457 TabContentsWrapper* source_wrapper =
3458 TabContentsWrapper::GetCurrentWrapperForContents(source);
3459 if (g_browser_process->background_printing_manager()->
3460 OwnInitiatorTab(source_wrapper)) {
3461 return;
3462 }
3463
3464 int index = tab_handler_->GetTabStripModel()->GetWrapperIndex(source); 3450 int index = tab_handler_->GetTabStripModel()->GetWrapperIndex(source);
3465 if (index == TabStripModel::kNoTab) { 3451 if (index == TabStripModel::kNoTab) {
3466 NOTREACHED() << "CloseContents called for tab not in our strip"; 3452 NOTREACHED() << "CloseContents called for tab not in our strip";
3467 return; 3453 return;
3468 } 3454 }
3469 tab_handler_->GetTabStripModel()->CloseTabContentsAt( 3455 tab_handler_->GetTabStripModel()->CloseTabContentsAt(
3470 index, 3456 index,
3471 TabStripModel::CLOSE_CREATE_HISTORICAL_TAB); 3457 TabStripModel::CLOSE_CREATE_HISTORICAL_TAB);
3472 } 3458 }
3473 3459
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
3724 NavigationType::Type navigation_type) { 3710 NavigationType::Type navigation_type) {
3725 // Don't update history if running as app. 3711 // Don't update history if running as app.
3726 return !IsApplication(); 3712 return !IsApplication();
3727 } 3713 }
3728 3714
3729 void Browser::ContentRestrictionsChanged(TabContents* source) { 3715 void Browser::ContentRestrictionsChanged(TabContents* source) {
3730 UpdateCommandsForContentRestrictionState(); 3716 UpdateCommandsForContentRestrictionState();
3731 } 3717 }
3732 3718
3733 void Browser::RendererUnresponsive(TabContents* source) { 3719 void Browser::RendererUnresponsive(TabContents* source) {
3720 // Ignore hangs if print preview is open.
3721 TabContentsWrapper* source_wrapper =
3722 TabContentsWrapper::GetCurrentWrapperForContents(source);
3723 if (source_wrapper) {
3724 printing::PrintPreviewTabController* controller =
3725 printing::PrintPreviewTabController::GetInstance();
3726 if (controller) {
3727 TabContentsWrapper* preview_tab =
3728 controller->GetPrintPreviewForTab(source_wrapper);
3729 if (preview_tab && preview_tab != source_wrapper) {
3730 return;
3731 }
3732 }
3733 }
3734
3734 browser::ShowHungRendererDialog(source); 3735 browser::ShowHungRendererDialog(source);
3735 } 3736 }
3736 3737
3737 void Browser::RendererResponsive(TabContents* source) { 3738 void Browser::RendererResponsive(TabContents* source) {
3738 browser::HideHungRendererDialog(source); 3739 browser::HideHungRendererDialog(source);
3739 } 3740 }
3740 3741
3741 void Browser::WorkerCrashed(TabContents* source) { 3742 void Browser::WorkerCrashed(TabContents* source) {
3742 TabContentsWrapper* wrapper = 3743 TabContentsWrapper* wrapper =
3743 TabContentsWrapper::GetCurrentWrapperForContents(source); 3744 TabContentsWrapper::GetCurrentWrapperForContents(source);
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after
4491 IDC_COPY, !(restrictions & CONTENT_RESTRICTION_COPY)); 4492 IDC_COPY, !(restrictions & CONTENT_RESTRICTION_COPY));
4492 command_updater_.UpdateCommandEnabled( 4493 command_updater_.UpdateCommandEnabled(
4493 IDC_CUT, !(restrictions & CONTENT_RESTRICTION_CUT)); 4494 IDC_CUT, !(restrictions & CONTENT_RESTRICTION_CUT));
4494 command_updater_.UpdateCommandEnabled( 4495 command_updater_.UpdateCommandEnabled(
4495 IDC_PASTE, !(restrictions & CONTENT_RESTRICTION_PASTE)); 4496 IDC_PASTE, !(restrictions & CONTENT_RESTRICTION_PASTE));
4496 UpdateSaveAsState(restrictions); 4497 UpdateSaveAsState(restrictions);
4497 UpdatePrintingState(restrictions); 4498 UpdatePrintingState(restrictions);
4498 } 4499 }
4499 4500
4500 void Browser::UpdatePrintingState(int content_restrictions) { 4501 void Browser::UpdatePrintingState(int content_restrictions) {
4501 bool enabled = true; 4502 bool print_enabled = true;
4502 bool selected_tab_is_preview_tab = false; 4503 bool advanced_print_enabled = true;
4503 if (content_restrictions & CONTENT_RESTRICTION_PRINT) { 4504 if (g_browser_process->local_state()) {
4504 enabled = false; 4505 print_enabled =
4505 selected_tab_is_preview_tab = 4506 g_browser_process->local_state()->GetBoolean(prefs::kPrintingEnabled);
4506 printing::PrintPreviewTabController::IsPrintPreviewTab( 4507 advanced_print_enabled = print_enabled;
4507 GetSelectedTabContentsWrapper());
4508 } else if (g_browser_process->local_state()) {
4509 enabled = g_browser_process->local_state()->
4510 GetBoolean(prefs::kPrintingEnabled);
4511 } 4508 }
4512 command_updater_.UpdateCommandEnabled(IDC_PRINT, enabled); 4509 if (print_enabled) {
4510 // Cannot print when a constrained window is showing because print preview
4511 // is also a constrained window.
4512 TabContentsWrapper* wrapper = GetSelectedTabContentsWrapper();
4513 bool has_constrained_window = (wrapper &&
4514 wrapper->constrained_window_tab_helper()->constrained_window_count());
4515 if (has_constrained_window ||
4516 content_restrictions & CONTENT_RESTRICTION_PRINT) {
4517 print_enabled = false;
4518 advanced_print_enabled = false;
4519 }
4520 printing::PrintPreviewTabController* controller =
4521 printing::PrintPreviewTabController::GetInstance();
4522 if (controller &&
4523 controller->GetPrintPreviewForTab(GetSelectedTabContentsWrapper())) {
4524 advanced_print_enabled = true;
4525 }
4526 }
4527 command_updater_.UpdateCommandEnabled(IDC_PRINT, print_enabled);
4513 command_updater_.UpdateCommandEnabled(IDC_ADVANCED_PRINT, 4528 command_updater_.UpdateCommandEnabled(IDC_ADVANCED_PRINT,
4514 selected_tab_is_preview_tab ? true : 4529 advanced_print_enabled);
4515 enabled);
4516 } 4530 }
4517 4531
4518 void Browser::UpdateReloadStopState(bool is_loading, bool force) { 4532 void Browser::UpdateReloadStopState(bool is_loading, bool force) {
4519 window_->UpdateReloadStopState(is_loading, force); 4533 window_->UpdateReloadStopState(is_loading, force);
4520 command_updater_.UpdateCommandEnabled(IDC_STOP, is_loading); 4534 command_updater_.UpdateCommandEnabled(IDC_STOP, is_loading);
4521 } 4535 }
4522 4536
4523 void Browser::UpdateCommandsForDevTools() { 4537 void Browser::UpdateCommandsForDevTools() {
4524 bool dev_tools_enabled = 4538 bool dev_tools_enabled =
4525 !profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled); 4539 !profile_->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled);
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after
5287 window_->GetLocationBar()->ShowFirstRunBubble(bubble_type); 5301 window_->GetLocationBar()->ShowFirstRunBubble(bubble_type);
5288 } else if (is_type_tabbed()) { 5302 } else if (is_type_tabbed()) {
5289 GlobalErrorService* service = 5303 GlobalErrorService* service =
5290 GlobalErrorServiceFactory::GetForProfile(profile()); 5304 GlobalErrorServiceFactory::GetForProfile(profile());
5291 GlobalError* error = service->GetFirstGlobalErrorWithBubbleView(); 5305 GlobalError* error = service->GetFirstGlobalErrorWithBubbleView();
5292 if (error) { 5306 if (error) {
5293 error->ShowBubbleView(this); 5307 error->ShowBubbleView(this);
5294 } 5308 }
5295 } 5309 }
5296 } 5310 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698