blob: d7da87aac7cfa3108267cb9228f5459eae204602 [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
[email protected]21aa99682013-06-11 07:17:017#include "base/strings/string_util.h"
[email protected]993951d2013-05-08 21:37:028#include "content/shell/app/resource.h"
[email protected]de7d61ff2013-08-20 11:30:419#include "content/shell/browser/shell.h"
10#include "content/shell/browser/shell_javascript_dialog_manager.h"
[email protected]7fc83822012-03-30 19:53:2911
12namespace content {
13
14class ShellJavaScriptDialog;
15
[email protected]be2510c02012-05-28 14:52:1416INT_PTR CALLBACK ShellJavaScriptDialog::DialogProc(HWND dialog,
17 UINT message,
[email protected]7fc83822012-03-30 19:53:2918 WPARAM wparam,
19 LPARAM lparam) {
20 switch (message) {
21 case WM_INITDIALOG: {
[email protected]3bed5302013-02-15 19:31:4122 SetWindowLongPtr(dialog, DWLP_USER, static_cast<LONG_PTR>(lparam));
[email protected]7fc83822012-03-30 19:53:2923 ShellJavaScriptDialog* owner =
24 reinterpret_cast<ShellJavaScriptDialog*>(lparam);
25 owner->dialog_win_ = dialog;
26 SetDlgItemText(dialog, IDC_DIALOGTEXT, owner->message_text_.c_str());
[email protected]be2510c02012-05-28 14:52:1427 if (owner->message_type_ == JAVASCRIPT_MESSAGE_TYPE_PROMPT)
[email protected]7fc83822012-03-30 19:53:2928 SetDlgItemText(dialog, IDC_PROMPTEDIT,
29 owner->default_prompt_text_.c_str());
30 break;
31 }
32 case WM_DESTROY: {
33 ShellJavaScriptDialog* owner = reinterpret_cast<ShellJavaScriptDialog*>(
[email protected]3bed5302013-02-15 19:31:4134 GetWindowLongPtr(dialog, DWLP_USER));
[email protected]7fc83822012-03-30 19:53:2935 if (owner->dialog_win_) {
36 owner->dialog_win_ = 0;
[email protected]fcf75d42013-12-03 20:11:2637 owner->callback_.Run(false, base::string16());
[email protected]71a88bb2013-02-01 22:05:1538 owner->manager_->DialogClosed(owner);
[email protected]7fc83822012-03-30 19:53:2939 }
40 break;
41 }
42 case WM_COMMAND: {
43 ShellJavaScriptDialog* owner = reinterpret_cast<ShellJavaScriptDialog*>(
[email protected]3bed5302013-02-15 19:31:4144 GetWindowLongPtr(dialog, DWLP_USER));
[email protected]fcf75d42013-12-03 20:11:2645 base::string16 user_input;
[email protected]7fc83822012-03-30 19:53:2946 bool finish = false;
47 bool result;
48 switch (LOWORD(wparam)) {
49 case IDOK:
50 finish = true;
51 result = true;
[email protected]be2510c02012-05-28 14:52:1452 if (owner->message_type_ == JAVASCRIPT_MESSAGE_TYPE_PROMPT) {
[email protected]3bed5302013-02-15 19:31:4153 int length =
[email protected]7fc83822012-03-30 19:53:2954 GetWindowTextLength(GetDlgItem(dialog, IDC_PROMPTEDIT)) + 1;
55 GetDlgItemText(dialog, IDC_PROMPTEDIT,
Brett Wilsone3c4d1a2015-07-07 23:38:0956 base::WriteInto(&user_input, length), length);
[email protected]7fc83822012-03-30 19:53:2957 }
58 break;
59 case IDCANCEL:
60 finish = true;
61 result = false;
62 break;
63 }
64 if (finish) {
65 owner->dialog_win_ = 0;
66 owner->callback_.Run(result, user_input);
67 DestroyWindow(dialog);
[email protected]71a88bb2013-02-01 22:05:1568 owner->manager_->DialogClosed(owner);
[email protected]7fc83822012-03-30 19:53:2969 }
70 break;
71 }
72 default:
73 return DefWindowProc(dialog, message, wparam, lparam);
74 }
75 return 0;
76}
77
78ShellJavaScriptDialog::ShellJavaScriptDialog(
[email protected]71a88bb2013-02-01 22:05:1579 ShellJavaScriptDialogManager* manager,
[email protected]fc4f4dd42012-07-30 20:52:4880 gfx::NativeWindow parent_window,
[email protected]be2510c02012-05-28 14:52:1481 JavaScriptMessageType message_type,
[email protected]fcf75d42013-12-03 20:11:2682 const base::string16& message_text,
83 const base::string16& default_prompt_text,
[email protected]71a88bb2013-02-01 22:05:1584 const JavaScriptDialogManager::DialogClosedCallback& callback)
85 : manager_(manager),
[email protected]7fc83822012-03-30 19:53:2986 callback_(callback),
sammc5648c852015-07-02 01:25:0087 message_type_(message_type),
[email protected]7fc83822012-03-30 19:53:2988 message_text_(message_text),
sammc5648c852015-07-02 01:25:0089 default_prompt_text_(default_prompt_text) {
[email protected]7fc83822012-03-30 19:53:2990 int dialog_type;
[email protected]be2510c02012-05-28 14:52:1491 if (message_type == JAVASCRIPT_MESSAGE_TYPE_ALERT)
[email protected]7fc83822012-03-30 19:53:2992 dialog_type = IDD_ALERT;
[email protected]be2510c02012-05-28 14:52:1493 else if (message_type == JAVASCRIPT_MESSAGE_TYPE_CONFIRM)
[email protected]7fc83822012-03-30 19:53:2994 dialog_type = IDD_CONFIRM;
95 else // JAVASCRIPT_MESSAGE_TYPE_PROMPT
96 dialog_type = IDD_PROMPT;
97
98 dialog_win_ = CreateDialogParam(GetModuleHandle(0),
99 MAKEINTRESOURCE(dialog_type), 0, DialogProc,
100 reinterpret_cast<LPARAM>(this));
101 ShowWindow(dialog_win_, SW_SHOWNORMAL);
102}
103
104ShellJavaScriptDialog::~ShellJavaScriptDialog() {
105 Cancel();
106}
107
108void ShellJavaScriptDialog::Cancel() {
109 if (dialog_win_)
110 DestroyWindow(dialog_win_);
111}
112
113} // namespace content