diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/chromium/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc b/chromium/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc index d0692e169a5..f3b9ef4c042 100644 --- a/chromium/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc +++ b/chromium/third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_serializer_for_modules_test.cc @@ -11,15 +11,18 @@ #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" #include "third_party/blink/public/platform/web_crypto_algorithm_params.h" +#include "third_party/blink/renderer/bindings/core/v8/dictionary.h" #include "third_party/blink/renderer/bindings/core/v8/script_function.h" #include "third_party/blink/renderer/bindings/core/v8/script_value.h" #include "third_party/blink/renderer/bindings/core/v8/to_v8_for_core.h" -#include "third_party/blink/renderer/bindings/core/v8/v8_array_buffer.h" #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_testing.h" #include "third_party/blink/renderer/bindings/core/v8/v8_dom_exception.h" #include "third_party/blink/renderer/bindings/core/v8/v8_dom_rect_read_only.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_typedefs.h" +#include "third_party/blink/renderer/bindings/core/v8/v8_union_arraybuffer_arraybufferview.h" #include "third_party/blink/renderer/bindings/modules/v8/serialization/v8_script_value_deserializer_for_modules.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_audio_data.h" +#include "third_party/blink/renderer/bindings/modules/v8/v8_audio_data_copy_to_options.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_crypto_key.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_dom_file_system.h" #include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_certificate.h" @@ -29,6 +32,7 @@ #include "third_party/blink/renderer/modules/filesystem/dom_file_system.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_certificate.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h" +#include "third_party/blink/renderer/modules/webcodecs/allow_shared_buffer_source_util.h" #include "third_party/blink/renderer/modules/webcodecs/audio_data.h" #include "third_party/blink/renderer/modules/webcodecs/video_frame.h" #include "third_party/blink/renderer/modules/webcodecs/video_frame_transfer_list.h" @@ -265,8 +269,9 @@ WebVector<unsigned char> ConvertCryptoResult<WebVector<unsigned char>>( v8::Isolate* isolate, const ScriptValue& value) { WebVector<unsigned char> vector; - if (DOMArrayBuffer* buffer = - V8ArrayBuffer::ToImplWithTypeCheck(isolate, value.V8Value())) { + DummyExceptionStateForTesting exception_state; + if (DOMArrayBuffer* buffer = NativeValueTraits<DOMArrayBuffer>::NativeValue( + isolate, value.V8Value(), exception_state)) { vector.Assign(reinterpret_cast<const unsigned char*>(buffer->Data()), buffer->ByteLength()); } @@ -1086,13 +1091,13 @@ TEST(V8ScriptValueSerializerForModulesTest, RoundTripAudioData) { auto audio_bus = media::AudioBus::Create(kChannels, kFrames); - // Populate each frame with a unique value. - const unsigned kTotalFrames = (kFrames * kChannels); - const float kFramesMultiplier = 1.0 / kTotalFrames; + // Populate each sample with a unique value. + const unsigned kTotalSamples = (kFrames * kChannels); + const float kSampleMultiplier = 1.0 / kTotalSamples; for (unsigned ch = 0; ch < kChannels; ++ch) { float* data = audio_bus->channel(ch); for (unsigned i = 0; i < kFrames; ++i) - data[i] = (i + ch * kFrames) * kFramesMultiplier; + data[i] = (i + ch * kFrames) * kSampleMultiplier; } // Copying the data from an AudioBus instead of creating a media::AudioBuffer @@ -1108,29 +1113,39 @@ TEST(V8ScriptValueSerializerForModulesTest, RoundTripAudioData) { v8::Local<v8::Value> result = RoundTripForModules(wrapper, scope); // The data should have been copied, not transferred. - EXPECT_TRUE(audio_data->buffer()); + EXPECT_TRUE(audio_data->data()); ASSERT_TRUE(V8AudioData::HasInstance(result, scope.GetIsolate())); AudioData* new_data = V8AudioData::ToImpl(result.As<v8::Object>()); EXPECT_EQ(base::TimeDelta::FromMicroseconds(new_data->timestamp()), kTimestamp); - EXPECT_EQ(new_data->buffer()->numberOfChannels(), kChannels); - EXPECT_EQ(new_data->buffer()->sampleRate(), kSampleRate); - EXPECT_EQ(new_data->buffer()->length(), kFrames); - - // Make sure the data wasn't changed during the transfer. - for (unsigned ch = 0; ch < kChannels; ++ch) { - float* src_data = audio_data->buffer()->getChannelData(ch)->Data(); - float* dst_data = new_data->buffer()->getChannelData(ch)->Data(); - for (unsigned i = 0; i < kFrames; ++i) { - EXPECT_EQ(src_data[i], dst_data[i]); - } + EXPECT_EQ(new_data->numberOfChannels(), kChannels); + EXPECT_EQ(new_data->numberOfFrames(), kFrames); + EXPECT_EQ(new_data->sampleRate(), kSampleRate); + + // Copy out the frames to make sure they haven't been changed during the + // transfer. + DOMArrayBuffer* copy_dest = DOMArrayBuffer::Create(kFrames, sizeof(float)); + AllowSharedBufferSource* dest = + MakeGarbageCollected<AllowSharedBufferSource>(copy_dest); + AudioDataCopyToOptions* options = + MakeGarbageCollected<AudioDataCopyToOptions>(); + + for (unsigned int ch = 0; ch < kChannels; ++ch) { + options->setPlaneIndex(ch); + new_data->copyTo(dest, options, scope.GetExceptionState()); + EXPECT_FALSE(scope.GetExceptionState().HadException()); + + float* new_samples = static_cast<float*>(copy_dest->Data()); + + for (unsigned int i = 0; i < kFrames; ++i) + ASSERT_EQ(new_samples[i], (i + ch * kFrames) * kSampleMultiplier); } // Closing the original |audio_data| should not affect |new_data|. audio_data->close(); - EXPECT_TRUE(new_data->buffer()); + EXPECT_TRUE(new_data->data()); } TEST(V8ScriptValueSerializerForModulesTest, ClosedAudioDataThrows) { |