| Index: content/shell/shell_javascript_dialog_win.cc
|
| diff --git a/content/shell/shell_javascript_dialog_win.cc b/content/shell/shell_javascript_dialog_win.cc
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..aeec8583d68449e3a4d7dda23e91eddf5aa4206a
|
| --- /dev/null
|
| +++ b/content/shell/shell_javascript_dialog_win.cc
|
| @@ -0,0 +1,111 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/shell/shell_javascript_dialog.h"
|
| +
|
| +#include "base/string_util.h"
|
| +#include "content/shell/resource.h"
|
| +#include "content/shell/shell.h"
|
| +#include "content/shell/shell_javascript_dialog_creator.h"
|
| +
|
| +namespace content {
|
| +
|
| +class ShellJavaScriptDialog;
|
| +
|
| +INT_PTR CALLBACK ShellJavaScriptDialog::DialogProc(HWND dialog, UINT message,
|
| + WPARAM wparam,
|
| + LPARAM lparam) {
|
| + switch (message) {
|
| + case WM_INITDIALOG: {
|
| + SetWindowLongPtr(dialog, DWL_USER, static_cast<LONG_PTR>(lparam));
|
| + ShellJavaScriptDialog* owner =
|
| + reinterpret_cast<ShellJavaScriptDialog*>(lparam);
|
| + owner->dialog_win_ = dialog;
|
| + SetDlgItemText(dialog, IDC_DIALOGTEXT, owner->message_text_.c_str());
|
| + if (owner->message_type_ == ui::JAVASCRIPT_MESSAGE_TYPE_PROMPT)
|
| + SetDlgItemText(dialog, IDC_PROMPTEDIT,
|
| + owner->default_prompt_text_.c_str());
|
| + break;
|
| + }
|
| + case WM_DESTROY: {
|
| + ShellJavaScriptDialog* owner = reinterpret_cast<ShellJavaScriptDialog*>(
|
| + GetWindowLongPtr(dialog, DWL_USER));
|
| + if (owner->dialog_win_) {
|
| + owner->dialog_win_ = 0;
|
| + owner->callback_.Run(false, string16());
|
| + owner->creator_->DialogClosed(owner);
|
| + }
|
| + break;
|
| + }
|
| + case WM_COMMAND: {
|
| + ShellJavaScriptDialog* owner = reinterpret_cast<ShellJavaScriptDialog*>(
|
| + GetWindowLongPtr(dialog, DWL_USER));
|
| + string16 user_input;
|
| + bool finish = false;
|
| + bool result;
|
| + switch (LOWORD(wparam)) {
|
| + case IDOK:
|
| + finish = true;
|
| + result = true;
|
| + if (owner->message_type_ == ui::JAVASCRIPT_MESSAGE_TYPE_PROMPT) {
|
| + size_t length =
|
| + GetWindowTextLength(GetDlgItem(dialog, IDC_PROMPTEDIT)) + 1;
|
| + GetDlgItemText(dialog, IDC_PROMPTEDIT,
|
| + WriteInto(&user_input, length), length);
|
| + }
|
| + break;
|
| + case IDCANCEL:
|
| + finish = true;
|
| + result = false;
|
| + break;
|
| + }
|
| + if (finish) {
|
| + owner->dialog_win_ = 0;
|
| + owner->callback_.Run(result, user_input);
|
| + DestroyWindow(dialog);
|
| + owner->creator_->DialogClosed(owner);
|
| + }
|
| + break;
|
| + }
|
| + default:
|
| + return DefWindowProc(dialog, message, wparam, lparam);
|
| + }
|
| + return 0;
|
| +}
|
| +
|
| +ShellJavaScriptDialog::ShellJavaScriptDialog(
|
| + ShellJavaScriptDialogCreator* creator,
|
| + ui::JavascriptMessageType javascript_message_type,
|
| + const string16& message_text,
|
| + const string16& default_prompt_text,
|
| + const JavaScriptDialogCreator::DialogClosedCallback& callback)
|
| + : creator_(creator),
|
| + callback_(callback),
|
| + message_text_(message_text),
|
| + default_prompt_text_(default_prompt_text),
|
| + message_type_(javascript_message_type) {
|
| + int dialog_type;
|
| + if (javascript_message_type == ui::JAVASCRIPT_MESSAGE_TYPE_ALERT)
|
| + dialog_type = IDD_ALERT;
|
| + else if (javascript_message_type == ui::JAVASCRIPT_MESSAGE_TYPE_CONFIRM)
|
| + dialog_type = IDD_CONFIRM;
|
| + else // JAVASCRIPT_MESSAGE_TYPE_PROMPT
|
| + dialog_type = IDD_PROMPT;
|
| +
|
| + dialog_win_ = CreateDialogParam(GetModuleHandle(0),
|
| + MAKEINTRESOURCE(dialog_type), 0, DialogProc,
|
| + reinterpret_cast<LPARAM>(this));
|
| + ShowWindow(dialog_win_, SW_SHOWNORMAL);
|
| +}
|
| +
|
| +ShellJavaScriptDialog::~ShellJavaScriptDialog() {
|
| + Cancel();
|
| +}
|
| +
|
| +void ShellJavaScriptDialog::Cancel() {
|
| + if (dialog_win_)
|
| + DestroyWindow(dialog_win_);
|
| +}
|
| +
|
| +} // namespace content
|
|
|