Add the ability to restrict V8 extension loading by frame using a new CefPermissionHandler::OnBeforeScriptExtensionLoad() callback (issue #471).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@457 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2012-01-05 19:34:20 +00:00
parent ad65bb8532
commit b8ba27a671
23 changed files with 572 additions and 22 deletions

View File

@ -1,4 +1,4 @@
# Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
# 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.
#
@ -32,6 +32,7 @@
'include/cef_load_handler.h',
'include/cef_menu_handler.h',
'include/cef_origin_whitelist.h',
'include/cef_permission_handler.h',
'include/cef_print_handler.h',
'include/cef_proxy_handler.h',
'include/cef_render_handler.h',
@ -70,6 +71,7 @@
'include/capi/cef_load_handler_capi.h',
'include/capi/cef_menu_handler_capi.h',
'include/capi/cef_origin_whitelist_capi.h',
'include/capi/cef_permission_handler_capi.h',
'include/capi/cef_print_handler_capi.h',
'include/capi/cef_proxy_handler_capi.h',
'include/capi/cef_render_handler_capi.h',
@ -134,6 +136,8 @@
'libcef_dll/ctocpp/load_handler_ctocpp.h',
'libcef_dll/ctocpp/menu_handler_ctocpp.cc',
'libcef_dll/ctocpp/menu_handler_ctocpp.h',
'libcef_dll/ctocpp/permission_handler_ctocpp.cc',
'libcef_dll/ctocpp/permission_handler_ctocpp.h',
'libcef_dll/cpptoc/post_data_cpptoc.cc',
'libcef_dll/cpptoc/post_data_cpptoc.h',
'libcef_dll/cpptoc/post_data_element_cpptoc.cc',
@ -236,6 +240,8 @@
'libcef_dll/cpptoc/load_handler_cpptoc.h',
'libcef_dll/cpptoc/menu_handler_cpptoc.cc',
'libcef_dll/cpptoc/menu_handler_cpptoc.h',
'libcef_dll/cpptoc/permission_handler_cpptoc.cc',
'libcef_dll/cpptoc/permission_handler_cpptoc.h',
'libcef_dll/ctocpp/post_data_ctocpp.cc',
'libcef_dll/ctocpp/post_data_ctocpp.h',
'libcef_dll/ctocpp/post_data_element_ctocpp.cc',

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011 Marshall A. Greenblatt. All rights reserved.
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
@ -96,6 +96,12 @@ typedef struct _cef_client_t
struct _cef_menu_handler_t* (CEF_CALLBACK *get_menu_handler)(
struct _cef_client_t* self);
///
// Return the handler for browser permission events.
///
struct _cef_permission_handler_t* (CEF_CALLBACK *get_permission_handler)(
struct _cef_client_t* self);
///
// Return the handler for printing events.
///

View File

@ -0,0 +1,73 @@
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ---------------------------------------------------------------------------
//
// This file was generated by the CEF translator tool and should not edited
// by hand. See the translator.README.txt file in the tools directory for
// more information.
//
#ifndef _CEF_PERMISSION_HANDLER_CAPI_H
#define _CEF_PERMISSION_HANDLER_CAPI_H
#ifdef __cplusplus
extern "C" {
#endif
#include "cef_base_capi.h"
///
// Implement this structure to handle events related to browser permissions. The
// functions of this structure will be called on the UI thread.
///
typedef struct _cef_permission_handler_t
{
///
// Base structure.
///
cef_base_t base;
///
// Called on the UI thread before a script extension is loaded. Return false
// (0) to prevent the extension from loading.
///
int (CEF_CALLBACK *on_before_script_extension_load)(
struct _cef_permission_handler_t* self, struct _cef_browser_t* browser,
struct _cef_frame_t* frame, const cef_string_t* extensionName);
} cef_permission_handler_t;
#ifdef __cplusplus
}
#endif
#endif // _CEF_PERMISSION_HANDLER_CAPI_H

View File

@ -47,6 +47,7 @@
#include "cef_life_span_handler.h"
#include "cef_load_handler.h"
#include "cef_menu_handler.h"
#include "cef_permission_handler.h"
#include "cef_print_handler.h"
#include "cef_render_handler.h"
#include "cef_request_handler.h"
@ -63,79 +64,127 @@ public:
// Return the handler for browser life span events.
///
/*--cef()--*/
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() { return NULL; }
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler()
{
return NULL;
}
///
// Return the handler for browser load status events.
///
/*--cef()--*/
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() { return NULL; }
virtual CefRefPtr<CefLoadHandler> GetLoadHandler()
{
return NULL;
}
///
// Return the handler for browser request events.
///
/*--cef()--*/
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() { return NULL; }
virtual CefRefPtr<CefRequestHandler> GetRequestHandler()
{
return NULL;
}
///
// Return the handler for browser display state events.
///
/*--cef()--*/
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler() { return NULL; }
virtual CefRefPtr<CefDisplayHandler> GetDisplayHandler()
{
return NULL;
}
///
// Return the handler for focus events.
///
/*--cef()--*/
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() { return NULL; }
virtual CefRefPtr<CefFocusHandler> GetFocusHandler()
{
return NULL;
}
///
// Return the handler for keyboard events.
///
/*--cef()--*/
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() { return NULL; }
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler()
{
return NULL;
}
///
// Return the handler for context menu events.
///
/*--cef()--*/
virtual CefRefPtr<CefMenuHandler> GetMenuHandler() { return NULL; }
virtual CefRefPtr<CefMenuHandler> GetMenuHandler()
{
return NULL;
}
///
// Return the handler for browser permission events.
///
/*--cef()--*/
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler()
{
return NULL;
}
///
// Return the handler for printing events.
///
/*--cef()--*/
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() { return NULL; }
virtual CefRefPtr<CefPrintHandler> GetPrintHandler()
{
return NULL;
}
///
// Return the handler for find result events.
///
/*--cef()--*/
virtual CefRefPtr<CefFindHandler> GetFindHandler() { return NULL; }
virtual CefRefPtr<CefFindHandler> GetFindHandler()
{
return NULL;
}
///
// Return the handler for JavaScript dialog events.
///
/*--cef()--*/
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() { return NULL; }
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler()
{
return NULL;
}
///
// Return the handler for V8 context events.
///
/*--cef()--*/
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler() { return NULL; }
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler()
{
return NULL;
}
///
// Return the handler for off-screen rendering events.
///
/*--cef()--*/
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() { return NULL; }
virtual CefRefPtr<CefRenderHandler> GetRenderHandler()
{
return NULL;
}
///
// Return the handler for drag events.
///
/*--cef()--*/
virtual CefRefPtr<CefDragHandler> GetDragHandler() { return NULL; }
virtual CefRefPtr<CefDragHandler> GetDragHandler()
{
return NULL;
}
};
#endif // _CEF_CLIENT_H

View File

@ -0,0 +1,66 @@
// Copyright (c) 2012 Marshall A. Greenblatt. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the name Chromium Embedded
// Framework nor the names of its contributors may be used to endorse
// or promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// ---------------------------------------------------------------------------
//
// The contents of this file must follow a specific format in order to
// support the CEF translator tool. See the translator.README.txt file in the
// tools directory for more information.
//
#ifndef _CEF_PERMISSION_HANDLER_H
#define _CEF_PERMISSION_HANDLER_H
#include "cef_base.h"
class CefBrowser;
class CefFrame;
///
// Implement this interface to handle events related to browser permissions.
// The methods of this class will be called on the UI thread.
///
/*--cef(source=client)--*/
class CefPermissionHandler : public virtual CefBase
{
public:
///
// Called on the UI thread before a script extension is loaded.
// Return false to let the extension load normally.
///
/*--cef()--*/
virtual bool OnBeforeScriptExtensionLoad(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& extensionName)
{
return false;
}
};
#endif // _CEF_PERMISSION_HANDLER_H

View File

@ -475,6 +475,25 @@ int BrowserWebViewDelegate::historyForwardListCount() {
- current_index - 1;
}
// WebPermissionClient -------------------------------------------------------
bool BrowserWebViewDelegate::allowScriptExtension(
WebKit::WebFrame* frame,
const WebKit::WebString& extensionName,
int extensionGroup) {
bool allowExtension = true;
CefRefPtr<CefClient> client = browser_->GetClient();
if (client.get()) {
CefRefPtr<CefPermissionHandler> handler = client->GetPermissionHandler();
if (handler.get()) {
CefString extensionNameStr = string16(extensionName);
allowExtension = !handler->OnBeforeScriptExtensionLoad(
browser_, browser_->UIT_GetCefFrame(frame), extensionNameStr);
}
}
return allowExtension;
}
// WebPluginPageDelegate -----------------------------------------------------
WebCookieJar* BrowserWebViewDelegate::GetCookieJar() {

View File

@ -21,6 +21,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFileChooserParams.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebFileSystem.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrameClient.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebPermissionClient.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebViewClient.h"
#include "webkit/glue/webcursor.h"
@ -48,6 +49,7 @@ class FilePath;
class BrowserWebViewDelegate : public WebKit::WebViewClient,
public WebKit::WebFrameClient,
public WebKit::WebPermissionClient,
public webkit::npapi::WebPluginPageDelegate,
public base::SupportsWeakPtr<BrowserWebViewDelegate> {
public:
@ -195,6 +197,12 @@ class BrowserWebViewDelegate : public WebKit::WebViewClient,
bool create,
WebKit::WebFileSystemCallbacks* callbacks) OVERRIDE;
// WebKit::WebPermissionClient
virtual bool allowScriptExtension(
WebKit::WebFrame*,
const WebKit::WebString& extensionName,
int extensionGroup) OVERRIDE;
// webkit_glue::WebPluginPageDelegate
virtual webkit::npapi::WebPluginDelegate* CreatePluginDelegate(
const FilePath& file_path,

View File

@ -40,6 +40,7 @@ WebViewHost* WebViewHost::Create(GtkWidget* parent_view,
host->webwidget_ = WebView::create(delegate);
#endif
host->webview()->setDevToolsAgentClient(dev_tools_client);
host->webview()->setPermissionClient(delegate);
prefs.Apply(host->webview());
host->webview()->initializeMainFrame(delegate);
host->webwidget_->layout();

View File

@ -46,6 +46,7 @@ WebViewHost* WebViewHost::Create(NSView* parent_view,
host->webwidget_ = WebView::create(delegate);
#endif
host->webview()->setDevToolsAgentClient(dev_tools_client);
host->webview()->setPermissionClient(delegate);
prefs.Apply(host->webview());
host->webview()->initializeMainFrame(delegate);
host->webwidget_->resize(WebSize(content_rect.size.width,

View File

@ -60,6 +60,7 @@ WebViewHost* WebViewHost::Create(HWND parent_view,
host->webwidget_ = WebView::create(delegate);
#endif
host->webview()->setDevToolsAgentClient(dev_tools_client);
host->webview()->setPermissionClient(delegate);
prefs.Apply(host->webview());
host->webview()->initializeMainFrame(delegate);

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
// 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.
//
@ -20,6 +20,7 @@
#include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
#include "libcef_dll/cpptoc/load_handler_cpptoc.h"
#include "libcef_dll/cpptoc/menu_handler_cpptoc.h"
#include "libcef_dll/cpptoc/permission_handler_cpptoc.h"
#include "libcef_dll/cpptoc/print_handler_cpptoc.h"
#include "libcef_dll/cpptoc/render_handler_cpptoc.h"
#include "libcef_dll/cpptoc/request_handler_cpptoc.h"
@ -147,6 +148,23 @@ struct _cef_menu_handler_t* CEF_CALLBACK client_get_menu_handler(
return CefMenuHandlerCppToC::Wrap(_retval);
}
struct _cef_permission_handler_t* CEF_CALLBACK client_get_permission_handler(
struct _cef_client_t* self)
{
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
DCHECK(self);
if (!self)
return NULL;
// Execute
CefRefPtr<CefPermissionHandler> _retval = CefClientCppToC::Get(
self)->GetPermissionHandler();
// Return type: refptr_same
return CefPermissionHandlerCppToC::Wrap(_retval);
}
struct _cef_print_handler_t* CEF_CALLBACK client_get_print_handler(
struct _cef_client_t* self)
{
@ -262,6 +280,7 @@ CefClientCppToC::CefClientCppToC(CefClient* cls)
struct_.struct_.get_focus_handler = client_get_focus_handler;
struct_.struct_.get_keyboard_handler = client_get_keyboard_handler;
struct_.struct_.get_menu_handler = client_get_menu_handler;
struct_.struct_.get_permission_handler = client_get_permission_handler;
struct_.struct_.get_print_handler = client_get_print_handler;
struct_.struct_.get_find_handler = client_get_find_handler;
struct_.struct_.get_jsdialog_handler = client_get_jsdialog_handler;

View File

@ -0,0 +1,69 @@
// 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/permission_handler_cpptoc.h"
#include "libcef_dll/ctocpp/browser_ctocpp.h"
#include "libcef_dll/ctocpp/frame_ctocpp.h"
// MEMBER FUNCTIONS - Body may be edited by hand.
int CEF_CALLBACK permission_handler_on_before_script_extension_load(
struct _cef_permission_handler_t* self, cef_browser_t* browser,
cef_frame_t* frame, const cef_string_t* extensionName)
{
// 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: frame; type: refptr_diff
DCHECK(frame);
if (!frame)
return 0;
// Verify param: extensionName; type: string_byref_const
DCHECK(extensionName);
if (!extensionName)
return 0;
// Execute
bool _retval = CefPermissionHandlerCppToC::Get(
self)->OnBeforeScriptExtensionLoad(
CefBrowserCToCpp::Wrap(browser),
CefFrameCToCpp::Wrap(frame),
CefString(extensionName));
// Return type: bool
return _retval;
}
// CONSTRUCTOR - Do not edit by hand.
CefPermissionHandlerCppToC::CefPermissionHandlerCppToC(
CefPermissionHandler* cls)
: CefCppToC<CefPermissionHandlerCppToC, CefPermissionHandler,
cef_permission_handler_t>(cls)
{
struct_.struct_.on_before_script_extension_load =
permission_handler_on_before_script_extension_load;
}
#ifndef NDEBUG
template<> long CefCppToC<CefPermissionHandlerCppToC, CefPermissionHandler,
cef_permission_handler_t>::DebugObjCt = 0;
#endif

View File

@ -0,0 +1,41 @@
// 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 _PERMISSIONHANDLER_CPPTOC_H
#define _PERMISSIONHANDLER_CPPTOC_H
#ifndef USING_CEF_SHARED
#pragma message("Warning: "__FILE__" may be accessed wrapper-side only")
#else // USING_CEF_SHARED
#include "include/cef_permission_handler.h"
#include "include/capi/cef_permission_handler_capi.h"
#include "include/cef_browser.h"
#include "include/capi/cef_browser_capi.h"
#include "include/cef_frame.h"
#include "include/capi/cef_frame_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 CefPermissionHandlerCppToC
: public CefCppToC<CefPermissionHandlerCppToC, CefPermissionHandler,
cef_permission_handler_t>
{
public:
CefPermissionHandlerCppToC(CefPermissionHandler* cls);
virtual ~CefPermissionHandlerCppToC() {}
};
#endif // USING_CEF_SHARED
#endif // _PERMISSIONHANDLER_CPPTOC_H

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
// 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.
//
@ -20,6 +20,7 @@
#include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
#include "libcef_dll/ctocpp/load_handler_ctocpp.h"
#include "libcef_dll/ctocpp/menu_handler_ctocpp.h"
#include "libcef_dll/ctocpp/permission_handler_ctocpp.h"
#include "libcef_dll/ctocpp/print_handler_ctocpp.h"
#include "libcef_dll/ctocpp/render_handler_ctocpp.h"
#include "libcef_dll/ctocpp/request_handler_ctocpp.h"
@ -126,6 +127,20 @@ CefRefPtr<CefMenuHandler> CefClientCToCpp::GetMenuHandler()
return CefMenuHandlerCToCpp::Wrap(_retval);
}
CefRefPtr<CefPermissionHandler> CefClientCToCpp::GetPermissionHandler()
{
if (CEF_MEMBER_MISSING(struct_, get_permission_handler))
return NULL;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Execute
cef_permission_handler_t* _retval = struct_->get_permission_handler(struct_);
// Return type: refptr_same
return CefPermissionHandlerCToCpp::Wrap(_retval);
}
CefRefPtr<CefPrintHandler> CefClientCToCpp::GetPrintHandler()
{
if (CEF_MEMBER_MISSING(struct_, get_print_handler))

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
// 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.
//
@ -39,6 +39,7 @@ public:
virtual CefRefPtr<CefFocusHandler> GetFocusHandler() OVERRIDE;
virtual CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() OVERRIDE;
virtual CefRefPtr<CefMenuHandler> GetMenuHandler() OVERRIDE;
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler() OVERRIDE;
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() OVERRIDE;
virtual CefRefPtr<CefFindHandler> GetFindHandler() OVERRIDE;
virtual CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() OVERRIDE;

View File

@ -0,0 +1,57 @@
// 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/browser_cpptoc.h"
#include "libcef_dll/cpptoc/frame_cpptoc.h"
#include "libcef_dll/ctocpp/permission_handler_ctocpp.h"
// VIRTUAL METHODS - Body may be edited by hand.
bool CefPermissionHandlerCToCpp::OnBeforeScriptExtensionLoad(
CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame,
const CefString& extensionName)
{
if (CEF_MEMBER_MISSING(struct_, on_before_script_extension_load))
return false;
// AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING
// Verify param: browser; type: refptr_diff
DCHECK(browser.get());
if (!browser.get())
return false;
// Verify param: frame; type: refptr_diff
DCHECK(frame.get());
if (!frame.get())
return false;
// Verify param: extensionName; type: string_byref_const
DCHECK(!extensionName.empty());
if (extensionName.empty())
return false;
// Execute
int _retval = struct_->on_before_script_extension_load(struct_,
CefBrowserCppToC::Wrap(browser),
CefFrameCppToC::Wrap(frame),
extensionName.GetStruct());
// Return type: bool
return _retval?true:false;
}
#ifndef NDEBUG
template<> long CefCToCpp<CefPermissionHandlerCToCpp, CefPermissionHandler,
cef_permission_handler_t>::DebugObjCt = 0;
#endif

View File

@ -0,0 +1,47 @@
// 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 _PERMISSIONHANDLER_CTOCPP_H
#define _PERMISSIONHANDLER_CTOCPP_H
#ifndef BUILDING_CEF_SHARED
#pragma message("Warning: "__FILE__" may be accessed DLL-side only")
#else // BUILDING_CEF_SHARED
#include "include/cef_permission_handler.h"
#include "include/capi/cef_permission_handler_capi.h"
#include "include/cef_browser.h"
#include "include/capi/cef_browser_capi.h"
#include "include/cef_frame.h"
#include "include/capi/cef_frame_capi.h"
#include "libcef_dll/ctocpp/ctocpp.h"
// Wrap a C structure with a C++ class.
// This class may be instantiated and accessed DLL-side only.
class CefPermissionHandlerCToCpp
: public CefCToCpp<CefPermissionHandlerCToCpp, CefPermissionHandler,
cef_permission_handler_t>
{
public:
CefPermissionHandlerCToCpp(cef_permission_handler_t* str)
: CefCToCpp<CefPermissionHandlerCToCpp, CefPermissionHandler,
cef_permission_handler_t>(str) {}
virtual ~CefPermissionHandlerCToCpp() {}
// CefPermissionHandler methods
virtual bool OnBeforeScriptExtensionLoad(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame, const CefString& extensionName) OVERRIDE;
};
#endif // BUILDING_CEF_SHARED
#endif // _PERMISSIONHANDLER_CTOCPP_H

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
// 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.
//
@ -60,6 +60,7 @@
#include "libcef_dll/ctocpp/life_span_handler_ctocpp.h"
#include "libcef_dll/ctocpp/load_handler_ctocpp.h"
#include "libcef_dll/ctocpp/menu_handler_ctocpp.h"
#include "libcef_dll/ctocpp/permission_handler_ctocpp.h"
#include "libcef_dll/ctocpp/print_handler_ctocpp.h"
#include "libcef_dll/ctocpp/proxy_handler_ctocpp.h"
#include "libcef_dll/ctocpp/read_handler_ctocpp.h"
@ -132,6 +133,7 @@ CEF_EXPORT void cef_shutdown()
DCHECK(CefLifeSpanHandlerCToCpp::DebugObjCt == 0);
DCHECK(CefLoadHandlerCToCpp::DebugObjCt == 0);
DCHECK(CefMenuHandlerCToCpp::DebugObjCt == 0);
DCHECK(CefPermissionHandlerCToCpp::DebugObjCt == 0);
DCHECK(CefPostDataCppToC::DebugObjCt == 0);
DCHECK(CefPostDataElementCppToC::DebugObjCt == 0);
DCHECK(CefPrintHandlerCToCpp::DebugObjCt == 0);

View File

@ -1,4 +1,4 @@
// Copyright (c) 2011 The Chromium Embedded Framework Authors. All rights
// 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.
//
@ -42,6 +42,7 @@
#include "libcef_dll/cpptoc/life_span_handler_cpptoc.h"
#include "libcef_dll/cpptoc/load_handler_cpptoc.h"
#include "libcef_dll/cpptoc/menu_handler_cpptoc.h"
#include "libcef_dll/cpptoc/permission_handler_cpptoc.h"
#include "libcef_dll/cpptoc/print_handler_cpptoc.h"
#include "libcef_dll/cpptoc/proxy_handler_cpptoc.h"
#include "libcef_dll/cpptoc/read_handler_cpptoc.h"
@ -134,6 +135,7 @@ CEF_GLOBAL void CefShutdown()
DCHECK(CefLifeSpanHandlerCppToC::DebugObjCt == 0);
DCHECK(CefLoadHandlerCppToC::DebugObjCt == 0);
DCHECK(CefMenuHandlerCppToC::DebugObjCt == 0);
DCHECK(CefPermissionHandlerCppToC::DebugObjCt == 0);
DCHECK(CefPostDataCToCpp::DebugObjCt == 0);
DCHECK(CefPostDataElementCToCpp::DebugObjCt == 0);
DCHECK(CefPrintHandlerCppToC::DebugObjCt == 0);

View File

@ -303,6 +303,13 @@ bool ClientHandler::OnDragEnter(CefRefPtr<CefBrowser> browser,
return false;
}
bool ClientHandler::OnBeforeScriptExtensionLoad(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& extensionName)
{
return false;
}
void ClientHandler::NotifyDownloadComplete(const CefString& fileName)
{
SetLastDownloadFile(fileName);

View File

@ -26,6 +26,7 @@ class ClientHandler : public CefClient,
public CefPrintHandler,
public CefV8ContextHandler,
public CefDragHandler,
public CefPermissionHandler,
public DownloadListener
{
public:
@ -51,6 +52,8 @@ public:
{ return this; }
virtual CefRefPtr<CefDragHandler> GetDragHandler() OVERRIDE
{ return this; }
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler() OVERRIDE
{ return this; }
// CefLifeSpanHandler methods
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> parentBrowser,
@ -144,6 +147,11 @@ public:
CefRefPtr<CefDragData> dragData,
DragOperationsMask mask) OVERRIDE;
// CefPermissionHandler methods.
virtual bool OnBeforeScriptExtensionLoad(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& extensionName) OVERRIDE;
// DownloadListener methods
virtual void NotifyDownloadComplete(const CefString& fileName) OVERRIDE;
virtual void NotifyDownloadError(const CefString& fileName) OVERRIDE;

View File

@ -31,7 +31,8 @@ class TestHandler : public CefClient,
public CefLifeSpanHandler,
public CefLoadHandler,
public CefRequestHandler,
public CefV8ContextHandler
public CefV8ContextHandler,
public CefPermissionHandler
{
public:
TestHandler();
@ -51,7 +52,9 @@ public:
{ return this; }
virtual CefRefPtr<CefV8ContextHandler> GetV8ContextHandler() OVERRIDE
{ return this; }
virtual CefRefPtr<CefPermissionHandler> GetPermissionHandler() OVERRIDE
{ return this; }
// CefLifeSpanHandler methods
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) OVERRIDE;
virtual void OnBeforeClose(CefRefPtr<CefBrowser> browser) OVERRIDE;

View File

@ -1748,3 +1748,52 @@ TEST(V8Test, Exception)
EXPECT_TRUE(handler->got_exception_[i]) << "test = " << i+1;
}
}
namespace {
class TestPermissionsHandler : public V8TestHandler
{
public:
TestPermissionsHandler(bool denyExtensions) : V8TestHandler(false) {
deny_extensions_ = denyExtensions;
}
virtual bool OnBeforeScriptExtensionLoad(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
const CefString& extensionName)
{
return deny_extensions_;
}
bool deny_extensions_;
};
// Verify extension permissions
TEST(V8Test, Permissions)
{
g_V8TestV8HandlerExecuteCalled = false;
std::string extensionCode =
"var test;"
"if (!test)"
" test = {};"
"(function() {"
" test.execute = function(a,b,c,d,e,f,g,h,i) {"
" native function execute();"
" return execute(a,b,c,d,e,f,g,h,i);"
" };"
"})();";
CefRegisterExtension("v8/test", extensionCode, new V8TestV8Handler(false));
CefRefPtr<V8TestHandler> deny_handler = new TestPermissionsHandler(true);
deny_handler->ExecuteTest();
ASSERT_FALSE(g_V8TestV8HandlerExecuteCalled);
CefRefPtr<V8TestHandler> allow_handler = new TestPermissionsHandler(false);
allow_handler->ExecuteTest();
ASSERT_TRUE(g_V8TestV8HandlerExecuteCalled);
}
};