mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	Add support for JavaScript alert, confirm, prompt and onbeforeunload dialogs (issue #507).
- Add CefJSDialogHandler and CefJSDialogCallback interfaces. - Add default dialog implementations for Windows and Mac OS-X. - Add "JavaScript Dialogs" example to cefclient. - Change TestHandler::AddResource to ignore the query component when matching URLs. git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@594 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
		@@ -13,6 +13,7 @@
 | 
			
		||||
#include "libcef_dll/cpptoc/client_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/display_handler_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/geolocation_handler_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/jsdialog_handler_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/load_handler_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/request_handler_cpptoc.h"
 | 
			
		||||
@@ -102,6 +103,22 @@ struct _cef_geolocation_handler_t* CEF_CALLBACK client_get_geolocation_handler(
 | 
			
		||||
  return CefGeolocationHandlerCppToC::Wrap(_retval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct _cef_jsdialog_handler_t* CEF_CALLBACK client_get_jsdialog_handler(
 | 
			
		||||
    struct _cef_client_t* self) {
 | 
			
		||||
  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
 | 
			
		||||
 | 
			
		||||
  DCHECK(self);
 | 
			
		||||
  if (!self)
 | 
			
		||||
    return NULL;
 | 
			
		||||
 | 
			
		||||
  // Execute
 | 
			
		||||
  CefRefPtr<CefJSDialogHandler> _retval = CefClientCppToC::Get(
 | 
			
		||||
      self)->GetJSDialogHandler();
 | 
			
		||||
 | 
			
		||||
  // Return type: refptr_same
 | 
			
		||||
  return CefJSDialogHandlerCppToC::Wrap(_retval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int CEF_CALLBACK client_on_process_message_recieved(struct _cef_client_t* self,
 | 
			
		||||
    cef_browser_t* browser, enum cef_process_id_t source_process,
 | 
			
		||||
    struct _cef_process_message_t* message) {
 | 
			
		||||
@@ -139,6 +156,7 @@ CefClientCppToC::CefClientCppToC(CefClient* cls)
 | 
			
		||||
  struct_.struct_.get_request_handler = client_get_request_handler;
 | 
			
		||||
  struct_.struct_.get_display_handler = client_get_display_handler;
 | 
			
		||||
  struct_.struct_.get_geolocation_handler = client_get_geolocation_handler;
 | 
			
		||||
  struct_.struct_.get_jsdialog_handler = client_get_jsdialog_handler;
 | 
			
		||||
  struct_.struct_.on_process_message_recieved =
 | 
			
		||||
      client_on_process_message_recieved;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										46
									
								
								libcef_dll/cpptoc/jsdialog_callback_cpptoc.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								libcef_dll/cpptoc/jsdialog_callback_cpptoc.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
 | 
			
		||||
// reserved. Use of this source code is governed by a BSD-style license that
 | 
			
		||||
// can be found in the LICENSE file.
 | 
			
		||||
//
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// This file was generated by the CEF translator tool. If making changes by
 | 
			
		||||
// hand only do so within the body of existing method and function
 | 
			
		||||
// implementations. See the translator.README.txt file in the tools directory
 | 
			
		||||
// for more information.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "libcef_dll/cpptoc/jsdialog_callback_cpptoc.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// MEMBER FUNCTIONS - Body may be edited by hand.
 | 
			
		||||
 | 
			
		||||
void CEF_CALLBACK jsdialog_callback_cont(struct _cef_jsdialog_callback_t* self,
 | 
			
		||||
    int success, const cef_string_t* user_input) {
 | 
			
		||||
  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
 | 
			
		||||
 | 
			
		||||
  DCHECK(self);
 | 
			
		||||
  if (!self)
 | 
			
		||||
    return;
 | 
			
		||||
  // Unverified params: user_input
 | 
			
		||||
 | 
			
		||||
  // Execute
 | 
			
		||||
  CefJSDialogCallbackCppToC::Get(self)->Continue(
 | 
			
		||||
      success?true:false,
 | 
			
		||||
      CefString(user_input));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// CONSTRUCTOR - Do not edit by hand.
 | 
			
		||||
 | 
			
		||||
CefJSDialogCallbackCppToC::CefJSDialogCallbackCppToC(CefJSDialogCallback* cls)
 | 
			
		||||
    : CefCppToC<CefJSDialogCallbackCppToC, CefJSDialogCallback,
 | 
			
		||||
        cef_jsdialog_callback_t>(cls) {
 | 
			
		||||
  struct_.struct_.cont = jsdialog_callback_cont;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifndef NDEBUG
 | 
			
		||||
template<> long CefCppToC<CefJSDialogCallbackCppToC, CefJSDialogCallback,
 | 
			
		||||
    cef_jsdialog_callback_t>::DebugObjCt = 0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								libcef_dll/cpptoc/jsdialog_callback_cpptoc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								libcef_dll/cpptoc/jsdialog_callback_cpptoc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
 | 
			
		||||
// reserved. Use of this source code is governed by a BSD-style license that
 | 
			
		||||
// can be found in the LICENSE file.
 | 
			
		||||
//
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// This file was generated by the CEF translator tool. If making changes by
 | 
			
		||||
// hand only do so within the body of existing method and function
 | 
			
		||||
// implementations. See the translator.README.txt file in the tools directory
 | 
			
		||||
// for more information.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_CALLBACK_CPPTOC_H_
 | 
			
		||||
#define CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_CALLBACK_CPPTOC_H_
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifndef BUILDING_CEF_SHARED
 | 
			
		||||
#pragma message("Warning: "__FILE__" may be accessed DLL-side only")
 | 
			
		||||
#else  // BUILDING_CEF_SHARED
 | 
			
		||||
 | 
			
		||||
#include "include/cef_jsdialog_handler.h"
 | 
			
		||||
#include "include/capi/cef_jsdialog_handler_capi.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/cpptoc.h"
 | 
			
		||||
 | 
			
		||||
// Wrap a C++ class with a C structure.
 | 
			
		||||
// This class may be instantiated and accessed DLL-side only.
 | 
			
		||||
class CefJSDialogCallbackCppToC
 | 
			
		||||
    : public CefCppToC<CefJSDialogCallbackCppToC, CefJSDialogCallback,
 | 
			
		||||
        cef_jsdialog_callback_t> {
 | 
			
		||||
 public:
 | 
			
		||||
  explicit CefJSDialogCallbackCppToC(CefJSDialogCallback* cls);
 | 
			
		||||
  virtual ~CefJSDialogCallbackCppToC() {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif  // BUILDING_CEF_SHARED
 | 
			
		||||
#endif  // CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_CALLBACK_CPPTOC_H_
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										136
									
								
								libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								libcef_dll/cpptoc/jsdialog_handler_cpptoc.cc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
 | 
			
		||||
// reserved. Use of this source code is governed by a BSD-style license that
 | 
			
		||||
// can be found in the LICENSE file.
 | 
			
		||||
//
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// This file was generated by the CEF translator tool. If making changes by
 | 
			
		||||
// hand only do so within the body of existing method and function
 | 
			
		||||
// implementations. See the translator.README.txt file in the tools directory
 | 
			
		||||
// for more information.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "libcef_dll/cpptoc/jsdialog_handler_cpptoc.h"
 | 
			
		||||
#include "libcef_dll/ctocpp/browser_ctocpp.h"
 | 
			
		||||
#include "libcef_dll/ctocpp/jsdialog_callback_ctocpp.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// MEMBER FUNCTIONS - Body may be edited by hand.
 | 
			
		||||
 | 
			
		||||
int CEF_CALLBACK jsdialog_handler_on_jsdialog(
 | 
			
		||||
    struct _cef_jsdialog_handler_t* self, cef_browser_t* browser,
 | 
			
		||||
    const cef_string_t* origin_url, const cef_string_t* accept_lang,
 | 
			
		||||
    enum cef_jsdialog_type_t dialog_type, const cef_string_t* message_text,
 | 
			
		||||
    const cef_string_t* default_prompt_text, cef_jsdialog_callback_t* callback,
 | 
			
		||||
    int* suppress_message) {
 | 
			
		||||
  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
 | 
			
		||||
 | 
			
		||||
  DCHECK(self);
 | 
			
		||||
  if (!self)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Verify param: browser; type: refptr_diff
 | 
			
		||||
  DCHECK(browser);
 | 
			
		||||
  if (!browser)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Verify param: origin_url; type: string_byref_const
 | 
			
		||||
  DCHECK(origin_url);
 | 
			
		||||
  if (!origin_url)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Verify param: callback; type: refptr_diff
 | 
			
		||||
  DCHECK(callback);
 | 
			
		||||
  if (!callback)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Verify param: suppress_message; type: bool_byref
 | 
			
		||||
  DCHECK(suppress_message);
 | 
			
		||||
  if (!suppress_message)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Unverified params: accept_lang, message_text, default_prompt_text
 | 
			
		||||
 | 
			
		||||
  // Translate param: suppress_message; type: bool_byref
 | 
			
		||||
  bool suppress_messageBool = (
 | 
			
		||||
      suppress_message && *suppress_message)?true:false;
 | 
			
		||||
 | 
			
		||||
  // Execute
 | 
			
		||||
  bool _retval = CefJSDialogHandlerCppToC::Get(self)->OnJSDialog(
 | 
			
		||||
      CefBrowserCToCpp::Wrap(browser),
 | 
			
		||||
      CefString(origin_url),
 | 
			
		||||
      CefString(accept_lang),
 | 
			
		||||
      dialog_type,
 | 
			
		||||
      CefString(message_text),
 | 
			
		||||
      CefString(default_prompt_text),
 | 
			
		||||
      CefJSDialogCallbackCToCpp::Wrap(callback),
 | 
			
		||||
      suppress_messageBool);
 | 
			
		||||
 | 
			
		||||
  // Restore param: suppress_message; type: bool_byref
 | 
			
		||||
  if (suppress_message)
 | 
			
		||||
    *suppress_message = suppress_messageBool?true:false;
 | 
			
		||||
 | 
			
		||||
  // Return type: bool
 | 
			
		||||
  return _retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int CEF_CALLBACK jsdialog_handler_on_before_unload_dialog(
 | 
			
		||||
    struct _cef_jsdialog_handler_t* self, cef_browser_t* browser,
 | 
			
		||||
    const cef_string_t* message_text, int is_reload,
 | 
			
		||||
    cef_jsdialog_callback_t* callback) {
 | 
			
		||||
  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
 | 
			
		||||
 | 
			
		||||
  DCHECK(self);
 | 
			
		||||
  if (!self)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Verify param: browser; type: refptr_diff
 | 
			
		||||
  DCHECK(browser);
 | 
			
		||||
  if (!browser)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Verify param: callback; type: refptr_diff
 | 
			
		||||
  DCHECK(callback);
 | 
			
		||||
  if (!callback)
 | 
			
		||||
    return 0;
 | 
			
		||||
  // Unverified params: message_text
 | 
			
		||||
 | 
			
		||||
  // Execute
 | 
			
		||||
  bool _retval = CefJSDialogHandlerCppToC::Get(self)->OnBeforeUnloadDialog(
 | 
			
		||||
      CefBrowserCToCpp::Wrap(browser),
 | 
			
		||||
      CefString(message_text),
 | 
			
		||||
      is_reload?true:false,
 | 
			
		||||
      CefJSDialogCallbackCToCpp::Wrap(callback));
 | 
			
		||||
 | 
			
		||||
  // Return type: bool
 | 
			
		||||
  return _retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CEF_CALLBACK jsdialog_handler_on_reset_dialog_state(
 | 
			
		||||
    struct _cef_jsdialog_handler_t* self, cef_browser_t* browser) {
 | 
			
		||||
  // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
 | 
			
		||||
 | 
			
		||||
  DCHECK(self);
 | 
			
		||||
  if (!self)
 | 
			
		||||
    return;
 | 
			
		||||
  // Verify param: browser; type: refptr_diff
 | 
			
		||||
  DCHECK(browser);
 | 
			
		||||
  if (!browser)
 | 
			
		||||
    return;
 | 
			
		||||
 | 
			
		||||
  // Execute
 | 
			
		||||
  CefJSDialogHandlerCppToC::Get(self)->OnResetDialogState(
 | 
			
		||||
      CefBrowserCToCpp::Wrap(browser));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// CONSTRUCTOR - Do not edit by hand.
 | 
			
		||||
 | 
			
		||||
CefJSDialogHandlerCppToC::CefJSDialogHandlerCppToC(CefJSDialogHandler* cls)
 | 
			
		||||
    : CefCppToC<CefJSDialogHandlerCppToC, CefJSDialogHandler,
 | 
			
		||||
        cef_jsdialog_handler_t>(cls) {
 | 
			
		||||
  struct_.struct_.on_jsdialog = jsdialog_handler_on_jsdialog;
 | 
			
		||||
  struct_.struct_.on_before_unload_dialog =
 | 
			
		||||
      jsdialog_handler_on_before_unload_dialog;
 | 
			
		||||
  struct_.struct_.on_reset_dialog_state =
 | 
			
		||||
      jsdialog_handler_on_reset_dialog_state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifndef NDEBUG
 | 
			
		||||
template<> long CefCppToC<CefJSDialogHandlerCppToC, CefJSDialogHandler,
 | 
			
		||||
    cef_jsdialog_handler_t>::DebugObjCt = 0;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										37
									
								
								libcef_dll/cpptoc/jsdialog_handler_cpptoc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								libcef_dll/cpptoc/jsdialog_handler_cpptoc.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
 | 
			
		||||
// reserved. Use of this source code is governed by a BSD-style license that
 | 
			
		||||
// can be found in the LICENSE file.
 | 
			
		||||
//
 | 
			
		||||
// ---------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// This file was generated by the CEF translator tool. If making changes by
 | 
			
		||||
// hand only do so within the body of existing method and function
 | 
			
		||||
// implementations. See the translator.README.txt file in the tools directory
 | 
			
		||||
// for more information.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_HANDLER_CPPTOC_H_
 | 
			
		||||
#define CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_HANDLER_CPPTOC_H_
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifndef USING_CEF_SHARED
 | 
			
		||||
#pragma message("Warning: "__FILE__" may be accessed wrapper-side only")
 | 
			
		||||
#else  // USING_CEF_SHARED
 | 
			
		||||
 | 
			
		||||
#include "include/cef_jsdialog_handler.h"
 | 
			
		||||
#include "include/capi/cef_jsdialog_handler_capi.h"
 | 
			
		||||
#include "libcef_dll/cpptoc/cpptoc.h"
 | 
			
		||||
 | 
			
		||||
// Wrap a C++ class with a C structure.
 | 
			
		||||
// This class may be instantiated and accessed wrapper-side only.
 | 
			
		||||
class CefJSDialogHandlerCppToC
 | 
			
		||||
    : public CefCppToC<CefJSDialogHandlerCppToC, CefJSDialogHandler,
 | 
			
		||||
        cef_jsdialog_handler_t> {
 | 
			
		||||
 public:
 | 
			
		||||
  explicit CefJSDialogHandlerCppToC(CefJSDialogHandler* cls);
 | 
			
		||||
  virtual ~CefJSDialogHandlerCppToC() {}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif  // USING_CEF_SHARED
 | 
			
		||||
#endif  // CEF_LIBCEF_DLL_CPPTOC_JSDIALOG_HANDLER_CPPTOC_H_
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user