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 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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; |
450 } | 450 } |
451 }; | 451 }; |
452 | 452 |
| 453 template <class A, class B, class C, class D> |
| 454 struct GenerateTraits<std::map<A, B, C, D>> { |
| 455 static bool Generate(std::map<A, B, C, D>* p, Generator* generator) { |
| 456 static int g_depth = 0; |
| 457 size_t count = ++g_depth > 3 ? 0 : RandElementCount(); |
| 458 std::pair<A, B> place_holder; |
| 459 for (size_t i = 0; i < count; ++i) { |
| 460 if (!GenerateParam(&place_holder, generator)) { |
| 461 --g_depth; |
| 462 return false; |
| 463 } |
| 464 p->insert(place_holder); |
| 465 } |
| 466 --g_depth; |
| 467 return true; |
| 468 } |
| 469 }; |
| 470 |
453 template <class A, class B> | 471 template <class A, class B> |
454 struct GenerateTraits<std::pair<A, B> > { | 472 struct GenerateTraits<std::pair<A, B> > { |
455 static bool Generate(std::pair<A, B>* p, Generator* generator) { | 473 static bool Generate(std::pair<A, B>* p, Generator* generator) { |
456 return | 474 return |
457 GenerateParam(&p->first, generator) && | 475 GenerateParam(&p->first, generator) && |
458 GenerateParam(&p->second, generator); | 476 GenerateParam(&p->second, generator); |
459 } | 477 } |
460 }; | 478 }; |
461 | 479 |
462 // Specializations to generate hand-coded types. | 480 // Specializations to generate hand-coded types. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 static bool Generate(base::File::Info* p, Generator* generator) { | 515 static bool Generate(base::File::Info* p, Generator* generator) { |
498 double last_modified; | 516 double last_modified; |
499 double last_accessed; | 517 double last_accessed; |
500 double creation_time; | 518 double creation_time; |
501 if (!GenerateParam(&p->size, generator)) | 519 if (!GenerateParam(&p->size, generator)) |
502 return false; | 520 return false; |
503 if (!GenerateParam(&p->is_directory, generator)) | 521 if (!GenerateParam(&p->is_directory, generator)) |
504 return false; | 522 return false; |
505 if (!GenerateParam(&last_modified, generator)) | 523 if (!GenerateParam(&last_modified, generator)) |
506 return false; | 524 return false; |
507 if (GenerateParam(&last_accessed, generator)) | 525 if (!GenerateParam(&last_accessed, generator)) |
508 return false; | 526 return false; |
509 if (GenerateParam(&creation_time, generator)) | 527 if (!GenerateParam(&creation_time, generator)) |
510 return false; | 528 return false; |
511 p->last_modified = base::Time::FromDoubleT(last_modified); | 529 p->last_modified = base::Time::FromDoubleT(last_modified); |
512 p->last_accessed = base::Time::FromDoubleT(last_accessed); | 530 p->last_accessed = base::Time::FromDoubleT(last_accessed); |
513 p->creation_time = base::Time::FromDoubleT(creation_time); | 531 p->creation_time = base::Time::FromDoubleT(creation_time); |
514 return true; | 532 return true; |
515 } | 533 } |
516 }; | 534 }; |
517 | 535 |
518 template <> | 536 template <> |
519 struct GenerateTraits<base::Time> { | 537 struct GenerateTraits<base::Time> { |
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
934 case 2: { | 952 case 2: { |
935 *p = content::IndexedDBKeyPath(); | 953 *p = content::IndexedDBKeyPath(); |
936 break; | 954 break; |
937 } | 955 } |
938 } | 956 } |
939 return true; | 957 return true; |
940 } | 958 } |
941 }; | 959 }; |
942 | 960 |
943 template <> | 961 template <> |
| 962 struct GenerateTraits<content::NPIdentifier_Param> { |
| 963 static bool Generate(content::NPIdentifier_Param* p, Generator* generator) { |
| 964 // TODO(mbarbella): This should actually generate something. |
| 965 *p = content::NPIdentifier_Param(); |
| 966 return true; |
| 967 } |
| 968 }; |
| 969 |
| 970 template <> |
| 971 struct GenerateTraits<content::NPVariant_Param> { |
| 972 static bool Generate(content::NPVariant_Param* p, Generator* generator) { |
| 973 // TODO(mbarbella): This should actually generate something. |
| 974 *p = content::NPVariant_Param(); |
| 975 return true; |
| 976 } |
| 977 }; |
| 978 |
| 979 template <> |
944 struct GenerateTraits<content::PageState> { | 980 struct GenerateTraits<content::PageState> { |
945 static bool Generate(content::PageState *p, Generator* generator) { | 981 static bool Generate(content::PageState* p, Generator* generator) { |
946 std::string junk; | 982 std::string junk; |
947 if (!GenerateParam(&junk, generator)) | 983 if (!GenerateParam(&junk, generator)) |
948 return false; | 984 return false; |
949 *p = content::PageState::CreateFromEncodedData(junk); | 985 *p = content::PageState::CreateFromEncodedData(junk); |
950 return true; | 986 return true; |
951 } | 987 } |
952 }; | 988 }; |
953 | 989 |
954 template <> | 990 template <> |
| 991 struct GenerateTraits<content::SyntheticGesturePacket> { |
| 992 static bool Generate(content::SyntheticGesturePacket* p, |
| 993 Generator* generator) { |
| 994 scoped_ptr<content::SyntheticGestureParams> gesture_params; |
| 995 switch (RandInRange(3)) { |
| 996 case content::SyntheticGestureParams::GestureType:: |
| 997 SMOOTH_SCROLL_GESTURE: { |
| 998 content::SyntheticSmoothScrollGestureParams* params = |
| 999 new content::SyntheticSmoothScrollGestureParams(); |
| 1000 if (!GenerateParam(¶ms->anchor, generator)) |
| 1001 return false; |
| 1002 if (!GenerateParam(¶ms->distances, generator)) |
| 1003 return false; |
| 1004 if (!GenerateParam(¶ms->prevent_fling, generator)) |
| 1005 return false; |
| 1006 if (!GenerateParam(¶ms->speed_in_pixels_s, generator)) |
| 1007 return false; |
| 1008 gesture_params.reset(params); |
| 1009 break; |
| 1010 } |
| 1011 case content::SyntheticGestureParams::GestureType::PINCH_GESTURE: { |
| 1012 content::SyntheticPinchGestureParams* params = |
| 1013 new content::SyntheticPinchGestureParams(); |
| 1014 if (!GenerateParam(¶ms->scale_factor, generator)) |
| 1015 return false; |
| 1016 if (!GenerateParam(¶ms->anchor, generator)) |
| 1017 return false; |
| 1018 if (!GenerateParam(¶ms->relative_pointer_speed_in_pixels_s, |
| 1019 generator)) |
| 1020 return false; |
| 1021 gesture_params.reset(params); |
| 1022 break; |
| 1023 } |
| 1024 case content::SyntheticGestureParams::GestureType::TAP_GESTURE: { |
| 1025 content::SyntheticTapGestureParams* params = |
| 1026 new content::SyntheticTapGestureParams(); |
| 1027 if (!GenerateParam(¶ms->position, generator)) |
| 1028 return false; |
| 1029 if (!GenerateParam(¶ms->duration_ms, generator)) |
| 1030 return false; |
| 1031 gesture_params.reset(params); |
| 1032 break; |
| 1033 } |
| 1034 } |
| 1035 p->set_gesture_params(gesture_params.Pass()); |
| 1036 return true; |
| 1037 } |
| 1038 }; |
| 1039 |
| 1040 template <> |
| 1041 struct GenerateTraits<content::WebCursor> { |
| 1042 static bool Generate(content::WebCursor* p, Generator* generator) { |
| 1043 blink::WebCursorInfo::Type type; |
| 1044 if (!GenerateParam(&type, generator)) |
| 1045 return false; |
| 1046 content::WebCursor::CursorInfo info(type); |
| 1047 |
| 1048 // Omitting |externalHandle| since it is not serialized. |
| 1049 if (!GenerateParam(&info.hotspot, generator)) |
| 1050 return false; |
| 1051 if (!GenerateParam(&info.image_scale_factor, generator)) |
| 1052 return false; |
| 1053 if (!GenerateParam(&info.custom_image, generator)) |
| 1054 return false; |
| 1055 *p = content::WebCursor(info); |
| 1056 return true; |
| 1057 } |
| 1058 }; |
| 1059 |
| 1060 template <> |
| 1061 struct GenerateTraits<ContentSettingsPattern> { |
| 1062 static bool Generate(ContentSettingsPattern* p, Generator* generator) { |
| 1063 // TODO(mbarbella): This can crash if a pattern is generated from a random |
| 1064 // string. We could carefully generate a pattern or fix pattern generation. |
| 1065 *p = ContentSettingsPattern(); |
| 1066 return true; |
| 1067 } |
| 1068 }; |
| 1069 |
| 1070 template <> |
| 1071 struct GenerateTraits<ExtensionMsg_PermissionSetStruct> { |
| 1072 static bool Generate(ExtensionMsg_PermissionSetStruct* p, |
| 1073 Generator* generator) { |
| 1074 // TODO(mbarbella): This should actually generate something. |
| 1075 *p = ExtensionMsg_PermissionSetStruct(); |
| 1076 return true; |
| 1077 } |
| 1078 }; |
| 1079 |
| 1080 template <> |
955 struct GenerateTraits<extensions::URLPatternSet> { | 1081 struct GenerateTraits<extensions::URLPatternSet> { |
956 static bool Generate(extensions::URLPatternSet* p, Generator* generator) { | 1082 static bool Generate(extensions::URLPatternSet* p, Generator* generator) { |
957 std::set<URLPattern> patterns; | 1083 std::set<URLPattern> patterns; |
958 if (!GenerateParam(&patterns, generator)) | 1084 if (!GenerateParam(&patterns, generator)) |
959 return false; | 1085 return false; |
960 *p = extensions::URLPatternSet(patterns); | 1086 *p = extensions::URLPatternSet(patterns); |
961 return true; | 1087 return true; |
962 } | 1088 } |
963 }; | 1089 }; |
964 | |
965 template <> | |
966 struct GenerateTraits<gpu::Mailbox> { | |
967 static bool Generate(gpu::Mailbox *p, Generator* generator) { | |
968 generator->GenerateBytes(p->name, sizeof(p->name)); | |
969 return true; | |
970 } | |
971 }; | |
972 | |
973 template <> | |
974 struct GenerateTraits<gpu::MailboxHolder> { | |
975 static bool Generate(gpu::MailboxHolder *p, Generator* generator) { | |
976 gpu::Mailbox mailbox; | |
977 uint32_t texture_target; | |
978 uint32_t sync_point; | |
979 if (!GenerateParam(&mailbox, generator)) | |
980 return false; | |
981 if (!GenerateParam(&texture_target, generator)) | |
982 return false; | |
983 if (!GenerateParam(&sync_point, generator)) | |
984 return false; | |
985 *p = gpu::MailboxHolder(mailbox, texture_target, sync_point); | |
986 return true; | |
987 } | |
988 }; | |
989 | |
990 template <> | |
991 struct GenerateTraits<gpu::ValueState> { | |
992 static bool Generate(gpu::ValueState* p, Generator* generator) { | |
993 gpu::ValueState state; | |
994 if (!GenerateParamArray(&state.float_value[0], 4, generator)) | |
995 return false; | |
996 if (!GenerateParamArray(&state.int_value[0], 4, generator)) | |
997 return false; | |
998 *p = state; | |
999 return true; | |
1000 } | |
1001 }; | |
1002 | |
1003 template <> | |
1004 struct GenerateTraits<GURL> { | |
1005 static bool Generate(GURL *p, Generator* generator) { | |
1006 const char url_chars[] = "Ahtp0:/.?+\\%&#"; | |
1007 size_t count = RandInRange(100); | |
1008 std::string random_url; | |
1009 for (size_t i = 0; i < count; ++i) | |
1010 random_url += url_chars[RandInRange(sizeof(url_chars) - 1)]; | |
1011 int selector = RandInRange(10); | |
1012 if (selector == 0) | |
1013 random_url = std::string("http://") + random_url; | |
1014 else if (selector == 1) | |
1015 random_url = std::string("file://") + random_url; | |
1016 else if (selector == 2) | |
1017 random_url = std::string("javascript:") + random_url; | |
1018 else if (selector == 2) | |
1019 random_url = std::string("data:") + random_url; | |
1020 *p = GURL(random_url); | |
1021 return true; | |
1022 } | |
1023 }; | |
1024 | |
1025 template <> | |
1026 struct GenerateTraits<media::AudioParameters> { | |
1027 static bool Generate(media::AudioParameters *p, Generator* generator) { | |
1028 int format; | |
1029 int channel_layout; | |
1030 int sample_rate; | |
1031 int bits_per_sample; | |
1032 int frames_per_buffer; | |
1033 int channels; | |
1034 int effects; | |
1035 if (!GenerateParam(&format, generator)) | |
1036 return false; | |
1037 if (!GenerateParam(&channel_layout, generator)) | |
1038 return false; | |
1039 if (!GenerateParam(&sample_rate, generator)) | |
1040 return false; | |
1041 if (!GenerateParam(&bits_per_sample, generator)) | |
1042 return false; | |
1043 if (!GenerateParam(&frames_per_buffer, generator)) | |
1044 return false; | |
1045 if (!GenerateParam(&channels, generator)) | |
1046 return false; | |
1047 if (!GenerateParam(&effects, generator)) | |
1048 return false; | |
1049 media::AudioParameters params( | |
1050 static_cast<media::AudioParameters::Format>(format), | |
1051 static_cast<media::ChannelLayout>(channel_layout), | |
1052 channels, | |
1053 sample_rate, | |
1054 bits_per_sample, | |
1055 frames_per_buffer, | |
1056 effects); | |
1057 *p = params; | |
1058 return true; | |
1059 } | |
1060 }; | |
1061 | |
1062 template <> | |
1063 struct GenerateTraits<media::VideoCaptureFormat> { | |
1064 static bool Generate(media::VideoCaptureFormat *p, Generator* generator) { | |
1065 int frame_size_width; | |
1066 int frame_size_height; | |
1067 int pixel_format; | |
1068 if (!GenerateParam(&frame_size_height, generator)) | |
1069 return false; | |
1070 if (!GenerateParam(&frame_size_width, generator)) | |
1071 return false; | |
1072 if (!GenerateParam(&pixel_format, generator)) | |
1073 return false; | |
1074 if (!GenerateParam(&p->frame_rate, generator)) | |
1075 return false; | |
1076 p->frame_size.SetSize(frame_size_width, frame_size_height); | |
1077 p->pixel_format = static_cast<media::VideoPixelFormat>(pixel_format); | |
1078 return true; | |
1079 } | |
1080 }; | |
1081 | |
1082 | |
1083 template <> | |
1084 struct GenerateTraits<net::LoadTimingInfo> { | |
1085 static bool Generate(net::LoadTimingInfo *p, Generator* generator) { | |
1086 return | |
1087 GenerateParam(&p->socket_log_id, generator) && | |
1088 GenerateParam(&p->socket_reused, generator) && | |
1089 GenerateParam(&p->request_start_time, generator) && | |
1090 GenerateParam(&p->request_start, generator) && | |
1091 GenerateParam(&p->proxy_resolve_start, generator) && | |
1092 GenerateParam(&p->proxy_resolve_end, generator) && | |
1093 GenerateParam(&p->connect_timing.dns_start, generator) && | |
1094 GenerateParam(&p->connect_timing.dns_end, generator) && | |
1095 GenerateParam(&p->connect_timing.connect_start, generator) && | |
1096 GenerateParam(&p->connect_timing.connect_end, generator) && | |
1097 GenerateParam(&p->connect_timing.ssl_start, generator) && | |
1098 GenerateParam(&p->connect_timing.ssl_end, generator) && | |
1099 GenerateParam(&p->send_start, generator) && | |
1100 GenerateParam(&p->send_end, generator) && | |
1101 GenerateParam(&p->receive_headers_end, generator); | |
1102 } | |
1103 }; | |
1104 | |
1105 template <> | |
1106 struct GenerateTraits<net::HostPortPair> { | |
1107 static bool Generate(net::HostPortPair *p, Generator* generator) { | |
1108 std::string host; | |
1109 uint16 port; | |
1110 if (!GenerateParam(&host, generator)) | |
1111 return false; | |
1112 if (!GenerateParam(&port, generator)) | |
1113 return false; | |
1114 p->set_host(host); | |
1115 p->set_port(port); | |
1116 return true; | |
1117 } | |
1118 }; | |
1119 | |
1120 template <> | |
1121 struct GenerateTraits<net::IPEndPoint> { | |
1122 static bool Generate(net::IPEndPoint *p, Generator* generator) { | |
1123 net::IPAddressNumber address; | |
1124 int port; | |
1125 if (!GenerateParam(&address, generator)) | |
1126 return false; | |
1127 if (!GenerateParam(&port, generator)) | |
1128 return false; | |
1129 net::IPEndPoint ip_endpoint(address, port); | |
1130 *p = ip_endpoint; | |
1131 return true; | |
1132 } | |
1133 }; | |
1134 | |
1135 template <> | |
1136 struct GenerateTraits<network_hints::LookupRequest> { | |
1137 static bool Generate(network_hints::LookupRequest* p, Generator* generator) { | |
1138 network_hints::LookupRequest request; | |
1139 if (!GenerateParam(&request.hostname_list, generator)) | |
1140 return false; | |
1141 *p = request; | |
1142 return true; | |
1143 } | |
1144 }; | |
1145 | 1090 |
1146 template <> | 1091 template <> |
1147 struct GenerateTraits<gfx::Point> { | 1092 struct GenerateTraits<gfx::Point> { |
1148 static bool Generate(gfx::Point *p, Generator* generator) { | 1093 static bool Generate(gfx::Point *p, Generator* generator) { |
1149 int x; | 1094 int x; |
1150 int y; | 1095 int y; |
1151 if (!GenerateParam(&x, generator)) | 1096 if (!GenerateParam(&x, generator)) |
1152 return false; | 1097 return false; |
1153 if (!GenerateParam(&y, generator)) | 1098 if (!GenerateParam(&y, generator)) |
1154 return false; | 1099 return false; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1279 if (!GenerateParam(&x, generator)) | 1224 if (!GenerateParam(&x, generator)) |
1280 return false; | 1225 return false; |
1281 if (!GenerateParam(&y, generator)) | 1226 if (!GenerateParam(&y, generator)) |
1282 return false; | 1227 return false; |
1283 *p = gfx::Vector2dF(x, y); | 1228 *p = gfx::Vector2dF(x, y); |
1284 return true; | 1229 return true; |
1285 } | 1230 } |
1286 }; | 1231 }; |
1287 | 1232 |
1288 template <> | 1233 template <> |
| 1234 struct GenerateTraits<gpu::Mailbox> { |
| 1235 static bool Generate(gpu::Mailbox* p, Generator* generator) { |
| 1236 generator->GenerateBytes(p->name, sizeof(p->name)); |
| 1237 return true; |
| 1238 } |
| 1239 }; |
| 1240 |
| 1241 template <> |
| 1242 struct GenerateTraits<gpu::MailboxHolder> { |
| 1243 static bool Generate(gpu::MailboxHolder* p, Generator* generator) { |
| 1244 gpu::Mailbox mailbox; |
| 1245 uint32_t texture_target; |
| 1246 uint32_t sync_point; |
| 1247 if (!GenerateParam(&mailbox, generator)) |
| 1248 return false; |
| 1249 if (!GenerateParam(&texture_target, generator)) |
| 1250 return false; |
| 1251 if (!GenerateParam(&sync_point, generator)) |
| 1252 return false; |
| 1253 *p = gpu::MailboxHolder(mailbox, texture_target, sync_point); |
| 1254 return true; |
| 1255 } |
| 1256 }; |
| 1257 |
| 1258 template <> |
| 1259 struct GenerateTraits<gpu::ValueState> { |
| 1260 static bool Generate(gpu::ValueState* p, Generator* generator) { |
| 1261 gpu::ValueState state; |
| 1262 if (!GenerateParamArray(&state.float_value[0], 4, generator)) |
| 1263 return false; |
| 1264 if (!GenerateParamArray(&state.int_value[0], 4, generator)) |
| 1265 return false; |
| 1266 *p = state; |
| 1267 return true; |
| 1268 } |
| 1269 }; |
| 1270 |
| 1271 template <> |
| 1272 struct GenerateTraits<GURL> { |
| 1273 static bool Generate(GURL* p, Generator* generator) { |
| 1274 const char url_chars[] = "Ahtp0:/.?+\\%&#"; |
| 1275 size_t count = RandInRange(100); |
| 1276 std::string random_url; |
| 1277 for (size_t i = 0; i < count; ++i) |
| 1278 random_url += url_chars[RandInRange(sizeof(url_chars) - 1)]; |
| 1279 int selector = RandInRange(10); |
| 1280 if (selector == 0) |
| 1281 random_url = std::string("http://") + random_url; |
| 1282 else if (selector == 1) |
| 1283 random_url = std::string("file://") + random_url; |
| 1284 else if (selector == 2) |
| 1285 random_url = std::string("javascript:") + random_url; |
| 1286 else if (selector == 2) |
| 1287 random_url = std::string("data:") + random_url; |
| 1288 *p = GURL(random_url); |
| 1289 return true; |
| 1290 } |
| 1291 }; |
| 1292 |
| 1293 template <> |
1289 struct GenerateTraits<IPC::Message> { | 1294 struct GenerateTraits<IPC::Message> { |
1290 static bool Generate(IPC::Message *p, Generator* generator) { | 1295 static bool Generate(IPC::Message *p, Generator* generator) { |
1291 if (g_function_vector.empty()) | 1296 if (g_function_vector.empty()) |
1292 return false; | 1297 return false; |
1293 size_t index = RandInRange(g_function_vector.size()); | 1298 size_t index = RandInRange(g_function_vector.size()); |
1294 IPC::Message* ipc_message = (*g_function_vector[index])(generator); | 1299 IPC::Message* ipc_message = (*g_function_vector[index])(generator); |
1295 if (!ipc_message) | 1300 if (!ipc_message) |
1296 return false; | 1301 return false; |
1297 p = ipc_message; | 1302 p = ipc_message; |
1298 return true; | 1303 return true; |
(...skipping 19 matching lines...) Expand all Loading... |
1318 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle); | 1323 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle); |
1319 return true; | 1324 return true; |
1320 #elif defined(OS_POSIX) | 1325 #elif defined(OS_POSIX) |
1321 return | 1326 return |
1322 GenerateParam(&p->name, generator) && | 1327 GenerateParam(&p->name, generator) && |
1323 GenerateParam(&p->socket, generator); | 1328 GenerateParam(&p->socket, generator); |
1324 #endif | 1329 #endif |
1325 } | 1330 } |
1326 }; | 1331 }; |
1327 | 1332 |
| 1333 template <> |
| 1334 struct GenerateTraits<media::AudioParameters> { |
| 1335 static bool Generate(media::AudioParameters* p, Generator* generator) { |
| 1336 int format; |
| 1337 int channel_layout; |
| 1338 int sample_rate; |
| 1339 int bits_per_sample; |
| 1340 int frames_per_buffer; |
| 1341 int channels; |
| 1342 int effects; |
| 1343 if (!GenerateParam(&format, generator)) |
| 1344 return false; |
| 1345 if (!GenerateParam(&channel_layout, generator)) |
| 1346 return false; |
| 1347 if (!GenerateParam(&sample_rate, generator)) |
| 1348 return false; |
| 1349 if (!GenerateParam(&bits_per_sample, generator)) |
| 1350 return false; |
| 1351 if (!GenerateParam(&frames_per_buffer, generator)) |
| 1352 return false; |
| 1353 if (!GenerateParam(&channels, generator)) |
| 1354 return false; |
| 1355 if (!GenerateParam(&effects, generator)) |
| 1356 return false; |
| 1357 media::AudioParameters params( |
| 1358 static_cast<media::AudioParameters::Format>(format), |
| 1359 static_cast<media::ChannelLayout>(channel_layout), channels, |
| 1360 sample_rate, bits_per_sample, frames_per_buffer, effects); |
| 1361 *p = params; |
| 1362 return true; |
| 1363 } |
| 1364 }; |
| 1365 |
| 1366 template <> |
| 1367 struct GenerateTraits<media::VideoCaptureFormat> { |
| 1368 static bool Generate(media::VideoCaptureFormat* p, Generator* generator) { |
| 1369 int frame_size_width; |
| 1370 int frame_size_height; |
| 1371 int pixel_format; |
| 1372 if (!GenerateParam(&frame_size_height, generator)) |
| 1373 return false; |
| 1374 if (!GenerateParam(&frame_size_width, generator)) |
| 1375 return false; |
| 1376 if (!GenerateParam(&pixel_format, generator)) |
| 1377 return false; |
| 1378 if (!GenerateParam(&p->frame_rate, generator)) |
| 1379 return false; |
| 1380 p->frame_size.SetSize(frame_size_width, frame_size_height); |
| 1381 p->pixel_format = static_cast<media::VideoPixelFormat>(pixel_format); |
| 1382 return true; |
| 1383 } |
| 1384 }; |
| 1385 |
| 1386 template <> |
| 1387 struct GenerateTraits<net::LoadTimingInfo> { |
| 1388 static bool Generate(net::LoadTimingInfo* p, Generator* generator) { |
| 1389 return GenerateParam(&p->socket_log_id, generator) && |
| 1390 GenerateParam(&p->socket_reused, generator) && |
| 1391 GenerateParam(&p->request_start_time, generator) && |
| 1392 GenerateParam(&p->request_start, generator) && |
| 1393 GenerateParam(&p->proxy_resolve_start, generator) && |
| 1394 GenerateParam(&p->proxy_resolve_end, generator) && |
| 1395 GenerateParam(&p->connect_timing.dns_start, generator) && |
| 1396 GenerateParam(&p->connect_timing.dns_end, generator) && |
| 1397 GenerateParam(&p->connect_timing.connect_start, generator) && |
| 1398 GenerateParam(&p->connect_timing.connect_end, generator) && |
| 1399 GenerateParam(&p->connect_timing.ssl_start, generator) && |
| 1400 GenerateParam(&p->connect_timing.ssl_end, generator) && |
| 1401 GenerateParam(&p->send_start, generator) && |
| 1402 GenerateParam(&p->send_end, generator) && |
| 1403 GenerateParam(&p->receive_headers_end, generator); |
| 1404 } |
| 1405 }; |
| 1406 |
| 1407 template <> |
| 1408 struct GenerateTraits<net::HostPortPair> { |
| 1409 static bool Generate(net::HostPortPair* p, Generator* generator) { |
| 1410 std::string host; |
| 1411 uint16 port; |
| 1412 if (!GenerateParam(&host, generator)) |
| 1413 return false; |
| 1414 if (!GenerateParam(&port, generator)) |
| 1415 return false; |
| 1416 p->set_host(host); |
| 1417 p->set_port(port); |
| 1418 return true; |
| 1419 } |
| 1420 }; |
| 1421 |
| 1422 template <> |
| 1423 struct GenerateTraits<net::IPEndPoint> { |
| 1424 static bool Generate(net::IPEndPoint* p, Generator* generator) { |
| 1425 net::IPAddressNumber address; |
| 1426 int port; |
| 1427 if (!GenerateParam(&address, generator)) |
| 1428 return false; |
| 1429 if (!GenerateParam(&port, generator)) |
| 1430 return false; |
| 1431 net::IPEndPoint ip_endpoint(address, port); |
| 1432 *p = ip_endpoint; |
| 1433 return true; |
| 1434 } |
| 1435 }; |
| 1436 |
| 1437 template <> |
| 1438 struct GenerateTraits<network_hints::LookupRequest> { |
| 1439 static bool Generate(network_hints::LookupRequest* p, Generator* generator) { |
| 1440 network_hints::LookupRequest request; |
| 1441 if (!GenerateParam(&request.hostname_list, generator)) |
| 1442 return false; |
| 1443 *p = request; |
| 1444 return true; |
| 1445 } |
| 1446 }; |
| 1447 |
1328 // PP_ traits. | 1448 // PP_ traits. |
1329 template <> | 1449 template <> |
1330 struct GenerateTraits<PP_Bool> { | 1450 struct GenerateTraits<PP_Bool> { |
1331 static bool Generate(PP_Bool *p, Generator* generator) { | 1451 static bool Generate(PP_Bool *p, Generator* generator) { |
1332 bool tmp; | 1452 bool tmp; |
1333 if (!GenerateParam(&tmp, generator)) | 1453 if (!GenerateParam(&tmp, generator)) |
1334 return false; | 1454 return false; |
1335 *p = PP_FromBool(tmp); | 1455 *p = PP_FromBool(tmp); |
1336 return true; | 1456 return true; |
1337 } | 1457 } |
1338 }; | 1458 }; |
1339 | 1459 |
1340 template <> | 1460 template <> |
| 1461 struct GenerateTraits<PP_KeyInformation> { |
| 1462 static bool Generate(PP_KeyInformation* p, Generator* generator) { |
| 1463 // TODO(mbarbella): This should actually generate something. |
| 1464 *p = PP_KeyInformation(); |
| 1465 return true; |
| 1466 } |
| 1467 }; |
| 1468 |
| 1469 template <> |
1341 struct GenerateTraits<PP_NetAddress_Private> { | 1470 struct GenerateTraits<PP_NetAddress_Private> { |
1342 static bool Generate(PP_NetAddress_Private *p, Generator* generator) { | 1471 static bool Generate(PP_NetAddress_Private *p, Generator* generator) { |
1343 p->size = RandInRange(sizeof(p->data) + 1); | 1472 p->size = RandInRange(sizeof(p->data) + 1); |
1344 generator->GenerateBytes(&p->data, p->size); | 1473 generator->GenerateBytes(&p->data, p->size); |
1345 return true; | 1474 return true; |
1346 } | 1475 } |
1347 }; | 1476 }; |
1348 | 1477 |
1349 template <> | 1478 template <> |
| 1479 struct GenerateTraits<ppapi::PPB_X509Certificate_Fields> { |
| 1480 static bool Generate(ppapi::PPB_X509Certificate_Fields* p, |
| 1481 Generator* generator) { |
| 1482 // TODO(mbarbella): This should actually generate something. |
| 1483 return true; |
| 1484 } |
| 1485 }; |
| 1486 |
| 1487 template <> |
| 1488 struct GenerateTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params> { |
| 1489 static bool Generate(ppapi::proxy::PPBFlash_DrawGlyphs_Params* p, |
| 1490 Generator* generator) { |
| 1491 // TODO(mbarbella): This should actually generate something. |
| 1492 *p = ppapi::proxy::PPBFlash_DrawGlyphs_Params(); |
| 1493 return true; |
| 1494 } |
| 1495 }; |
| 1496 |
| 1497 template <> |
1350 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> { | 1498 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> { |
1351 static bool Generate( | 1499 static bool Generate( |
1352 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) { | 1500 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) { |
1353 PP_Resource resource; | 1501 PP_Resource resource; |
1354 int32_t sequence; | 1502 int32_t sequence; |
1355 bool has_callback; | 1503 bool has_callback; |
1356 if (!GenerateParam(&resource, generator)) | 1504 if (!GenerateParam(&resource, generator)) |
1357 return false; | 1505 return false; |
1358 if (!GenerateParam(&sequence, generator)) | 1506 if (!GenerateParam(&sequence, generator)) |
1359 return false; | 1507 return false; |
(...skipping 19 matching lines...) Expand all Loading... |
1379 return false; | 1527 return false; |
1380 if (!GenerateParam(&result, generator)) | 1528 if (!GenerateParam(&result, generator)) |
1381 return false; | 1529 return false; |
1382 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence); | 1530 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence); |
1383 p->set_result(result); | 1531 p->set_result(result); |
1384 return true; | 1532 return true; |
1385 } | 1533 } |
1386 }; | 1534 }; |
1387 | 1535 |
1388 template <> | 1536 template <> |
| 1537 struct GenerateTraits<ppapi::proxy::SerializedHandle> { |
| 1538 static bool Generate(ppapi::proxy::SerializedHandle* p, |
| 1539 Generator* generator) { |
| 1540 // TODO(mbarbella): This should actually generate something. |
| 1541 *p = ppapi::proxy::SerializedHandle(); |
| 1542 return true; |
| 1543 } |
| 1544 }; |
| 1545 |
| 1546 template <> |
| 1547 struct GenerateTraits<ppapi::proxy::SerializedFontDescription> { |
| 1548 static bool Generate(ppapi::proxy::SerializedFontDescription* p, |
| 1549 Generator* generator) { |
| 1550 // TODO(mbarbella): This should actually generate something. |
| 1551 *p = ppapi::proxy::SerializedFontDescription(); |
| 1552 return true; |
| 1553 } |
| 1554 }; |
| 1555 |
| 1556 template <> |
| 1557 struct GenerateTraits<ppapi::proxy::SerializedTrueTypeFontDesc> { |
| 1558 static bool Generate(ppapi::proxy::SerializedTrueTypeFontDesc* p, |
| 1559 Generator* generator) { |
| 1560 // TODO(mbarbella): This should actually generate something. |
| 1561 *p = ppapi::proxy::SerializedTrueTypeFontDesc(); |
| 1562 return true; |
| 1563 } |
| 1564 }; |
| 1565 |
| 1566 template <> |
| 1567 struct GenerateTraits<ppapi::proxy::SerializedVar> { |
| 1568 static bool Generate(ppapi::proxy::SerializedVar* p, Generator* generator) { |
| 1569 // TODO(mbarbella): This should actually generate something. |
| 1570 *p = ppapi::proxy::SerializedVar(); |
| 1571 return true; |
| 1572 } |
| 1573 }; |
| 1574 |
| 1575 template <> |
1389 struct GenerateTraits<ppapi::HostResource> { | 1576 struct GenerateTraits<ppapi::HostResource> { |
1390 static bool Generate(ppapi::HostResource *p, Generator* generator) { | 1577 static bool Generate(ppapi::HostResource *p, Generator* generator) { |
1391 PP_Instance instance; | 1578 PP_Instance instance; |
1392 PP_Resource resource; | 1579 PP_Resource resource; |
1393 if (!GenerateParam(&instance, generator)) | 1580 if (!GenerateParam(&instance, generator)) |
1394 return false; | 1581 return false; |
1395 if (!GenerateParam(&resource, generator)) | 1582 if (!GenerateParam(&resource, generator)) |
1396 return false; | 1583 return false; |
1397 p->SetHostResource(instance, resource); | 1584 p->SetHostResource(instance, resource); |
1398 return true; | 1585 return true; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 webrtc::DesktopVector vector; | 1646 webrtc::DesktopVector vector; |
1460 if (!GenerateParam(&size, generator)) | 1647 if (!GenerateParam(&size, generator)) |
1461 return false; | 1648 return false; |
1462 if (!GenerateParam(&vector, generator)) | 1649 if (!GenerateParam(&vector, generator)) |
1463 return false; | 1650 return false; |
1464 *p = remoting::ScreenResolution(size, vector); | 1651 *p = remoting::ScreenResolution(size, vector); |
1465 return true; | 1652 return true; |
1466 } | 1653 } |
1467 }; | 1654 }; |
1468 | 1655 |
1469 // FIXME: Actually generate something. | |
1470 template <> | 1656 template <> |
1471 struct GenerateTraits<SkBitmap> { | 1657 struct GenerateTraits<SkBitmap> { |
1472 static bool Generate(SkBitmap* p, Generator* generator) { | 1658 static bool Generate(SkBitmap* p, Generator* generator) { |
| 1659 // TODO(mbarbella): This should actually generate something. |
1473 *p = SkBitmap(); | 1660 *p = SkBitmap(); |
1474 return true; | 1661 return true; |
1475 } | 1662 } |
1476 }; | 1663 }; |
1477 | 1664 |
1478 template <> | 1665 template <> |
| 1666 struct GenerateTraits<storage::DataElement> { |
| 1667 static bool Generate(storage::DataElement* p, Generator* generator) { |
| 1668 switch (RandInRange(4)) { |
| 1669 case storage::DataElement::Type::TYPE_BYTES: { |
| 1670 if (RandEvent(2)) { |
| 1671 p->SetToEmptyBytes(); |
| 1672 } else { |
| 1673 // TODO(mbarbella): Occasionally send more data here. |
| 1674 char data[256]; |
| 1675 int data_len = RandInRange(sizeof(data)); |
| 1676 generator->GenerateBytes(&data[0], data_len); |
| 1677 p->SetToBytes(&data[0], data_len); |
| 1678 } |
| 1679 return true; |
| 1680 } |
| 1681 case storage::DataElement::Type::TYPE_FILE: { |
| 1682 base::FilePath path; |
| 1683 uint64 offset; |
| 1684 uint64 length; |
| 1685 base::Time modification_time; |
| 1686 if (!GenerateParam(&path, generator)) |
| 1687 return false; |
| 1688 if (!GenerateParam(&offset, generator)) |
| 1689 return false; |
| 1690 if (!GenerateParam(&length, generator)) |
| 1691 return false; |
| 1692 if (!GenerateParam(&modification_time, generator)) |
| 1693 return false; |
| 1694 p->SetToFilePathRange(path, offset, length, modification_time); |
| 1695 return true; |
| 1696 } |
| 1697 case storage::DataElement::Type::TYPE_BLOB: { |
| 1698 std::string uuid; |
| 1699 uint64 offset; |
| 1700 uint64 length; |
| 1701 if (!GenerateParam(&uuid, generator)) |
| 1702 return false; |
| 1703 if (!GenerateParam(&offset, generator)) |
| 1704 return false; |
| 1705 if (!GenerateParam(&length, generator)) |
| 1706 return false; |
| 1707 p->SetToBlobRange(uuid, offset, length); |
| 1708 return true; |
| 1709 } |
| 1710 case storage::DataElement::Type::TYPE_FILE_FILESYSTEM: { |
| 1711 GURL url; |
| 1712 uint64 offset; |
| 1713 uint64 length; |
| 1714 base::Time modification_time; |
| 1715 if (!GenerateParam(&url, generator)) |
| 1716 return false; |
| 1717 if (!GenerateParam(&offset, generator)) |
| 1718 return false; |
| 1719 if (!GenerateParam(&length, generator)) |
| 1720 return false; |
| 1721 if (!GenerateParam(&modification_time, generator)) |
| 1722 return false; |
| 1723 p->SetToFileSystemUrlRange(url, offset, length, modification_time); |
| 1724 return true; |
| 1725 } |
| 1726 default: { |
| 1727 NOTREACHED(); |
| 1728 return false; |
| 1729 } |
| 1730 } |
| 1731 } |
| 1732 }; |
| 1733 |
| 1734 template <> |
1479 struct GenerateTraits<ui::LatencyInfo> { | 1735 struct GenerateTraits<ui::LatencyInfo> { |
1480 static bool Generate(ui::LatencyInfo* p, Generator* generator) { | 1736 static bool Generate(ui::LatencyInfo* p, Generator* generator) { |
1481 // TODO(inferno): Add param traits for |latency_components|. | 1737 // TODO(inferno): Add param traits for |latency_components|. |
1482 p->input_coordinates_size = static_cast<uint32>( | 1738 p->input_coordinates_size = static_cast<uint32>( |
1483 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1)); | 1739 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1)); |
1484 if (!GenerateParamArray( | 1740 if (!GenerateParamArray( |
1485 &p->input_coordinates[0], p->input_coordinates_size, generator)) | 1741 &p->input_coordinates[0], p->input_coordinates_size, generator)) |
1486 return false; | 1742 return false; |
1487 if (!GenerateParam(&p->trace_id, generator)) | 1743 if (!GenerateParam(&p->trace_id, generator)) |
1488 return false; | 1744 return false; |
(...skipping 23 matching lines...) Expand all Loading... |
1512 static bool Generate(url::Origin* p, Generator* generator) { | 1768 static bool Generate(url::Origin* p, Generator* generator) { |
1513 std::string origin; | 1769 std::string origin; |
1514 if (!GenerateParam(&origin, generator)) | 1770 if (!GenerateParam(&origin, generator)) |
1515 return false; | 1771 return false; |
1516 *p = url::Origin(origin); | 1772 *p = url::Origin(origin); |
1517 return true; | 1773 return true; |
1518 } | 1774 } |
1519 }; | 1775 }; |
1520 | 1776 |
1521 template <> | 1777 template <> |
| 1778 struct GenerateTraits<URLPattern> { |
| 1779 static bool Generate(URLPattern* p, Generator* generator) { |
| 1780 int valid_schemes; |
| 1781 std::string host; |
| 1782 std::string port; |
| 1783 std::string path; |
| 1784 if (!GenerateParam(&valid_schemes, generator)) |
| 1785 return false; |
| 1786 if (!GenerateParam(&host, generator)) |
| 1787 return false; |
| 1788 if (!GenerateParam(&port, generator)) |
| 1789 return false; |
| 1790 if (!GenerateParam(&path, generator)) |
| 1791 return false; |
| 1792 *p = URLPattern(valid_schemes); |
| 1793 p->SetHost(host); |
| 1794 p->SetPort(port); |
| 1795 p->SetPath(path); |
| 1796 return true; |
| 1797 } |
| 1798 }; |
| 1799 |
| 1800 template <> |
1522 struct GenerateTraits<webrtc::DesktopSize> { | 1801 struct GenerateTraits<webrtc::DesktopSize> { |
1523 static bool Generate(webrtc::DesktopSize* p, Generator* generator) { | 1802 static bool Generate(webrtc::DesktopSize* p, Generator* generator) { |
1524 int32_t width; | 1803 int32_t width; |
1525 int32_t height; | 1804 int32_t height; |
1526 if (!GenerateParam(&width, generator)) | 1805 if (!GenerateParam(&width, generator)) |
1527 return false; | 1806 return false; |
1528 if (!GenerateParam(&height, generator)) | 1807 if (!GenerateParam(&height, generator)) |
1529 return false; | 1808 return false; |
1530 *p = webrtc::DesktopSize(width, height); | 1809 *p = webrtc::DesktopSize(width, height); |
1531 return true; | 1810 return true; |
(...skipping 27 matching lines...) Expand all Loading... |
1559 return false; | 1838 return false; |
1560 if (!GenerateParam(&right, generator)) | 1839 if (!GenerateParam(&right, generator)) |
1561 return false; | 1840 return false; |
1562 if (!GenerateParam(&bottom, generator)) | 1841 if (!GenerateParam(&bottom, generator)) |
1563 return false; | 1842 return false; |
1564 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); | 1843 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); |
1565 return true; | 1844 return true; |
1566 } | 1845 } |
1567 }; | 1846 }; |
1568 | 1847 |
| 1848 template <> |
| 1849 struct GenerateTraits<webrtc::MouseCursor> { |
| 1850 static bool Generate(webrtc::MouseCursor* p, Generator* generator) { |
| 1851 webrtc::DesktopVector hotspot; |
| 1852 if (!GenerateParam(&hotspot, generator)) |
| 1853 return false; |
| 1854 // Using a small size here to avoid OOM or overflow on image allocation. |
| 1855 webrtc::DesktopSize size(RandInRange(100), RandInRange(100)); |
| 1856 p->set_image(new webrtc::BasicDesktopFrame(size)); |
| 1857 p->set_hotspot(hotspot); |
| 1858 return true; |
| 1859 } |
| 1860 }; |
| 1861 |
1569 // Redefine macros to generate generating from traits declarations. | 1862 // Redefine macros to generate generating from traits declarations. |
1570 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. | 1863 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. |
1571 #undef IPC_STRUCT_BEGIN | 1864 #undef IPC_STRUCT_BEGIN |
1572 #undef IPC_STRUCT_BEGIN_WITH_PARENT | 1865 #undef IPC_STRUCT_BEGIN_WITH_PARENT |
1573 #undef IPC_STRUCT_MEMBER | 1866 #undef IPC_STRUCT_MEMBER |
1574 #undef IPC_STRUCT_END | 1867 #undef IPC_STRUCT_END |
1575 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ | 1868 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ |
1576 IPC_STRUCT_BEGIN(struct_name) | 1869 IPC_STRUCT_BEGIN(struct_name) |
1577 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name) | 1870 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name) |
1578 #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name) | 1871 #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name) |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1771 return EXIT_FAILURE; | 2064 return EXIT_FAILURE; |
1772 | 2065 |
1773 return EXIT_SUCCESS; | 2066 return EXIT_SUCCESS; |
1774 } | 2067 } |
1775 | 2068 |
1776 } // namespace ipc_fuzzer | 2069 } // namespace ipc_fuzzer |
1777 | 2070 |
1778 int main(int argc, char** argv) { | 2071 int main(int argc, char** argv) { |
1779 return ipc_fuzzer::GenerateMain(argc, argv); | 2072 return ipc_fuzzer::GenerateMain(argc, argv); |
1780 } | 2073 } |
OLD | NEW |