From 1f08634d62275aef87b41606e2a946407ff1a360 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 4 Jan 2017 16:46:50 -0800 Subject: [PATCH 1/3] Implement alert/confirm through dialog manager --- .../browser/atom_javascript_dialog_manager.cc | 40 ++++++++++++++++++- atom/browser/atom_javascript_dialog_manager.h | 4 ++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index eaf311ba1cdb..50f5423e145d 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -5,20 +5,50 @@ #include "atom/browser/atom_javascript_dialog_manager.h" #include +#include +#include "atom/browser/native_window.h" +#include "atom/browser/ui/message_box.h" +#include "base/bind.h" #include "base/strings/utf_string_conversions.h" +#include "ui/gfx/image/image_skia.h" + +using content::JavaScriptMessageType; namespace atom { void AtomJavaScriptDialogManager::RunJavaScriptDialog( content::WebContents* web_contents, const GURL& origin_url, - content::JavaScriptMessageType javascript_message_type, + JavaScriptMessageType message_type, const base::string16& message_text, const base::string16& default_prompt_text, const DialogClosedCallback& callback, bool* did_suppress_message) { - callback.Run(false, base::string16()); + + if (message_type != JavaScriptMessageType::JAVASCRIPT_MESSAGE_TYPE_ALERT && + message_type != JavaScriptMessageType::JAVASCRIPT_MESSAGE_TYPE_CONFIRM) { + callback.Run(false, base::string16()); + return; + } + + std::vector buttons; + if (message_type == JavaScriptMessageType::JAVASCRIPT_MESSAGE_TYPE_CONFIRM) { + buttons.push_back("OK"); + buttons.push_back("Cancel"); + } + + atom::ShowMessageBox(NativeWindow::FromWebContents(web_contents), + atom::MessageBoxType::MESSAGE_BOX_TYPE_NONE, + buttons, + -1, + 0, + atom::MessageBoxOptions::MESSAGE_BOX_NONE, + "", + base::UTF16ToUTF8(message_text), + "", + gfx::ImageSkia(), + base::Bind(&OnMessageBoxCallback, callback)); } void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( @@ -29,4 +59,10 @@ void AtomJavaScriptDialogManager::RunBeforeUnloadDialog( callback.Run(false, base::ASCIIToUTF16("This should not be displayed")); } +// static +void AtomJavaScriptDialogManager::OnMessageBoxCallback( + const DialogClosedCallback& callback, int code) { + callback.Run(code == 0, base::string16()); +} + } // namespace atom diff --git a/atom/browser/atom_javascript_dialog_manager.h b/atom/browser/atom_javascript_dialog_manager.h index 3844e41f9d2f..af94d7cec884 100644 --- a/atom/browser/atom_javascript_dialog_manager.h +++ b/atom/browser/atom_javascript_dialog_manager.h @@ -29,6 +29,10 @@ class AtomJavaScriptDialogManager : public content::JavaScriptDialogManager { void CancelActiveAndPendingDialogs( content::WebContents* web_contents) override {} void ResetDialogState(content::WebContents* web_contents) override {}; + + private: + static void OnMessageBoxCallback(const DialogClosedCallback& callback, + int code); }; } // namespace atom From 222734b5f58b84ce8f14a3d473de5e30e909f709 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 4 Jan 2017 17:28:50 -0800 Subject: [PATCH 2/3] Use correct param ordering in header file --- atom/browser/ui/message_box.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atom/browser/ui/message_box.h b/atom/browser/ui/message_box.h index d2eb70bcd938..16eef3c46350 100644 --- a/atom/browser/ui/message_box.h +++ b/atom/browser/ui/message_box.h @@ -37,8 +37,8 @@ typedef base::Callback MessageBoxCallback; int ShowMessageBox(NativeWindow* parent_window, MessageBoxType type, const std::vector& buttons, - int cancel_id, int default_id, + int cancel_id, int options, const std::string& title, const std::string& message, From 6ef1a9150c9316f74afffe8494413b3af52a184a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 6 Jan 2017 08:53:06 -0800 Subject: [PATCH 3/3] Add OK button to alert --- atom/browser/atom_javascript_dialog_manager.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/atom/browser/atom_javascript_dialog_manager.cc b/atom/browser/atom_javascript_dialog_manager.cc index 50f5423e145d..dd574af9dbff 100644 --- a/atom/browser/atom_javascript_dialog_manager.cc +++ b/atom/browser/atom_javascript_dialog_manager.cc @@ -32,9 +32,8 @@ void AtomJavaScriptDialogManager::RunJavaScriptDialog( return; } - std::vector buttons; + std::vector buttons = {"OK"}; if (message_type == JavaScriptMessageType::JAVASCRIPT_MESSAGE_TYPE_CONFIRM) { - buttons.push_back("OK"); buttons.push_back("Cancel"); }