| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 size_t size = | 166 size_t size = |
| 167 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); | 167 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); |
| 168 EXPECT_EQ(16U, size); | 168 EXPECT_EQ(16U, size); |
| 169 | 169 |
| 170 mojo::internal::FixedBufferForTesting buf(size); | 170 mojo::internal::FixedBufferForTesting buf(size); |
| 171 internal::PodUnion_Data* data = nullptr; | 171 internal::PodUnion_Data* data = nullptr; |
| 172 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); | 172 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); |
| 173 | 173 |
| 174 void* raw_buf = buf.Leak(); | 174 void* raw_buf = buf.Leak(); |
| 175 mojo::internal::ValidationContext validation_context( | 175 mojo::internal::ValidationContext validation_context( |
| 176 data, static_cast<uint32_t>(size), 0); | 176 data, static_cast<uint32_t>(size), 0, 0); |
| 177 EXPECT_TRUE( | 177 EXPECT_TRUE( |
| 178 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); | 178 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); |
| 179 free(raw_buf); | 179 free(raw_buf); |
| 180 } | 180 } |
| 181 | 181 |
| 182 TEST(UnionTest, SerializeNotNull) { | 182 TEST(UnionTest, SerializeNotNull) { |
| 183 PodUnionPtr pod(PodUnion::New()); | 183 PodUnionPtr pod(PodUnion::New()); |
| 184 pod->set_f_int8(0); | 184 pod->set_f_int8(0); |
| 185 size_t size = | 185 size_t size = |
| 186 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); | 186 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 217 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); | 217 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); |
| 218 EXPECT_EQ(16U, size); | 218 EXPECT_EQ(16U, size); |
| 219 mojo::internal::FixedBufferForTesting buf(size); | 219 mojo::internal::FixedBufferForTesting buf(size); |
| 220 internal::PodUnion_Data* data = nullptr; | 220 internal::PodUnion_Data* data = nullptr; |
| 221 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); | 221 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); |
| 222 EXPECT_EQ(nullptr, data); | 222 EXPECT_EQ(nullptr, data); |
| 223 } | 223 } |
| 224 | 224 |
| 225 TEST(UnionTest, NullValidation) { | 225 TEST(UnionTest, NullValidation) { |
| 226 void* buf = nullptr; | 226 void* buf = nullptr; |
| 227 mojo::internal::ValidationContext validation_context(buf, 0, 0); | 227 mojo::internal::ValidationContext validation_context(buf, 0, 0, 0); |
| 228 EXPECT_TRUE(internal::PodUnion_Data::Validate( | 228 EXPECT_TRUE(internal::PodUnion_Data::Validate( |
| 229 buf, &validation_context, false)); | 229 buf, &validation_context, false)); |
| 230 } | 230 } |
| 231 | 231 |
| 232 TEST(UnionTest, OutOfAlignmentValidation) { | 232 TEST(UnionTest, OutOfAlignmentValidation) { |
| 233 size_t size = sizeof(internal::PodUnion_Data); | 233 size_t size = sizeof(internal::PodUnion_Data); |
| 234 // Get an aligned object and shift the alignment. | 234 // Get an aligned object and shift the alignment. |
| 235 mojo::internal::FixedBufferForTesting aligned_buf(size + 1); | 235 mojo::internal::FixedBufferForTesting aligned_buf(size + 1); |
| 236 void* raw_buf = aligned_buf.Leak(); | 236 void* raw_buf = aligned_buf.Leak(); |
| 237 char* buf = reinterpret_cast<char*>(raw_buf) + 1; | 237 char* buf = reinterpret_cast<char*>(raw_buf) + 1; |
| 238 | 238 |
| 239 internal::PodUnion_Data* data = | 239 internal::PodUnion_Data* data = |
| 240 reinterpret_cast<internal::PodUnion_Data*>(buf); | 240 reinterpret_cast<internal::PodUnion_Data*>(buf); |
| 241 mojo::internal::ValidationContext validation_context( | 241 mojo::internal::ValidationContext validation_context( |
| 242 data, static_cast<uint32_t>(size), 0); | 242 data, static_cast<uint32_t>(size), 0, 0); |
| 243 EXPECT_FALSE(internal::PodUnion_Data::Validate( | 243 EXPECT_FALSE(internal::PodUnion_Data::Validate( |
| 244 buf, &validation_context, false)); | 244 buf, &validation_context, false)); |
| 245 free(raw_buf); | 245 free(raw_buf); |
| 246 } | 246 } |
| 247 | 247 |
| 248 TEST(UnionTest, OOBValidation) { | 248 TEST(UnionTest, OOBValidation) { |
| 249 size_t size = sizeof(internal::PodUnion_Data) - 1; | 249 size_t size = sizeof(internal::PodUnion_Data) - 1; |
| 250 mojo::internal::FixedBufferForTesting buf(size); | 250 mojo::internal::FixedBufferForTesting buf(size); |
| 251 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); | 251 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); |
| 252 mojo::internal::ValidationContext validation_context( | 252 mojo::internal::ValidationContext validation_context( |
| 253 data, static_cast<uint32_t>(size), 0); | 253 data, static_cast<uint32_t>(size), 0, 0); |
| 254 void* raw_buf = buf.Leak(); | 254 void* raw_buf = buf.Leak(); |
| 255 EXPECT_FALSE( | 255 EXPECT_FALSE( |
| 256 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); | 256 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); |
| 257 free(raw_buf); | 257 free(raw_buf); |
| 258 } | 258 } |
| 259 | 259 |
| 260 TEST(UnionTest, UnknownTagValidation) { | 260 TEST(UnionTest, UnknownTagValidation) { |
| 261 size_t size = sizeof(internal::PodUnion_Data); | 261 size_t size = sizeof(internal::PodUnion_Data); |
| 262 mojo::internal::FixedBufferForTesting buf(size); | 262 mojo::internal::FixedBufferForTesting buf(size); |
| 263 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); | 263 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); |
| 264 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF); | 264 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF); |
| 265 mojo::internal::ValidationContext validation_context( | 265 mojo::internal::ValidationContext validation_context( |
| 266 data, static_cast<uint32_t>(size), 0); | 266 data, static_cast<uint32_t>(size), 0, 0); |
| 267 void* raw_buf = buf.Leak(); | 267 void* raw_buf = buf.Leak(); |
| 268 EXPECT_FALSE( | 268 EXPECT_FALSE( |
| 269 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); | 269 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); |
| 270 free(raw_buf); | 270 free(raw_buf); |
| 271 } | 271 } |
| 272 | 272 |
| 273 TEST(UnionTest, UnknownEnumValueValidation) { | 273 TEST(UnionTest, UnknownEnumValueValidation) { |
| 274 PodUnionPtr pod(PodUnion::New()); | 274 PodUnionPtr pod(PodUnion::New()); |
| 275 pod->set_f_enum(static_cast<AnEnum>(0xFFFF)); | 275 pod->set_f_enum(static_cast<AnEnum>(0xFFFF)); |
| 276 | 276 |
| 277 size_t size = | 277 size_t size = |
| 278 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); | 278 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); |
| 279 EXPECT_EQ(16U, size); | 279 EXPECT_EQ(16U, size); |
| 280 | 280 |
| 281 mojo::internal::FixedBufferForTesting buf(size); | 281 mojo::internal::FixedBufferForTesting buf(size); |
| 282 internal::PodUnion_Data* data = nullptr; | 282 internal::PodUnion_Data* data = nullptr; |
| 283 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); | 283 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); |
| 284 | 284 |
| 285 void* raw_buf = buf.Leak(); | 285 void* raw_buf = buf.Leak(); |
| 286 mojo::internal::ValidationContext validation_context( | 286 mojo::internal::ValidationContext validation_context( |
| 287 data, static_cast<uint32_t>(size), 0); | 287 data, static_cast<uint32_t>(size), 0, 0); |
| 288 EXPECT_FALSE( | 288 EXPECT_FALSE( |
| 289 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); | 289 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); |
| 290 free(raw_buf); | 290 free(raw_buf); |
| 291 } | 291 } |
| 292 | 292 |
| 293 TEST(UnionTest, UnknownExtensibleEnumValueValidation) { | 293 TEST(UnionTest, UnknownExtensibleEnumValueValidation) { |
| 294 PodUnionPtr pod(PodUnion::New()); | 294 PodUnionPtr pod(PodUnion::New()); |
| 295 pod->set_f_extensible_enum(static_cast<AnExtensibleEnum>(0xFFFF)); | 295 pod->set_f_extensible_enum(static_cast<AnExtensibleEnum>(0xFFFF)); |
| 296 | 296 |
| 297 size_t size = | 297 size_t size = |
| 298 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); | 298 mojo::internal::PrepareToSerialize<PodUnionDataView>(pod, false, nullptr); |
| 299 EXPECT_EQ(16U, size); | 299 EXPECT_EQ(16U, size); |
| 300 | 300 |
| 301 mojo::internal::FixedBufferForTesting buf(size); | 301 mojo::internal::FixedBufferForTesting buf(size); |
| 302 internal::PodUnion_Data* data = nullptr; | 302 internal::PodUnion_Data* data = nullptr; |
| 303 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); | 303 mojo::internal::Serialize<PodUnionDataView>(pod, &buf, &data, false, nullptr); |
| 304 | 304 |
| 305 void* raw_buf = buf.Leak(); | 305 void* raw_buf = buf.Leak(); |
| 306 mojo::internal::ValidationContext validation_context( | 306 mojo::internal::ValidationContext validation_context( |
| 307 data, static_cast<uint32_t>(size), 0); | 307 data, static_cast<uint32_t>(size), 0, 0); |
| 308 EXPECT_TRUE( | 308 EXPECT_TRUE( |
| 309 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); | 309 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false)); |
| 310 free(raw_buf); | 310 free(raw_buf); |
| 311 } | 311 } |
| 312 | 312 |
| 313 TEST(UnionTest, StringGetterSetter) { | 313 TEST(UnionTest, StringGetterSetter) { |
| 314 ObjectUnionPtr pod(ObjectUnion::New()); | 314 ObjectUnionPtr pod(ObjectUnion::New()); |
| 315 | 315 |
| 316 std::string hello("hello world"); | 316 std::string hello("hello world"); |
| 317 pod->set_f_string(hello); | 317 pod->set_f_string(hello); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING); | 363 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING); |
| 364 } | 364 } |
| 365 | 365 |
| 366 TEST(UnionTest, NullStringValidation) { | 366 TEST(UnionTest, NullStringValidation) { |
| 367 size_t size = sizeof(internal::ObjectUnion_Data); | 367 size_t size = sizeof(internal::ObjectUnion_Data); |
| 368 mojo::internal::FixedBufferForTesting buf(size); | 368 mojo::internal::FixedBufferForTesting buf(size); |
| 369 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); | 369 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); |
| 370 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; | 370 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; |
| 371 data->data.unknown = 0x0; | 371 data->data.unknown = 0x0; |
| 372 mojo::internal::ValidationContext validation_context( | 372 mojo::internal::ValidationContext validation_context( |
| 373 data, static_cast<uint32_t>(size), 0); | 373 data, static_cast<uint32_t>(size), 0, 0); |
| 374 void* raw_buf = buf.Leak(); | 374 void* raw_buf = buf.Leak(); |
| 375 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( | 375 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( |
| 376 raw_buf, &validation_context, false)); | 376 raw_buf, &validation_context, false)); |
| 377 free(raw_buf); | 377 free(raw_buf); |
| 378 } | 378 } |
| 379 | 379 |
| 380 TEST(UnionTest, StringPointerOverflowValidation) { | 380 TEST(UnionTest, StringPointerOverflowValidation) { |
| 381 size_t size = sizeof(internal::ObjectUnion_Data); | 381 size_t size = sizeof(internal::ObjectUnion_Data); |
| 382 mojo::internal::FixedBufferForTesting buf(size); | 382 mojo::internal::FixedBufferForTesting buf(size); |
| 383 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); | 383 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); |
| 384 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; | 384 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; |
| 385 data->data.unknown = 0xFFFFFFFFFFFFFFFF; | 385 data->data.unknown = 0xFFFFFFFFFFFFFFFF; |
| 386 mojo::internal::ValidationContext validation_context( | 386 mojo::internal::ValidationContext validation_context( |
| 387 data, static_cast<uint32_t>(size), 0); | 387 data, static_cast<uint32_t>(size), 0, 0); |
| 388 void* raw_buf = buf.Leak(); | 388 void* raw_buf = buf.Leak(); |
| 389 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( | 389 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( |
| 390 raw_buf, &validation_context, false)); | 390 raw_buf, &validation_context, false)); |
| 391 free(raw_buf); | 391 free(raw_buf); |
| 392 } | 392 } |
| 393 | 393 |
| 394 TEST(UnionTest, StringValidateOOB) { | 394 TEST(UnionTest, StringValidateOOB) { |
| 395 size_t size = 32; | 395 size_t size = 32; |
| 396 mojo::internal::FixedBufferForTesting buf(size); | 396 mojo::internal::FixedBufferForTesting buf(size); |
| 397 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); | 397 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); |
| 398 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; | 398 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; |
| 399 | 399 |
| 400 data->data.f_f_string.offset = 8; | 400 data->data.f_f_string.offset = 8; |
| 401 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string); | 401 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string); |
| 402 mojo::internal::ArrayHeader* array_header = | 402 mojo::internal::ArrayHeader* array_header = |
| 403 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr); | 403 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr); |
| 404 array_header->num_bytes = 20; // This should go out of bounds. | 404 array_header->num_bytes = 20; // This should go out of bounds. |
| 405 array_header->num_elements = 20; | 405 array_header->num_elements = 20; |
| 406 mojo::internal::ValidationContext validation_context(data, 32, 0); | 406 mojo::internal::ValidationContext validation_context(data, 32, 0, 0); |
| 407 void* raw_buf = buf.Leak(); | 407 void* raw_buf = buf.Leak(); |
| 408 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( | 408 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( |
| 409 raw_buf, &validation_context, false)); | 409 raw_buf, &validation_context, false)); |
| 410 free(raw_buf); | 410 free(raw_buf); |
| 411 } | 411 } |
| 412 | 412 |
| 413 // TODO(azani): Move back in array_unittest.cc when possible. | 413 // TODO(azani): Move back in array_unittest.cc when possible. |
| 414 // Array tests | 414 // Array tests |
| 415 TEST(UnionTest, PodUnionInArray) { | 415 TEST(UnionTest, PodUnionInArray) { |
| 416 SmallStructPtr small_struct(SmallStruct::New()); | 416 SmallStructPtr small_struct(SmallStruct::New()); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 508 new_buf.resize(size); | 508 new_buf.resize(size); |
| 509 | 509 |
| 510 void* raw_buf = buf.Leak(); | 510 void* raw_buf = buf.Leak(); |
| 511 memcpy(new_buf.data(), raw_buf, size); | 511 memcpy(new_buf.data(), raw_buf, size); |
| 512 free(raw_buf); | 512 free(raw_buf); |
| 513 | 513 |
| 514 data = | 514 data = |
| 515 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>( | 515 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>( |
| 516 new_buf.data()); | 516 new_buf.data()); |
| 517 mojo::internal::ValidationContext validation_context( | 517 mojo::internal::ValidationContext validation_context( |
| 518 data, static_cast<uint32_t>(size), 0); | 518 data, static_cast<uint32_t>(size), 0, 0); |
| 519 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate( | 519 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate( |
| 520 data, &validation_context, &validate_params)); | 520 data, &validation_context, &validate_params)); |
| 521 | 521 |
| 522 std::vector<ObjectUnionPtr> array2; | 522 std::vector<ObjectUnionPtr> array2; |
| 523 mojo::internal::Deserialize<ArrayDataView<ObjectUnionDataView>>(data, &array2, | 523 mojo::internal::Deserialize<ArrayDataView<ObjectUnionDataView>>(data, &array2, |
| 524 nullptr); | 524 nullptr); |
| 525 | 525 |
| 526 EXPECT_EQ(2U, array2.size()); | 526 EXPECT_EQ(2U, array2.size()); |
| 527 | 527 |
| 528 EXPECT_EQ("hello", array2[0]->get_f_string()); | 528 EXPECT_EQ("hello", array2[0]->get_f_string()); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( | 594 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( |
| 595 small_struct, &context); | 595 small_struct, &context); |
| 596 | 596 |
| 597 mojo::internal::FixedBufferForTesting buf(size); | 597 mojo::internal::FixedBufferForTesting buf(size); |
| 598 internal::SmallStruct_Data* data = nullptr; | 598 internal::SmallStruct_Data* data = nullptr; |
| 599 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, | 599 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, |
| 600 &context); | 600 &context); |
| 601 | 601 |
| 602 void* raw_buf = buf.Leak(); | 602 void* raw_buf = buf.Leak(); |
| 603 mojo::internal::ValidationContext validation_context( | 603 mojo::internal::ValidationContext validation_context( |
| 604 data, static_cast<uint32_t>(size), 0); | 604 data, static_cast<uint32_t>(size), 0, 0); |
| 605 EXPECT_TRUE(internal::SmallStruct_Data::Validate( | 605 EXPECT_TRUE(internal::SmallStruct_Data::Validate( |
| 606 raw_buf, &validation_context)); | 606 raw_buf, &validation_context)); |
| 607 free(raw_buf); | 607 free(raw_buf); |
| 608 } | 608 } |
| 609 | 609 |
| 610 // Validation test of a struct union fails due to unknown union tag. | 610 // Validation test of a struct union fails due to unknown union tag. |
| 611 TEST(UnionTest, Validation_PodUnionInStruct_Failure) { | 611 TEST(UnionTest, Validation_PodUnionInStruct_Failure) { |
| 612 SmallStructPtr small_struct(SmallStruct::New()); | 612 SmallStructPtr small_struct(SmallStruct::New()); |
| 613 small_struct->pod_union = PodUnion::New(); | 613 small_struct->pod_union = PodUnion::New(); |
| 614 small_struct->pod_union->set_f_int32(10); | 614 small_struct->pod_union->set_f_int32(10); |
| 615 | 615 |
| 616 mojo::internal::SerializationContext context; | 616 mojo::internal::SerializationContext context; |
| 617 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( | 617 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( |
| 618 small_struct, &context); | 618 small_struct, &context); |
| 619 | 619 |
| 620 mojo::internal::FixedBufferForTesting buf(size); | 620 mojo::internal::FixedBufferForTesting buf(size); |
| 621 internal::SmallStruct_Data* data = nullptr; | 621 internal::SmallStruct_Data* data = nullptr; |
| 622 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, | 622 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, |
| 623 &context); | 623 &context); |
| 624 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100); | 624 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100); |
| 625 | 625 |
| 626 void* raw_buf = buf.Leak(); | 626 void* raw_buf = buf.Leak(); |
| 627 mojo::internal::ValidationContext validation_context( | 627 mojo::internal::ValidationContext validation_context( |
| 628 data, static_cast<uint32_t>(size), 0); | 628 data, static_cast<uint32_t>(size), 0, 0); |
| 629 EXPECT_FALSE(internal::SmallStruct_Data::Validate( | 629 EXPECT_FALSE(internal::SmallStruct_Data::Validate( |
| 630 raw_buf, &validation_context)); | 630 raw_buf, &validation_context)); |
| 631 free(raw_buf); | 631 free(raw_buf); |
| 632 } | 632 } |
| 633 | 633 |
| 634 // Validation fails due to non-nullable null union in struct. | 634 // Validation fails due to non-nullable null union in struct. |
| 635 TEST(UnionTest, Validation_NullUnion_Failure) { | 635 TEST(UnionTest, Validation_NullUnion_Failure) { |
| 636 SmallStructNonNullableUnionPtr small_struct( | 636 SmallStructNonNullableUnionPtr small_struct( |
| 637 SmallStructNonNullableUnion::New()); | 637 SmallStructNonNullableUnion::New()); |
| 638 | 638 |
| 639 size_t size = | 639 size_t size = |
| 640 mojo::internal::PrepareToSerialize<SmallStructNonNullableUnionDataView>( | 640 mojo::internal::PrepareToSerialize<SmallStructNonNullableUnionDataView>( |
| 641 small_struct, nullptr); | 641 small_struct, nullptr); |
| 642 | 642 |
| 643 mojo::internal::FixedBufferForTesting buf(size); | 643 mojo::internal::FixedBufferForTesting buf(size); |
| 644 internal::SmallStructNonNullableUnion_Data* data = | 644 internal::SmallStructNonNullableUnion_Data* data = |
| 645 internal::SmallStructNonNullableUnion_Data::New(&buf); | 645 internal::SmallStructNonNullableUnion_Data::New(&buf); |
| 646 | 646 |
| 647 void* raw_buf = buf.Leak(); | 647 void* raw_buf = buf.Leak(); |
| 648 mojo::internal::ValidationContext validation_context( | 648 mojo::internal::ValidationContext validation_context( |
| 649 data, static_cast<uint32_t>(size), 0); | 649 data, static_cast<uint32_t>(size), 0, 0); |
| 650 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate( | 650 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate( |
| 651 raw_buf, &validation_context)); | 651 raw_buf, &validation_context)); |
| 652 free(raw_buf); | 652 free(raw_buf); |
| 653 } | 653 } |
| 654 | 654 |
| 655 // Validation passes with nullable null union. | 655 // Validation passes with nullable null union. |
| 656 TEST(UnionTest, Validation_NullableUnion) { | 656 TEST(UnionTest, Validation_NullableUnion) { |
| 657 SmallStructPtr small_struct(SmallStruct::New()); | 657 SmallStructPtr small_struct(SmallStruct::New()); |
| 658 | 658 |
| 659 mojo::internal::SerializationContext context; | 659 mojo::internal::SerializationContext context; |
| 660 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( | 660 size_t size = mojo::internal::PrepareToSerialize<SmallStructDataView>( |
| 661 small_struct, &context); | 661 small_struct, &context); |
| 662 | 662 |
| 663 mojo::internal::FixedBufferForTesting buf(size); | 663 mojo::internal::FixedBufferForTesting buf(size); |
| 664 internal::SmallStruct_Data* data = nullptr; | 664 internal::SmallStruct_Data* data = nullptr; |
| 665 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, | 665 mojo::internal::Serialize<SmallStructDataView>(small_struct, &buf, &data, |
| 666 &context); | 666 &context); |
| 667 | 667 |
| 668 void* raw_buf = buf.Leak(); | 668 void* raw_buf = buf.Leak(); |
| 669 mojo::internal::ValidationContext validation_context( | 669 mojo::internal::ValidationContext validation_context( |
| 670 data, static_cast<uint32_t>(size), 0); | 670 data, static_cast<uint32_t>(size), 0, 0); |
| 671 EXPECT_TRUE(internal::SmallStruct_Data::Validate( | 671 EXPECT_TRUE(internal::SmallStruct_Data::Validate( |
| 672 raw_buf, &validation_context)); | 672 raw_buf, &validation_context)); |
| 673 free(raw_buf); | 673 free(raw_buf); |
| 674 } | 674 } |
| 675 | 675 |
| 676 // TODO(azani): Move back in map_unittest.cc when possible. | 676 // TODO(azani): Move back in map_unittest.cc when possible. |
| 677 // Map Tests | 677 // Map Tests |
| 678 TEST(UnionTest, PodUnionInMap) { | 678 TEST(UnionTest, PodUnionInMap) { |
| 679 SmallStructPtr small_struct(SmallStruct::New()); | 679 SmallStructPtr small_struct(SmallStruct::New()); |
| 680 small_struct->pod_union_map.emplace(); | 680 small_struct->pod_union_map.emplace(); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 787 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
| 788 obj, false, nullptr); | 788 obj, false, nullptr); |
| 789 | 789 |
| 790 mojo::internal::FixedBufferForTesting buf(size); | 790 mojo::internal::FixedBufferForTesting buf(size); |
| 791 internal::ObjectUnion_Data* data = nullptr; | 791 internal::ObjectUnion_Data* data = nullptr; |
| 792 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 792 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 793 nullptr); | 793 nullptr); |
| 794 | 794 |
| 795 void* raw_buf = buf.Leak(); | 795 void* raw_buf = buf.Leak(); |
| 796 mojo::internal::ValidationContext validation_context( | 796 mojo::internal::ValidationContext validation_context( |
| 797 data, static_cast<uint32_t>(size), 0); | 797 data, static_cast<uint32_t>(size), 0, 0); |
| 798 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( | 798 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( |
| 799 raw_buf, &validation_context, false)); | 799 raw_buf, &validation_context, false)); |
| 800 free(raw_buf); | 800 free(raw_buf); |
| 801 } | 801 } |
| 802 | 802 |
| 803 TEST(UnionTest, StructInUnionValidationNonNullable) { | 803 TEST(UnionTest, StructInUnionValidationNonNullable) { |
| 804 mojo::internal::SerializationWarningObserverForTesting suppress_warning; | 804 mojo::internal::SerializationWarningObserverForTesting suppress_warning; |
| 805 | 805 |
| 806 DummyStructPtr dummy(nullptr); | 806 DummyStructPtr dummy(nullptr); |
| 807 | 807 |
| 808 ObjectUnionPtr obj(ObjectUnion::New()); | 808 ObjectUnionPtr obj(ObjectUnion::New()); |
| 809 obj->set_f_dummy(std::move(dummy)); | 809 obj->set_f_dummy(std::move(dummy)); |
| 810 | 810 |
| 811 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 811 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
| 812 obj, false, nullptr); | 812 obj, false, nullptr); |
| 813 | 813 |
| 814 mojo::internal::FixedBufferForTesting buf(size); | 814 mojo::internal::FixedBufferForTesting buf(size); |
| 815 internal::ObjectUnion_Data* data = nullptr; | 815 internal::ObjectUnion_Data* data = nullptr; |
| 816 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 816 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 817 nullptr); | 817 nullptr); |
| 818 | 818 |
| 819 void* raw_buf = buf.Leak(); | 819 void* raw_buf = buf.Leak(); |
| 820 mojo::internal::ValidationContext validation_context( | 820 mojo::internal::ValidationContext validation_context( |
| 821 data, static_cast<uint32_t>(size), 0); | 821 data, static_cast<uint32_t>(size), 0, 0); |
| 822 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( | 822 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( |
| 823 raw_buf, &validation_context, false)); | 823 raw_buf, &validation_context, false)); |
| 824 free(raw_buf); | 824 free(raw_buf); |
| 825 } | 825 } |
| 826 | 826 |
| 827 TEST(UnionTest, StructInUnionValidationNullable) { | 827 TEST(UnionTest, StructInUnionValidationNullable) { |
| 828 DummyStructPtr dummy(nullptr); | 828 DummyStructPtr dummy(nullptr); |
| 829 | 829 |
| 830 ObjectUnionPtr obj(ObjectUnion::New()); | 830 ObjectUnionPtr obj(ObjectUnion::New()); |
| 831 obj->set_f_nullable(std::move(dummy)); | 831 obj->set_f_nullable(std::move(dummy)); |
| 832 | 832 |
| 833 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 833 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
| 834 obj, false, nullptr); | 834 obj, false, nullptr); |
| 835 | 835 |
| 836 mojo::internal::FixedBufferForTesting buf(size); | 836 mojo::internal::FixedBufferForTesting buf(size); |
| 837 internal::ObjectUnion_Data* data = nullptr; | 837 internal::ObjectUnion_Data* data = nullptr; |
| 838 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 838 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 839 nullptr); | 839 nullptr); |
| 840 | 840 |
| 841 void* raw_buf = buf.Leak(); | 841 void* raw_buf = buf.Leak(); |
| 842 mojo::internal::ValidationContext validation_context( | 842 mojo::internal::ValidationContext validation_context( |
| 843 data, static_cast<uint32_t>(size), 0); | 843 data, static_cast<uint32_t>(size), 0, 0); |
| 844 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( | 844 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( |
| 845 raw_buf, &validation_context, false)); | 845 raw_buf, &validation_context, false)); |
| 846 free(raw_buf); | 846 free(raw_buf); |
| 847 } | 847 } |
| 848 | 848 |
| 849 TEST(UnionTest, ArrayInUnionGetterSetter) { | 849 TEST(UnionTest, ArrayInUnionGetterSetter) { |
| 850 std::vector<int8_t> array(2); | 850 std::vector<int8_t> array(2); |
| 851 array[0] = 8; | 851 array[0] = 8; |
| 852 array[1] = 9; | 852 array[1] = 9; |
| 853 | 853 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 | 892 |
| 893 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 893 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
| 894 obj, false, nullptr); | 894 obj, false, nullptr); |
| 895 mojo::internal::FixedBufferForTesting buf(size); | 895 mojo::internal::FixedBufferForTesting buf(size); |
| 896 internal::ObjectUnion_Data* data = nullptr; | 896 internal::ObjectUnion_Data* data = nullptr; |
| 897 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 897 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 898 nullptr); | 898 nullptr); |
| 899 | 899 |
| 900 void* raw_buf = buf.Leak(); | 900 void* raw_buf = buf.Leak(); |
| 901 mojo::internal::ValidationContext validation_context( | 901 mojo::internal::ValidationContext validation_context( |
| 902 data, static_cast<uint32_t>(size), 0); | 902 data, static_cast<uint32_t>(size), 0, 0); |
| 903 | 903 |
| 904 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( | 904 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( |
| 905 raw_buf, &validation_context, false)); | 905 raw_buf, &validation_context, false)); |
| 906 free(raw_buf); | 906 free(raw_buf); |
| 907 } | 907 } |
| 908 | 908 |
| 909 TEST(UnionTest, MapInUnionGetterSetter) { | 909 TEST(UnionTest, MapInUnionGetterSetter) { |
| 910 std::unordered_map<std::string, int8_t> map; | 910 std::unordered_map<std::string, int8_t> map; |
| 911 map.insert({"one", 1}); | 911 map.insert({"one", 1}); |
| 912 map.insert({"two", 2}); | 912 map.insert({"two", 2}); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 956 obj, false, &context); | 956 obj, false, &context); |
| 957 EXPECT_EQ(112U, size); | 957 EXPECT_EQ(112U, size); |
| 958 | 958 |
| 959 mojo::internal::FixedBufferForTesting buf(size); | 959 mojo::internal::FixedBufferForTesting buf(size); |
| 960 internal::ObjectUnion_Data* data = nullptr; | 960 internal::ObjectUnion_Data* data = nullptr; |
| 961 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 961 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 962 &context); | 962 &context); |
| 963 | 963 |
| 964 void* raw_buf = buf.Leak(); | 964 void* raw_buf = buf.Leak(); |
| 965 mojo::internal::ValidationContext validation_context( | 965 mojo::internal::ValidationContext validation_context( |
| 966 data, static_cast<uint32_t>(size), 0); | 966 data, static_cast<uint32_t>(size), 0, 0); |
| 967 | 967 |
| 968 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( | 968 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( |
| 969 raw_buf, &validation_context, false)); | 969 raw_buf, &validation_context, false)); |
| 970 free(raw_buf); | 970 free(raw_buf); |
| 971 } | 971 } |
| 972 | 972 |
| 973 TEST(UnionTest, UnionInUnionGetterSetter) { | 973 TEST(UnionTest, UnionInUnionGetterSetter) { |
| 974 PodUnionPtr pod(PodUnion::New()); | 974 PodUnionPtr pod(PodUnion::New()); |
| 975 pod->set_f_int8(10); | 975 pod->set_f_int8(10); |
| 976 | 976 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 obj, false, nullptr); | 1012 obj, false, nullptr); |
| 1013 EXPECT_EQ(32U, size); | 1013 EXPECT_EQ(32U, size); |
| 1014 | 1014 |
| 1015 mojo::internal::FixedBufferForTesting buf(size); | 1015 mojo::internal::FixedBufferForTesting buf(size); |
| 1016 internal::ObjectUnion_Data* data = nullptr; | 1016 internal::ObjectUnion_Data* data = nullptr; |
| 1017 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 1017 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 1018 nullptr); | 1018 nullptr); |
| 1019 | 1019 |
| 1020 void* raw_buf = buf.Leak(); | 1020 void* raw_buf = buf.Leak(); |
| 1021 mojo::internal::ValidationContext validation_context( | 1021 mojo::internal::ValidationContext validation_context( |
| 1022 data, static_cast<uint32_t>(size), 0); | 1022 data, static_cast<uint32_t>(size), 0, 0); |
| 1023 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( | 1023 EXPECT_TRUE(internal::ObjectUnion_Data::Validate( |
| 1024 raw_buf, &validation_context, false)); | 1024 raw_buf, &validation_context, false)); |
| 1025 free(raw_buf); | 1025 free(raw_buf); |
| 1026 } | 1026 } |
| 1027 | 1027 |
| 1028 TEST(UnionTest, UnionInUnionValidationNonNullable) { | 1028 TEST(UnionTest, UnionInUnionValidationNonNullable) { |
| 1029 mojo::internal::SerializationWarningObserverForTesting suppress_warning; | 1029 mojo::internal::SerializationWarningObserverForTesting suppress_warning; |
| 1030 | 1030 |
| 1031 PodUnionPtr pod(nullptr); | 1031 PodUnionPtr pod(nullptr); |
| 1032 | 1032 |
| 1033 ObjectUnionPtr obj(ObjectUnion::New()); | 1033 ObjectUnionPtr obj(ObjectUnion::New()); |
| 1034 obj->set_f_pod_union(std::move(pod)); | 1034 obj->set_f_pod_union(std::move(pod)); |
| 1035 | 1035 |
| 1036 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( | 1036 size_t size = mojo::internal::PrepareToSerialize<ObjectUnionDataView>( |
| 1037 obj, false, nullptr); | 1037 obj, false, nullptr); |
| 1038 | 1038 |
| 1039 mojo::internal::FixedBufferForTesting buf(size); | 1039 mojo::internal::FixedBufferForTesting buf(size); |
| 1040 internal::ObjectUnion_Data* data = nullptr; | 1040 internal::ObjectUnion_Data* data = nullptr; |
| 1041 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, | 1041 mojo::internal::Serialize<ObjectUnionDataView>(obj, &buf, &data, false, |
| 1042 nullptr); | 1042 nullptr); |
| 1043 | 1043 |
| 1044 void* raw_buf = buf.Leak(); | 1044 void* raw_buf = buf.Leak(); |
| 1045 mojo::internal::ValidationContext validation_context( | 1045 mojo::internal::ValidationContext validation_context( |
| 1046 data, static_cast<uint32_t>(size), 0); | 1046 data, static_cast<uint32_t>(size), 0, 0); |
| 1047 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( | 1047 EXPECT_FALSE(internal::ObjectUnion_Data::Validate( |
| 1048 raw_buf, &validation_context, false)); | 1048 raw_buf, &validation_context, false)); |
| 1049 free(raw_buf); | 1049 free(raw_buf); |
| 1050 } | 1050 } |
| 1051 | 1051 |
| 1052 TEST(UnionTest, HandleInUnionGetterSetter) { | 1052 TEST(UnionTest, HandleInUnionGetterSetter) { |
| 1053 ScopedMessagePipeHandle pipe0; | 1053 ScopedMessagePipeHandle pipe0; |
| 1054 ScopedMessagePipeHandle pipe1; | 1054 ScopedMessagePipeHandle pipe1; |
| 1055 | 1055 |
| 1056 CreateMessagePipe(nullptr, &pipe0, &pipe1); | 1056 CreateMessagePipe(nullptr, &pipe0, &pipe1); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1113 handle, false, &context); | 1113 handle, false, &context); |
| 1114 EXPECT_EQ(16U, size); | 1114 EXPECT_EQ(16U, size); |
| 1115 | 1115 |
| 1116 mojo::internal::FixedBufferForTesting buf(size); | 1116 mojo::internal::FixedBufferForTesting buf(size); |
| 1117 internal::HandleUnion_Data* data = nullptr; | 1117 internal::HandleUnion_Data* data = nullptr; |
| 1118 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false, | 1118 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false, |
| 1119 &context); | 1119 &context); |
| 1120 | 1120 |
| 1121 void* raw_buf = buf.Leak(); | 1121 void* raw_buf = buf.Leak(); |
| 1122 mojo::internal::ValidationContext validation_context( | 1122 mojo::internal::ValidationContext validation_context( |
| 1123 data, static_cast<uint32_t>(size), 1); | 1123 data, static_cast<uint32_t>(size), 1, 0); |
| 1124 EXPECT_TRUE(internal::HandleUnion_Data::Validate( | 1124 EXPECT_TRUE(internal::HandleUnion_Data::Validate( |
| 1125 raw_buf, &validation_context, false)); | 1125 raw_buf, &validation_context, false)); |
| 1126 free(raw_buf); | 1126 free(raw_buf); |
| 1127 } | 1127 } |
| 1128 | 1128 |
| 1129 TEST(UnionTest, HandleInUnionValidationNull) { | 1129 TEST(UnionTest, HandleInUnionValidationNull) { |
| 1130 mojo::internal::SerializationWarningObserverForTesting suppress_warning; | 1130 mojo::internal::SerializationWarningObserverForTesting suppress_warning; |
| 1131 | 1131 |
| 1132 ScopedMessagePipeHandle pipe; | 1132 ScopedMessagePipeHandle pipe; |
| 1133 HandleUnionPtr handle(HandleUnion::New()); | 1133 HandleUnionPtr handle(HandleUnion::New()); |
| 1134 handle->set_f_message_pipe(std::move(pipe)); | 1134 handle->set_f_message_pipe(std::move(pipe)); |
| 1135 | 1135 |
| 1136 mojo::internal::SerializationContext context; | 1136 mojo::internal::SerializationContext context; |
| 1137 size_t size = mojo::internal::PrepareToSerialize<HandleUnionDataView>( | 1137 size_t size = mojo::internal::PrepareToSerialize<HandleUnionDataView>( |
| 1138 handle, false, &context); | 1138 handle, false, &context); |
| 1139 EXPECT_EQ(16U, size); | 1139 EXPECT_EQ(16U, size); |
| 1140 | 1140 |
| 1141 mojo::internal::FixedBufferForTesting buf(size); | 1141 mojo::internal::FixedBufferForTesting buf(size); |
| 1142 internal::HandleUnion_Data* data = nullptr; | 1142 internal::HandleUnion_Data* data = nullptr; |
| 1143 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false, | 1143 mojo::internal::Serialize<HandleUnionDataView>(handle, &buf, &data, false, |
| 1144 &context); | 1144 &context); |
| 1145 | 1145 |
| 1146 void* raw_buf = buf.Leak(); | 1146 void* raw_buf = buf.Leak(); |
| 1147 mojo::internal::ValidationContext validation_context( | 1147 mojo::internal::ValidationContext validation_context( |
| 1148 data, static_cast<uint32_t>(size), 1); | 1148 data, static_cast<uint32_t>(size), 1, 0); |
| 1149 EXPECT_FALSE(internal::HandleUnion_Data::Validate( | 1149 EXPECT_FALSE(internal::HandleUnion_Data::Validate( |
| 1150 raw_buf, &validation_context, false)); | 1150 raw_buf, &validation_context, false)); |
| 1151 free(raw_buf); | 1151 free(raw_buf); |
| 1152 } | 1152 } |
| 1153 | 1153 |
| 1154 class SmallCacheImpl : public SmallCache { | 1154 class SmallCacheImpl : public SmallCache { |
| 1155 public: | 1155 public: |
| 1156 explicit SmallCacheImpl(const base::Closure& closure) | 1156 explicit SmallCacheImpl(const base::Closure& closure) |
| 1157 : int_value_(0), closure_(closure) {} | 1157 : int_value_(0), closure_(closure) {} |
| 1158 ~SmallCacheImpl() override {} | 1158 ~SmallCacheImpl() override {} |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1237 | 1237 |
| 1238 PodUnionPtr pod(PodUnion::New()); | 1238 PodUnionPtr pod(PodUnion::New()); |
| 1239 pod->set_f_int16(16); | 1239 pod->set_f_int16(16); |
| 1240 | 1240 |
| 1241 ptr->Echo(std::move(pod), base::Bind(&ExpectInt16, 16)); | 1241 ptr->Echo(std::move(pod), base::Bind(&ExpectInt16, 16)); |
| 1242 base::RunLoop().RunUntilIdle(); | 1242 base::RunLoop().RunUntilIdle(); |
| 1243 } | 1243 } |
| 1244 | 1244 |
| 1245 } // namespace test | 1245 } // namespace test |
| 1246 } // namespace mojo | 1246 } // namespace mojo |
| OLD | NEW |