Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1459)

Unified Diff: test/unittests/value-serializer-unittest.cc

Issue 2570433005: Disallow passing a SharedArrayBuffer in the transfer list. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« src/value-serializer.cc ('K') | « src/value-serializer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/unittests/value-serializer-unittest.cc
diff --git a/test/unittests/value-serializer-unittest.cc b/test/unittests/value-serializer-unittest.cc
index 1dabd2a17a78f411a5af3e3dad3ce57418ddc20d..c7a58f79cd98c12a510bf4fe2151e56c84aaf2f3 100644
--- a/test/unittests/value-serializer-unittest.cc
+++ b/test/unittests/value-serializer-unittest.cc
@@ -129,15 +129,22 @@ class ValueSerializerTest : public TestWithIsolate {
encoded_data_functor(buffer);
}
- template <typename MessageFunctor>
- void InvalidEncodeTest(const char* source, const MessageFunctor& functor) {
+ template <typename InputFunctor, typename MessageFunctor>
+ void InvalidEncodeTest(const InputFunctor& input_functor,
+ const MessageFunctor& functor) {
Context::Scope scope(serialization_context());
TryCatch try_catch(isolate());
- Local<Value> input_value = EvaluateScriptForInput(source);
+ Local<Value> input_value = input_functor();
ASSERT_TRUE(DoEncode(input_value).IsNothing());
functor(try_catch.Message());
}
+ template <typename MessageFunctor>
+ void InvalidEncodeTest(const char* source, const MessageFunctor& functor) {
+ InvalidEncodeTest(
+ [this, source]() { return EvaluateScriptForInput(source); }, functor);
+ }
+
void InvalidEncodeTest(const char* source) {
InvalidEncodeTest(source, [](Local<Message>) {});
}
@@ -2042,7 +2049,9 @@ class ValueSerializerTestWithSharedArrayBufferTransfer
protected:
static const size_t kTestByteLength = 4;
- ValueSerializerTestWithSharedArrayBufferTransfer() {
+ ValueSerializerTestWithSharedArrayBufferTransfer()
+ : serializer_delegate_(this),
+ should_transfer_shared_array_buffer_(false) {
const uint8_t data[kTestByteLength] = {0x00, 0x01, 0x80, 0xff};
memcpy(data_, data, kTestByteLength);
{
@@ -2061,7 +2070,12 @@ class ValueSerializerTestWithSharedArrayBufferTransfer
const Local<SharedArrayBuffer>& output_buffer() { return output_buffer_; }
void BeforeEncode(ValueSerializer* serializer) override {
- serializer->TransferSharedArrayBuffer(0, input_buffer_);
+ if (should_transfer_shared_array_buffer_) {
+ // TODO(binji): In general, this should not be called, because
+ // SharedArrayBuffers are not allowed in the transfer list. We allow it
+ // for testing for now, but this function will be removed soon.
+ serializer->TransferSharedArrayBuffer(0, input_buffer_);
+ }
}
void BeforeDecode(ValueDeserializer* deserializer) override {
@@ -2080,6 +2094,39 @@ class ValueSerializerTestWithSharedArrayBufferTransfer
flag_was_enabled_ = false;
}
+ protected:
+// GMock doesn't use the "override" keyword.
+#if __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Winconsistent-missing-override"
+#endif
+
+ class SerializerDelegate : public ValueSerializer::Delegate {
+ public:
+ explicit SerializerDelegate(
+ ValueSerializerTestWithSharedArrayBufferTransfer* test)
+ : test_(test) {}
+ MOCK_METHOD2(TransferSharedArrayBuffer,
+ Maybe<uint32_t>(Isolate* isolate, Local<Object> object));
+ void ThrowDataCloneError(Local<String> message) override {
+ test_->isolate()->ThrowException(Exception::Error(message));
+ }
+
+ private:
+ ValueSerializerTestWithSharedArrayBufferTransfer* test_;
+ };
+
+#if __clang__
+#pragma clang diagnostic pop
+#endif
+
+ ValueSerializer::Delegate* GetSerializerDelegate() override {
+ return &serializer_delegate_;
+ }
+
+ SerializerDelegate serializer_delegate_;
+ bool should_transfer_shared_array_buffer_;
+
private:
static bool flag_was_enabled_;
uint8_t data_[kTestByteLength];
@@ -2092,6 +2139,13 @@ bool ValueSerializerTestWithSharedArrayBufferTransfer::flag_was_enabled_ =
TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer,
RoundTripSharedArrayBufferTransfer) {
+ should_transfer_shared_array_buffer_ = false;
+ EXPECT_CALL(serializer_delegate_, TransferSharedArrayBuffer(isolate(), _))
+ .WillRepeatedly(Invoke([this](Isolate*, Local<Object> object) {
jbroman 2016/12/13 20:56:00 nit: Since this just validates an argument and ret
binji 2016/12/14 23:58:30 Done.
+ EXPECT_EQ(input_buffer(), object);
+ return Just(0U);
+ }));
+
RoundTripTest([this]() { return input_buffer(); },
[this](Local<Value> value) {
ASSERT_TRUE(value->IsSharedArrayBuffer());
@@ -2124,9 +2178,10 @@ TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer,
}
TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer,
- SharedArrayBufferMustBeTransferred) {
- // A SharedArrayBuffer which was not marked for transfer should fail encoding.
- InvalidEncodeTest("new SharedArrayBuffer(32)");
+ SharedArrayBufferMustNotBeTransferred) {
+ // A SharedArrayBuffer which was marked for transfer should fail encoding.
+ should_transfer_shared_array_buffer_ = true;
+ InvalidEncodeTest([this]() { return input_buffer(); }, [](Local<Message>) {});
}
TEST_F(ValueSerializerTest, UnsupportedHostObject) {
« src/value-serializer.cc ('K') | « src/value-serializer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698