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

Unified Diff: components/app_modal/javascript_app_modal_dialog.cc

Issue 2901583002: Fold AppModalDialog into its only subclass, JavaScriptAppModalDialog. (Closed)
Patch Set: fix collapse Created 3 years, 7 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: components/app_modal/javascript_app_modal_dialog.cc
diff --git a/components/app_modal/javascript_app_modal_dialog.cc b/components/app_modal/javascript_app_modal_dialog.cc
index dd5808078b05ff3e564dc7f79a5dc1de520f5c64..2e2ec52071740e3b2bace3ba02ea6233b926c14c 100644
--- a/components/app_modal/javascript_app_modal_dialog.cc
+++ b/components/app_modal/javascript_app_modal_dialog.cc
@@ -7,13 +7,17 @@
#include "base/metrics/histogram_macros.h"
#include "base/time/time.h"
#include "build/build_config.h"
+#include "components/app_modal/app_modal_dialog_queue.h"
#include "components/app_modal/javascript_dialog_manager.h"
#include "components/app_modal/javascript_native_dialog_factory.h"
+#include "components/app_modal/native_app_modal_dialog.h"
#include "ui/gfx/text_elider.h"
namespace app_modal {
namespace {
+AppModalDialogObserver* app_modal_dialog_observer = nullptr;
+
// Control maximum sizes of various texts passed to us from javascript.
#if defined(OS_POSIX) && !defined(OS_MACOSX)
// Two-dimensional eliding. Reformat the text of the message dialog
@@ -66,7 +70,11 @@ JavaScriptAppModalDialog::JavaScriptAppModalDialog(
bool is_before_unload_dialog,
bool is_reload,
const content::JavaScriptDialogManager::DialogClosedCallback& callback)
- : AppModalDialog(web_contents, title),
+ : title_(title),
+ completed_(false),
+ valid_(true),
+ native_dialog_(nullptr),
+ web_contents_(web_contents),
extra_data_map_(extra_data_map),
javascript_dialog_type_(javascript_dialog_type),
display_suppress_checkbox_(display_suppress_checkbox),
@@ -80,25 +88,46 @@ JavaScriptAppModalDialog::JavaScriptAppModalDialog(
}
JavaScriptAppModalDialog::~JavaScriptAppModalDialog() {
+ CompleteDialog();
+}
+
+void JavaScriptAppModalDialog::ShowModalDialog() {
+ native_dialog_ = JavaScriptDialogManager::GetInstance()
+ ->native_dialog_factory()
+ ->CreateNativeJavaScriptDialog(this);
+ native_dialog_->ShowAppModalDialog();
+ if (app_modal_dialog_observer)
+ app_modal_dialog_observer->Notify(this);
}
-NativeAppModalDialog* JavaScriptAppModalDialog::CreateNativeDialog() {
- return JavaScriptDialogManager::GetInstance()
- ->native_dialog_factory()
- ->CreateNativeJavaScriptDialog(this);
+void JavaScriptAppModalDialog::ActivateModalDialog() {
+ DCHECK(native_dialog_);
+ native_dialog_->ActivateAppModalDialog();
}
-bool JavaScriptAppModalDialog::IsJavaScriptModalDialog() {
- return true;
+void JavaScriptAppModalDialog::CloseModalDialog() {
+ DCHECK(native_dialog_);
+ native_dialog_->CloseAppModalDialog();
+}
+
+void JavaScriptAppModalDialog::CompleteDialog() {
+ if (!completed_) {
+ completed_ = true;
+ AppModalDialogQueue::GetInstance()->ShowNextDialog();
+ }
+}
+
+bool JavaScriptAppModalDialog::IsValid() {
+ return valid_;
}
void JavaScriptAppModalDialog::Invalidate() {
- if (!IsValid())
+ if (!valid_)
return;
- AppModalDialog::Invalidate();
+ valid_ = false;
CallDialogClosedCallback(false, base::string16());
- if (native_dialog())
+ if (native_dialog_)
CloseModalDialog();
}
@@ -138,7 +167,7 @@ void JavaScriptAppModalDialog::SetOverridePromptText(
void JavaScriptAppModalDialog::NotifyDelegate(bool success,
const base::string16& user_input,
bool suppress_js_messages) {
- if (!IsValid())
+ if (!valid_)
return;
CallDialogClosedCallback(success, user_input);
@@ -146,7 +175,7 @@ void JavaScriptAppModalDialog::NotifyDelegate(bool success,
// The close callback above may delete web_contents_, thus removing the extra
// data from the map owned by ::JavaScriptDialogManager. Make sure
// to only use the data if still present. http://crbug.com/236476
- ExtraDataMap::iterator extra_data = extra_data_map_->find(web_contents());
+ ExtraDataMap::iterator extra_data = extra_data_map_->find(web_contents_);
if (extra_data != extra_data_map_->end()) {
extra_data->second.has_already_shown_a_dialog_ = true;
extra_data->second.suppress_javascript_messages_ = suppress_js_messages;
@@ -154,14 +183,14 @@ void JavaScriptAppModalDialog::NotifyDelegate(bool success,
// On Views, we can end up coming through this code path twice :(.
// See crbug.com/63732.
- AppModalDialog::Invalidate();
+ valid_ = false;
}
void JavaScriptAppModalDialog::CallDialogClosedCallback(bool success,
const base::string16& user_input) {
// TODO(joenotcharles): Both the callers of this function also check IsValid
- // and call AppModalDialog::Invalidate, but in different orders. If the
- // difference is not significant, more common code could be moved here.
+ // and call Invalidate, but in different orders. If the difference is not
+ // significant, more common code could be moved here.
UMA_HISTOGRAM_MEDIUM_TIMES(
"JSDialogs.FineTiming.TimeBetweenDialogCreatedAndSameDialogClosed",
base::TimeTicks::Now() - creation_time_);
@@ -171,4 +200,14 @@ void JavaScriptAppModalDialog::CallDialogClosedCallback(bool success,
}
}
+AppModalDialogObserver::AppModalDialogObserver() {
+ DCHECK(!app_modal_dialog_observer);
+ app_modal_dialog_observer = this;
+}
+
+AppModalDialogObserver::~AppModalDialogObserver() {
+ DCHECK(app_modal_dialog_observer);
+ app_modal_dialog_observer = nullptr;
+}
+
} // namespace app_modal
« no previous file with comments | « components/app_modal/javascript_app_modal_dialog.h ('k') | components/app_modal/javascript_dialog_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698