Index: chrome/browser/ui/browser.cc |
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc |
index db19aee5d85607283b8c7f1bf17e173b15e94a7a..35a16dabf3b0501cd83ea7c90567edfc295a58bb 100644 |
--- a/chrome/browser/ui/browser.cc |
+++ b/chrome/browser/ui/browser.cc |
@@ -152,6 +152,7 @@ |
#include "components/bookmarks/browser/bookmark_utils.h" |
#include "components/google/core/browser/google_url_tracker.h" |
#include "components/startup_metric_utils/startup_metric_utils.h" |
+#include "components/web_modal/popup_manager.h" |
#include "components/web_modal/web_contents_modal_dialog_manager.h" |
#include "content/public/browser/devtools_manager.h" |
#include "content/public/browser/download_item.h" |
@@ -444,6 +445,12 @@ Browser::Browser(const CreateParams& params) |
} |
fullscreen_controller_.reset(new FullscreenController(this)); |
+ |
+ // Must be initialized after window_. |
+ // This would DCHECK on presence of the dialog host but tests |
+ // may not implement, and currently Cocoa does not either. |
Peter Kasting
2014/07/08 19:13:54
Nit: I completely fail to understand this second s
Greg Billock
2014/07/09 19:28:12
I can remove it if its puzzling. I found a DCHECK
Peter Kasting
2014/07/09 19:41:41
I'm not sure you need to remove the comment, but i
Greg Billock
2014/07/10 18:32:03
Done.
|
+ popup_manager_.reset(new web_modal::PopupManager( |
+ GetWebContentsModalDialogHost())); |
} |
Browser::~Browser() { |
@@ -892,6 +899,10 @@ void Browser::TabInsertedAt(WebContents* contents, |
int index, |
bool foreground) { |
SetAsDelegate(contents, true); |
+ |
+ if (popup_manager_.get()) |
Peter Kasting
2014/07/08 19:13:54
Nit: Remove get() (not necessary to NULL-check a s
Greg Billock
2014/07/09 19:28:12
Done.
|
+ popup_manager_->RegisterWith(contents); |
+ |
SessionTabHelper* session_tab_helper = |
SessionTabHelper::FromWebContents(contents); |
session_tab_helper->SetWindowID(session_id()); |
@@ -933,6 +944,9 @@ void Browser::TabClosingAt(TabStripModel* tab_strip_model, |
content::Source<NavigationController>(&contents->GetController()), |
content::NotificationService::NoDetails()); |
+ if (popup_manager_.get()) |
+ popup_manager_->UnregisterWith(contents); |
+ |
// Sever the WebContents' connection back to us. |
SetAsDelegate(contents, false); |
} |
@@ -948,6 +962,10 @@ void Browser::TabDetachedAt(WebContents* contents, int index) { |
session_service->SetSelectedTabInWindow(session_id(), |
old_active_index - 1); |
} |
+ |
+ if (popup_manager_.get()) |
+ popup_manager_->UnregisterWith(contents); |
+ |
TabDetachedAtImpl(contents, index, DETACH_TYPE_DETACH); |
} |