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

Unified Diff: chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc

Issue 7283022: Make a clean interface for dialog callbacks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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/ui/app_modal_dialogs/js_modal_dialog.cc
diff --git a/chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc b/chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc
index 2714272b66527d3119c0992c954242d693569a2f..2f6641e5e50827c7ebe03ae1363cccef84909f30 100644
--- a/chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc
+++ b/chrome/browser/ui/app_modal_dialogs/js_modal_dialog.cc
@@ -4,14 +4,8 @@
#include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h"
-#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_shutdown.h"
-#include "chrome/browser/extensions/extension_host.h"
#include "chrome/browser/ui/app_modal_dialogs/native_app_modal_dialog.h"
-#include "content/browser/tab_contents/tab_contents.h"
-#include "content/common/notification_service.h"
-#include "content/common/notification_type.h"
#include "ui/base/text/text_elider.h"
namespace {
@@ -62,10 +56,9 @@ JavaScriptAppModalDialog::JavaScriptAppModalDialog(
bool display_suppress_checkbox,
bool is_before_unload_dialog,
IPC::Message* reply_msg)
- : AppModalDialog(delegate->AsTabContents(), title),
+ : AppModalDialog(delegate, title),
delegate_(delegate),
extra_data_(extra_data),
- extension_host_(delegate->AsExtensionHost()),
dialog_flags_(dialog_flags),
display_suppress_checkbox_(display_suppress_checkbox),
is_before_unload_dialog_(is_before_unload_dialog),
@@ -73,9 +66,6 @@ JavaScriptAppModalDialog::JavaScriptAppModalDialog(
use_override_prompt_text_(false) {
EnforceMaxTextSize(message_text, &message_text_);
EnforceMaxPromptSize(default_prompt_text, &default_prompt_text_);
-
- DCHECK((tab_contents_ != NULL) != (extension_host_ != NULL));
- InitNotifications();
}
JavaScriptAppModalDialog::~JavaScriptAppModalDialog() {
@@ -91,42 +81,18 @@ bool JavaScriptAppModalDialog::IsJavaScriptModalDialog() {
return true;
}
-void JavaScriptAppModalDialog::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (skip_this_dialog_)
- return;
-
- if (NotificationType::EXTENSION_HOST_DESTROYED == type &&
- Details<ExtensionHost>(extension_host_) != details)
+void JavaScriptAppModalDialog::Invalidate() {
+ if (!valid_)
return;
- // If we reach here, we know the notification is relevant to us, either
- // because we're only observing applicable sources or because we passed the
- // check above. Both of those indicate that we should ignore this dialog.
- // Also clear the delegate, since it's now invalid.
- skip_this_dialog_ = true;
+ valid_ = false;
delegate_ = NULL;
if (native_dialog_)
CloseModalDialog();
}
-void JavaScriptAppModalDialog::InitNotifications() {
- // Make sure we get relevant navigation notifications so we know when our
- // parent contents will disappear or navigate to a different page.
- if (tab_contents_) {
- registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED,
- Source<NavigationController>(&tab_contents_->controller()));
- registrar_.Add(this, NotificationType::TAB_CONTENTS_DESTROYED,
- Source<TabContents>(tab_contents_));
- } else if (extension_host_) {
- // EXTENSION_HOST_DESTROYED uses the Profile as its source, but we care
- // about the ExtensionHost (which is passed in the details).
- registrar_.Add(this, NotificationType::EXTENSION_HOST_DESTROYED,
- NotificationService::AllSources());
- } else {
- NOTREACHED();
- }
+content::JavaScriptDialogDelegate* JavaScriptAppModalDialog::delegate() const {
+ return delegate_;
}
void JavaScriptAppModalDialog::OnCancel(bool suppress_js_messages) {
@@ -170,7 +136,7 @@ void JavaScriptAppModalDialog::SetOverridePromptText(
void JavaScriptAppModalDialog::NotifyDelegate(bool success,
const string16& user_input,
bool suppress_js_messages) {
- if (skip_this_dialog_)
+ if (!valid_)
return;
delegate_->OnDialogClosed(reply_msg_, success, user_input);
@@ -180,5 +146,5 @@ void JavaScriptAppModalDialog::NotifyDelegate(bool success,
// On Views, we can end up coming through this code path twice :(.
// See crbug.com/63732.
- skip_this_dialog_ = true;
+ valid_ = false;
}

Powered by Google App Engine
This is Rietveld 408576698