summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/download/download_danger_prompt.cc7
-rw-r--r--chrome/browser/plugins/plugin_observer.cc3
-rw-r--r--chrome/browser/repost_form_warning_controller.cc3
-rw-r--r--chrome/browser/ui/browser_command_controller_browsertest.cc2
-rw-r--r--chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h3
-rw-r--r--chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm7
-rw-r--r--chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm3
-rw-r--r--chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc4
-rw-r--r--chrome/browser/ui/sync/one_click_signin_helper.cc3
-rw-r--r--chrome/browser/ui/tab_modal_confirm_dialog_browsertest.cc7
-rw-r--r--chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h3
-rw-r--r--chrome/browser/ui/tab_modal_confirm_dialog_delegate.cc23
-rw-r--r--chrome/browser/ui/tab_modal_confirm_dialog_delegate.h14
13 files changed, 54 insertions, 28 deletions
diff --git a/chrome/browser/download/download_danger_prompt.cc b/chrome/browser/download/download_danger_prompt.cc
index 09c1624..7368b0b 100644
--- a/chrome/browser/download/download_danger_prompt.cc
+++ b/chrome/browser/download/download_danger_prompt.cc
@@ -23,6 +23,7 @@ class DownloadDangerPromptImpl
public TabModalConfirmDialogDelegate {
public:
DownloadDangerPromptImpl(content::DownloadItem* item,
+ content::WebContents* web_contents,
bool show_context,
const OnDone& done);
virtual ~DownloadDangerPromptImpl();
@@ -52,9 +53,11 @@ class DownloadDangerPromptImpl
DownloadDangerPromptImpl::DownloadDangerPromptImpl(
content::DownloadItem* download,
+ content::WebContents* web_contents,
bool show_context,
const OnDone& done)
- : download_(download),
+ : TabModalConfirmDialogDelegate(web_contents),
+ download_(download),
show_context_(show_context),
done_(done) {
DCHECK(!done_.is_null());
@@ -162,7 +165,7 @@ DownloadDangerPrompt* DownloadDangerPrompt::Create(
bool show_context,
const OnDone& done) {
DownloadDangerPromptImpl* prompt = new DownloadDangerPromptImpl(
- item, show_context, done);
+ item, web_contents, show_context, done);
// |prompt| will be deleted when the dialog is done.
TabModalConfirmDialog::Create(prompt, web_contents);
return prompt;
diff --git a/chrome/browser/plugins/plugin_observer.cc b/chrome/browser/plugins/plugin_observer.cc
index 7668168..19751e9 100644
--- a/chrome/browser/plugins/plugin_observer.cc
+++ b/chrome/browser/plugins/plugin_observer.cc
@@ -82,7 +82,8 @@ ConfirmInstallDialogDelegate::ConfirmInstallDialogDelegate(
content::WebContents* web_contents,
PluginInstaller* installer,
scoped_ptr<PluginMetadata> plugin_metadata)
- : WeakPluginInstallerObserver(installer),
+ : TabModalConfirmDialogDelegate(web_contents),
+ WeakPluginInstallerObserver(installer),
web_contents_(web_contents),
plugin_metadata_(plugin_metadata.Pass()) {
}
diff --git a/chrome/browser/repost_form_warning_controller.cc b/chrome/browser/repost_form_warning_controller.cc
index 517036a7..e665b29 100644
--- a/chrome/browser/repost_form_warning_controller.cc
+++ b/chrome/browser/repost_form_warning_controller.cc
@@ -15,7 +15,8 @@
RepostFormWarningController::RepostFormWarningController(
content::WebContents* web_contents)
- : content::WebContentsObserver(web_contents) {
+ : TabModalConfirmDialogDelegate(web_contents),
+ content::WebContentsObserver(web_contents) {
}
RepostFormWarningController::~RepostFormWarningController() {
diff --git a/chrome/browser/ui/browser_command_controller_browsertest.cc b/chrome/browser/ui/browser_command_controller_browsertest.cc
index 9710148..1f71986 100644
--- a/chrome/browser/ui/browser_command_controller_browsertest.cc
+++ b/chrome/browser/ui/browser_command_controller_browsertest.cc
@@ -22,7 +22,7 @@ IN_PROC_BROWSER_TEST_F(BrowserCommandControllerBrowserTest, DisableFind) {
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
MockTabModalConfirmDialogDelegate* delegate =
- new MockTabModalConfirmDialogDelegate(NULL);
+ new MockTabModalConfirmDialogDelegate(web_contents, NULL);
TabModalConfirmDialog::Create(delegate, web_contents);
EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FIND));
diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h
index 6651e69..d6f0715 100644
--- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h
+++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h
@@ -56,9 +56,6 @@ class ConstrainedWindowMac {
// This is true if the constrained window has been shown.
bool shown_;
-
- // This is true while the constrained window is closing.
- bool closing_;
};
#endif // CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_MAC_
diff --git a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
index a7cb5be..49d753f 100644
--- a/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
+++ b/chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm
@@ -25,8 +25,7 @@ ConstrainedWindowMac::ConstrainedWindowMac(
: delegate_(delegate),
web_contents_(web_contents),
sheet_([sheet retain]),
- shown_(false),
- closing_(false) {
+ shown_(false) {
DCHECK(web_contents);
DCHECK(sheet_.get());
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
@@ -55,10 +54,6 @@ void ConstrainedWindowMac::ShowWebContentsModalDialog() {
}
void ConstrainedWindowMac::CloseWebContentsModalDialog() {
- if (closing_)
- return;
-
- closing_ = true;
[[ConstrainedWindowSheetController controllerForSheet:sheet_]
closeSheet:sheet_];
WebContentsModalDialogManager* web_contents_modal_dialog_manager =
diff --git a/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm b/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm
index 6966adc..a006fe9 100644
--- a/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm
+++ b/chrome/browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm
@@ -112,8 +112,5 @@ void TabModalConfirmDialogMac::SetPreventCloseOnLoadStart(bool prevent) {
void TabModalConfirmDialogMac::OnConstrainedWindowClosed(
ConstrainedWindowMac* window) {
- // Provide a disposition in case the dialog was closed without accepting or
- // cancelling.
- delegate_->Cancel();
delete this;
}
diff --git a/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc b/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc
index 7f419a3..625b7c8 100644
--- a/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc
+++ b/chrome/browser/ui/gtk/tab_modal_confirm_dialog_gtk.cc
@@ -109,10 +109,6 @@ TabModalConfirmDialogGtk::TabModalConfirmDialogGtk(
}
TabModalConfirmDialogGtk::~TabModalConfirmDialogGtk() {
- // Provide a disposition in case the dialog was closed without accepting or
- // cancelling.
- delegate_->Cancel();
-
gtk_widget_destroy(dialog_);
}
diff --git a/chrome/browser/ui/sync/one_click_signin_helper.cc b/chrome/browser/ui/sync/one_click_signin_helper.cc
index 22f1299..5573022 100644
--- a/chrome/browser/ui/sync/one_click_signin_helper.cc
+++ b/chrome/browser/ui/sync/one_click_signin_helper.cc
@@ -423,7 +423,8 @@ ConfirmEmailDialogDelegate::ConfirmEmailDialogDelegate(
const std::string& last_email,
const std::string& email,
Callback callback)
- : last_email_(last_email),
+ : TabModalConfirmDialogDelegate(contents),
+ last_email_(last_email),
email_(email),
callback_(callback) {
}
diff --git a/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.cc b/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.cc
index b4355ba..1ced79b 100644
--- a/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.cc
+++ b/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.cc
@@ -14,8 +14,10 @@
#include "testing/gtest/include/gtest/gtest.h"
MockTabModalConfirmDialogDelegate::MockTabModalConfirmDialogDelegate(
+ content::WebContents* web_contents,
Delegate* delegate)
- : delegate_(delegate) {
+ : TabModalConfirmDialogDelegate(web_contents),
+ delegate_(delegate) {
}
MockTabModalConfirmDialogDelegate::~MockTabModalConfirmDialogDelegate() {
@@ -47,7 +49,8 @@ TabModalConfirmDialogTest::TabModalConfirmDialogTest()
}
void TabModalConfirmDialogTest::SetUpOnMainThread() {
- delegate_ = new MockTabModalConfirmDialogDelegate(this);
+ delegate_ = new MockTabModalConfirmDialogDelegate(
+ browser()->tab_strip_model()->GetActiveWebContents(), this);
dialog_ = TabModalConfirmDialog::Create(
delegate_, browser()->tab_strip_model()->GetActiveWebContents());
content::RunAllPendingInMessageLoop();
diff --git a/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h b/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h
index 0c0fd15..0f22b37 100644
--- a/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h
+++ b/chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h
@@ -21,7 +21,8 @@ class MockTabModalConfirmDialogDelegate : public TabModalConfirmDialogDelegate {
virtual ~Delegate() {}
};
- MockTabModalConfirmDialogDelegate(Delegate* delegate);
+ MockTabModalConfirmDialogDelegate(content::WebContents* web_contents,
+ Delegate* delegate);
virtual ~MockTabModalConfirmDialogDelegate();
virtual string16 GetTitle() OVERRIDE;
diff --git a/chrome/browser/ui/tab_modal_confirm_dialog_delegate.cc b/chrome/browser/ui/tab_modal_confirm_dialog_delegate.cc
index d2711dc..c8e1a58 100644
--- a/chrome/browser/ui/tab_modal_confirm_dialog_delegate.cc
+++ b/chrome/browser/ui/tab_modal_confirm_dialog_delegate.cc
@@ -4,14 +4,23 @@
#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/notification_source.h"
+#include "content/public/browser/web_contents.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
+using content::NavigationController;
using content::WebContents;
-TabModalConfirmDialogDelegate::TabModalConfirmDialogDelegate()
+TabModalConfirmDialogDelegate::TabModalConfirmDialogDelegate(
+ WebContents* web_contents)
: operations_delegate_(NULL),
closing_(false) {
+ NavigationController* controller = &web_contents->GetController();
+ registrar_.Add(this, chrome::NOTIFICATION_TAB_CLOSING,
+ content::Source<NavigationController>(controller));
}
TabModalConfirmDialogDelegate::~TabModalConfirmDialogDelegate() {
@@ -52,6 +61,18 @@ void TabModalConfirmDialogDelegate::LinkClicked(
CloseDialog();
}
+void TabModalConfirmDialogDelegate::Observe(
+ int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) {
+ // Close the dialog if the tab is closed.
+ if (type == chrome::NOTIFICATION_TAB_CLOSING) {
+ Cancel();
+ } else {
+ NOTREACHED();
+ }
+}
+
gfx::Image* TabModalConfirmDialogDelegate::GetIcon() {
return NULL;
}
diff --git a/chrome/browser/ui/tab_modal_confirm_dialog_delegate.h b/chrome/browser/ui/tab_modal_confirm_dialog_delegate.h
index 29413a1..4f20b07 100644
--- a/chrome/browser/ui/tab_modal_confirm_dialog_delegate.h
+++ b/chrome/browser/ui/tab_modal_confirm_dialog_delegate.h
@@ -8,6 +8,8 @@
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/strings/string16.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "ui/base/window_open_disposition.h"
namespace content {
@@ -34,9 +36,9 @@ class TabModalConfirmDialogOperationsDelegate {
// This class acts as the delegate for a simple tab-modal dialog confirming
// whether the user wants to execute a certain action.
-class TabModalConfirmDialogDelegate {
+class TabModalConfirmDialogDelegate : public content::NotificationObserver {
public:
- TabModalConfirmDialogDelegate();
+ explicit TabModalConfirmDialogDelegate(content::WebContents* web_contents);
virtual ~TabModalConfirmDialogDelegate();
void set_operations_delegate(
@@ -87,6 +89,14 @@ class TabModalConfirmDialogDelegate {
return operations_delegate_;
}
+ // content::NotificationObserver implementation.
+ // Watch for a closed tab and dismiss the dialog if it occurs.
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
+ content::NotificationRegistrar registrar_;
+
private:
// It is guaranteed that exactly one of |OnAccepted|, |OnCanceled| or
// |OnLinkClicked| is eventually called. These method are private to