mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Enable V8 sandbox by default (fixes #3332)
When the V8 sandbox is enabled, ArrayBuffer backing stores must be allocated inside the sandbox address space. This change introduces a new CefV8Value::CreateArrayBufferWithCopy method that copies the memory contents into the sandbox address space. Enabling the V8 sandbox can have a performance impact, especially when passing large ArrayBuffers from C++ code to the JS side. We have therefore retained the old CefV8Value::CreateArrayBuffer method that references external memory. However, this method can only be used if the V8 sandbox is disabled at CEF/Chromium build time. To disable the V8 sandbox add `v8_enable_sandbox=false` to `GN_DEFINES` when building CEF/Chromium.
This commit is contained in:
committed by
Marshall Greenblatt
parent
08ae3a44a6
commit
295ea1f715
@@ -1070,11 +1070,15 @@ class CefMessageRouterRendererSideImpl : public CefMessageRouterRendererSide {
|
||||
|
||||
CefRefPtr<CefV8Context> context = GetContextByID(context_id);
|
||||
if (context && info->success_callback && context->Enter()) {
|
||||
CefRefPtr<cmru::BinaryValueABRCallback> release_callback =
|
||||
new cmru::BinaryValueABRCallback(response);
|
||||
|
||||
CefRefPtr<CefV8Value> value = CefV8Value::CreateArrayBuffer(
|
||||
response->GetData(), response->GetSize(), release_callback);
|
||||
CefRefPtr<CefV8Value> value;
|
||||
#ifdef CEF_V8_ENABLE_SANDBOX
|
||||
value = CefV8Value::CreateArrayBufferWithCopy(response->GetData(),
|
||||
response->GetSize());
|
||||
#else
|
||||
value = CefV8Value::CreateArrayBuffer(
|
||||
response->GetData(), response->GetSize(),
|
||||
new cmru::BinaryValueABRCallback(response));
|
||||
#endif
|
||||
|
||||
context->Exit();
|
||||
|
||||
|
Reference in New Issue
Block a user