Implement alert/confirm through dialog manager
authorKevin Sawicki <kevinsawicki@gmail.com>
Thu, 5 Jan 2017 00:46:50 +0000 (16:46 -0800)
committerKevin Sawicki <kevinsawicki@gmail.com>
Mon, 9 Jan 2017 16:30:13 +0000 (08:30 -0800)
atom/browser/atom_javascript_dialog_manager.cc
atom/browser/atom_javascript_dialog_manager.h

index eaf311b..50f5423 100644 (file)
@@ -5,20 +5,50 @@
 #include "atom/browser/atom_javascript_dialog_manager.h"
 
 #include <string>
+#include <vector>
 
+#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<std::string> 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
index 3844e41..af94d7c 100644 (file)
@@ -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