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

Unified Diff: chrome/browser/ui/webui/print_preview_handler.cc

Issue 8564044: Revert 110056 - Print Preview: Make print preview tab modal. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: 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/ui/webui/print_preview_handler.cc
===================================================================
--- chrome/browser/ui/webui/print_preview_handler.cc (revision 110058)
+++ chrome/browser/ui/webui/print_preview_handler.cc (working copy)
@@ -25,6 +25,7 @@
#include "chrome/browser/browser_process.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/browser/printing/background_printing_manager.h"
#include "chrome/browser/printing/cloud_print/cloud_print_url.h"
#include "chrome/browser/printing/print_dialog_cloud.h"
#include "chrome/browser/printing/print_job_manager.h"
@@ -33,6 +34,8 @@
#include "chrome/browser/printing/print_view_manager.h"
#include "chrome/browser/printing/printer_manager_dialog.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/sessions/restore_tab_helper.h"
+#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/browser/ui/webui/cloud_print_signin_dialog.h"
@@ -67,7 +70,7 @@
FALLBACK_TO_ADVANCED_SETTINGS_DIALOG,
PREVIEW_FAILED,
PREVIEW_STARTED,
- INITIATOR_TAB_CRASHED, // UNUSED
+ INITIATOR_TAB_CRASHED,
INITIATOR_TAB_CLOSED,
PRINT_WITH_CLOUD_PRINT,
USERACTION_BUCKET_BOUNDARY
@@ -173,6 +176,10 @@
}
}
+printing::BackgroundPrintingManager* GetBackgroundPrintingManager() {
+ return g_browser_process->background_printing_manager();
+}
+
} // namespace
// A Task implementation that stores a PDF file on disk.
@@ -253,6 +260,9 @@
web_ui_->RegisterMessageCallback("manageLocalPrinters",
base::Bind(&PrintPreviewHandler::HandleManagePrinters,
base::Unretained(this)));
+ web_ui_->RegisterMessageCallback("reloadCrashedInitiatorTab",
+ base::Bind(&PrintPreviewHandler::HandleReloadCrashedInitiatorTab,
+ base::Unretained(this)));
web_ui_->RegisterMessageCallback("closePrintPreviewTab",
base::Bind(&PrintPreviewHandler::HandleClosePreviewTab,
base::Unretained(this)));
@@ -312,7 +322,7 @@
TabContentsWrapper* initiator_tab = GetInitiatorTab();
if (!initiator_tab) {
ReportUserActionHistogram(INITIATOR_TAB_CLOSED);
- print_preview_ui->OnClosePrintPreviewTab();
+ print_preview_ui->OnInitiatorTabClosed();
return;
}
@@ -422,8 +432,7 @@
// This tries to activate the initiator tab as well, so do not clear the
// association with the initiator tab yet.
- PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
- print_preview_ui->OnHidePreviewTab();
+ HidePreviewTab();
// Do this so the initiator tab can open a new print preview tab.
ClearInitiatorTabDetails();
@@ -467,8 +476,7 @@
}
void PrintPreviewHandler::HandleHidePreview(const ListValue* /*args*/) {
- PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
- print_preview_ui->OnHidePreviewTab();
+ HidePreviewTab();
}
void PrintPreviewHandler::HandleCancelPendingPrintRequest(
@@ -579,6 +587,21 @@
printing::PrinterManagerDialog::ShowPrinterManagerDialog();
}
+void PrintPreviewHandler::HandleReloadCrashedInitiatorTab(
+ const ListValue* /*args*/) {
+ ReportStats();
+ ReportUserActionHistogram(INITIATOR_TAB_CRASHED);
+
+ TabContentsWrapper* initiator_tab = GetInitiatorTab();
+ if (!initiator_tab)
+ return;
+
+ TabContents* contents = initiator_tab->tab_contents();
+ contents->OpenURL(contents->GetURL(), GURL(), CURRENT_TAB,
+ content::PAGE_TRANSITION_RELOAD);
+ ActivateInitiatorTabAndClosePreviewTab();
+}
+
void PrintPreviewHandler::HandleClosePreviewTab(const ListValue* /*args*/) {
ReportStats();
ReportUserActionHistogram(CANCEL);
@@ -587,6 +610,8 @@
// before cancelling.
UMA_HISTOGRAM_COUNTS("PrintPreview.RegeneratePreviewRequest.BeforeCancel",
regenerate_preview_request_count_);
+
+ ActivateInitiatorTabAndClosePreviewTab();
}
void PrintPreviewHandler::ReportStats() {
@@ -663,8 +688,7 @@
static_cast<RenderViewHostDelegate*>(
initiator_tab->tab_contents())->Activate();
}
- PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(web_ui_);
- print_preview_ui->OnClosePrintPreviewTab();
+ ClosePrintPreviewTab();
}
void PrintPreviewHandler::SendPrinterCapabilities(
@@ -703,7 +727,7 @@
std::string print_job_title = UTF16ToUTF8(print_job_title_utf16);
std::string printer_id;
settings.GetString(printing::kSettingCloudPrintId, &printer_id);
- // BASE64 encode the job data.
+// BASE64 encode the job data.
std::string raw_data(reinterpret_cast<const char*>(data->front()),
data->size());
std::string base64_data;
@@ -725,8 +749,8 @@
"data:application/pdf;base64,%s\r\n"
"--%s\r\n";
- // TODO(abodenha@chromium.org) This implies a large copy operation.
- // Profile this and optimize if necessary.
+// TODO(abodenha@chromium.org) This implies a large copy operation.
+// Profile this and optimize if necessary.
std::string final_data;
base::SStringPrintf(&final_data,
prolog,
@@ -755,6 +779,25 @@
return tab_controller->GetInitiatorTab(preview_tab_wrapper());
}
+void PrintPreviewHandler::ClosePrintPreviewTab() {
+ TabContentsWrapper* tab =
+ TabContentsWrapper::GetCurrentWrapperForContents(preview_tab());
+ if (!tab)
+ return;
+ Browser* preview_tab_browser = BrowserList::FindBrowserWithID(
+ tab->restore_tab_helper()->window_id().id());
+ if (!preview_tab_browser)
+ return;
+ TabStripModel* tabstrip = preview_tab_browser->tabstrip_model();
+ int index = tabstrip->GetIndexOfTabContents(tab);
+ if (index == TabStripModel::kNoTab)
+ return;
+
+ // Keep print preview tab out of the recently closed tab list, because
+ // re-opening that page will just display a non-functional print preview page.
+ tabstrip->CloseTabContentsAt(index, TabStripModel::CLOSE_NONE);
+}
+
void PrintPreviewHandler::OnPrintDialogShown() {
ActivateInitiatorTabAndClosePreviewTab();
}
@@ -843,6 +886,12 @@
print_preview_ui->OnFileSelectionCancelled();
}
+void PrintPreviewHandler::HidePreviewTab() {
+ if (GetBackgroundPrintingManager()->HasPrintPreviewTab(preview_tab_wrapper()))
+ return;
+ GetBackgroundPrintingManager()->OwnPrintPreviewTab(preview_tab_wrapper());
+}
+
void PrintPreviewHandler::ClearInitiatorTabDetails() {
TabContentsWrapper* initiator_tab = GetInitiatorTab();
if (!initiator_tab)
« no previous file with comments | « chrome/browser/ui/webui/print_preview_handler.h ('k') | chrome/browser/ui/webui/print_preview_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698