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

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

Issue 17500003: Close web contents modal dialogs on content load start (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Don't observe nav committed for initiator tab Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/printing/print_preview_dialog_controller.cc
diff --git a/chrome/browser/printing/print_preview_dialog_controller.cc b/chrome/browser/printing/print_preview_dialog_controller.cc
index b9413a0f7cee7f60dc6784884c23ffe8f572b8e8..6a71e2acd72df7f78f73e1fc49ea31608728dc47 100644
--- a/chrome/browser/printing/print_preview_dialog_controller.cc
+++ b/chrome/browser/printing/print_preview_dialog_controller.cc
@@ -303,7 +303,7 @@ void PrintPreviewDialogController::EraseInitiatorTabInfo(
if (it == preview_dialog_map_.end())
return;
- RemoveObservers(it->second);
+ RemoveObservers(it->second, INITIATOR_TAB);
preview_dialog_map_[preview_dialog] = NULL;
}
@@ -361,35 +361,33 @@ void PrintPreviewDialogController::OnNavEntryCommitted(
return;
}
- if (contents == preview_dialog) {
- // Preview dialog navigated.
- if (details) {
- content::PageTransition transition_type =
- details->entry->GetTransitionType();
- content::NavigationType nav_type = details->type;
-
- // New |preview_dialog| is created. Don't update/erase map entry.
- if (waiting_for_new_preview_page_ &&
- transition_type == content::PAGE_TRANSITION_AUTO_TOPLEVEL &&
- nav_type == content::NAVIGATION_TYPE_NEW_PAGE) {
- waiting_for_new_preview_page_ = false;
- SaveInitiatorTabTitle(preview_dialog);
- return;
- }
-
- // Cloud print sign-in causes a reload.
- if (!waiting_for_new_preview_page_ &&
- transition_type == content::PAGE_TRANSITION_RELOAD &&
- nav_type == content::NAVIGATION_TYPE_EXISTING_PAGE &&
- IsPrintPreviewURL(details->previous_url)) {
- return;
- }
+ DCHECK(contents == preview_dialog);
Lei Zhang 2013/06/27 21:36:18 nit: DCHECK_EQ(preview_dialog, content);
Mike Wittman 2013/06/27 23:39:38 Done.
+
+ // Preview dialog navigated.
+ if (details) {
+ content::PageTransition transition_type =
+ details->entry->GetTransitionType();
+ content::NavigationType nav_type = details->type;
+
+ // New |preview_dialog| is created. Don't update/erase map entry.
+ if (waiting_for_new_preview_page_ &&
+ transition_type == content::PAGE_TRANSITION_AUTO_TOPLEVEL &&
+ nav_type == content::NAVIGATION_TYPE_NEW_PAGE) {
+ waiting_for_new_preview_page_ = false;
+ SaveInitiatorTabTitle(preview_dialog);
+ return;
+ }
+
+ // Cloud print sign-in causes a reload.
+ if (!waiting_for_new_preview_page_ &&
+ transition_type == content::PAGE_TRANSITION_RELOAD &&
+ nav_type == content::NAVIGATION_TYPE_EXISTING_PAGE &&
+ IsPrintPreviewURL(details->previous_url)) {
+ return;
}
- NOTREACHED();
- return;
}
- RemoveInitiatorTab(contents);
+ NOTREACHED();
}
WebContents* PrintPreviewDialogController::CreatePrintPreviewDialog(
@@ -429,8 +427,8 @@ WebContents* PrintPreviewDialogController::CreatePrintPreviewDialog(
preview_dialog_map_[preview_dialog] = initiator_tab;
waiting_for_new_preview_page_ = true;
- AddObservers(initiator_tab);
- AddObservers(preview_dialog);
+ AddObservers(initiator_tab, INITIATOR_TAB);
+ AddObservers(preview_dialog, PREVIEW_TAB);
return preview_dialog;
}
@@ -446,11 +444,14 @@ void PrintPreviewDialogController::SaveInitiatorTabTitle(
}
}
-void PrintPreviewDialogController::AddObservers(WebContents* contents) {
+void PrintPreviewDialogController::AddObservers(WebContents* contents,
+ TabType tab_type) {
registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
content::Source<WebContents>(contents));
- registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
- content::Source<NavigationController>(&contents->GetController()));
+ if (tab_type == PREVIEW_TAB) {
+ registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+ content::Source<NavigationController>(&contents->GetController()));
+ }
// Multiple sites may share the same RenderProcessHost, so check if this
// notification has already been added.
@@ -463,11 +464,14 @@ void PrintPreviewDialogController::AddObservers(WebContents* contents) {
}
}
-void PrintPreviewDialogController::RemoveObservers(WebContents* contents) {
+void PrintPreviewDialogController::RemoveObservers(WebContents* contents,
+ TabType tab_type) {
registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED,
content::Source<WebContents>(contents));
- registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
- content::Source<NavigationController>(&contents->GetController()));
+ if (tab_type == PREVIEW_TAB) {
+ registrar_.Remove(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+ content::Source<NavigationController>(&contents->GetController()));
+ }
// Multiple sites may share the same RenderProcessHost, so check if this
// notification has already been added.
@@ -488,7 +492,7 @@ void PrintPreviewDialogController::RemoveInitiatorTab(
// and reaches RemovePreviewDialog(), it does not attempt to also remove the
// initiator tab's observers.
preview_dialog_map_[preview_dialog] = NULL;
- RemoveObservers(initiator_tab);
+ RemoveObservers(initiator_tab, INITIATOR_TAB);
PrintViewManager::FromWebContents(initiator_tab)->PrintPreviewDone();
@@ -504,7 +508,7 @@ void PrintPreviewDialogController::RemovePreviewDialog(
// Remove the initiator tab's observers before erasing the mapping.
WebContents* initiator_tab = GetInitiatorTab(preview_dialog);
if (initiator_tab) {
- RemoveObservers(initiator_tab);
+ RemoveObservers(initiator_tab, INITIATOR_TAB);
PrintViewManager::FromWebContents(initiator_tab)->PrintPreviewDone();
}
@@ -516,7 +520,7 @@ void PrintPreviewDialogController::RemovePreviewDialog(
print_preview_ui->OnPrintPreviewDialogDestroyed();
preview_dialog_map_.erase(preview_dialog);
- RemoveObservers(preview_dialog);
+ RemoveObservers(preview_dialog, PREVIEW_TAB);
}
} // namespace printing

Powered by Google App Engine
This is Rietveld 408576698