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

Side by Side Diff: mojo/public/cpp/bindings/tests/union_unittest.cc

Issue 2064903002: Mojo: Report bindings validation errors via MojoNotifyBadMessage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 months 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 unified diff | Download patch
OLDNEW
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"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "mojo/public/cpp/bindings/array.h" 12 #include "mojo/public/cpp/bindings/array.h"
13 #include "mojo/public/cpp/bindings/binding.h" 13 #include "mojo/public/cpp/bindings/binding.h"
14 #include "mojo/public/cpp/bindings/lib/array_internal.h" 14 #include "mojo/public/cpp/bindings/lib/array_internal.h"
15 #include "mojo/public/cpp/bindings/lib/bounds_checker.h"
16 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" 15 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
17 #include "mojo/public/cpp/bindings/lib/serialization.h" 16 #include "mojo/public/cpp/bindings/lib/serialization.h"
17 #include "mojo/public/cpp/bindings/lib/validation_context.h"
18 #include "mojo/public/cpp/bindings/string.h" 18 #include "mojo/public/cpp/bindings/string.h"
19 #include "mojo/public/cpp/test_support/test_utils.h" 19 #include "mojo/public/cpp/test_support/test_utils.h"
20 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h" 20 #include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
21 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h" 21 #include "mojo/public/interfaces/bindings/tests/test_unions.mojom.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 namespace mojo { 24 namespace mojo {
25 namespace test { 25 namespace test {
26 26
27 TEST(UnionTest, PlainOldDataGetterSetter) { 27 TEST(UnionTest, PlainOldDataGetterSetter) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 size_t size = 165 size_t size =
166 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr); 166 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr);
167 EXPECT_EQ(16U, size); 167 EXPECT_EQ(16U, size);
168 168
169 mojo::internal::FixedBufferForTesting buf(size); 169 mojo::internal::FixedBufferForTesting buf(size);
170 internal::PodUnion_Data* data = nullptr; 170 internal::PodUnion_Data* data = nullptr;
171 mojo::internal::Serialize<PodUnionPtr>(pod, &buf, &data, false, nullptr); 171 mojo::internal::Serialize<PodUnionPtr>(pod, &buf, &data, false, nullptr);
172 data->EncodePointers(); 172 data->EncodePointers();
173 173
174 void* raw_buf = buf.Leak(); 174 void* raw_buf = buf.Leak();
175 mojo::internal::BoundsChecker bounds_checker(data, 175 mojo::internal::ValidationContext validation_context(
176 static_cast<uint32_t>(size), 0); 176 data, static_cast<uint32_t>(size), 0);
177 EXPECT_TRUE( 177 EXPECT_TRUE(
178 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, 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<PodUnionPtr>(pod, false, nullptr); 186 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr);
187 mojo::internal::FixedBufferForTesting buf(size); 187 mojo::internal::FixedBufferForTesting buf(size);
188 internal::PodUnion_Data* data = nullptr; 188 internal::PodUnion_Data* data = nullptr;
(...skipping 28 matching lines...) Expand all
217 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr); 217 mojo::internal::PrepareToSerialize<PodUnionPtr>(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<PodUnionPtr>(pod, &buf, &data, false, nullptr); 221 mojo::internal::Serialize<PodUnionPtr>(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::BoundsChecker bounds_checker(buf, 0, 0); 227 mojo::internal::ValidationContext validation_context(buf, 0, 0);
228 EXPECT_TRUE(internal::PodUnion_Data::Validate(buf, &bounds_checker, false)); 228 EXPECT_TRUE(internal::PodUnion_Data::Validate(
229 buf, &validation_context, false));
229 } 230 }
230 231
231 TEST(UnionTest, OutOfAlignmentValidation) { 232 TEST(UnionTest, OutOfAlignmentValidation) {
232 size_t size = sizeof(internal::PodUnion_Data); 233 size_t size = sizeof(internal::PodUnion_Data);
233 // Get an aligned object and shift the alignment. 234 // Get an aligned object and shift the alignment.
234 mojo::internal::FixedBufferForTesting aligned_buf(size + 1); 235 mojo::internal::FixedBufferForTesting aligned_buf(size + 1);
235 void* raw_buf = aligned_buf.Leak(); 236 void* raw_buf = aligned_buf.Leak();
236 char* buf = reinterpret_cast<char*>(raw_buf) + 1; 237 char* buf = reinterpret_cast<char*>(raw_buf) + 1;
237 238
238 internal::PodUnion_Data* data = 239 internal::PodUnion_Data* data =
239 reinterpret_cast<internal::PodUnion_Data*>(buf); 240 reinterpret_cast<internal::PodUnion_Data*>(buf);
240 mojo::internal::BoundsChecker bounds_checker(data, 241 mojo::internal::ValidationContext validation_context(
241 static_cast<uint32_t>(size), 0); 242 data, static_cast<uint32_t>(size), 0);
242 EXPECT_FALSE(internal::PodUnion_Data::Validate(buf, &bounds_checker, false)); 243 EXPECT_FALSE(internal::PodUnion_Data::Validate(
244 buf, &validation_context, false));
243 free(raw_buf); 245 free(raw_buf);
244 } 246 }
245 247
246 TEST(UnionTest, OOBValidation) { 248 TEST(UnionTest, OOBValidation) {
247 size_t size = sizeof(internal::PodUnion_Data) - 1; 249 size_t size = sizeof(internal::PodUnion_Data) - 1;
248 mojo::internal::FixedBufferForTesting buf(size); 250 mojo::internal::FixedBufferForTesting buf(size);
249 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 251 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
250 mojo::internal::BoundsChecker bounds_checker(data, 252 mojo::internal::ValidationContext validation_context(
251 static_cast<uint32_t>(size), 0); 253 data, static_cast<uint32_t>(size), 0);
252 void* raw_buf = buf.Leak(); 254 void* raw_buf = buf.Leak();
253 EXPECT_FALSE( 255 EXPECT_FALSE(
254 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false)); 256 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
255 free(raw_buf); 257 free(raw_buf);
256 } 258 }
257 259
258 TEST(UnionTest, UnknownTagValidation) { 260 TEST(UnionTest, UnknownTagValidation) {
259 size_t size = sizeof(internal::PodUnion_Data); 261 size_t size = sizeof(internal::PodUnion_Data);
260 mojo::internal::FixedBufferForTesting buf(size); 262 mojo::internal::FixedBufferForTesting buf(size);
261 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf); 263 internal::PodUnion_Data* data = internal::PodUnion_Data::New(&buf);
262 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF); 264 data->tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(0xFFFFFF);
263 mojo::internal::BoundsChecker bounds_checker(data, 265 mojo::internal::ValidationContext validation_context(
264 static_cast<uint32_t>(size), 0); 266 data, static_cast<uint32_t>(size), 0);
265 void* raw_buf = buf.Leak(); 267 void* raw_buf = buf.Leak();
266 EXPECT_FALSE( 268 EXPECT_FALSE(
267 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false)); 269 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
268 free(raw_buf); 270 free(raw_buf);
269 } 271 }
270 272
271 TEST(UnionTest, UnknownEnumValueValidation) { 273 TEST(UnionTest, UnknownEnumValueValidation) {
272 PodUnionPtr pod(PodUnion::New()); 274 PodUnionPtr pod(PodUnion::New());
273 pod->set_f_enum(static_cast<AnEnum>(0xFFFF)); 275 pod->set_f_enum(static_cast<AnEnum>(0xFFFF));
274 276
275 size_t size = 277 size_t size =
276 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr); 278 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr);
277 EXPECT_EQ(16U, size); 279 EXPECT_EQ(16U, size);
278 280
279 mojo::internal::FixedBufferForTesting buf(size); 281 mojo::internal::FixedBufferForTesting buf(size);
280 internal::PodUnion_Data* data = nullptr; 282 internal::PodUnion_Data* data = nullptr;
281 mojo::internal::Serialize<PodUnionPtr>(pod, &buf, &data, false, nullptr); 283 mojo::internal::Serialize<PodUnionPtr>(pod, &buf, &data, false, nullptr);
282 284
283 void* raw_buf = buf.Leak(); 285 void* raw_buf = buf.Leak();
284 mojo::internal::BoundsChecker bounds_checker(data, 286 mojo::internal::ValidationContext validation_context(
285 static_cast<uint32_t>(size), 0); 287 data, static_cast<uint32_t>(size), 0);
286 EXPECT_FALSE( 288 EXPECT_FALSE(
287 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false)); 289 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
288 free(raw_buf); 290 free(raw_buf);
289 } 291 }
290 292
291 TEST(UnionTest, UnknownExtensibleEnumValueValidation) { 293 TEST(UnionTest, UnknownExtensibleEnumValueValidation) {
292 PodUnionPtr pod(PodUnion::New()); 294 PodUnionPtr pod(PodUnion::New());
293 pod->set_f_extensible_enum(static_cast<AnExtensibleEnum>(0xFFFF)); 295 pod->set_f_extensible_enum(static_cast<AnExtensibleEnum>(0xFFFF));
294 296
295 size_t size = 297 size_t size =
296 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr); 298 mojo::internal::PrepareToSerialize<PodUnionPtr>(pod, false, nullptr);
297 EXPECT_EQ(16U, size); 299 EXPECT_EQ(16U, size);
298 300
299 mojo::internal::FixedBufferForTesting buf(size); 301 mojo::internal::FixedBufferForTesting buf(size);
300 internal::PodUnion_Data* data = nullptr; 302 internal::PodUnion_Data* data = nullptr;
301 mojo::internal::Serialize<PodUnionPtr>(pod, &buf, &data, false, nullptr); 303 mojo::internal::Serialize<PodUnionPtr>(pod, &buf, &data, false, nullptr);
302 304
303 void* raw_buf = buf.Leak(); 305 void* raw_buf = buf.Leak();
304 mojo::internal::BoundsChecker bounds_checker(data, 306 mojo::internal::ValidationContext validation_context(
305 static_cast<uint32_t>(size), 0); 307 data, static_cast<uint32_t>(size), 0);
306 EXPECT_TRUE( 308 EXPECT_TRUE(
307 internal::PodUnion_Data::Validate(raw_buf, &bounds_checker, false)); 309 internal::PodUnion_Data::Validate(raw_buf, &validation_context, false));
308 free(raw_buf); 310 free(raw_buf);
309 } 311 }
310 312
311 TEST(UnionTest, StringGetterSetter) { 313 TEST(UnionTest, StringGetterSetter) {
312 ObjectUnionPtr pod(ObjectUnion::New()); 314 ObjectUnionPtr pod(ObjectUnion::New());
313 315
314 String hello("hello world"); 316 String hello("hello world");
315 pod->set_f_string(hello); 317 pod->set_f_string(hello);
316 EXPECT_EQ(hello, pod->get_f_string()); 318 EXPECT_EQ(hello, pod->get_f_string());
317 EXPECT_TRUE(pod->is_f_string()); 319 EXPECT_TRUE(pod->is_f_string());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 EXPECT_TRUE(pod2->is_f_string()); 364 EXPECT_TRUE(pod2->is_f_string());
363 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING); 365 EXPECT_EQ(pod2->which(), ObjectUnion::Tag::F_STRING);
364 } 366 }
365 367
366 TEST(UnionTest, NullStringValidation) { 368 TEST(UnionTest, NullStringValidation) {
367 size_t size = sizeof(internal::ObjectUnion_Data); 369 size_t size = sizeof(internal::ObjectUnion_Data);
368 mojo::internal::FixedBufferForTesting buf(size); 370 mojo::internal::FixedBufferForTesting buf(size);
369 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 371 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
370 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 372 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
371 data->data.unknown = 0x0; 373 data->data.unknown = 0x0;
372 mojo::internal::BoundsChecker bounds_checker(data, 374 mojo::internal::ValidationContext validation_context(
373 static_cast<uint32_t>(size), 0); 375 data, static_cast<uint32_t>(size), 0);
374 void* raw_buf = buf.Leak(); 376 void* raw_buf = buf.Leak();
375 EXPECT_FALSE( 377 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
376 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 378 raw_buf, &validation_context, false));
377 free(raw_buf); 379 free(raw_buf);
378 } 380 }
379 381
380 TEST(UnionTest, StringPointerOverflowValidation) { 382 TEST(UnionTest, StringPointerOverflowValidation) {
381 size_t size = sizeof(internal::ObjectUnion_Data); 383 size_t size = sizeof(internal::ObjectUnion_Data);
382 mojo::internal::FixedBufferForTesting buf(size); 384 mojo::internal::FixedBufferForTesting buf(size);
383 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 385 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
384 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 386 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
385 data->data.unknown = 0xFFFFFFFFFFFFFFFF; 387 data->data.unknown = 0xFFFFFFFFFFFFFFFF;
386 mojo::internal::BoundsChecker bounds_checker(data, 388 mojo::internal::ValidationContext validation_context(
387 static_cast<uint32_t>(size), 0); 389 data, static_cast<uint32_t>(size), 0);
388 void* raw_buf = buf.Leak(); 390 void* raw_buf = buf.Leak();
389 EXPECT_FALSE( 391 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
390 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 392 raw_buf, &validation_context, false));
391 free(raw_buf); 393 free(raw_buf);
392 } 394 }
393 395
394 TEST(UnionTest, StringValidateOOB) { 396 TEST(UnionTest, StringValidateOOB) {
395 size_t size = 32; 397 size_t size = 32;
396 mojo::internal::FixedBufferForTesting buf(size); 398 mojo::internal::FixedBufferForTesting buf(size);
397 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf); 399 internal::ObjectUnion_Data* data = internal::ObjectUnion_Data::New(&buf);
398 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING; 400 data->tag = internal::ObjectUnion_Data::ObjectUnion_Tag::F_STRING;
399 401
400 data->data.f_f_string.offset = 8; 402 data->data.f_f_string.offset = 8;
401 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string); 403 char* ptr = reinterpret_cast<char*>(&data->data.f_f_string);
402 mojo::internal::ArrayHeader* array_header = 404 mojo::internal::ArrayHeader* array_header =
403 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr); 405 reinterpret_cast<mojo::internal::ArrayHeader*>(ptr + *ptr);
404 array_header->num_bytes = 20; // This should go out of bounds. 406 array_header->num_bytes = 20; // This should go out of bounds.
405 array_header->num_elements = 20; 407 array_header->num_elements = 20;
406 mojo::internal::BoundsChecker bounds_checker(data, 32, 0); 408 mojo::internal::ValidationContext validation_context(data, 32, 0);
407 void* raw_buf = buf.Leak(); 409 void* raw_buf = buf.Leak();
408 EXPECT_FALSE( 410 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
409 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 411 raw_buf, &validation_context, false));
410 free(raw_buf); 412 free(raw_buf);
411 } 413 }
412 414
413 // TODO(azani): Move back in array_unittest.cc when possible. 415 // TODO(azani): Move back in array_unittest.cc when possible.
414 // Array tests 416 // Array tests
415 TEST(UnionTest, PodUnionInArray) { 417 TEST(UnionTest, PodUnionInArray) {
416 SmallStructPtr small_struct(SmallStruct::New()); 418 SmallStructPtr small_struct(SmallStruct::New());
417 small_struct->pod_union_array = Array<PodUnionPtr>(2); 419 small_struct->pod_union_array = Array<PodUnionPtr>(2);
418 small_struct->pod_union_array[0] = PodUnion::New(); 420 small_struct->pod_union_array[0] = PodUnion::New();
419 small_struct->pod_union_array[1] = PodUnion::New(); 421 small_struct->pod_union_array[1] = PodUnion::New();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 std::vector<char> new_buf; 506 std::vector<char> new_buf;
505 new_buf.resize(size); 507 new_buf.resize(size);
506 508
507 void* raw_buf = buf.Leak(); 509 void* raw_buf = buf.Leak();
508 memcpy(new_buf.data(), raw_buf, size); 510 memcpy(new_buf.data(), raw_buf, size);
509 free(raw_buf); 511 free(raw_buf);
510 512
511 data = 513 data =
512 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>( 514 reinterpret_cast<mojo::internal::Array_Data<internal::ObjectUnion_Data>*>(
513 new_buf.data()); 515 new_buf.data());
514 mojo::internal::BoundsChecker bounds_checker(data, 516 mojo::internal::ValidationContext validation_context(
515 static_cast<uint32_t>(size), 0); 517 data, static_cast<uint32_t>(size), 0);
516 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate( 518 ASSERT_TRUE(mojo::internal::Array_Data<internal::ObjectUnion_Data>::Validate(
517 data, &bounds_checker, &validate_params)); 519 data, &validation_context, &validate_params));
518 520
519 data->DecodePointers(); 521 data->DecodePointers();
520 Array<ObjectUnionPtr> array2; 522 Array<ObjectUnionPtr> array2;
521 mojo::internal::Deserialize<Array<ObjectUnionPtr>>(data, &array2, nullptr); 523 mojo::internal::Deserialize<Array<ObjectUnionPtr>>(data, &array2, nullptr);
522 524
523 EXPECT_EQ(2U, array2.size()); 525 EXPECT_EQ(2U, array2.size());
524 526
525 EXPECT_EQ(String("hello"), array2[0]->get_f_string()); 527 EXPECT_EQ(String("hello"), array2[0]->get_f_string());
526 EXPECT_EQ(String("world"), array2[1]->get_f_string()); 528 EXPECT_EQ(String("world"), array2[1]->get_f_string());
527 } 529 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 &context); 595 &context);
594 596
595 mojo::internal::FixedBufferForTesting buf(size); 597 mojo::internal::FixedBufferForTesting buf(size);
596 internal::SmallStruct_Data* data = nullptr; 598 internal::SmallStruct_Data* data = nullptr;
597 mojo::internal::Serialize<SmallStructPtr>(small_struct, &buf, &data, 599 mojo::internal::Serialize<SmallStructPtr>(small_struct, &buf, &data,
598 &context); 600 &context);
599 601
600 data->EncodePointers(); 602 data->EncodePointers();
601 603
602 void* raw_buf = buf.Leak(); 604 void* raw_buf = buf.Leak();
603 mojo::internal::BoundsChecker bounds_checker(data, 605 mojo::internal::ValidationContext validation_context(
604 static_cast<uint32_t>(size), 0); 606 data, static_cast<uint32_t>(size), 0);
605 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker)); 607 EXPECT_TRUE(internal::SmallStruct_Data::Validate(
608 raw_buf, &validation_context));
606 free(raw_buf); 609 free(raw_buf);
607 } 610 }
608 611
609 // Validation test of a struct union fails due to unknown union tag. 612 // Validation test of a struct union fails due to unknown union tag.
610 TEST(UnionTest, Validation_PodUnionInStruct_Failure) { 613 TEST(UnionTest, Validation_PodUnionInStruct_Failure) {
611 SmallStructPtr small_struct(SmallStruct::New()); 614 SmallStructPtr small_struct(SmallStruct::New());
612 small_struct->pod_union = PodUnion::New(); 615 small_struct->pod_union = PodUnion::New();
613 small_struct->pod_union->set_f_int32(10); 616 small_struct->pod_union->set_f_int32(10);
614 617
615 mojo::internal::SerializationContext context; 618 mojo::internal::SerializationContext context;
616 size_t size = mojo::internal::PrepareToSerialize<SmallStructPtr>(small_struct, 619 size_t size = mojo::internal::PrepareToSerialize<SmallStructPtr>(small_struct,
617 &context); 620 &context);
618 621
619 mojo::internal::FixedBufferForTesting buf(size); 622 mojo::internal::FixedBufferForTesting buf(size);
620 internal::SmallStruct_Data* data = nullptr; 623 internal::SmallStruct_Data* data = nullptr;
621 mojo::internal::Serialize<SmallStructPtr>(small_struct, &buf, &data, 624 mojo::internal::Serialize<SmallStructPtr>(small_struct, &buf, &data,
622 &context); 625 &context);
623 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100); 626 data->pod_union.tag = static_cast<internal::PodUnion_Data::PodUnion_Tag>(100);
624 627
625 data->EncodePointers(); 628 data->EncodePointers();
626 629
627 void* raw_buf = buf.Leak(); 630 void* raw_buf = buf.Leak();
628 mojo::internal::BoundsChecker bounds_checker(data, 631 mojo::internal::ValidationContext validation_context(
629 static_cast<uint32_t>(size), 0); 632 data, static_cast<uint32_t>(size), 0);
630 EXPECT_FALSE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker)); 633 EXPECT_FALSE(internal::SmallStruct_Data::Validate(
634 raw_buf, &validation_context));
631 free(raw_buf); 635 free(raw_buf);
632 } 636 }
633 637
634 // Validation fails due to non-nullable null union in struct. 638 // Validation fails due to non-nullable null union in struct.
635 TEST(UnionTest, Validation_NullUnion_Failure) { 639 TEST(UnionTest, Validation_NullUnion_Failure) {
636 SmallStructNonNullableUnionPtr small_struct( 640 SmallStructNonNullableUnionPtr small_struct(
637 SmallStructNonNullableUnion::New()); 641 SmallStructNonNullableUnion::New());
638 642
639 size_t size = 643 size_t size =
640 mojo::internal::PrepareToSerialize<SmallStructNonNullableUnionPtr>( 644 mojo::internal::PrepareToSerialize<SmallStructNonNullableUnionPtr>(
641 small_struct, nullptr); 645 small_struct, nullptr);
642 646
643 mojo::internal::FixedBufferForTesting buf(size); 647 mojo::internal::FixedBufferForTesting buf(size);
644 internal::SmallStructNonNullableUnion_Data* data = 648 internal::SmallStructNonNullableUnion_Data* data =
645 internal::SmallStructNonNullableUnion_Data::New(&buf); 649 internal::SmallStructNonNullableUnion_Data::New(&buf);
646 650
647 void* raw_buf = buf.Leak(); 651 void* raw_buf = buf.Leak();
648 mojo::internal::BoundsChecker bounds_checker(data, 652 mojo::internal::ValidationContext validation_context(
649 static_cast<uint32_t>(size), 0); 653 data, static_cast<uint32_t>(size), 0);
650 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate( 654 EXPECT_FALSE(internal::SmallStructNonNullableUnion_Data::Validate(
651 raw_buf, &bounds_checker)); 655 raw_buf, &validation_context));
652 free(raw_buf); 656 free(raw_buf);
653 } 657 }
654 658
655 // Validation passes with nullable null union. 659 // Validation passes with nullable null union.
656 TEST(UnionTest, Validation_NullableUnion) { 660 TEST(UnionTest, Validation_NullableUnion) {
657 SmallStructPtr small_struct(SmallStruct::New()); 661 SmallStructPtr small_struct(SmallStruct::New());
658 662
659 mojo::internal::SerializationContext context; 663 mojo::internal::SerializationContext context;
660 size_t size = mojo::internal::PrepareToSerialize<SmallStructPtr>(small_struct, 664 size_t size = mojo::internal::PrepareToSerialize<SmallStructPtr>(small_struct,
661 &context); 665 &context);
662 666
663 mojo::internal::FixedBufferForTesting buf(size); 667 mojo::internal::FixedBufferForTesting buf(size);
664 internal::SmallStruct_Data* data = nullptr; 668 internal::SmallStruct_Data* data = nullptr;
665 mojo::internal::Serialize<SmallStructPtr>(small_struct, &buf, &data, 669 mojo::internal::Serialize<SmallStructPtr>(small_struct, &buf, &data,
666 &context); 670 &context);
667 671
668 data->EncodePointers(); 672 data->EncodePointers();
669 673
670 void* raw_buf = buf.Leak(); 674 void* raw_buf = buf.Leak();
671 mojo::internal::BoundsChecker bounds_checker(data, 675 mojo::internal::ValidationContext validation_context(
672 static_cast<uint32_t>(size), 0); 676 data, static_cast<uint32_t>(size), 0);
673 EXPECT_TRUE(internal::SmallStruct_Data::Validate(raw_buf, &bounds_checker)); 677 EXPECT_TRUE(internal::SmallStruct_Data::Validate(
678 raw_buf, &validation_context));
674 free(raw_buf); 679 free(raw_buf);
675 } 680 }
676 681
677 // TODO(azani): Move back in map_unittest.cc when possible. 682 // TODO(azani): Move back in map_unittest.cc when possible.
678 // Map Tests 683 // Map Tests
679 TEST(UnionTest, PodUnionInMap) { 684 TEST(UnionTest, PodUnionInMap) {
680 SmallStructPtr small_struct(SmallStruct::New()); 685 SmallStructPtr small_struct(SmallStruct::New());
681 small_struct->pod_union_map = Map<String, PodUnionPtr>(); 686 small_struct->pod_union_map = Map<String, PodUnionPtr>();
682 small_struct->pod_union_map.insert("one", PodUnion::New()); 687 small_struct->pod_union_map.insert("one", PodUnion::New());
683 small_struct->pod_union_map.insert("two", PodUnion::New()); 688 small_struct->pod_union_map.insert("two", PodUnion::New());
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 size_t size = 794 size_t size =
790 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr); 795 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr);
791 796
792 mojo::internal::FixedBufferForTesting buf(size); 797 mojo::internal::FixedBufferForTesting buf(size);
793 internal::ObjectUnion_Data* data = nullptr; 798 internal::ObjectUnion_Data* data = nullptr;
794 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr); 799 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr);
795 800
796 data->EncodePointers(); 801 data->EncodePointers();
797 802
798 void* raw_buf = buf.Leak(); 803 void* raw_buf = buf.Leak();
799 mojo::internal::BoundsChecker bounds_checker(data, 804 mojo::internal::ValidationContext validation_context(
800 static_cast<uint32_t>(size), 0); 805 data, static_cast<uint32_t>(size), 0);
801 EXPECT_TRUE( 806 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
802 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 807 raw_buf, &validation_context, false));
803 free(raw_buf); 808 free(raw_buf);
804 } 809 }
805 810
806 TEST(UnionTest, StructInUnionValidationNonNullable) { 811 TEST(UnionTest, StructInUnionValidationNonNullable) {
807 DummyStructPtr dummy(nullptr); 812 DummyStructPtr dummy(nullptr);
808 813
809 ObjectUnionPtr obj(ObjectUnion::New()); 814 ObjectUnionPtr obj(ObjectUnion::New());
810 obj->set_f_dummy(std::move(dummy)); 815 obj->set_f_dummy(std::move(dummy));
811 816
812 size_t size = 817 size_t size =
813 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr); 818 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr);
814 819
815 mojo::internal::FixedBufferForTesting buf(size); 820 mojo::internal::FixedBufferForTesting buf(size);
816 internal::ObjectUnion_Data* data = nullptr; 821 internal::ObjectUnion_Data* data = nullptr;
817 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr); 822 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr);
818 823
819 data->EncodePointers(); 824 data->EncodePointers();
820 825
821 void* raw_buf = buf.Leak(); 826 void* raw_buf = buf.Leak();
822 mojo::internal::BoundsChecker bounds_checker(data, 827 mojo::internal::ValidationContext validation_context(
823 static_cast<uint32_t>(size), 0); 828 data, static_cast<uint32_t>(size), 0);
824 EXPECT_FALSE( 829 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
825 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 830 raw_buf, &validation_context, false));
826 free(raw_buf); 831 free(raw_buf);
827 } 832 }
828 833
829 TEST(UnionTest, StructInUnionValidationNullable) { 834 TEST(UnionTest, StructInUnionValidationNullable) {
830 DummyStructPtr dummy(nullptr); 835 DummyStructPtr dummy(nullptr);
831 836
832 ObjectUnionPtr obj(ObjectUnion::New()); 837 ObjectUnionPtr obj(ObjectUnion::New());
833 obj->set_f_nullable(std::move(dummy)); 838 obj->set_f_nullable(std::move(dummy));
834 839
835 size_t size = 840 size_t size =
836 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr); 841 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr);
837 842
838 mojo::internal::FixedBufferForTesting buf(size); 843 mojo::internal::FixedBufferForTesting buf(size);
839 internal::ObjectUnion_Data* data = nullptr; 844 internal::ObjectUnion_Data* data = nullptr;
840 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr); 845 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr);
841 846
842 data->EncodePointers(); 847 data->EncodePointers();
843 848
844 void* raw_buf = buf.Leak(); 849 void* raw_buf = buf.Leak();
845 mojo::internal::BoundsChecker bounds_checker(data, 850 mojo::internal::ValidationContext validation_context(
846 static_cast<uint32_t>(size), 0); 851 data, static_cast<uint32_t>(size), 0);
847 EXPECT_TRUE( 852 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
848 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 853 raw_buf, &validation_context, false));
849 free(raw_buf); 854 free(raw_buf);
850 } 855 }
851 856
852 TEST(UnionTest, ArrayInUnionGetterSetter) { 857 TEST(UnionTest, ArrayInUnionGetterSetter) {
853 Array<int8_t> array(2); 858 Array<int8_t> array(2);
854 array[0] = 8; 859 array[0] = 8;
855 array[1] = 9; 860 array[1] = 9;
856 861
857 ObjectUnionPtr obj(ObjectUnion::New()); 862 ObjectUnionPtr obj(ObjectUnion::New());
858 obj->set_f_array_int8(std::move(array)); 863 obj->set_f_array_int8(std::move(array));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 902
898 size_t size = 903 size_t size =
899 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr); 904 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr);
900 mojo::internal::FixedBufferForTesting buf(size); 905 mojo::internal::FixedBufferForTesting buf(size);
901 internal::ObjectUnion_Data* data = nullptr; 906 internal::ObjectUnion_Data* data = nullptr;
902 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr); 907 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr);
903 908
904 data->EncodePointers(); 909 data->EncodePointers();
905 910
906 void* raw_buf = buf.Leak(); 911 void* raw_buf = buf.Leak();
907 mojo::internal::BoundsChecker bounds_checker(data, 912 mojo::internal::ValidationContext validation_context(
908 static_cast<uint32_t>(size), 0); 913 data, static_cast<uint32_t>(size), 0);
909 914
910 EXPECT_TRUE( 915 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
911 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 916 raw_buf, &validation_context, false));
912 free(raw_buf); 917 free(raw_buf);
913 } 918 }
914 919
915 TEST(UnionTest, MapInUnionGetterSetter) { 920 TEST(UnionTest, MapInUnionGetterSetter) {
916 Map<String, int8_t> map; 921 Map<String, int8_t> map;
917 map.insert("one", 1); 922 map.insert("one", 1);
918 map.insert("two", 2); 923 map.insert("two", 2);
919 924
920 ObjectUnionPtr obj(ObjectUnion::New()); 925 ObjectUnionPtr obj(ObjectUnion::New());
921 obj->set_f_map_int8(std::move(map)); 926 obj->set_f_map_int8(std::move(map));
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
964 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, &context); 969 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, &context);
965 EXPECT_EQ(112U, size); 970 EXPECT_EQ(112U, size);
966 971
967 mojo::internal::FixedBufferForTesting buf(size); 972 mojo::internal::FixedBufferForTesting buf(size);
968 internal::ObjectUnion_Data* data = nullptr; 973 internal::ObjectUnion_Data* data = nullptr;
969 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, &context); 974 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, &context);
970 975
971 data->EncodePointers(); 976 data->EncodePointers();
972 977
973 void* raw_buf = buf.Leak(); 978 void* raw_buf = buf.Leak();
974 mojo::internal::BoundsChecker bounds_checker(data, 979 mojo::internal::ValidationContext validation_context(
975 static_cast<uint32_t>(size), 0); 980 data, static_cast<uint32_t>(size), 0);
976 981
977 EXPECT_TRUE( 982 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
978 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 983 raw_buf, &validation_context, false));
979 free(raw_buf); 984 free(raw_buf);
980 } 985 }
981 986
982 TEST(UnionTest, UnionInUnionGetterSetter) { 987 TEST(UnionTest, UnionInUnionGetterSetter) {
983 PodUnionPtr pod(PodUnion::New()); 988 PodUnionPtr pod(PodUnion::New());
984 pod->set_f_int8(10); 989 pod->set_f_int8(10);
985 990
986 ObjectUnionPtr obj(ObjectUnion::New()); 991 ObjectUnionPtr obj(ObjectUnion::New());
987 obj->set_f_pod_union(std::move(pod)); 992 obj->set_f_pod_union(std::move(pod));
988 993
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr); 1028 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr);
1024 EXPECT_EQ(32U, size); 1029 EXPECT_EQ(32U, size);
1025 1030
1026 mojo::internal::FixedBufferForTesting buf(size); 1031 mojo::internal::FixedBufferForTesting buf(size);
1027 internal::ObjectUnion_Data* data = nullptr; 1032 internal::ObjectUnion_Data* data = nullptr;
1028 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr); 1033 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr);
1029 1034
1030 data->EncodePointers(); 1035 data->EncodePointers();
1031 1036
1032 void* raw_buf = buf.Leak(); 1037 void* raw_buf = buf.Leak();
1033 mojo::internal::BoundsChecker bounds_checker(data, 1038 mojo::internal::ValidationContext validation_context(
1034 static_cast<uint32_t>(size), 0); 1039 data, static_cast<uint32_t>(size), 0);
1035 EXPECT_TRUE( 1040 EXPECT_TRUE(internal::ObjectUnion_Data::Validate(
1036 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 1041 raw_buf, &validation_context, false));
1037 free(raw_buf); 1042 free(raw_buf);
1038 } 1043 }
1039 1044
1040 TEST(UnionTest, UnionInUnionValidationNonNullable) { 1045 TEST(UnionTest, UnionInUnionValidationNonNullable) {
1041 PodUnionPtr pod(nullptr); 1046 PodUnionPtr pod(nullptr);
1042 1047
1043 ObjectUnionPtr obj(ObjectUnion::New()); 1048 ObjectUnionPtr obj(ObjectUnion::New());
1044 obj->set_f_pod_union(std::move(pod)); 1049 obj->set_f_pod_union(std::move(pod));
1045 1050
1046 size_t size = 1051 size_t size =
1047 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr); 1052 mojo::internal::PrepareToSerialize<ObjectUnionPtr>(obj, false, nullptr);
1048 1053
1049 mojo::internal::FixedBufferForTesting buf(size); 1054 mojo::internal::FixedBufferForTesting buf(size);
1050 internal::ObjectUnion_Data* data = nullptr; 1055 internal::ObjectUnion_Data* data = nullptr;
1051 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr); 1056 mojo::internal::Serialize<ObjectUnionPtr>(obj, &buf, &data, false, nullptr);
1052 data->EncodePointers(); 1057 data->EncodePointers();
1053 1058
1054 void* raw_buf = buf.Leak(); 1059 void* raw_buf = buf.Leak();
1055 mojo::internal::BoundsChecker bounds_checker(data, 1060 mojo::internal::ValidationContext validation_context(
1056 static_cast<uint32_t>(size), 0); 1061 data, static_cast<uint32_t>(size), 0);
1057 EXPECT_FALSE( 1062 EXPECT_FALSE(internal::ObjectUnion_Data::Validate(
1058 internal::ObjectUnion_Data::Validate(raw_buf, &bounds_checker, false)); 1063 raw_buf, &validation_context, false));
1059 free(raw_buf); 1064 free(raw_buf);
1060 } 1065 }
1061 1066
1062 TEST(UnionTest, HandleInUnionGetterSetter) { 1067 TEST(UnionTest, HandleInUnionGetterSetter) {
1063 ScopedMessagePipeHandle pipe0; 1068 ScopedMessagePipeHandle pipe0;
1064 ScopedMessagePipeHandle pipe1; 1069 ScopedMessagePipeHandle pipe1;
1065 1070
1066 CreateMessagePipe(nullptr, &pipe0, &pipe1); 1071 CreateMessagePipe(nullptr, &pipe0, &pipe1);
1067 1072
1068 HandleUnionPtr handle(HandleUnion::New()); 1073 HandleUnionPtr handle(HandleUnion::New());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 size_t size = mojo::internal::PrepareToSerialize<HandleUnionPtr>( 1127 size_t size = mojo::internal::PrepareToSerialize<HandleUnionPtr>(
1123 handle, false, &context); 1128 handle, false, &context);
1124 EXPECT_EQ(16U, size); 1129 EXPECT_EQ(16U, size);
1125 1130
1126 mojo::internal::FixedBufferForTesting buf(size); 1131 mojo::internal::FixedBufferForTesting buf(size);
1127 internal::HandleUnion_Data* data = nullptr; 1132 internal::HandleUnion_Data* data = nullptr;
1128 mojo::internal::Serialize<HandleUnionPtr>(handle, &buf, &data, false, 1133 mojo::internal::Serialize<HandleUnionPtr>(handle, &buf, &data, false,
1129 &context); 1134 &context);
1130 1135
1131 void* raw_buf = buf.Leak(); 1136 void* raw_buf = buf.Leak();
1132 mojo::internal::BoundsChecker bounds_checker(data, 1137 mojo::internal::ValidationContext validation_context(
1133 static_cast<uint32_t>(size), 1); 1138 data, static_cast<uint32_t>(size), 1);
1134 EXPECT_TRUE( 1139 EXPECT_TRUE(internal::HandleUnion_Data::Validate(
1135 internal::HandleUnion_Data::Validate(raw_buf, &bounds_checker, false)); 1140 raw_buf, &validation_context, false));
1136 free(raw_buf); 1141 free(raw_buf);
1137 } 1142 }
1138 1143
1139 TEST(UnionTest, HandleInUnionValidationNull) { 1144 TEST(UnionTest, HandleInUnionValidationNull) {
1140 ScopedMessagePipeHandle pipe; 1145 ScopedMessagePipeHandle pipe;
1141 HandleUnionPtr handle(HandleUnion::New()); 1146 HandleUnionPtr handle(HandleUnion::New());
1142 handle->set_f_message_pipe(std::move(pipe)); 1147 handle->set_f_message_pipe(std::move(pipe));
1143 1148
1144 mojo::internal::SerializationContext context; 1149 mojo::internal::SerializationContext context;
1145 size_t size = mojo::internal::PrepareToSerialize<HandleUnionPtr>( 1150 size_t size = mojo::internal::PrepareToSerialize<HandleUnionPtr>(
1146 handle, false, &context); 1151 handle, false, &context);
1147 EXPECT_EQ(16U, size); 1152 EXPECT_EQ(16U, size);
1148 1153
1149 mojo::internal::FixedBufferForTesting buf(size); 1154 mojo::internal::FixedBufferForTesting buf(size);
1150 internal::HandleUnion_Data* data = nullptr; 1155 internal::HandleUnion_Data* data = nullptr;
1151 mojo::internal::Serialize<HandleUnionPtr>(handle, &buf, &data, false, 1156 mojo::internal::Serialize<HandleUnionPtr>(handle, &buf, &data, false,
1152 &context); 1157 &context);
1153 1158
1154 void* raw_buf = buf.Leak(); 1159 void* raw_buf = buf.Leak();
1155 mojo::internal::BoundsChecker bounds_checker(data, 1160 mojo::internal::ValidationContext validation_context(
1156 static_cast<uint32_t>(size), 1); 1161 data, static_cast<uint32_t>(size), 1);
1157 EXPECT_FALSE( 1162 EXPECT_FALSE(internal::HandleUnion_Data::Validate(
1158 internal::HandleUnion_Data::Validate(raw_buf, &bounds_checker, false)); 1163 raw_buf, &validation_context, false));
1159 free(raw_buf); 1164 free(raw_buf);
1160 } 1165 }
1161 1166
1162 class SmallCacheImpl : public SmallCache { 1167 class SmallCacheImpl : public SmallCache {
1163 public: 1168 public:
1164 explicit SmallCacheImpl(const base::Closure& closure) 1169 explicit SmallCacheImpl(const base::Closure& closure)
1165 : int_value_(0), closure_(closure) {} 1170 : int_value_(0), closure_(closure) {}
1166 ~SmallCacheImpl() override {} 1171 ~SmallCacheImpl() override {}
1167 int64_t int_value() const { return int_value_; } 1172 int64_t int_value() const { return int_value_; }
1168 1173
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 PodUnionPtr pod(PodUnion::New()); 1247 PodUnionPtr pod(PodUnion::New());
1243 pod->set_f_int16(16); 1248 pod->set_f_int16(16);
1244 1249
1245 ptr->Echo(std::move(pod), 1250 ptr->Echo(std::move(pod),
1246 [](PodUnionPtr out) { EXPECT_EQ(16, out->get_f_int16()); }); 1251 [](PodUnionPtr out) { EXPECT_EQ(16, out->get_f_int16()); });
1247 run_loop.RunUntilIdle(); 1252 run_loop.RunUntilIdle();
1248 } 1253 }
1249 1254
1250 } // namespace test 1255 } // namespace test
1251 } // namespace mojo 1256 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698