OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdlib.h> | 5 #include <stdlib.h> |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <iostream> | 8 #include <iostream> |
9 #include <ostream> | 9 #include <ostream> |
10 #include <set> | 10 #include <set> |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 GenerateParam(&get<2>(*p), generator) && | 393 GenerateParam(&get<2>(*p), generator) && |
394 GenerateParam(&get<3>(*p), generator) && | 394 GenerateParam(&get<3>(*p), generator) && |
395 GenerateParam(&get<4>(*p), generator); | 395 GenerateParam(&get<4>(*p), generator); |
396 } | 396 } |
397 }; | 397 }; |
398 | 398 |
399 // Specializations to generate containers. | 399 // Specializations to generate containers. |
400 template <class A> | 400 template <class A> |
401 struct GenerateTraits<std::vector<A> > { | 401 struct GenerateTraits<std::vector<A> > { |
402 static bool Generate(std::vector<A>* p, Generator* generator) { | 402 static bool Generate(std::vector<A>* p, Generator* generator) { |
403 size_t count = ++g_depth > 3 ? 0 : RandInRange(20); | 403 size_t count = ++g_depth > 3 ? 0 : RandElementCount(); |
404 p->resize(count); | 404 p->resize(count); |
405 for (size_t i = 0; i < count; ++i) { | 405 for (size_t i = 0; i < count; ++i) { |
406 if (!GenerateParam(&p->at(i), generator)) { | 406 if (!GenerateParam(&p->at(i), generator)) { |
407 --g_depth; | 407 --g_depth; |
408 return false; | 408 return false; |
409 } | 409 } |
410 } | 410 } |
411 --g_depth; | 411 --g_depth; |
412 return true; | 412 return true; |
413 } | 413 } |
414 }; | 414 }; |
415 | 415 |
416 template <class A> | 416 template <class A> |
417 struct GenerateTraits<std::set<A> > { | 417 struct GenerateTraits<std::set<A> > { |
418 static bool Generate(std::set<A>* p, Generator* generator) { | 418 static bool Generate(std::set<A>* p, Generator* generator) { |
419 static int g_depth = 0; | 419 static int g_depth = 0; |
420 size_t count = ++g_depth > 3 ? 0 : RandInRange(20); | 420 size_t count = ++g_depth > 3 ? 0 : RandElementCount(); |
421 A a; | 421 A a; |
422 for (size_t i = 0; i < count; ++i) { | 422 for (size_t i = 0; i < count; ++i) { |
423 if (!GenerateParam(&a, generator)) { | 423 if (!GenerateParam(&a, generator)) { |
424 --g_depth; | 424 --g_depth; |
425 return false; | 425 return false; |
426 } | 426 } |
427 p->insert(a); | 427 p->insert(a); |
428 } | 428 } |
429 --g_depth; | 429 --g_depth; |
430 return true; | 430 return true; |
431 } | 431 } |
432 }; | 432 }; |
433 | 433 |
434 | 434 |
435 template <class A, class B> | 435 template <class A, class B> |
436 struct GenerateTraits<std::map<A, B> > { | 436 struct GenerateTraits<std::map<A, B> > { |
437 static bool Generate(std::map<A, B>* p, Generator* generator) { | 437 static bool Generate(std::map<A, B>* p, Generator* generator) { |
438 static int g_depth = 0; | 438 static int g_depth = 0; |
439 size_t count = ++g_depth > 3 ? 0 : RandInRange(10); | 439 size_t count = ++g_depth > 3 ? 0 : RandElementCount(); |
440 std::pair<A, B> place_holder; | 440 std::pair<A, B> place_holder; |
441 for (size_t i = 0; i < count; ++i) { | 441 for (size_t i = 0; i < count; ++i) { |
442 if (!GenerateParam(&place_holder, generator)) { | 442 if (!GenerateParam(&place_holder, generator)) { |
443 --g_depth; | 443 --g_depth; |
444 return false; | 444 return false; |
445 } | 445 } |
446 p->insert(place_holder); | 446 p->insert(place_holder); |
447 } | 447 } |
448 --g_depth; | 448 --g_depth; |
449 return true; | 449 return true; |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 return false; | 702 return false; |
703 if (!GenerateParam(&value, generator)) | 703 if (!GenerateParam(&value, generator)) |
704 return false; | 704 return false; |
705 *p = blink::WebGamepadButton(pressed, value); | 705 *p = blink::WebGamepadButton(pressed, value); |
706 return true; | 706 return true; |
707 } | 707 } |
708 }; | 708 }; |
709 | 709 |
710 template <> | 710 template <> |
711 struct GenerateTraits<cc::CompositorFrame> { | 711 struct GenerateTraits<cc::CompositorFrame> { |
712 // FIXME: this should actually generate something | |
713 static bool Generate(cc::CompositorFrame* p, Generator* generator) { | 712 static bool Generate(cc::CompositorFrame* p, Generator* generator) { |
| 713 if (!GenerateParam(&p->metadata, generator)) |
| 714 return false; |
| 715 switch (RandInRange(4)) { |
| 716 case 0: { |
| 717 p->delegated_frame_data.reset(new cc::DelegatedFrameData()); |
| 718 if (!GenerateParam(p->delegated_frame_data.get(), generator)) |
| 719 return false; |
| 720 return true; |
| 721 } |
| 722 case 1: { |
| 723 p->gl_frame_data.reset(new cc::GLFrameData()); |
| 724 if (!GenerateParam(p->gl_frame_data.get(), generator)) |
| 725 return false; |
| 726 return true; |
| 727 } |
| 728 case 2: { |
| 729 p->software_frame_data.reset(new cc::SoftwareFrameData()); |
| 730 if (!GenerateParam(p->software_frame_data.get(), generator)) |
| 731 return false; |
| 732 return true; |
| 733 } |
| 734 default: |
| 735 // Generate nothing to handle the no frame case. |
| 736 return true; |
| 737 } |
| 738 } |
| 739 }; |
| 740 |
| 741 template <> |
| 742 struct GenerateTraits<cc::CompositorFrameAck> { |
| 743 static bool Generate(cc::CompositorFrameAck* p, Generator* generator) { |
| 744 if (!GenerateParam(&p->resources, generator)) |
| 745 return false; |
| 746 if (!GenerateParam(&p->last_software_frame_id, generator)) |
| 747 return false; |
| 748 p->gl_frame_data.reset(new cc::GLFrameData); |
| 749 if (!GenerateParam(p->gl_frame_data.get(), generator)) |
| 750 return false; |
714 return true; | 751 return true; |
715 } | 752 } |
716 }; | 753 }; |
717 | 754 |
718 template <> | 755 template <> |
719 struct GenerateTraits<cc::CompositorFrameAck> { | 756 struct GenerateTraits<cc::DelegatedFrameData> { |
720 // FIXME: this should actually generate something | 757 static bool Generate(cc::DelegatedFrameData* p, Generator* generator) { |
721 static bool Generate(cc::CompositorFrameAck* p, Generator* generator) { | 758 if (!GenerateParam(&p->device_scale_factor, generator)) |
| 759 return false; |
| 760 if (!GenerateParam(&p->resource_list, generator)) |
| 761 return false; |
| 762 if (!GenerateParam(&p->render_pass_list, generator)) |
| 763 return false; |
722 return true; | 764 return true; |
723 } | 765 } |
724 }; | 766 }; |
| 767 |
| 768 template <class A> |
| 769 struct GenerateTraits<cc::ListContainer<A>> { |
| 770 static bool Generate(cc::ListContainer<A>* p, Generator* generator) { |
| 771 // TODO(mbarbella): This should actually generate something. |
| 772 return true; |
| 773 } |
| 774 }; |
| 775 |
| 776 template <> |
| 777 struct GenerateTraits<cc::QuadList> { |
| 778 static bool Generate(cc::QuadList* p, Generator* generator) { |
| 779 // TODO(mbarbella): This should actually generate something. |
| 780 return true; |
| 781 } |
| 782 }; |
| 783 |
| 784 template <> |
| 785 struct GenerateTraits<cc::RenderPass> { |
| 786 static bool Generate(cc::RenderPass* p, Generator* generator) { |
| 787 if (!GenerateParam(&p->id, generator)) |
| 788 return false; |
| 789 if (!GenerateParam(&p->output_rect, generator)) |
| 790 return false; |
| 791 if (!GenerateParam(&p->damage_rect, generator)) |
| 792 return false; |
| 793 if (!GenerateParam(&p->transform_to_root_target, generator)) |
| 794 return false; |
| 795 if (!GenerateParam(&p->has_transparent_background, generator)) |
| 796 return false; |
| 797 if (!GenerateParam(&p->quad_list, generator)) |
| 798 return false; |
| 799 if (!GenerateParam(&p->shared_quad_state_list, generator)) |
| 800 return false; |
| 801 // Omitting |copy_requests| as it is not sent over IPC. |
| 802 return true; |
| 803 } |
| 804 }; |
| 805 |
| 806 template <> |
| 807 struct GenerateTraits<cc::RenderPassList> { |
| 808 static bool Generate(cc::RenderPassList* p, Generator* generator) { |
| 809 size_t count = RandElementCount(); |
| 810 for (size_t i = 0; i < count; ++i) { |
| 811 scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create(); |
| 812 if (!GenerateParam(render_pass.get(), generator)) |
| 813 return false; |
| 814 p->push_back(render_pass.Pass()); |
| 815 } |
| 816 return true; |
| 817 } |
| 818 }; |
| 819 |
| 820 template <> |
| 821 struct GenerateTraits<cc::SoftwareFrameData> { |
| 822 static bool Generate(cc::SoftwareFrameData* p, Generator* generator) { |
| 823 if (!GenerateParam(&p->id, generator)) |
| 824 return false; |
| 825 if (!GenerateParam(&p->size, generator)) |
| 826 return false; |
| 827 if (!GenerateParam(&p->damage_rect, generator)) |
| 828 return false; |
| 829 if (!GenerateParam(&p->bitmap_id, generator)) |
| 830 return false; |
| 831 return true; |
| 832 } |
| 833 }; |
725 | 834 |
726 template <> | 835 template <> |
727 struct GenerateTraits<content::IndexedDBKey> { | 836 struct GenerateTraits<content::IndexedDBKey> { |
728 static bool Generate(content::IndexedDBKey* p, Generator* generator) { | 837 static bool Generate(content::IndexedDBKey* p, Generator* generator) { |
729 ++g_depth; | 838 ++g_depth; |
730 blink::WebIDBKeyType web_type = | 839 blink::WebIDBKeyType web_type = |
731 static_cast<blink::WebIDBKeyType>(RandInRange(7)); | 840 static_cast<blink::WebIDBKeyType>(RandInRange(7)); |
732 switch (web_type) | 841 switch (web_type) |
733 { | 842 { |
734 case blink::WebIDBKeyTypeArray: { | 843 case blink::WebIDBKeyTypeArray: { |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 if (!GenerateParam(&x, generator)) | 1165 if (!GenerateParam(&x, generator)) |
1057 return false; | 1166 return false; |
1058 if (!GenerateParam(&y, generator)) | 1167 if (!GenerateParam(&y, generator)) |
1059 return false; | 1168 return false; |
1060 p->SetPoint(x, y); | 1169 p->SetPoint(x, y); |
1061 return true; | 1170 return true; |
1062 } | 1171 } |
1063 }; | 1172 }; |
1064 | 1173 |
1065 template <> | 1174 template <> |
1066 struct GenerateTraits<gfx::Size> { | |
1067 static bool Generate(gfx::Size *p, Generator* generator) { | |
1068 int w; | |
1069 int h; | |
1070 if (!GenerateParam(&w, generator)) | |
1071 return false; | |
1072 if (!GenerateParam(&h, generator)) | |
1073 return false; | |
1074 p->SetSize(w, h); | |
1075 return true; | |
1076 } | |
1077 }; | |
1078 | |
1079 template <> | |
1080 struct GenerateTraits<gfx::SizeF> { | |
1081 static bool Generate(gfx::SizeF *p, Generator* generator) { | |
1082 float w; | |
1083 float h; | |
1084 if (!GenerateParam(&w, generator)) | |
1085 return false; | |
1086 if (!GenerateParam(&h, generator)) | |
1087 return false; | |
1088 p->SetSize(w, h); | |
1089 return true; | |
1090 } | |
1091 }; | |
1092 | |
1093 template <> | |
1094 struct GenerateTraits<gfx::Rect> { | 1175 struct GenerateTraits<gfx::Rect> { |
1095 static bool Generate(gfx::Rect *p, Generator* generator) { | 1176 static bool Generate(gfx::Rect *p, Generator* generator) { |
1096 gfx::Point origin; | 1177 gfx::Point origin; |
1097 gfx::Size size; | 1178 gfx::Size size; |
1098 if (!GenerateParam(&origin, generator)) | 1179 if (!GenerateParam(&origin, generator)) |
1099 return false; | 1180 return false; |
1100 if (!GenerateParam(&size, generator)) | 1181 if (!GenerateParam(&size, generator)) |
1101 return false; | 1182 return false; |
1102 p->set_origin(origin); | 1183 p->set_origin(origin); |
1103 p->set_size(size); | 1184 p->set_size(size); |
(...skipping 24 matching lines...) Expand all Loading... |
1128 if (!GenerateParam(&start, generator)) | 1209 if (!GenerateParam(&start, generator)) |
1129 return false; | 1210 return false; |
1130 if (!GenerateParam(&end, generator)) | 1211 if (!GenerateParam(&end, generator)) |
1131 return false; | 1212 return false; |
1132 *p = gfx::Range(start, end); | 1213 *p = gfx::Range(start, end); |
1133 return true; | 1214 return true; |
1134 } | 1215 } |
1135 }; | 1216 }; |
1136 | 1217 |
1137 template <> | 1218 template <> |
| 1219 struct GenerateTraits<gfx::Size> { |
| 1220 static bool Generate(gfx::Size* p, Generator* generator) { |
| 1221 int w; |
| 1222 int h; |
| 1223 if (!GenerateParam(&w, generator)) |
| 1224 return false; |
| 1225 if (!GenerateParam(&h, generator)) |
| 1226 return false; |
| 1227 p->SetSize(w, h); |
| 1228 return true; |
| 1229 } |
| 1230 }; |
| 1231 |
| 1232 template <> |
| 1233 struct GenerateTraits<gfx::SizeF> { |
| 1234 static bool Generate(gfx::SizeF* p, Generator* generator) { |
| 1235 float w; |
| 1236 float h; |
| 1237 if (!GenerateParam(&w, generator)) |
| 1238 return false; |
| 1239 if (!GenerateParam(&h, generator)) |
| 1240 return false; |
| 1241 p->SetSize(w, h); |
| 1242 return true; |
| 1243 } |
| 1244 }; |
| 1245 |
| 1246 template <> |
| 1247 struct GenerateTraits<gfx::Transform> { |
| 1248 static bool Generate(gfx::Transform* p, Generator* generator) { |
| 1249 SkMScalar matrix[16]; |
| 1250 if (!GenerateParamArray(&matrix[0], arraysize(matrix), generator)) |
| 1251 return false; |
| 1252 *p = gfx::Transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], |
| 1253 matrix[5], matrix[6], matrix[7], matrix[8], matrix[9], |
| 1254 matrix[10], matrix[11], matrix[12], matrix[13], |
| 1255 matrix[14], matrix[15]); |
| 1256 return true; |
| 1257 } |
| 1258 }; |
| 1259 |
| 1260 template <> |
1138 struct GenerateTraits<gfx::Vector2d> { | 1261 struct GenerateTraits<gfx::Vector2d> { |
1139 static bool Generate(gfx::Vector2d *p, Generator* generator) { | 1262 static bool Generate(gfx::Vector2d *p, Generator* generator) { |
1140 int x; | 1263 int x; |
1141 int y; | 1264 int y; |
1142 if (!GenerateParam(&x, generator)) | 1265 if (!GenerateParam(&x, generator)) |
1143 return false; | 1266 return false; |
1144 if (!GenerateParam(&y, generator)) | 1267 if (!GenerateParam(&y, generator)) |
1145 return false; | 1268 return false; |
1146 *p = gfx::Vector2d(x, y); | 1269 *p = gfx::Vector2d(x, y); |
1147 return true; | 1270 return true; |
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1648 return EXIT_FAILURE; | 1771 return EXIT_FAILURE; |
1649 | 1772 |
1650 return EXIT_SUCCESS; | 1773 return EXIT_SUCCESS; |
1651 } | 1774 } |
1652 | 1775 |
1653 } // namespace ipc_fuzzer | 1776 } // namespace ipc_fuzzer |
1654 | 1777 |
1655 int main(int argc, char** argv) { | 1778 int main(int argc, char** argv) { |
1656 return ipc_fuzzer::GenerateMain(argc, argv); | 1779 return ipc_fuzzer::GenerateMain(argc, argv); |
1657 } | 1780 } |
OLD | NEW |