blob: 0f768f56691b7b586eef58052316277e3f622141 [file] [log] [blame]
[email protected]de7d61ff2013-08-20 11:30:411// Copyright 2013 The Chromium Authors. All rights reserved.
[email protected]7fc83822012-03-30 19:53:292// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]de7d61ff2013-08-20 11:30:415#include "content/shell/browser/shell_javascript_dialog.h"
[email protected]7fc83822012-03-30 19:53:296
Avi Drissmane04d3992017-10-05 15:11:367#include <utility>
8
[email protected]21aa99682013-06-11 07:17:019#include "base/strings/string_util.h"
[email protected]993951d2013-05-08 21:37:0210#include "content/shell/app/resource.h"
[email protected]de7d61ff2013-08-20 11:30:4111#include "content/shell/browser/shell.h"
12#include "content/shell/browser/shell_javascript_dialog_manager.h"
[email protected]7fc83822012-03-30 19:53:2913
14namespace content {
15
16class ShellJavaScriptDialog;
17
[email protected]be2510c02012-05-28 14:52:1418INT_PTR CALLBACK ShellJavaScriptDialog::DialogProc(HWND dialog,
19 UINT message,
[email protected]7fc83822012-03-30 19:53:2920 WPARAM wparam,
21 LPARAM lparam) {
22 switch (message) {
23 case WM_INITDIALOG: {
[email protected]3bed5302013-02-15 19:31:4124 SetWindowLongPtr(dialog, DWLP_USER, static_cast<LONG_PTR>(lparam));
[email protected]7fc83822012-03-30 19:53:2925 ShellJavaScriptDialog* owner =
26 reinterpret_cast<ShellJavaScriptDialog*>(lparam);
27 owner->dialog_win_ = dialog;
28 SetDlgItemText(dialog, IDC_DIALOGTEXT, owner->message_text_.c_str());
avi777ff452017-02-09 19:04:4829 if (owner->dialog_type_ == JAVASCRIPT_DIALOG_TYPE_PROMPT)
[email protected]7fc83822012-03-30 19:53:2930 SetDlgItemText(dialog, IDC_PROMPTEDIT,
31 owner->default_prompt_text_.c_str());
32 break;
33 }
34 case WM_DESTROY: {
35 ShellJavaScriptDialog* owner = reinterpret_cast<ShellJavaScriptDialog*>(
[email protected]3bed5302013-02-15 19:31:4136 GetWindowLongPtr(dialog, DWLP_USER));
[email protected]7fc83822012-03-30 19:53:2937 if (owner->dialog_win_) {
38 owner->dialog_win_ = 0;
Avi Drissmane04d3992017-10-05 15:11:3639 std::move(owner->callback_).Run(false, base::string16());
[email protected]71a88bb2013-02-01 22:05:1540 owner->manager_->DialogClosed(owner);
[email protected]7fc83822012-03-30 19:53:2941 }
42 break;
43 }
44 case WM_COMMAND: {
45 ShellJavaScriptDialog* owner = reinterpret_cast<ShellJavaScriptDialog*>(
[email protected]3bed5302013-02-15 19:31:4146 GetWindowLongPtr(dialog, DWLP_USER));
[email protected]fcf75d42013-12-03 20:11:2647 base::string16 user_input;
[email protected]7fc83822012-03-30 19:53:2948 bool finish = false;
tzikb7d06d52016-02-20 08:21:2849 bool result = false;
[email protected]7fc83822012-03-30 19:53:2950 switch (LOWORD(wparam)) {
51 case IDOK:
52 finish = true;
53 result = true;
avi777ff452017-02-09 19:04:4854 if (owner->dialog_type_ == JAVASCRIPT_DIALOG_TYPE_PROMPT) {
[email protected]3bed5302013-02-15 19:31:4155 int length =
[email protected]7fc83822012-03-30 19:53:2956 GetWindowTextLength(GetDlgItem(dialog, IDC_PROMPTEDIT)) + 1;
57 GetDlgItemText(dialog, IDC_PROMPTEDIT,
Brett Wilsone3c4d1a2015-07-07 23:38:0958 base::WriteInto(&user_input, length), length);
[email protected]7fc83822012-03-30 19:53:2959 }
60 break;
61 case IDCANCEL:
62 finish = true;
63 result = false;
64 break;
65 }
66 if (finish) {
67 owner->dialog_win_ = 0;
Avi Drissmane04d3992017-10-05 15:11:3668 std::move(owner->callback_).Run(result, user_input);
[email protected]7fc83822012-03-30 19:53:2969 DestroyWindow(dialog);
[email protected]71a88bb2013-02-01 22:05:1570 owner->manager_->DialogClosed(owner);
[email protected]7fc83822012-03-30 19:53:2971 }
72 break;
73 }
74 default:
75 return DefWindowProc(dialog, message, wparam, lparam);
76 }
77 return 0;
78}
79
80ShellJavaScriptDialog::ShellJavaScriptDialog(
[email protected]71a88bb2013-02-01 22:05:1581 ShellJavaScriptDialogManager* manager,
[email protected]fc4f4dd42012-07-30 20:52:4882 gfx::NativeWindow parent_window,
avi777ff452017-02-09 19:04:4883 JavaScriptDialogType dialog_type,
[email protected]fcf75d42013-12-03 20:11:2684 const base::string16& message_text,
85 const base::string16& default_prompt_text,
Avi Drissmane04d3992017-10-05 15:11:3686 JavaScriptDialogManager::DialogClosedCallback callback)
87 : callback_(std::move(callback)),
pkasting10cf76e2016-05-19 18:10:3788 manager_(manager),
avi777ff452017-02-09 19:04:4889 dialog_type_(dialog_type),
[email protected]7fc83822012-03-30 19:53:2990 message_text_(message_text),
sammc5648c852015-07-02 01:25:0091 default_prompt_text_(default_prompt_text) {
avi777ff452017-02-09 19:04:4892 int dialog_resource;
93 if (dialog_type == JAVASCRIPT_DIALOG_TYPE_ALERT)
94 dialog_resource = IDD_ALERT;
95 else if (dialog_type == JAVASCRIPT_DIALOG_TYPE_CONFIRM)
96 dialog_resource = IDD_CONFIRM;
97 else // JAVASCRIPT_DIALOG_TYPE_PROMPT
98 dialog_resource = IDD_PROMPT;
[email protected]7fc83822012-03-30 19:53:2999
avi777ff452017-02-09 19:04:48100 dialog_win_ =
101 CreateDialogParam(GetModuleHandle(0), MAKEINTRESOURCE(dialog_resource), 0,
102 DialogProc, reinterpret_cast<LPARAM>(this));
[email protected]7fc83822012-03-30 19:53:29103 ShowWindow(dialog_win_, SW_SHOWNORMAL);
104}
105
106ShellJavaScriptDialog::~ShellJavaScriptDialog() {
107 Cancel();
108}
109
110void ShellJavaScriptDialog::Cancel() {
111 if (dialog_win_)
112 DestroyWindow(dialog_win_);
113}
114
115} // namespace content