diff --git a/base/values.cc b/base/values.cc index d8d0357fb695d7..892da8ef7eb6e8 100644 --- a/base/values.cc +++ b/base/values.cc @@ -121,12 +121,6 @@ class PathSplitter { } // namespace -// static -std::unique_ptr Value::CreateWithCopiedBuffer(const char* buffer, - size_t size) { - return std::make_unique(BlobStorage(buffer, buffer + size)); -} - // static Value Value::FromUniquePtrValue(std::unique_ptr val) { return std::move(*val); diff --git a/base/values.h b/base/values.h index e1c10b8bd0b779..27d24b7277ec91 100644 --- a/base/values.h +++ b/base/values.h @@ -103,14 +103,6 @@ class BASE_EXPORT Value { // Note: Do not add more types. See the file-level comment above for why. }; - // For situations where you want to keep ownership of your buffer, this - // factory method creates a new BinaryValue by copying the contents of the - // buffer that's passed in. - // DEPRECATED, use std::make_unique(const BlobStorage&) instead. - // TODO(crbug.com/646113): Delete this and migrate callsites. - static std::unique_ptr CreateWithCopiedBuffer(const char* buffer, - size_t size); - // Adaptors for converting from the old way to the new way and vice versa. static Value FromUniquePtrValue(std::unique_ptr val); static std::unique_ptr ToUniquePtrValue(Value val); diff --git a/base/values_unittest.cc b/base/values_unittest.cc index d72942983007b3..20606e32192d1f 100644 --- a/base/values_unittest.cc +++ b/base/values_unittest.cc @@ -1362,29 +1362,26 @@ TEST(ValuesTest, List) { TEST(ValuesTest, BinaryValue) { // Default constructor creates a BinaryValue with a buffer of size 0. - auto binary = std::make_unique(Value::Type::BINARY); - ASSERT_TRUE(binary.get()); - ASSERT_TRUE(binary->GetBlob().empty()); + Value binary(Value::Type::BINARY); + ASSERT_TRUE(binary.GetBlob().empty()); // Test the common case of a non-empty buffer Value::BlobStorage buffer(15); uint8_t* original_buffer = buffer.data(); - binary.reset(new Value(std::move(buffer))); - ASSERT_TRUE(binary.get()); - ASSERT_TRUE(binary->GetBlob().data()); - ASSERT_EQ(original_buffer, binary->GetBlob().data()); - ASSERT_EQ(15U, binary->GetBlob().size()); + binary = Value(std::move(buffer)); + ASSERT_TRUE(binary.GetBlob().data()); + ASSERT_EQ(original_buffer, binary.GetBlob().data()); + ASSERT_EQ(15U, binary.GetBlob().size()); char stack_buffer[42]; memset(stack_buffer, '!', 42); - binary = Value::CreateWithCopiedBuffer(stack_buffer, 42); - ASSERT_TRUE(binary.get()); - ASSERT_TRUE(binary->GetBlob().data()); + binary = Value(Value::BlobStorage(stack_buffer, stack_buffer + 42)); + ASSERT_TRUE(binary.GetBlob().data()); ASSERT_NE(stack_buffer, - reinterpret_cast(binary->GetBlob().data())); - ASSERT_EQ(42U, binary->GetBlob().size()); - ASSERT_EQ(0, memcmp(stack_buffer, binary->GetBlob().data(), - binary->GetBlob().size())); + reinterpret_cast(binary.GetBlob().data())); + ASSERT_EQ(42U, binary.GetBlob().size()); + ASSERT_EQ(0, memcmp(stack_buffer, binary.GetBlob().data(), + binary.GetBlob().size())); } TEST(ValuesTest, StringValue) { diff --git a/content/browser/renderer_host/pepper/pepper_socket_utils.cc b/content/browser/renderer_host/pepper/pepper_socket_utils.cc index b6245b9cf7172b..473b9553ece5ae 100644 --- a/content/browser/renderer_host/pepper/pepper_socket_utils.cc +++ b/content/browser/renderer_host/pepper/pepper_socket_utils.cc @@ -7,6 +7,7 @@ #include #include +#include "base/containers/span.h" #include "base/logging.h" #include "base/memory/ref_counted.h" #include "base/strings/string_util.h" @@ -109,10 +110,9 @@ bool GetCertificateFields(const net::X509Certificate& cert, std::make_unique(base::JoinString( subject.organization_unit_names, "\n"))); - const std::string& serial_number = cert.serial_number(); fields->SetField(PP_X509CERTIFICATE_PRIVATE_SERIAL_NUMBER, - base::Value::CreateWithCopiedBuffer(serial_number.data(), - serial_number.length())); + base::Value::ToUniquePtrValue(base::Value( + base::as_bytes(base::make_span(cert.serial_number()))))); fields->SetField( PP_X509CERTIFICATE_PRIVATE_VALIDITY_NOT_BEFORE, std::make_unique(cert.valid_start().ToDoubleT())); @@ -122,8 +122,8 @@ bool GetCertificateFields(const net::X509Certificate& cert, base::StringPiece cert_der = net::x509_util::CryptoBufferAsStringPiece(cert.cert_buffer()); fields->SetField(PP_X509CERTIFICATE_PRIVATE_RAW, - std::make_unique(base::Value::BlobStorage( - cert_der.begin(), cert_der.end()))); + base::Value::ToUniquePtrValue( + base::Value(base::as_bytes(base::make_span(cert_der))))); return true; } diff --git a/content/common/android/gin_java_bridge_value.cc b/content/common/android/gin_java_bridge_value.cc index 6f0d034610b2b4..85338fff0358fa 100644 --- a/content/common/android/gin_java_bridge_value.cc +++ b/content/common/android/gin_java_bridge_value.cc @@ -4,6 +4,8 @@ #include "content/common/android/gin_java_bridge_value.h" +#include "base/containers/span.h" + namespace content { namespace { @@ -118,8 +120,9 @@ GinJavaBridgeValue::GinJavaBridgeValue(const base::Value* value) } std::unique_ptr GinJavaBridgeValue::SerializeToBinaryValue() { - return base::Value::CreateWithCopiedBuffer( - reinterpret_cast(pickle_.data()), pickle_.size()); + const auto* data = static_cast(pickle_.data()); + return base::Value::ToUniquePtrValue( + base::Value(base::make_span(data, pickle_.size()))); } } // namespace content diff --git a/content/common/android/gin_java_bridge_value_unittest.cc b/content/common/android/gin_java_bridge_value_unittest.cc index bf5f613ccea612..d024445a2276bf 100644 --- a/content/common/android/gin_java_bridge_value_unittest.cc +++ b/content/common/android/gin_java_bridge_value_unittest.cc @@ -9,6 +9,7 @@ #include #include +#include "base/containers/span.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { @@ -83,10 +84,8 @@ TEST_F(GinJavaBridgeValueTest, BrokenValues) { GinJavaBridgeValue::ContainsGinJavaBridgeValue(non_binary.get())); const char dummy_data[] = "\000\001\002\003\004\005\006\007\010\011\012\013"; - std::unique_ptr broken_binary( - base::Value::CreateWithCopiedBuffer(dummy_data, sizeof(dummy_data))); - EXPECT_FALSE( - GinJavaBridgeValue::ContainsGinJavaBridgeValue(broken_binary.get())); + base::Value broken_binary(base::as_bytes(base::make_span(dummy_data))); + EXPECT_FALSE(GinJavaBridgeValue::ContainsGinJavaBridgeValue(&broken_binary)); } } // namespace diff --git a/content/renderer/v8_value_converter_impl.cc b/content/renderer/v8_value_converter_impl.cc index 2deb79ba0069f0..f7a9d56df2f10b 100644 --- a/content/renderer/v8_value_converter_impl.cc +++ b/content/renderer/v8_value_converter_impl.cc @@ -15,6 +15,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/containers/span.h" #include "base/logging.h" #include "base/values.h" #include "v8/include/v8.h" @@ -497,18 +498,20 @@ std::unique_ptr V8ValueConverterImpl::FromV8ArrayBuffer( if (val->IsArrayBuffer()) { auto contents = val.As()->GetContents(); - return base::Value::CreateWithCopiedBuffer( - static_cast(contents.Data()), contents.ByteLength()); - } else if (val->IsArrayBufferView()) { + const auto* data = static_cast(contents.Data()); + return base::Value::ToUniquePtrValue( + base::Value(base::make_span(data, contents.ByteLength()))); + } + if (val->IsArrayBufferView()) { v8::Local view = val.As(); size_t byte_length = view->ByteLength(); std::vector buffer(byte_length); view->CopyContents(buffer.data(), buffer.size()); return std::make_unique(std::move(buffer)); - } else { - NOTREACHED() << "Only ArrayBuffer and ArrayBufferView should get here."; - return nullptr; } + + NOTREACHED() << "Only ArrayBuffer and ArrayBufferView should get here."; + return nullptr; } std::unique_ptr V8ValueConverterImpl::FromV8Object( diff --git a/content/renderer/v8_value_converter_impl_unittest.cc b/content/renderer/v8_value_converter_impl_unittest.cc index fb9b86b7143244..9ca3ac2b997f23 100644 --- a/content/renderer/v8_value_converter_impl_unittest.cc +++ b/content/renderer/v8_value_converter_impl_unittest.cc @@ -10,6 +10,7 @@ #include #include +#include "base/containers/span.h" #include "base/macros.h" #include "base/stl_util.h" #include "base/test/task_environment.h" @@ -1220,18 +1221,18 @@ TEST_F(V8ValueConverterImplTest, StrategyBypass) { std::unique_ptr binary_value( converter.FromV8Value(array_buffer, context)); ASSERT_TRUE(binary_value); - std::unique_ptr reference_binary_value( - base::Value::CreateWithCopiedBuffer(kExampleData, sizeof(kExampleData))); - EXPECT_EQ(*reference_binary_value, *binary_value); + base::Value reference_binary_value( + base::as_bytes(base::make_span(kExampleData))); + EXPECT_EQ(reference_binary_value, *binary_value); v8::Local array_buffer_view( v8::Uint8Array::New(array_buffer, 1, 3)); std::unique_ptr binary_view_value( converter.FromV8Value(array_buffer_view, context)); ASSERT_TRUE(binary_view_value); - std::unique_ptr reference_binary_view_value( - base::Value::CreateWithCopiedBuffer(&kExampleData[1], 3)); - EXPECT_EQ(*reference_binary_view_value, *binary_view_value); + base::Value reference_binary_view_value( + base::as_bytes(base::make_span(kExampleData).subspan(1, 3))); + EXPECT_EQ(reference_binary_view_value, *binary_view_value); v8::Local number(v8::Number::New(isolate_, 0.0)); std::unique_ptr number_value( diff --git a/tools/ipc_fuzzer/fuzzer/fuzzer.cc b/tools/ipc_fuzzer/fuzzer/fuzzer.cc index dc526cf9907b62..6318fab6a73891 100644 --- a/tools/ipc_fuzzer/fuzzer/fuzzer.cc +++ b/tools/ipc_fuzzer/fuzzer/fuzzer.cc @@ -10,6 +10,7 @@ #include #include "base/compiler_specific.h" +#include "base/containers/span.h" #include "base/memory/ptr_util.h" #include "base/stl_util.h" #include "base/strings/nullable_string16.h" @@ -535,7 +536,8 @@ struct FuzzTraits { char tmp[200]; size_t bin_length = RandInRange(sizeof(tmp)); fuzzer->FuzzData(tmp, bin_length); - p->Set(index, base::Value::CreateWithCopiedBuffer(tmp, bin_length)); + p->Set(index, base::Value::ToUniquePtrValue(base::Value( + base::as_bytes(base::make_span(tmp, bin_length))))); break; } case base::Value::Type::DICTIONARY: { @@ -612,7 +614,8 @@ struct FuzzTraits { size_t bin_length = RandInRange(sizeof(tmp)); fuzzer->FuzzData(tmp, bin_length); p->SetWithoutPathExpansion( - property, base::Value::CreateWithCopiedBuffer(tmp, bin_length)); + property, base::Value::ToUniquePtrValue(base::Value( + base::as_bytes(base::make_span(tmp, bin_length))))); break; } case base::Value::Type::DICTIONARY: {