Remove unnecessary copy during CefBinaryValue creation (see #3502)

This commit is contained in:
Nik Pavlov 2023-10-05 16:57:01 +00:00 committed by Marshall Greenblatt
parent f8dd0dbfb4
commit d8ea7363f5
2 changed files with 8 additions and 9 deletions

View File

@ -493,8 +493,8 @@ CefRefPtr<CefBinaryValue> CefBinaryValue::Create(const void* data,
return nullptr;
}
return new CefBinaryValueImpl(static_cast<char*>(const_cast<void*>(data)),
data_size);
const auto ptr = static_cast<const uint8_t*>(data);
return new CefBinaryValueImpl(base::make_span(ptr, data_size));
}
// static
@ -525,12 +525,11 @@ CefBinaryValueImpl::CefBinaryValueImpl(base::Value* value, bool will_delete)
will_delete ? kOwnerWillDelete : kOwnerNoDelete,
nullptr) {}
CefBinaryValueImpl::CefBinaryValueImpl(char* data, size_t data_size)
: CefBinaryValueImpl(
new base::Value(std::vector<char>(data, data + data_size)),
nullptr,
kOwnerWillDelete,
nullptr) {}
CefBinaryValueImpl::CefBinaryValueImpl(base::span<const uint8_t> value)
: CefBinaryValueImpl(new base::Value(value),
nullptr,
kOwnerWillDelete,
nullptr) {}
base::Value CefBinaryValueImpl::CopyValue() {
CEF_VALUE_VERIFY_RETURN(false, base::Value());

View File

@ -151,7 +151,7 @@ class CefBinaryValueImpl : public CefValueBase<CefBinaryValue, base::Value> {
CefBinaryValueImpl(base::Value* value, bool will_delete);
// The data will always be copied.
CefBinaryValueImpl(char* data, size_t data_size);
explicit CefBinaryValueImpl(base::span<const uint8_t> value);
CefBinaryValueImpl(const CefBinaryValueImpl&) = delete;
CefBinaryValueImpl& operator=(const CefBinaryValueImpl&) = delete;