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

Unified Diff: chrome/browser/printing/background_printing_manager.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/printing/background_printing_manager.cc
===================================================================
--- chrome/browser/printing/background_printing_manager.cc (revision 110058)
+++ chrome/browser/printing/background_printing_manager.cc (working copy)
@@ -66,6 +66,8 @@
content::Source<RenderProcessHost>(rph));
}
+ RemoveFromTabStrip(preview_tab);
+
// Activate the initiator tab.
PrintPreviewTabController* tab_controller =
PrintPreviewTabController::GetInstance();
@@ -79,6 +81,45 @@
initiator_tab->tab_contents())->Activate();
}
+bool BackgroundPrintingManager::OwnInitiatorTab(
+ TabContentsWrapper* initiator_tab) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!PrintPreviewTabController::IsPrintPreviewTab(initiator_tab));
+ bool has_initiator_tab = false;
+ for (TabContentsWrapperMap::iterator it = map_.begin(); it != map_.end();
+ ++it) {
+ if (it->second == initiator_tab) {
+ has_initiator_tab = true;
+ break;
+ }
+ }
+ CHECK(!has_initiator_tab);
+
+ PrintPreviewTabController* tab_controller =
+ PrintPreviewTabController::GetInstance();
+ if (!tab_controller)
+ return false;
+ TabContentsWrapper* preview_tab =
+ tab_controller->GetPrintPreviewForTab(initiator_tab);
+ if (!preview_tab)
+ return false;
+
+ map_[preview_tab] = initiator_tab;
+
+ // OwnPrintPreviewTab() may have already added this notification.
+ TabContents* preview_contents = preview_tab->tab_contents();
+ if (!registrar_.IsRegistered(
+ this,
+ content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
+ content::Source<TabContents>(preview_contents))) {
+ registrar_.Add(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
+ content::Source<TabContents>(preview_contents));
+ }
+
+ RemoveFromTabStrip(initiator_tab);
+ return true;
+}
+
void BackgroundPrintingManager::Observe(
int type,
const content::NotificationSource& source,
@@ -129,15 +170,26 @@
void BackgroundPrintingManager::OnTabContentsDestroyed(
TabContentsWrapper* preview_tab) {
+ bool is_owned_printing_tab = HasPrintPreviewTab(preview_tab);
+ bool is_preview_tab_for_owned_initator_tab =
+ (map_.find(preview_tab) != map_.end());
+ DCHECK(is_owned_printing_tab || is_preview_tab_for_owned_initator_tab);
+
// Always need to remove this notification since the tab is gone.
registrar_.Remove(this, content::NOTIFICATION_TAB_CONTENTS_DESTROYED,
content::Source<TabContents>(preview_tab->tab_contents()));
- if (!HasPrintPreviewTab(preview_tab)) {
- NOTREACHED();
- return;
+ // Delete the associated initiator tab if one exists.
+ if (is_preview_tab_for_owned_initator_tab) {
+ TabContentsWrapper* initiator_tab = map_[preview_tab];
+ map_.erase(preview_tab);
+ MessageLoop::current()->DeleteSoon(FROM_HERE, initiator_tab);
}
+ // If |preview_tab| is not owned, then we are done.
+ if (!is_owned_printing_tab)
+ return;
+
// Remove NOTIFICATION_RENDERER_PROCESS_CLOSED if |preview_tab| is the last
// TabContents associated with |rph|.
bool shared_rph = HasSharedRenderProcessHost(printing_tabs_, preview_tab) ||
@@ -160,6 +212,18 @@
}
}
+void BackgroundPrintingManager::RemoveFromTabStrip(TabContentsWrapper* tab) {
+ Browser* browser = BrowserList::FindBrowserWithID(
+ tab->restore_tab_helper()->window_id().id());
+ DCHECK(browser);
+
+ TabStripModel* tabstrip = browser->tabstrip_model();
+ int index = tabstrip->GetIndexOfTabContents(tab);
+ if (index == TabStripModel::kNoTab)
+ return;
+ tabstrip->DetachTabContentsAt(index);
+}
+
void BackgroundPrintingManager::DeletePreviewTab(TabContentsWrapper* tab) {
registrar_.Remove(this, chrome::NOTIFICATION_PRINT_JOB_RELEASED,
content::Source<TabContentsWrapper>(tab));
« no previous file with comments | « chrome/browser/printing/background_printing_manager.h ('k') | chrome/browser/printing/print_preview_message_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698