Windows: Add default implementation for JavaScript prompt dialog (issue #861).
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1049 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
52c203d4cf
commit
0ab1178b99
|
@ -97,6 +97,7 @@
|
||||||
'tests/cefclient/performance_test.h',
|
'tests/cefclient/performance_test.h',
|
||||||
'tests/cefclient/performance_test_setup.h',
|
'tests/cefclient/performance_test_setup.h',
|
||||||
'tests/cefclient/performance_test_tests.cpp',
|
'tests/cefclient/performance_test_tests.cpp',
|
||||||
|
'tests/cefclient/res/dialogs.html',
|
||||||
'tests/cefclient/res/domaccess.html',
|
'tests/cefclient/res/domaccess.html',
|
||||||
'tests/cefclient/res/localstorage.html',
|
'tests/cefclient/res/localstorage.html',
|
||||||
'tests/cefclient/res/logo.png',
|
'tests/cefclient/res/logo.png',
|
||||||
|
|
|
@ -19,9 +19,11 @@
|
||||||
#include "libcef/cef_context.h"
|
#include "libcef/cef_context.h"
|
||||||
#include "libcef/drag_data_impl.h"
|
#include "libcef/drag_data_impl.h"
|
||||||
#include "libcef/web_drop_target_win.h"
|
#include "libcef/web_drop_target_win.h"
|
||||||
|
#include "libcef_dll/resource.h"
|
||||||
|
|
||||||
#include "base/i18n/case_conversion.h"
|
#include "base/i18n/case_conversion.h"
|
||||||
#include "base/message_loop.h"
|
#include "base/message_loop.h"
|
||||||
|
#include "base/path_service.h"
|
||||||
#include "base/string_util.h"
|
#include "base/string_util.h"
|
||||||
#include "base/utf_string_conversions.h"
|
#include "base/utf_string_conversions.h"
|
||||||
#include "base/win/registry.h"
|
#include "base/win/registry.h"
|
||||||
|
@ -29,6 +31,7 @@
|
||||||
#include "net/base/net_errors.h"
|
#include "net/base/net_errors.h"
|
||||||
#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
|
#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
|
||||||
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
|
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
|
||||||
|
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h"
|
||||||
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebDragData.h"
|
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebDragData.h"
|
||||||
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
|
||||||
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebImage.h"
|
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebImage.h"
|
||||||
|
@ -277,6 +280,73 @@ void AddMenuSeparator(HMENU menu) {
|
||||||
InsertMenuItem(menu, -1, TRUE, &mii);
|
InsertMenuItem(menu, -1, TRUE, &mii);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::wstring GetDialogLabel(WebKit::WebFrame* webframe,
|
||||||
|
const std::string& label) {
|
||||||
|
const GURL& url = webframe->document().url();
|
||||||
|
std::string urlStr;
|
||||||
|
if (!url.is_empty())
|
||||||
|
urlStr = url.host();
|
||||||
|
std::string labelStr = label;
|
||||||
|
if (!urlStr.empty())
|
||||||
|
labelStr += " - " + urlStr;
|
||||||
|
return UTF8ToWide(labelStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct DialogConfig {
|
||||||
|
std::wstring label;
|
||||||
|
std::wstring message;
|
||||||
|
std::wstring default_value;
|
||||||
|
std::wstring result;
|
||||||
|
};
|
||||||
|
|
||||||
|
INT_PTR CALLBACK DialogProc(HWND dialog,
|
||||||
|
UINT message,
|
||||||
|
WPARAM wparam,
|
||||||
|
LPARAM lparam) {
|
||||||
|
switch (message) {
|
||||||
|
case WM_INITDIALOG: {
|
||||||
|
SetWindowLongPtr(dialog, DWL_USER, static_cast<LONG_PTR>(lparam));
|
||||||
|
DialogConfig* config = reinterpret_cast<DialogConfig*>(lparam);
|
||||||
|
SetWindowText(dialog, config->label.c_str());
|
||||||
|
SetDlgItemText(dialog, IDC_DIALOGTEXT, config->message.c_str());
|
||||||
|
SetDlgItemText(dialog, IDC_PROMPTEDIT, config->default_value.c_str());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_CLOSE: {
|
||||||
|
DialogConfig* config = reinterpret_cast<DialogConfig*>(
|
||||||
|
GetWindowLongPtr(dialog, DWL_USER));
|
||||||
|
if (config)
|
||||||
|
EndDialog(dialog, IDCANCEL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_COMMAND: {
|
||||||
|
DialogConfig* config = reinterpret_cast<DialogConfig*>(
|
||||||
|
GetWindowLongPtr(dialog, DWL_USER));
|
||||||
|
bool finish = false;
|
||||||
|
switch (LOWORD(wparam)) {
|
||||||
|
case IDOK: {
|
||||||
|
finish = true;
|
||||||
|
size_t length =
|
||||||
|
GetWindowTextLength(GetDlgItem(dialog, IDC_PROMPTEDIT)) + 1;
|
||||||
|
if (length > 1) {
|
||||||
|
GetDlgItemText(dialog, IDC_PROMPTEDIT,
|
||||||
|
WriteInto(&config->result, length), length);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case IDCANCEL:
|
||||||
|
finish = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (finish)
|
||||||
|
EndDialog(dialog, LOWORD(wparam));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefWindowProc(dialog, message, wparam, lparam);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// WebViewClient --------------------------------------------------------------
|
// WebViewClient --------------------------------------------------------------
|
||||||
|
@ -714,18 +784,16 @@ void BrowserWebViewDelegate::EndDragging() {
|
||||||
|
|
||||||
void BrowserWebViewDelegate::ShowJavaScriptAlert(WebFrame* webframe,
|
void BrowserWebViewDelegate::ShowJavaScriptAlert(WebFrame* webframe,
|
||||||
const CefString& message) {
|
const CefString& message) {
|
||||||
// TODO(cef): Think about what we should be showing as the prompt caption
|
|
||||||
std::wstring messageStr = message;
|
std::wstring messageStr = message;
|
||||||
std::wstring titleStr = browser_->UIT_GetTitle();
|
std::wstring titleStr = GetDialogLabel(webframe, "JavaScript Alert");
|
||||||
MessageBox(browser_->UIT_GetMainWndHandle(), messageStr.c_str(),
|
MessageBox(browser_->UIT_GetMainWndHandle(), messageStr.c_str(),
|
||||||
titleStr.c_str(), MB_OK | MB_ICONWARNING);
|
titleStr.c_str(), MB_OK | MB_ICONWARNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BrowserWebViewDelegate::ShowJavaScriptConfirm(WebFrame* webframe,
|
bool BrowserWebViewDelegate::ShowJavaScriptConfirm(WebFrame* webframe,
|
||||||
const CefString& message) {
|
const CefString& message) {
|
||||||
// TODO(cef): Think about what we should be showing as the prompt caption
|
|
||||||
std::wstring messageStr = message;
|
std::wstring messageStr = message;
|
||||||
std::wstring titleStr = browser_->UIT_GetTitle();
|
std::wstring titleStr = GetDialogLabel(webframe, "JavaScript Confirm");
|
||||||
int rv = MessageBox(browser_->UIT_GetMainWndHandle(), messageStr.c_str(),
|
int rv = MessageBox(browser_->UIT_GetMainWndHandle(), messageStr.c_str(),
|
||||||
titleStr.c_str(), MB_YESNO | MB_ICONQUESTION);
|
titleStr.c_str(), MB_YESNO | MB_ICONQUESTION);
|
||||||
return (rv == IDYES);
|
return (rv == IDYES);
|
||||||
|
@ -733,10 +801,39 @@ bool BrowserWebViewDelegate::ShowJavaScriptConfirm(WebFrame* webframe,
|
||||||
|
|
||||||
bool BrowserWebViewDelegate::ShowJavaScriptPrompt(WebFrame* webframe,
|
bool BrowserWebViewDelegate::ShowJavaScriptPrompt(WebFrame* webframe,
|
||||||
const CefString& message,
|
const CefString& message,
|
||||||
const CefString& default_value,
|
const CefString& default_value,
|
||||||
CefString* result) {
|
CefString* result) {
|
||||||
// TODO(cef): Implement a default prompt dialog
|
FilePath file_path;
|
||||||
return false;
|
HMODULE hModule = NULL;
|
||||||
|
|
||||||
|
// Try to load the dialog from the DLL.
|
||||||
|
if (PathService::Get(base::FILE_MODULE, &file_path))
|
||||||
|
hModule = ::GetModuleHandle(file_path.value().c_str());
|
||||||
|
if (!hModule)
|
||||||
|
hModule = ::GetModuleHandle(NULL);
|
||||||
|
DCHECK(hModule);
|
||||||
|
|
||||||
|
DialogConfig config;
|
||||||
|
config.label = GetDialogLabel(webframe, "JavaScript Prompt");
|
||||||
|
config.message = message;
|
||||||
|
config.default_value = default_value;
|
||||||
|
|
||||||
|
HWND parent = GetAncestor(browser_->GetWindowHandle(), GA_ROOT);
|
||||||
|
|
||||||
|
// Show the modal dialog.
|
||||||
|
int rv = DialogBoxParam(hModule,
|
||||||
|
MAKEINTRESOURCE(IDD_PROMPT),
|
||||||
|
parent,
|
||||||
|
DialogProc,
|
||||||
|
reinterpret_cast<LPARAM>(&config));
|
||||||
|
if (rv == IDOK)
|
||||||
|
*result = config.result;
|
||||||
|
|
||||||
|
// Return focus to the parent window.
|
||||||
|
if (IsWindow(parent))
|
||||||
|
SetFocus(parent);
|
||||||
|
|
||||||
|
return (rv == IDOK);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
|
@ -52,6 +52,21 @@ END
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Dialog
|
||||||
|
//
|
||||||
|
|
||||||
|
IDD_PROMPT DIALOGEX 0, 0, 241, 76
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "JavaScript Prompt"
|
||||||
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "OK",IDOK,131,55,50,14
|
||||||
|
LTEXT "",IDC_DIALOGTEXT,16,17,210,18
|
||||||
|
PUSHBUTTON "Cancel",IDCANCEL,184,55,50,14
|
||||||
|
EDITTEXT IDC_PROMPTEDIT,15,33,210,14,ES_AUTOHSCROLL
|
||||||
|
END
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
|
|
@ -6,6 +6,10 @@
|
||||||
// Avoid files associated with MacOS
|
// Avoid files associated with MacOS
|
||||||
#define _X86_
|
#define _X86_
|
||||||
|
|
||||||
|
#define IDD_PROMPT 132
|
||||||
|
#define IDC_PROMPTEDIT 1000
|
||||||
|
#define IDC_DIALOGTEXT 1001
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
|
|
|
@ -28,17 +28,18 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
// Binary
|
// Binary
|
||||||
//
|
//
|
||||||
|
|
||||||
IDS_LOGO BINARY "res\\logo.png"
|
IDS_DIALOGS BINARY "res\\dialogs.html"
|
||||||
IDS_UIPLUGIN BINARY "res\\uiplugin.html"
|
|
||||||
IDS_OSRPLUGIN BINARY "res\\osrplugin.html"
|
|
||||||
IDS_LOGOBALL BINARY "res\\logoball.png"
|
|
||||||
IDS_LOCALSTORAGE BINARY "res\\localstorage.html"
|
|
||||||
IDS_XMLHTTPREQUEST BINARY "res\\xmlhttprequest.html"
|
|
||||||
IDS_DOMACCESS BINARY "res\\domaccess.html"
|
IDS_DOMACCESS BINARY "res\\domaccess.html"
|
||||||
IDS_MODALMAIN BINARY "res\\modalmain.html"
|
IDS_LOCALSTORAGE BINARY "res\\localstorage.html"
|
||||||
|
IDS_LOGO BINARY "res\\logo.png"
|
||||||
|
IDS_LOGOBALL BINARY "res\\logoball.png"
|
||||||
IDS_MODALDIALOG BINARY "res\\modaldialog.html"
|
IDS_MODALDIALOG BINARY "res\\modaldialog.html"
|
||||||
|
IDS_MODALMAIN BINARY "res\\modalmain.html"
|
||||||
|
IDS_OSRPLUGIN BINARY "res\\osrplugin.html"
|
||||||
IDS_PERFORMANCE BINARY "res\\performance.html"
|
IDS_PERFORMANCE BINARY "res\\performance.html"
|
||||||
IDS_TRANSPARENCY BINARY "res\\transparency.html"
|
IDS_TRANSPARENCY BINARY "res\\transparency.html"
|
||||||
|
IDS_UIPLUGIN BINARY "res\\uiplugin.html"
|
||||||
|
IDS_XMLHTTPREQUEST BINARY "res\\xmlhttprequest.html"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
|
@ -78,6 +79,7 @@ BEGIN
|
||||||
MENUITEM "JavaScript Execute", ID_TESTS_JAVASCRIPT_EXECUTE
|
MENUITEM "JavaScript Execute", ID_TESTS_JAVASCRIPT_EXECUTE
|
||||||
MENUITEM "JavaScript Invoke", ID_TESTS_JAVASCRIPT_INVOKE
|
MENUITEM "JavaScript Invoke", ID_TESTS_JAVASCRIPT_INVOKE
|
||||||
MENUITEM "Performance Tests", ID_TESTS_PERFORMANCE
|
MENUITEM "Performance Tests", ID_TESTS_PERFORMANCE
|
||||||
|
MENUITEM "Dialogs", ID_TESTS_DIALOGS
|
||||||
MENUITEM "Plugin", ID_TESTS_PLUGIN
|
MENUITEM "Plugin", ID_TESTS_PLUGIN
|
||||||
MENUITEM "Plugin Info", ID_TESTS_PLUGIN_INFO
|
MENUITEM "Plugin Info", ID_TESTS_PLUGIN_INFO
|
||||||
MENUITEM "Popup Window", ID_TESTS_POPUP
|
MENUITEM "Popup Window", ID_TESTS_POPUP
|
||||||
|
|
|
@ -461,6 +461,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
|
||||||
if (browser.get())
|
if (browser.get())
|
||||||
performance_test::RunTest(browser);
|
performance_test::RunTest(browser);
|
||||||
return 0;
|
return 0;
|
||||||
|
case ID_TESTS_DIALOGS: // Run dialogs tests
|
||||||
|
if (browser.get())
|
||||||
|
RunDialogsTest(browser);
|
||||||
|
return 0;
|
||||||
case ID_TESTS_PLUGIN: // Test the custom plugin
|
case ID_TESTS_PLUGIN: // Test the custom plugin
|
||||||
if (browser.get())
|
if (browser.get())
|
||||||
RunPluginTest(browser);
|
RunPluginTest(browser);
|
||||||
|
|
|
@ -120,6 +120,11 @@ bool ClientHandler::OnBeforeResourceLoad(CefRefPtr<CefBrowser> browser,
|
||||||
resourceStream = GetBinaryResourceReader(IDS_PERFORMANCE);
|
resourceStream = GetBinaryResourceReader(IDS_PERFORMANCE);
|
||||||
response->SetMimeType("text/html");
|
response->SetMimeType("text/html");
|
||||||
response->SetStatus(200);
|
response->SetStatus(200);
|
||||||
|
} else if (url == "http://tests/dialogs") {
|
||||||
|
// Show the dialogs HTML contents
|
||||||
|
resourceStream = GetBinaryResourceReader(IDS_DIALOGS);
|
||||||
|
response->SetMimeType("text/html");
|
||||||
|
response->SetStatus(200);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -58,18 +58,20 @@
|
||||||
#define ID_TESTS_GETIMAGE 32799
|
#define ID_TESTS_GETIMAGE 32799
|
||||||
#define ID_TESTS_PLUGIN_INFO 32800
|
#define ID_TESTS_PLUGIN_INFO 32800
|
||||||
#define ID_TESTS_GEOLOCATION 32801
|
#define ID_TESTS_GEOLOCATION 32801
|
||||||
|
#define ID_TESTS_DIALOGS 32803
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
#define IDS_LOGO 1000
|
#define IDS_DIALOGS 1000
|
||||||
#define IDS_UIPLUGIN 1001
|
#define IDS_DOMACCESS 1001
|
||||||
#define IDS_LOGOBALL 1002
|
#define IDS_LOCALSTORAGE 1002
|
||||||
#define IDS_LOCALSTORAGE 1003
|
#define IDS_LOGO 1003
|
||||||
#define IDS_XMLHTTPREQUEST 1004
|
#define IDS_LOGOBALL 1004
|
||||||
#define IDS_DOMACCESS 1005
|
#define IDS_MODALDIALOG 1005
|
||||||
#define IDS_OSRPLUGIN 1006
|
#define IDS_MODALMAIN 1006
|
||||||
#define IDS_MODALMAIN 1007
|
#define IDS_OSRPLUGIN 1007
|
||||||
#define IDS_MODALDIALOG 1008
|
#define IDS_PERFORMANCE 1008
|
||||||
#define IDS_PERFORMANCE 1009
|
#define IDS_TRANSPARENCY 1009
|
||||||
#define IDS_TRANSPARENCY 1010
|
#define IDS_UIPLUGIN 1010
|
||||||
|
#define IDS_XMLHTTPREQUEST 1011
|
||||||
|
|
||||||
// Avoid files associated with MacOS
|
// Avoid files associated with MacOS
|
||||||
#define _X86_
|
#define _X86_
|
||||||
|
|
Loading…
Reference in New Issue