mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-13 10:42:58 +01:00
Add a new CefLifeSpanHandler::CanCreatePopup() method for canceling the creation of popup windows (issue #816).
git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1085 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
parent
830182196c
commit
02587eba55
@ -47,7 +47,8 @@ extern "C" {
|
|||||||
|
|
||||||
///
|
///
|
||||||
// Implement this structure to handle events related to browser life span. The
|
// Implement this structure to handle events related to browser life span. The
|
||||||
// functions of this structure will be called on the UI thread.
|
// functions of this structure will be called on the UI thread unless otherwise
|
||||||
|
// indicated.
|
||||||
///
|
///
|
||||||
typedef struct _cef_life_span_handler_t {
|
typedef struct _cef_life_span_handler_t {
|
||||||
///
|
///
|
||||||
@ -56,21 +57,39 @@ typedef struct _cef_life_span_handler_t {
|
|||||||
cef_base_t base;
|
cef_base_t base;
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called before a new popup window is created. The |parentBrowser| parameter
|
// Called on the IO thread before a new popup window is created. The |browser|
|
||||||
// will point to the parent browser window. The |popupFeatures| parameter will
|
// and |frame| parameters represent the source of the popup request. The
|
||||||
// contain information about the style of popup window requested. Return false
|
// |target_url| and |target_frame_name| values may be NULL if none was
|
||||||
// (0) to have the framework create the new popup window based on the
|
// specified with the request. Return true (1) to allow creation of the popup
|
||||||
// parameters in |windowInfo|. Return true (1) to cancel creation of the popup
|
// window or false (0) to cancel creation. If true (1) is returned,
|
||||||
// window. By default, a newly created popup window will have the same client
|
// |no_javascript_access| will indicate whether the window that is created
|
||||||
// and settings as the parent window. To change the client for the new window
|
// should be scriptable/in the same process as the source browser. Do not
|
||||||
// modify the object that |client| points to. To change the settings for the
|
// perform blocking work in this callback as it will block the associated
|
||||||
// new window modify the |settings| structure.
|
// render process. To completely disable popup windows for a browser set
|
||||||
|
// cef_browser_tSettings.javascript_open_windows to STATE_DISABLED.
|
||||||
///
|
///
|
||||||
int (CEF_CALLBACK *on_before_popup)(struct _cef_life_span_handler_t* self,
|
int (CEF_CALLBACK *can_create_popup)(struct _cef_life_span_handler_t* self,
|
||||||
struct _cef_browser_t* parentBrowser,
|
struct _cef_browser_t* browser, struct _cef_frame_t* frame,
|
||||||
|
const cef_string_t* target_url, const cef_string_t* target_frame_name,
|
||||||
|
int* no_javascript_access);
|
||||||
|
|
||||||
|
///
|
||||||
|
// Called before the cef_browser_host_t object associated with a new popup
|
||||||
|
// window is created. This function will only be called in can_create_popup()
|
||||||
|
// returns true (1). The |browser| parameter represents the source of the
|
||||||
|
// popup request. The |popupFeatures| parameter will contain information about
|
||||||
|
// the style of popup window requested. The framework will create the new
|
||||||
|
// popup window based on the parameters in |windowInfo|. By default, a newly
|
||||||
|
// created popup window will have the same client and settings as the parent
|
||||||
|
// window. To change the client for the new window modify the object that
|
||||||
|
// |client| points to. To change the settings for the new window modify the
|
||||||
|
// |settings| structure.
|
||||||
|
///
|
||||||
|
void (CEF_CALLBACK *on_before_popup)(struct _cef_life_span_handler_t* self,
|
||||||
|
struct _cef_browser_t* browser,
|
||||||
const struct _cef_popup_features_t* popupFeatures,
|
const struct _cef_popup_features_t* popupFeatures,
|
||||||
struct _cef_window_info_t* windowInfo, const cef_string_t* url,
|
struct _cef_window_info_t* windowInfo, const cef_string_t* target_url,
|
||||||
struct _cef_client_t** client,
|
const cef_string_t* target_frame_name, struct _cef_client_t** client,
|
||||||
struct _cef_browser_settings_t* settings);
|
struct _cef_browser_settings_t* settings);
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -45,29 +45,53 @@ class CefClient;
|
|||||||
|
|
||||||
///
|
///
|
||||||
// Implement this interface to handle events related to browser life span. The
|
// Implement this interface to handle events related to browser life span. The
|
||||||
// methods of this class will be called on the UI thread.
|
// methods of this class will be called on the UI thread unless otherwise
|
||||||
|
// indicated.
|
||||||
///
|
///
|
||||||
/*--cef(source=client)--*/
|
/*--cef(source=client)--*/
|
||||||
class CefLifeSpanHandler : public virtual CefBase {
|
class CefLifeSpanHandler : public virtual CefBase {
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
// Called before a new popup window is created. The |parentBrowser| parameter
|
// Called on the IO thread before a new popup window is created. The |browser|
|
||||||
// will point to the parent browser window. The |popupFeatures| parameter will
|
// and |frame| parameters represent the source of the popup request. The
|
||||||
// contain information about the style of popup window requested. Return false
|
// |target_url| and |target_frame_name| values may be empty if none was
|
||||||
// to have the framework create the new popup window based on the parameters
|
// specified with the request. Return true to allow creation of the popup
|
||||||
// in |windowInfo|. Return true to cancel creation of the popup window. By
|
// window or false to cancel creation. If true is returned,
|
||||||
// default, a newly created popup window will have the same client and
|
// |no_javascript_access| will indicate whether the window that is created
|
||||||
// settings as the parent window. To change the client for the new window
|
// should be scriptable/in the same process as the source browser. Do not
|
||||||
// modify the object that |client| points to. To change the settings for the
|
// perform blocking work in this callback as it will block the associated
|
||||||
// new window modify the |settings| structure.
|
// render process. To completely disable popup windows for a browser set
|
||||||
|
// CefBrowserSettings.javascript_open_windows to STATE_DISABLED.
|
||||||
///
|
///
|
||||||
/*--cef(optional_param=url)--*/
|
/*--cef(optional_param=target_url,optional_param=target_frame_name)--*/
|
||||||
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> parentBrowser,
|
virtual bool CanCreatePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
|
bool* no_javascript_access) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
// Called before the CefBrowserHost object associated with a new popup window
|
||||||
|
// is created. This method will only be called in CanCreatePopup() returns
|
||||||
|
// true. The |browser| parameter represents the source of the popup request.
|
||||||
|
// The |popupFeatures| parameter will contain information about the style of
|
||||||
|
// popup window requested. The framework will create the new popup window
|
||||||
|
// based on the parameters in |windowInfo|. By default, a newly created popup
|
||||||
|
// window will have the same client and settings as the parent window. To
|
||||||
|
// change the client for the new window modify the object that |client| points
|
||||||
|
// to. To change the settings for the new window modify the |settings|
|
||||||
|
// structure.
|
||||||
|
///
|
||||||
|
/*--cef(optional_param=target_url,optional_param=target_frame_name)--*/
|
||||||
|
virtual void OnBeforePopup(CefRefPtr<CefBrowser> browser,
|
||||||
const CefPopupFeatures& popupFeatures,
|
const CefPopupFeatures& popupFeatures,
|
||||||
CefWindowInfo& windowInfo,
|
CefWindowInfo& windowInfo,
|
||||||
const CefString& url,
|
const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
CefRefPtr<CefClient>& client,
|
CefRefPtr<CefClient>& client,
|
||||||
CefBrowserSettings& settings) { return false; }
|
CefBrowserSettings& settings) {}
|
||||||
|
|
||||||
///
|
///
|
||||||
// Called after a new window is created.
|
// Called after a new window is created.
|
||||||
|
@ -1520,12 +1520,10 @@ bool CefBrowserHostImpl::ShouldCreateWebContents(
|
|||||||
CefRefPtr<CefLifeSpanHandler> handler = client_->GetLifeSpanHandler();
|
CefRefPtr<CefLifeSpanHandler> handler = client_->GetLifeSpanHandler();
|
||||||
// Give the handler an opportunity to modify window attributes, handler,
|
// Give the handler an opportunity to modify window attributes, handler,
|
||||||
// or cancel the window creation.
|
// or cancel the window creation.
|
||||||
if (handler.get() &&
|
if (handler.get()) {
|
||||||
handler->OnBeforePopup(this, features, pending_window_info_,
|
handler->OnBeforePopup(this, features, pending_window_info_,
|
||||||
target_url.spec(), pending_client_,
|
target_url.spec(), frame_name,
|
||||||
pending_settings_)) {
|
pending_client_, pending_settings_);
|
||||||
pending_client_ = NULL;
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "base/compiler_specific.h"
|
#include "base/compiler_specific.h"
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
|
#include "content/common/view_messages.h"
|
||||||
#include "content/public/browser/render_process_host.h"
|
#include "content/public/browser/render_process_host.h"
|
||||||
|
|
||||||
CefBrowserMessageFilter::CefBrowserMessageFilter(
|
CefBrowserMessageFilter::CefBrowserMessageFilter(
|
||||||
@ -36,11 +37,17 @@ void CefBrowserMessageFilter::OnFilterRemoved() {
|
|||||||
|
|
||||||
bool CefBrowserMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
bool CefBrowserMessageFilter::OnMessageReceived(const IPC::Message& message) {
|
||||||
bool handled = true;
|
bool handled = true;
|
||||||
|
if (message.type() == ViewHostMsg_CreateWindow::ID) {
|
||||||
|
// Observe but don't handle this message.
|
||||||
|
handled = false;
|
||||||
|
}
|
||||||
|
|
||||||
IPC_BEGIN_MESSAGE_MAP(CefBrowserMessageFilter, message)
|
IPC_BEGIN_MESSAGE_MAP(CefBrowserMessageFilter, message)
|
||||||
IPC_MESSAGE_HANDLER(CefProcessHostMsg_GetNewRenderThreadInfo,
|
IPC_MESSAGE_HANDLER(CefProcessHostMsg_GetNewRenderThreadInfo,
|
||||||
OnGetNewRenderThreadInfo)
|
OnGetNewRenderThreadInfo)
|
||||||
IPC_MESSAGE_HANDLER(CefProcessHostMsg_GetNewBrowserInfo,
|
IPC_MESSAGE_HANDLER(CefProcessHostMsg_GetNewBrowserInfo,
|
||||||
OnGetNewBrowserInfo)
|
OnGetNewBrowserInfo)
|
||||||
|
IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWindow, OnCreateWindow)
|
||||||
IPC_MESSAGE_UNHANDLED(handled = false)
|
IPC_MESSAGE_UNHANDLED(handled = false)
|
||||||
IPC_END_MESSAGE_MAP()
|
IPC_END_MESSAGE_MAP()
|
||||||
return handled;
|
return handled;
|
||||||
@ -76,3 +83,16 @@ void CefBrowserMessageFilter::OnGetNewBrowserInfo(
|
|||||||
params->browser_id = info->browser_id();
|
params->browser_id = info->browser_id();
|
||||||
params->is_popup = info->is_popup();
|
params->is_popup = info->is_popup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CefBrowserMessageFilter::OnCreateWindow(
|
||||||
|
const ViewHostMsg_CreateWindow_Params& params,
|
||||||
|
int* route_id,
|
||||||
|
int* surface_id,
|
||||||
|
int64* cloned_session_storage_namespace_id) {
|
||||||
|
CefContentBrowserClient::LastCreateWindowParams lcwp;
|
||||||
|
lcwp.opener_id = params.opener_id;
|
||||||
|
lcwp.opener_frame_id = params.opener_frame_id;
|
||||||
|
lcwp.target_url = params.target_url;
|
||||||
|
lcwp.target_frame_name = params.frame_name;
|
||||||
|
CefContentBrowserClient::Get()->set_last_create_window_params(lcwp);
|
||||||
|
}
|
||||||
|
@ -15,6 +15,7 @@ class RenderProcessHost;
|
|||||||
|
|
||||||
struct CefProcessHostMsg_GetNewBrowserInfo_Params;
|
struct CefProcessHostMsg_GetNewBrowserInfo_Params;
|
||||||
struct CefProcessHostMsg_GetNewRenderThreadInfo_Params;
|
struct CefProcessHostMsg_GetNewRenderThreadInfo_Params;
|
||||||
|
struct ViewHostMsg_CreateWindow_Params;
|
||||||
|
|
||||||
// This class sends and receives control messages on the browser process.
|
// This class sends and receives control messages on the browser process.
|
||||||
class CefBrowserMessageFilter : public IPC::ChannelProxy::MessageFilter {
|
class CefBrowserMessageFilter : public IPC::ChannelProxy::MessageFilter {
|
||||||
@ -35,6 +36,10 @@ class CefBrowserMessageFilter : public IPC::ChannelProxy::MessageFilter {
|
|||||||
CefProcessHostMsg_GetNewRenderThreadInfo_Params* params);
|
CefProcessHostMsg_GetNewRenderThreadInfo_Params* params);
|
||||||
void OnGetNewBrowserInfo(int routing_id,
|
void OnGetNewBrowserInfo(int routing_id,
|
||||||
CefProcessHostMsg_GetNewBrowserInfo_Params* params);
|
CefProcessHostMsg_GetNewBrowserInfo_Params* params);
|
||||||
|
void OnCreateWindow(const ViewHostMsg_CreateWindow_Params& params,
|
||||||
|
int* route_id,
|
||||||
|
int* surface_id,
|
||||||
|
int64* cloned_session_storage_namespace_id);
|
||||||
|
|
||||||
content::RenderProcessHost* host_;
|
content::RenderProcessHost* host_;
|
||||||
IPC::Channel* channel_;
|
IPC::Channel* channel_;
|
||||||
|
@ -252,6 +252,8 @@ CefContentBrowserClient::CefContentBrowserClient()
|
|||||||
plugin_service_filter_.reset(new CefPluginServiceFilter);
|
plugin_service_filter_.reset(new CefPluginServiceFilter);
|
||||||
content::PluginServiceImpl::GetInstance()->SetFilter(
|
content::PluginServiceImpl::GetInstance()->SetFilter(
|
||||||
plugin_service_filter_.get());
|
plugin_service_filter_.get());
|
||||||
|
|
||||||
|
last_create_window_params_.opener_id = MSG_ROUTING_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
CefContentBrowserClient::~CefContentBrowserClient() {
|
CefContentBrowserClient::~CefContentBrowserClient() {
|
||||||
@ -455,6 +457,49 @@ content::AccessTokenStore* CefContentBrowserClient::CreateAccessTokenStore() {
|
|||||||
return new CefAccessTokenStore;
|
return new CefAccessTokenStore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CefContentBrowserClient::CanCreateWindow(
|
||||||
|
const GURL& opener_url,
|
||||||
|
const GURL& origin,
|
||||||
|
WindowContainerType container_type,
|
||||||
|
content::ResourceContext* context,
|
||||||
|
int render_process_id,
|
||||||
|
bool* no_javascript_access) {
|
||||||
|
CEF_REQUIRE_IOT();
|
||||||
|
*no_javascript_access = false;
|
||||||
|
|
||||||
|
DCHECK_NE(last_create_window_params_.opener_id, MSG_ROUTING_NONE);
|
||||||
|
if (last_create_window_params_.opener_id == MSG_ROUTING_NONE)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
CefRefPtr<CefBrowserHostImpl> browser =
|
||||||
|
CefBrowserHostImpl::GetBrowserByRoutingID(
|
||||||
|
render_process_id,
|
||||||
|
last_create_window_params_.opener_id);
|
||||||
|
DCHECK(browser.get());
|
||||||
|
if (!browser.get())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
bool allow = true;
|
||||||
|
|
||||||
|
CefRefPtr<CefClient> client = browser->GetClient();
|
||||||
|
if (client.get()) {
|
||||||
|
CefRefPtr<CefLifeSpanHandler> handler = client->GetLifeSpanHandler();
|
||||||
|
if (handler.get()) {
|
||||||
|
CefRefPtr<CefFrame> frame =
|
||||||
|
browser->GetFrame(last_create_window_params_.opener_frame_id);
|
||||||
|
allow = handler->CanCreatePopup(browser.get(),
|
||||||
|
frame,
|
||||||
|
last_create_window_params_.target_url.spec(),
|
||||||
|
last_create_window_params_.target_frame_name,
|
||||||
|
no_javascript_access);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
last_create_window_params_.opener_id = MSG_ROUTING_NONE;
|
||||||
|
|
||||||
|
return allow;
|
||||||
|
}
|
||||||
|
|
||||||
void CefContentBrowserClient::ResourceDispatcherHostCreated() {
|
void CefContentBrowserClient::ResourceDispatcherHostCreated() {
|
||||||
resource_dispatcher_host_delegate_.reset(
|
resource_dispatcher_host_delegate_.reset(
|
||||||
new CefResourceDispatcherHostDelegate());
|
new CefResourceDispatcherHostDelegate());
|
||||||
@ -502,3 +547,9 @@ const wchar_t* CefContentBrowserClient::GetResourceDllName() {
|
|||||||
return file_path;
|
return file_path;
|
||||||
}
|
}
|
||||||
#endif // defined(OS_WIN)
|
#endif // defined(OS_WIN)
|
||||||
|
|
||||||
|
void CefContentBrowserClient::set_last_create_window_params(
|
||||||
|
const LastCreateWindowParams& params) {
|
||||||
|
CEF_REQUIRE_IOT();
|
||||||
|
last_create_window_params_ = params;
|
||||||
|
}
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "base/memory/scoped_ptr.h"
|
#include "base/memory/scoped_ptr.h"
|
||||||
#include "base/synchronization/lock.h"
|
#include "base/synchronization/lock.h"
|
||||||
#include "content/public/browser/content_browser_client.h"
|
#include "content/public/browser/content_browser_client.h"
|
||||||
|
#include "googleurl/src/gurl.h"
|
||||||
|
|
||||||
class CefBrowserInfo;
|
class CefBrowserInfo;
|
||||||
class CefBrowserMainParts;
|
class CefBrowserMainParts;
|
||||||
@ -71,6 +72,12 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
CreateQuotaPermissionContext() OVERRIDE;
|
CreateQuotaPermissionContext() OVERRIDE;
|
||||||
virtual content::MediaObserver* GetMediaObserver() OVERRIDE;
|
virtual content::MediaObserver* GetMediaObserver() OVERRIDE;
|
||||||
virtual content::AccessTokenStore* CreateAccessTokenStore() OVERRIDE;
|
virtual content::AccessTokenStore* CreateAccessTokenStore() OVERRIDE;
|
||||||
|
virtual bool CanCreateWindow(const GURL& opener_url,
|
||||||
|
const GURL& origin,
|
||||||
|
WindowContainerType container_type,
|
||||||
|
content::ResourceContext* context,
|
||||||
|
int render_process_id,
|
||||||
|
bool* no_javascript_access) OVERRIDE;
|
||||||
virtual void ResourceDispatcherHostCreated() OVERRIDE;
|
virtual void ResourceDispatcherHostCreated() OVERRIDE;
|
||||||
virtual void OverrideWebkitPrefs(content::RenderViewHost* rvh,
|
virtual void OverrideWebkitPrefs(content::RenderViewHost* rvh,
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
@ -83,6 +90,16 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
const wchar_t* GetResourceDllName() OVERRIDE;
|
const wchar_t* GetResourceDllName() OVERRIDE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Store additional state from the ViewHostMsg_CreateWindow message that will
|
||||||
|
// be used when CanCreateWindow() is called.
|
||||||
|
struct LastCreateWindowParams {
|
||||||
|
int opener_id;
|
||||||
|
int64 opener_frame_id;
|
||||||
|
GURL target_url;
|
||||||
|
string16 target_frame_name;
|
||||||
|
};
|
||||||
|
void set_last_create_window_params(const LastCreateWindowParams& params);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CefBrowserMainParts* browser_main_parts_;
|
CefBrowserMainParts* browser_main_parts_;
|
||||||
|
|
||||||
@ -97,6 +114,9 @@ class CefContentBrowserClient : public content::ContentBrowserClient {
|
|||||||
typedef std::list<scoped_refptr<CefBrowserInfo> > BrowserInfoList;
|
typedef std::list<scoped_refptr<CefBrowserInfo> > BrowserInfoList;
|
||||||
BrowserInfoList browser_info_list_;
|
BrowserInfoList browser_info_list_;
|
||||||
int next_browser_id_;
|
int next_browser_id_;
|
||||||
|
|
||||||
|
// Only accessed on the IO thread.
|
||||||
|
LastCreateWindowParams last_create_window_params_;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CEF_LIBCEF_BROWSER_CONTENT_BROWSER_CLIENT_H_
|
#endif // CEF_LIBCEF_BROWSER_CONTENT_BROWSER_CLIENT_H_
|
||||||
|
@ -13,41 +13,86 @@
|
|||||||
#include "libcef_dll/cpptoc/client_cpptoc.h"
|
#include "libcef_dll/cpptoc/client_cpptoc.h"
|
||||||
#include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
|
#include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
|
||||||
#include "libcef_dll/ctocpp/browser_ctocpp.h"
|
#include "libcef_dll/ctocpp/browser_ctocpp.h"
|
||||||
|
#include "libcef_dll/ctocpp/frame_ctocpp.h"
|
||||||
|
|
||||||
|
|
||||||
// MEMBER FUNCTIONS - Body may be edited by hand.
|
// MEMBER FUNCTIONS - Body may be edited by hand.
|
||||||
|
|
||||||
int CEF_CALLBACK life_span_handler_on_before_popup(
|
int CEF_CALLBACK life_span_handler_can_create_popup(
|
||||||
struct _cef_life_span_handler_t* self, cef_browser_t* parentBrowser,
|
struct _cef_life_span_handler_t* self, cef_browser_t* browser,
|
||||||
const struct _cef_popup_features_t* popupFeatures,
|
cef_frame_t* frame, const cef_string_t* target_url,
|
||||||
cef_window_info_t* windowInfo, const cef_string_t* url,
|
const cef_string_t* target_frame_name, int* no_javascript_access) {
|
||||||
cef_client_t** client, struct _cef_browser_settings_t* settings) {
|
|
||||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
DCHECK(self);
|
DCHECK(self);
|
||||||
if (!self)
|
if (!self)
|
||||||
return 0;
|
return 0;
|
||||||
// Verify param: parentBrowser; type: refptr_diff
|
// Verify param: browser; type: refptr_diff
|
||||||
DCHECK(parentBrowser);
|
DCHECK(browser);
|
||||||
if (!parentBrowser)
|
if (!browser)
|
||||||
return 0;
|
return 0;
|
||||||
|
// Verify param: frame; type: refptr_diff
|
||||||
|
DCHECK(frame);
|
||||||
|
if (!frame)
|
||||||
|
return 0;
|
||||||
|
// Verify param: no_javascript_access; type: bool_byaddr
|
||||||
|
DCHECK(no_javascript_access);
|
||||||
|
if (!no_javascript_access)
|
||||||
|
return 0;
|
||||||
|
// Unverified params: target_url, target_frame_name
|
||||||
|
|
||||||
|
// Translate param: no_javascript_access; type: bool_byaddr
|
||||||
|
bool no_javascript_accessBool = (
|
||||||
|
no_javascript_access && *no_javascript_access)?true:false;
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
bool _retval = CefLifeSpanHandlerCppToC::Get(self)->CanCreatePopup(
|
||||||
|
CefBrowserCToCpp::Wrap(browser),
|
||||||
|
CefFrameCToCpp::Wrap(frame),
|
||||||
|
CefString(target_url),
|
||||||
|
CefString(target_frame_name),
|
||||||
|
&no_javascript_accessBool);
|
||||||
|
|
||||||
|
// Restore param: no_javascript_access; type: bool_byaddr
|
||||||
|
if (no_javascript_access)
|
||||||
|
*no_javascript_access = no_javascript_accessBool?true:false;
|
||||||
|
|
||||||
|
// Return type: bool
|
||||||
|
return _retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CEF_CALLBACK life_span_handler_on_before_popup(
|
||||||
|
struct _cef_life_span_handler_t* self, cef_browser_t* browser,
|
||||||
|
const struct _cef_popup_features_t* popupFeatures,
|
||||||
|
cef_window_info_t* windowInfo, const cef_string_t* target_url,
|
||||||
|
const cef_string_t* target_frame_name, cef_client_t** client,
|
||||||
|
struct _cef_browser_settings_t* settings) {
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
DCHECK(self);
|
||||||
|
if (!self)
|
||||||
|
return;
|
||||||
|
// Verify param: browser; type: refptr_diff
|
||||||
|
DCHECK(browser);
|
||||||
|
if (!browser)
|
||||||
|
return;
|
||||||
// Verify param: popupFeatures; type: struct_byref_const
|
// Verify param: popupFeatures; type: struct_byref_const
|
||||||
DCHECK(popupFeatures);
|
DCHECK(popupFeatures);
|
||||||
if (!popupFeatures)
|
if (!popupFeatures)
|
||||||
return 0;
|
return;
|
||||||
// Verify param: windowInfo; type: struct_byref
|
// Verify param: windowInfo; type: struct_byref
|
||||||
DCHECK(windowInfo);
|
DCHECK(windowInfo);
|
||||||
if (!windowInfo)
|
if (!windowInfo)
|
||||||
return 0;
|
return;
|
||||||
// Verify param: client; type: refptr_same_byref
|
// Verify param: client; type: refptr_same_byref
|
||||||
DCHECK(client);
|
DCHECK(client);
|
||||||
if (!client)
|
if (!client)
|
||||||
return 0;
|
return;
|
||||||
// Verify param: settings; type: struct_byref
|
// Verify param: settings; type: struct_byref
|
||||||
DCHECK(settings);
|
DCHECK(settings);
|
||||||
if (!settings)
|
if (!settings)
|
||||||
return 0;
|
return;
|
||||||
// Unverified params: url
|
// Unverified params: target_url, target_frame_name
|
||||||
|
|
||||||
// Translate param: popupFeatures; type: struct_byref_const
|
// Translate param: popupFeatures; type: struct_byref_const
|
||||||
CefPopupFeatures popupFeaturesObj;
|
CefPopupFeatures popupFeaturesObj;
|
||||||
@ -68,11 +113,12 @@ int CEF_CALLBACK life_span_handler_on_before_popup(
|
|||||||
settingsObj.AttachTo(*settings);
|
settingsObj.AttachTo(*settings);
|
||||||
|
|
||||||
// Execute
|
// Execute
|
||||||
bool _retval = CefLifeSpanHandlerCppToC::Get(self)->OnBeforePopup(
|
CefLifeSpanHandlerCppToC::Get(self)->OnBeforePopup(
|
||||||
CefBrowserCToCpp::Wrap(parentBrowser),
|
CefBrowserCToCpp::Wrap(browser),
|
||||||
popupFeaturesObj,
|
popupFeaturesObj,
|
||||||
windowInfoObj,
|
windowInfoObj,
|
||||||
CefString(url),
|
CefString(target_url),
|
||||||
|
CefString(target_frame_name),
|
||||||
clientPtr,
|
clientPtr,
|
||||||
settingsObj);
|
settingsObj);
|
||||||
|
|
||||||
@ -92,9 +138,6 @@ int CEF_CALLBACK life_span_handler_on_before_popup(
|
|||||||
// Restore param: settings; type: struct_byref
|
// Restore param: settings; type: struct_byref
|
||||||
if (settings)
|
if (settings)
|
||||||
settingsObj.DetachTo(*settings);
|
settingsObj.DetachTo(*settings);
|
||||||
|
|
||||||
// Return type: bool
|
|
||||||
return _retval;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CEF_CALLBACK life_span_handler_on_after_created(
|
void CEF_CALLBACK life_span_handler_on_after_created(
|
||||||
@ -177,6 +220,7 @@ void CEF_CALLBACK life_span_handler_on_before_close(
|
|||||||
CefLifeSpanHandlerCppToC::CefLifeSpanHandlerCppToC(CefLifeSpanHandler* cls)
|
CefLifeSpanHandlerCppToC::CefLifeSpanHandlerCppToC(CefLifeSpanHandler* cls)
|
||||||
: CefCppToC<CefLifeSpanHandlerCppToC, CefLifeSpanHandler,
|
: CefCppToC<CefLifeSpanHandlerCppToC, CefLifeSpanHandler,
|
||||||
cef_life_span_handler_t>(cls) {
|
cef_life_span_handler_t>(cls) {
|
||||||
|
struct_.struct_.can_create_popup = life_span_handler_can_create_popup;
|
||||||
struct_.struct_.on_before_popup = life_span_handler_on_before_popup;
|
struct_.struct_.on_before_popup = life_span_handler_on_before_popup;
|
||||||
struct_.struct_.on_after_created = life_span_handler_on_after_created;
|
struct_.struct_.on_after_created = life_span_handler_on_after_created;
|
||||||
struct_.struct_.run_modal = life_span_handler_run_modal;
|
struct_.struct_.run_modal = life_span_handler_run_modal;
|
||||||
|
@ -11,26 +11,68 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "libcef_dll/cpptoc/browser_cpptoc.h"
|
#include "libcef_dll/cpptoc/browser_cpptoc.h"
|
||||||
|
#include "libcef_dll/cpptoc/frame_cpptoc.h"
|
||||||
#include "libcef_dll/ctocpp/client_ctocpp.h"
|
#include "libcef_dll/ctocpp/client_ctocpp.h"
|
||||||
#include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
|
#include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
|
||||||
|
|
||||||
|
|
||||||
// VIRTUAL METHODS - Body may be edited by hand.
|
// VIRTUAL METHODS - Body may be edited by hand.
|
||||||
|
|
||||||
bool CefLifeSpanHandlerCToCpp::OnBeforePopup(
|
bool CefLifeSpanHandlerCToCpp::CanCreatePopup(CefRefPtr<CefBrowser> browser,
|
||||||
CefRefPtr<CefBrowser> parentBrowser, const CefPopupFeatures& popupFeatures,
|
CefRefPtr<CefFrame> frame, const CefString& target_url,
|
||||||
CefWindowInfo& windowInfo, const CefString& url,
|
const CefString& target_frame_name, bool* no_javascript_access) {
|
||||||
CefRefPtr<CefClient>& client, CefBrowserSettings& settings) {
|
if (CEF_MEMBER_MISSING(struct_, can_create_popup))
|
||||||
if (CEF_MEMBER_MISSING(struct_, on_before_popup))
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
// Verify param: parentBrowser; type: refptr_diff
|
// Verify param: browser; type: refptr_diff
|
||||||
DCHECK(parentBrowser.get());
|
DCHECK(browser.get());
|
||||||
if (!parentBrowser.get())
|
if (!browser.get())
|
||||||
return false;
|
return false;
|
||||||
// Unverified params: url
|
// Verify param: frame; type: refptr_diff
|
||||||
|
DCHECK(frame.get());
|
||||||
|
if (!frame.get())
|
||||||
|
return false;
|
||||||
|
// Verify param: no_javascript_access; type: bool_byaddr
|
||||||
|
DCHECK(no_javascript_access);
|
||||||
|
if (!no_javascript_access)
|
||||||
|
return false;
|
||||||
|
// Unverified params: target_url, target_frame_name
|
||||||
|
|
||||||
|
// Translate param: no_javascript_access; type: bool_byaddr
|
||||||
|
int no_javascript_accessInt = no_javascript_access?*no_javascript_access:0;
|
||||||
|
|
||||||
|
// Execute
|
||||||
|
int _retval = struct_->can_create_popup(struct_,
|
||||||
|
CefBrowserCppToC::Wrap(browser),
|
||||||
|
CefFrameCppToC::Wrap(frame),
|
||||||
|
target_url.GetStruct(),
|
||||||
|
target_frame_name.GetStruct(),
|
||||||
|
&no_javascript_accessInt);
|
||||||
|
|
||||||
|
// Restore param:no_javascript_access; type: bool_byaddr
|
||||||
|
if (no_javascript_access)
|
||||||
|
*no_javascript_access = no_javascript_accessInt?true:false;
|
||||||
|
|
||||||
|
// Return type: bool
|
||||||
|
return _retval?true:false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CefLifeSpanHandlerCToCpp::OnBeforePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
const CefPopupFeatures& popupFeatures, CefWindowInfo& windowInfo,
|
||||||
|
const CefString& target_url, const CefString& target_frame_name,
|
||||||
|
CefRefPtr<CefClient>& client, CefBrowserSettings& settings) {
|
||||||
|
if (CEF_MEMBER_MISSING(struct_, on_before_popup))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
|
||||||
|
|
||||||
|
// Verify param: browser; type: refptr_diff
|
||||||
|
DCHECK(browser.get());
|
||||||
|
if (!browser.get())
|
||||||
|
return;
|
||||||
|
// Unverified params: target_url, target_frame_name
|
||||||
|
|
||||||
// Translate param: client; type: refptr_same_byref
|
// Translate param: client; type: refptr_same_byref
|
||||||
cef_client_t* clientStruct = NULL;
|
cef_client_t* clientStruct = NULL;
|
||||||
@ -39,11 +81,12 @@ bool CefLifeSpanHandlerCToCpp::OnBeforePopup(
|
|||||||
cef_client_t* clientOrig = clientStruct;
|
cef_client_t* clientOrig = clientStruct;
|
||||||
|
|
||||||
// Execute
|
// Execute
|
||||||
int _retval = struct_->on_before_popup(struct_,
|
struct_->on_before_popup(struct_,
|
||||||
CefBrowserCppToC::Wrap(parentBrowser),
|
CefBrowserCppToC::Wrap(browser),
|
||||||
&popupFeatures,
|
&popupFeatures,
|
||||||
&windowInfo,
|
&windowInfo,
|
||||||
url.GetStruct(),
|
target_url.GetStruct(),
|
||||||
|
target_frame_name.GetStruct(),
|
||||||
&clientStruct,
|
&clientStruct,
|
||||||
&settings);
|
&settings);
|
||||||
|
|
||||||
@ -55,9 +98,6 @@ bool CefLifeSpanHandlerCToCpp::OnBeforePopup(
|
|||||||
} else {
|
} else {
|
||||||
client = NULL;
|
client = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return type: bool
|
|
||||||
return _retval?true:false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CefLifeSpanHandlerCToCpp::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
void CefLifeSpanHandlerCToCpp::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
||||||
|
@ -36,10 +36,14 @@ class CefLifeSpanHandlerCToCpp
|
|||||||
virtual ~CefLifeSpanHandlerCToCpp() {}
|
virtual ~CefLifeSpanHandlerCToCpp() {}
|
||||||
|
|
||||||
// CefLifeSpanHandler methods
|
// CefLifeSpanHandler methods
|
||||||
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> parentBrowser,
|
virtual bool CanCreatePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame, const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
|
bool* no_javascript_access) OVERRIDE;
|
||||||
|
virtual void OnBeforePopup(CefRefPtr<CefBrowser> browser,
|
||||||
const CefPopupFeatures& popupFeatures, CefWindowInfo& windowInfo,
|
const CefPopupFeatures& popupFeatures, CefWindowInfo& windowInfo,
|
||||||
const CefString& url, CefRefPtr<CefClient>& client,
|
const CefString& target_url, const CefString& target_frame_name,
|
||||||
CefBrowserSettings& settings) OVERRIDE;
|
CefRefPtr<CefClient>& client, CefBrowserSettings& settings) OVERRIDE;
|
||||||
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||||
virtual bool RunModal(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
virtual bool RunModal(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||||
virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||||
|
@ -232,6 +232,18 @@ bool ClientHandler::OnPreKeyEvent(CefRefPtr<CefBrowser> browser,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ClientHandler::CanCreatePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
|
bool* no_javascript_access) {
|
||||||
|
if (browser->GetHost()->IsWindowRenderingDisabled()) {
|
||||||
|
// Cancel popups in off-screen rendering mode.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void ClientHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
void ClientHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
||||||
REQUIRE_UI_THREAD();
|
REQUIRE_UI_THREAD();
|
||||||
|
|
||||||
@ -243,19 +255,6 @@ void ClientHandler::OnAfterCreated(CefRefPtr<CefBrowser> browser) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClientHandler::OnBeforePopup(CefRefPtr<CefBrowser> parentBrowser,
|
|
||||||
const CefPopupFeatures& popupFeatures,
|
|
||||||
CefWindowInfo& windowInfo,
|
|
||||||
const CefString& url,
|
|
||||||
CefRefPtr<CefClient>& client,
|
|
||||||
CefBrowserSettings& settings) {
|
|
||||||
if (parentBrowser->GetHost()->IsWindowRenderingDisabled()) {
|
|
||||||
// Cancel popups in off-screen rendering mode.
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ClientHandler::DoClose(CefRefPtr<CefBrowser> browser) {
|
bool ClientHandler::DoClose(CefRefPtr<CefBrowser> browser) {
|
||||||
REQUIRE_UI_THREAD();
|
REQUIRE_UI_THREAD();
|
||||||
|
|
||||||
|
@ -159,16 +159,14 @@ class ClientHandler : public CefClient,
|
|||||||
bool* is_keyboard_shortcut) OVERRIDE;
|
bool* is_keyboard_shortcut) OVERRIDE;
|
||||||
|
|
||||||
// CefLifeSpanHandler methods
|
// CefLifeSpanHandler methods
|
||||||
|
virtual bool CanCreatePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
|
bool* no_javascript_access) OVERRIDE;
|
||||||
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||||
virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
virtual bool DoClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||||
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;
|
||||||
virtual bool OnBeforePopup(
|
|
||||||
CefRefPtr<CefBrowser> parentBrowser,
|
|
||||||
const CefPopupFeatures& popupFeatures,
|
|
||||||
CefWindowInfo& windowInfo,
|
|
||||||
const CefString& url,
|
|
||||||
CefRefPtr<CefClient>& client,
|
|
||||||
CefBrowserSettings& settings) OVERRIDE;
|
|
||||||
|
|
||||||
// CefLoadHandler methods
|
// CefLoadHandler methods
|
||||||
virtual void OnLoadStart(CefRefPtr<CefBrowser> browser,
|
virtual void OnLoadStart(CefRefPtr<CefBrowser> browser,
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include <list>
|
#include <list>
|
||||||
#include "include/cef_callback.h"
|
#include "include/cef_callback.h"
|
||||||
|
#include "include/cef_runnable.h"
|
||||||
#include "include/cef_scheme.h"
|
#include "include/cef_scheme.h"
|
||||||
#include "tests/cefclient/client_app.h"
|
#include "tests/cefclient/client_app.h"
|
||||||
#include "tests/unittests/test_handler.h"
|
#include "tests/unittests/test_handler.h"
|
||||||
@ -1440,6 +1441,116 @@ TEST(NavigationTest, CrossOrigin) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
const char kPopupNavPageUrl[] = "http://tests-popup/page.html";
|
||||||
|
const char kPopupNavPopupUrl[] = "http://tests-popup/popup.html";
|
||||||
|
const char kPopupNavPopupName[] = "my_popup";
|
||||||
|
|
||||||
|
// Browser side.
|
||||||
|
class PopupNavTestHandler : public TestHandler {
|
||||||
|
public:
|
||||||
|
explicit PopupNavTestHandler(bool allow)
|
||||||
|
: allow_(allow) {}
|
||||||
|
|
||||||
|
virtual void RunTest() OVERRIDE {
|
||||||
|
// Add the resources that we will navigate to/from.
|
||||||
|
std::string page = "<html><script>window.open('" +
|
||||||
|
std::string(kPopupNavPopupUrl) + "', '" +
|
||||||
|
std::string(kPopupNavPopupName) +
|
||||||
|
"');</script></html>";
|
||||||
|
AddResource(kPopupNavPageUrl, page, "text/html");
|
||||||
|
AddResource(kPopupNavPopupUrl, "<html>Popup</html>", "text/html");
|
||||||
|
|
||||||
|
// Create the browser.
|
||||||
|
CreateBrowser(kPopupNavPageUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool CanCreatePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
|
bool* no_javascript_access) OVERRIDE {
|
||||||
|
got_can_create_popup_.yes();
|
||||||
|
|
||||||
|
EXPECT_TRUE(CefCurrentlyOn(TID_IO));
|
||||||
|
EXPECT_EQ(GetBrowserId(), browser->GetIdentifier());
|
||||||
|
EXPECT_STREQ(kPopupNavPageUrl, frame->GetURL().ToString().c_str());
|
||||||
|
EXPECT_STREQ(kPopupNavPopupUrl, target_url.ToString().c_str());
|
||||||
|
EXPECT_STREQ(kPopupNavPopupName, target_frame_name.ToString().c_str());
|
||||||
|
EXPECT_FALSE(*no_javascript_access);
|
||||||
|
|
||||||
|
return allow_;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void OnBeforePopup(CefRefPtr<CefBrowser> browser,
|
||||||
|
const CefPopupFeatures& popupFeatures,
|
||||||
|
CefWindowInfo& windowInfo,
|
||||||
|
const CefString& target_url,
|
||||||
|
const CefString& target_frame_name,
|
||||||
|
CefRefPtr<CefClient>& client,
|
||||||
|
CefBrowserSettings& settings) OVERRIDE {
|
||||||
|
got_on_before_popup_.yes();
|
||||||
|
|
||||||
|
EXPECT_TRUE(CefCurrentlyOn(TID_UI));
|
||||||
|
EXPECT_EQ(GetBrowserId(), browser->GetIdentifier());
|
||||||
|
EXPECT_STREQ(kPopupNavPopupUrl, target_url.ToString().c_str());
|
||||||
|
EXPECT_STREQ(kPopupNavPopupName, target_frame_name.ToString().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void OnLoadEnd(CefRefPtr<CefBrowser> browser,
|
||||||
|
CefRefPtr<CefFrame> frame,
|
||||||
|
int httpStatusCode) OVERRIDE {
|
||||||
|
std::string url = frame->GetURL();
|
||||||
|
if (allow_) {
|
||||||
|
if (url == kPopupNavPopupUrl) {
|
||||||
|
got_popup_load_end_.yes();
|
||||||
|
browser->GetHost()->CloseBrowser();
|
||||||
|
DestroyTest();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Wait a bit to make sure the popup window isn't created.
|
||||||
|
CefPostDelayedTask(TID_UI,
|
||||||
|
NewCefRunnableMethod(this, &PopupNavTestHandler::DestroyTest), 200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual void DestroyTest() {
|
||||||
|
EXPECT_TRUE(got_can_create_popup_);
|
||||||
|
if (allow_) {
|
||||||
|
EXPECT_TRUE(got_on_before_popup_);
|
||||||
|
EXPECT_TRUE(got_popup_load_end_);
|
||||||
|
} else {
|
||||||
|
EXPECT_FALSE(got_on_before_popup_);
|
||||||
|
EXPECT_FALSE(got_popup_load_end_);
|
||||||
|
}
|
||||||
|
|
||||||
|
TestHandler::DestroyTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool allow_;
|
||||||
|
|
||||||
|
TrackCallback got_can_create_popup_;
|
||||||
|
TrackCallback got_on_before_popup_;
|
||||||
|
TrackCallback got_popup_load_end_;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
// Test allowing popups.
|
||||||
|
TEST(NavigationTest, PopupAllow) {
|
||||||
|
CefRefPtr<PopupNavTestHandler> handler = new PopupNavTestHandler(true);
|
||||||
|
handler->ExecuteTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test denying popups.
|
||||||
|
TEST(NavigationTest, PopupDeny) {
|
||||||
|
CefRefPtr<PopupNavTestHandler> handler = new PopupNavTestHandler(false);
|
||||||
|
handler->ExecuteTest();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Entry point for creating navigation browser test objects.
|
// Entry point for creating navigation browser test objects.
|
||||||
// Called from client_app_delegates.cc.
|
// Called from client_app_delegates.cc.
|
||||||
void CreateNavigationBrowserTests(ClientApp::BrowserDelegateSet& delegates) {
|
void CreateNavigationBrowserTests(ClientApp::BrowserDelegateSet& delegates) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user