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> | |
Tom Sepez
2015/02/02 23:58:53
This may be implementation-dependent, eg. the __1
Martin Barbella
2015/02/03 00:04:07
Done.
| |
454 struct GenerateTraits<std::__1::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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
496 struct GenerateTraits<base::File::Info> { | 514 struct GenerateTraits<base::File::Info> { |
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; |
Tom Sepez
2015/02/02 23:58:53
nice catch.
| |
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 0: { | |
997 content::SyntheticSmoothScrollGestureParams* params = | |
998 new content::SyntheticSmoothScrollGestureParams(); | |
999 if (!GenerateParam(¶ms->anchor, generator)) | |
1000 return false; | |
1001 if (!GenerateParam(¶ms->distances, generator)) | |
1002 return false; | |
1003 if (!GenerateParam(¶ms->prevent_fling, generator)) | |
1004 return false; | |
1005 if (!GenerateParam(¶ms->speed_in_pixels_s, generator)) | |
1006 return false; | |
1007 gesture_params.reset(params); | |
1008 break; | |
1009 } | |
1010 case 1: { | |
1011 content::SyntheticPinchGestureParams* params = | |
1012 new content::SyntheticPinchGestureParams(); | |
1013 if (!GenerateParam(¶ms->anchor, generator)) | |
1014 return false; | |
1015 if (!GenerateParam(¶ms->relative_pointer_speed_in_pixels_s, | |
1016 generator)) | |
1017 return false; | |
1018 gesture_params.reset(params); | |
1019 break; | |
1020 } | |
1021 case 2: { | |
1022 content::SyntheticTapGestureParams* params = | |
1023 new content::SyntheticTapGestureParams(); | |
1024 if (!GenerateParam(¶ms->position, generator)) | |
1025 return false; | |
1026 if (!GenerateParam(¶ms->duration_ms, generator)) | |
1027 return false; | |
1028 gesture_params.reset(params); | |
1029 break; | |
1030 } | |
1031 } | |
1032 p->set_gesture_params(gesture_params.Pass()); | |
1033 return true; | |
1034 } | |
1035 }; | |
1036 | |
1037 template <> | |
1038 struct GenerateTraits<content::WebCursor> { | |
1039 static bool Generate(content::WebCursor* p, Generator* generator) { | |
1040 blink::WebCursorInfo::Type type; | |
1041 if (!GenerateParam(&type, generator)) | |
1042 return false; | |
1043 *p = content::WebCursor(content::WebCursor::CursorInfo(type)); | |
1044 return true; | |
1045 } | |
1046 }; | |
1047 | |
1048 template <> | |
1049 struct GenerateTraits<ContentSettingsPattern> { | |
1050 static bool Generate(ContentSettingsPattern* p, Generator* generator) { | |
1051 // This can crash if arbitrary strings are passed to it, so intentially | |
1052 // create an empty pattern to avoid problems during generation. | |
1053 *p = ContentSettingsPattern(); | |
1054 return true; | |
1055 } | |
1056 }; | |
1057 | |
1058 template <> | |
1059 struct GenerateTraits<ExtensionMsg_PermissionSetStruct> { | |
1060 static bool Generate(ExtensionMsg_PermissionSetStruct* p, | |
1061 Generator* generator) { | |
1062 // TODO(mbarbella): This should actually generate something. | |
1063 *p = ExtensionMsg_PermissionSetStruct(); | |
1064 return true; | |
1065 } | |
1066 }; | |
1067 | |
1068 template <> | |
955 struct GenerateTraits<extensions::URLPatternSet> { | 1069 struct GenerateTraits<extensions::URLPatternSet> { |
956 static bool Generate(extensions::URLPatternSet* p, Generator* generator) { | 1070 static bool Generate(extensions::URLPatternSet* p, Generator* generator) { |
957 std::set<URLPattern> patterns; | 1071 std::set<URLPattern> patterns; |
958 if (!GenerateParam(&patterns, generator)) | 1072 if (!GenerateParam(&patterns, generator)) |
959 return false; | 1073 return false; |
960 *p = extensions::URLPatternSet(patterns); | 1074 *p = extensions::URLPatternSet(patterns); |
961 return true; | 1075 return true; |
962 } | 1076 } |
963 }; | 1077 }; |
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 | 1078 |
1146 template <> | 1079 template <> |
1147 struct GenerateTraits<gfx::Point> { | 1080 struct GenerateTraits<gfx::Point> { |
1148 static bool Generate(gfx::Point *p, Generator* generator) { | 1081 static bool Generate(gfx::Point *p, Generator* generator) { |
1149 int x; | 1082 int x; |
1150 int y; | 1083 int y; |
1151 if (!GenerateParam(&x, generator)) | 1084 if (!GenerateParam(&x, generator)) |
1152 return false; | 1085 return false; |
1153 if (!GenerateParam(&y, generator)) | 1086 if (!GenerateParam(&y, generator)) |
1154 return false; | 1087 return false; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1279 if (!GenerateParam(&x, generator)) | 1212 if (!GenerateParam(&x, generator)) |
1280 return false; | 1213 return false; |
1281 if (!GenerateParam(&y, generator)) | 1214 if (!GenerateParam(&y, generator)) |
1282 return false; | 1215 return false; |
1283 *p = gfx::Vector2dF(x, y); | 1216 *p = gfx::Vector2dF(x, y); |
1284 return true; | 1217 return true; |
1285 } | 1218 } |
1286 }; | 1219 }; |
1287 | 1220 |
1288 template <> | 1221 template <> |
1222 struct GenerateTraits<gpu::Mailbox> { | |
1223 static bool Generate(gpu::Mailbox* p, Generator* generator) { | |
1224 generator->GenerateBytes(p->name, sizeof(p->name)); | |
1225 return true; | |
1226 } | |
1227 }; | |
1228 | |
1229 template <> | |
1230 struct GenerateTraits<gpu::MailboxHolder> { | |
1231 static bool Generate(gpu::MailboxHolder* p, Generator* generator) { | |
1232 gpu::Mailbox mailbox; | |
1233 uint32_t texture_target; | |
1234 uint32_t sync_point; | |
1235 if (!GenerateParam(&mailbox, generator)) | |
1236 return false; | |
1237 if (!GenerateParam(&texture_target, generator)) | |
1238 return false; | |
1239 if (!GenerateParam(&sync_point, generator)) | |
1240 return false; | |
1241 *p = gpu::MailboxHolder(mailbox, texture_target, sync_point); | |
1242 return true; | |
1243 } | |
1244 }; | |
1245 | |
1246 template <> | |
1247 struct GenerateTraits<gpu::ValueState> { | |
1248 static bool Generate(gpu::ValueState* p, Generator* generator) { | |
1249 gpu::ValueState state; | |
1250 if (!GenerateParamArray(&state.float_value[0], 4, generator)) | |
1251 return false; | |
1252 if (!GenerateParamArray(&state.int_value[0], 4, generator)) | |
1253 return false; | |
1254 *p = state; | |
1255 return true; | |
1256 } | |
1257 }; | |
1258 | |
1259 template <> | |
1260 struct GenerateTraits<GURL> { | |
1261 static bool Generate(GURL* p, Generator* generator) { | |
1262 const char url_chars[] = "Ahtp0:/.?+\\%&#"; | |
1263 size_t count = RandInRange(100); | |
1264 std::string random_url; | |
1265 for (size_t i = 0; i < count; ++i) | |
1266 random_url += url_chars[RandInRange(sizeof(url_chars) - 1)]; | |
1267 int selector = RandInRange(10); | |
1268 if (selector == 0) | |
1269 random_url = std::string("http://") + random_url; | |
1270 else if (selector == 1) | |
1271 random_url = std::string("file://") + random_url; | |
1272 else if (selector == 2) | |
1273 random_url = std::string("javascript:") + random_url; | |
1274 else if (selector == 2) | |
1275 random_url = std::string("data:") + random_url; | |
1276 *p = GURL(random_url); | |
1277 return true; | |
1278 } | |
1279 }; | |
1280 | |
1281 template <> | |
1289 struct GenerateTraits<IPC::Message> { | 1282 struct GenerateTraits<IPC::Message> { |
1290 static bool Generate(IPC::Message *p, Generator* generator) { | 1283 static bool Generate(IPC::Message *p, Generator* generator) { |
1291 if (g_function_vector.empty()) | 1284 if (g_function_vector.empty()) |
1292 return false; | 1285 return false; |
1293 size_t index = RandInRange(g_function_vector.size()); | 1286 size_t index = RandInRange(g_function_vector.size()); |
1294 IPC::Message* ipc_message = (*g_function_vector[index])(generator); | 1287 IPC::Message* ipc_message = (*g_function_vector[index])(generator); |
1295 if (!ipc_message) | 1288 if (!ipc_message) |
1296 return false; | 1289 return false; |
1297 p = ipc_message; | 1290 p = ipc_message; |
1298 return true; | 1291 return true; |
(...skipping 19 matching lines...) Expand all Loading... | |
1318 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle); | 1311 p->pipe = IPC::ChannelHandle::PipeHandle(fake_handle); |
1319 return true; | 1312 return true; |
1320 #elif defined(OS_POSIX) | 1313 #elif defined(OS_POSIX) |
1321 return | 1314 return |
1322 GenerateParam(&p->name, generator) && | 1315 GenerateParam(&p->name, generator) && |
1323 GenerateParam(&p->socket, generator); | 1316 GenerateParam(&p->socket, generator); |
1324 #endif | 1317 #endif |
1325 } | 1318 } |
1326 }; | 1319 }; |
1327 | 1320 |
1321 template <> | |
1322 struct GenerateTraits<media::AudioParameters> { | |
1323 static bool Generate(media::AudioParameters* p, Generator* generator) { | |
1324 int format; | |
1325 int channel_layout; | |
1326 int sample_rate; | |
1327 int bits_per_sample; | |
1328 int frames_per_buffer; | |
1329 int channels; | |
1330 int effects; | |
1331 if (!GenerateParam(&format, generator)) | |
1332 return false; | |
1333 if (!GenerateParam(&channel_layout, generator)) | |
1334 return false; | |
1335 if (!GenerateParam(&sample_rate, generator)) | |
1336 return false; | |
1337 if (!GenerateParam(&bits_per_sample, generator)) | |
1338 return false; | |
1339 if (!GenerateParam(&frames_per_buffer, generator)) | |
1340 return false; | |
1341 if (!GenerateParam(&channels, generator)) | |
1342 return false; | |
1343 if (!GenerateParam(&effects, generator)) | |
1344 return false; | |
1345 media::AudioParameters params( | |
1346 static_cast<media::AudioParameters::Format>(format), | |
1347 static_cast<media::ChannelLayout>(channel_layout), channels, | |
1348 sample_rate, bits_per_sample, frames_per_buffer, effects); | |
1349 *p = params; | |
1350 return true; | |
1351 } | |
1352 }; | |
1353 | |
1354 template <> | |
1355 struct GenerateTraits<media::VideoCaptureFormat> { | |
1356 static bool Generate(media::VideoCaptureFormat* p, Generator* generator) { | |
1357 int frame_size_width; | |
1358 int frame_size_height; | |
1359 int pixel_format; | |
1360 if (!GenerateParam(&frame_size_height, generator)) | |
1361 return false; | |
1362 if (!GenerateParam(&frame_size_width, generator)) | |
1363 return false; | |
1364 if (!GenerateParam(&pixel_format, generator)) | |
1365 return false; | |
1366 if (!GenerateParam(&p->frame_rate, generator)) | |
1367 return false; | |
1368 p->frame_size.SetSize(frame_size_width, frame_size_height); | |
1369 p->pixel_format = static_cast<media::VideoPixelFormat>(pixel_format); | |
1370 return true; | |
1371 } | |
1372 }; | |
1373 | |
1374 template <> | |
1375 struct GenerateTraits<net::LoadTimingInfo> { | |
1376 static bool Generate(net::LoadTimingInfo* p, Generator* generator) { | |
1377 return GenerateParam(&p->socket_log_id, generator) && | |
1378 GenerateParam(&p->socket_reused, generator) && | |
1379 GenerateParam(&p->request_start_time, generator) && | |
1380 GenerateParam(&p->request_start, generator) && | |
1381 GenerateParam(&p->proxy_resolve_start, generator) && | |
1382 GenerateParam(&p->proxy_resolve_end, generator) && | |
1383 GenerateParam(&p->connect_timing.dns_start, generator) && | |
1384 GenerateParam(&p->connect_timing.dns_end, generator) && | |
1385 GenerateParam(&p->connect_timing.connect_start, generator) && | |
1386 GenerateParam(&p->connect_timing.connect_end, generator) && | |
1387 GenerateParam(&p->connect_timing.ssl_start, generator) && | |
1388 GenerateParam(&p->connect_timing.ssl_end, generator) && | |
1389 GenerateParam(&p->send_start, generator) && | |
1390 GenerateParam(&p->send_end, generator) && | |
1391 GenerateParam(&p->receive_headers_end, generator); | |
1392 } | |
1393 }; | |
1394 | |
1395 template <> | |
1396 struct GenerateTraits<net::HostPortPair> { | |
1397 static bool Generate(net::HostPortPair* p, Generator* generator) { | |
1398 std::string host; | |
1399 uint16 port; | |
1400 if (!GenerateParam(&host, generator)) | |
1401 return false; | |
1402 if (!GenerateParam(&port, generator)) | |
1403 return false; | |
1404 p->set_host(host); | |
1405 p->set_port(port); | |
1406 return true; | |
1407 } | |
1408 }; | |
1409 | |
1410 template <> | |
1411 struct GenerateTraits<net::IPEndPoint> { | |
1412 static bool Generate(net::IPEndPoint* p, Generator* generator) { | |
1413 net::IPAddressNumber address; | |
1414 int port; | |
1415 if (!GenerateParam(&address, generator)) | |
1416 return false; | |
1417 if (!GenerateParam(&port, generator)) | |
1418 return false; | |
1419 net::IPEndPoint ip_endpoint(address, port); | |
1420 *p = ip_endpoint; | |
1421 return true; | |
1422 } | |
1423 }; | |
1424 | |
1425 template <> | |
1426 struct GenerateTraits<network_hints::LookupRequest> { | |
1427 static bool Generate(network_hints::LookupRequest* p, Generator* generator) { | |
1428 network_hints::LookupRequest request; | |
1429 if (!GenerateParam(&request.hostname_list, generator)) | |
1430 return false; | |
1431 *p = request; | |
1432 return true; | |
1433 } | |
1434 }; | |
1435 | |
1328 // PP_ traits. | 1436 // PP_ traits. |
1329 template <> | 1437 template <> |
1330 struct GenerateTraits<PP_Bool> { | 1438 struct GenerateTraits<PP_Bool> { |
1331 static bool Generate(PP_Bool *p, Generator* generator) { | 1439 static bool Generate(PP_Bool *p, Generator* generator) { |
1332 bool tmp; | 1440 bool tmp; |
1333 if (!GenerateParam(&tmp, generator)) | 1441 if (!GenerateParam(&tmp, generator)) |
1334 return false; | 1442 return false; |
1335 *p = PP_FromBool(tmp); | 1443 *p = PP_FromBool(tmp); |
1336 return true; | 1444 return true; |
1337 } | 1445 } |
1338 }; | 1446 }; |
1339 | 1447 |
1340 template <> | 1448 template <> |
1449 struct GenerateTraits<PP_KeyInformation> { | |
1450 static bool Generate(PP_KeyInformation* p, Generator* generator) { | |
1451 // TODO(mbarbella): This should actually generate something. | |
1452 *p = PP_KeyInformation(); | |
1453 return true; | |
1454 } | |
1455 }; | |
1456 | |
1457 template <> | |
1341 struct GenerateTraits<PP_NetAddress_Private> { | 1458 struct GenerateTraits<PP_NetAddress_Private> { |
1342 static bool Generate(PP_NetAddress_Private *p, Generator* generator) { | 1459 static bool Generate(PP_NetAddress_Private *p, Generator* generator) { |
1343 p->size = RandInRange(sizeof(p->data) + 1); | 1460 p->size = RandInRange(sizeof(p->data) + 1); |
1344 generator->GenerateBytes(&p->data, p->size); | 1461 generator->GenerateBytes(&p->data, p->size); |
1345 return true; | 1462 return true; |
1346 } | 1463 } |
1347 }; | 1464 }; |
1348 | 1465 |
1349 template <> | 1466 template <> |
1467 struct GenerateTraits<ppapi::PPB_X509Certificate_Fields> { | |
1468 static bool Generate(ppapi::PPB_X509Certificate_Fields* p, | |
1469 Generator* generator) { | |
1470 // TODO(mbarbella): This should actually generate something. | |
1471 return true; | |
1472 } | |
1473 }; | |
1474 | |
1475 template <> | |
1476 struct GenerateTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params> { | |
1477 static bool Generate(ppapi::proxy::PPBFlash_DrawGlyphs_Params* p, | |
1478 Generator* generator) { | |
1479 // TODO(mbarbella): This should actually generate something. | |
1480 *p = ppapi::proxy::PPBFlash_DrawGlyphs_Params(); | |
1481 return true; | |
1482 } | |
1483 }; | |
1484 | |
1485 template <> | |
1350 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> { | 1486 struct GenerateTraits<ppapi::proxy::ResourceMessageCallParams> { |
1351 static bool Generate( | 1487 static bool Generate( |
1352 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) { | 1488 ppapi::proxy::ResourceMessageCallParams *p, Generator* generator) { |
1353 PP_Resource resource; | 1489 PP_Resource resource; |
1354 int32_t sequence; | 1490 int32_t sequence; |
1355 bool has_callback; | 1491 bool has_callback; |
1356 if (!GenerateParam(&resource, generator)) | 1492 if (!GenerateParam(&resource, generator)) |
1357 return false; | 1493 return false; |
1358 if (!GenerateParam(&sequence, generator)) | 1494 if (!GenerateParam(&sequence, generator)) |
1359 return false; | 1495 return false; |
(...skipping 19 matching lines...) Expand all Loading... | |
1379 return false; | 1515 return false; |
1380 if (!GenerateParam(&result, generator)) | 1516 if (!GenerateParam(&result, generator)) |
1381 return false; | 1517 return false; |
1382 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence); | 1518 *p = ppapi::proxy::ResourceMessageReplyParams(resource, sequence); |
1383 p->set_result(result); | 1519 p->set_result(result); |
1384 return true; | 1520 return true; |
1385 } | 1521 } |
1386 }; | 1522 }; |
1387 | 1523 |
1388 template <> | 1524 template <> |
1525 struct GenerateTraits<ppapi::proxy::SerializedHandle> { | |
1526 static bool Generate(ppapi::proxy::SerializedHandle* p, | |
1527 Generator* generator) { | |
1528 // TODO(mbarbella): This should actually generate something. | |
1529 *p = ppapi::proxy::SerializedHandle(); | |
1530 return true; | |
1531 } | |
1532 }; | |
1533 | |
1534 template <> | |
1535 struct GenerateTraits<ppapi::proxy::SerializedFontDescription> { | |
1536 static bool Generate(ppapi::proxy::SerializedFontDescription* p, | |
1537 Generator* generator) { | |
1538 // TODO(mbarbella): This should actually generate something. | |
1539 *p = ppapi::proxy::SerializedFontDescription(); | |
1540 return true; | |
1541 } | |
1542 }; | |
1543 | |
1544 template <> | |
1545 struct GenerateTraits<ppapi::proxy::SerializedTrueTypeFontDesc> { | |
1546 static bool Generate(ppapi::proxy::SerializedTrueTypeFontDesc* p, | |
1547 Generator* generator) { | |
1548 // TODO(mbarbella): This should actually generate something. | |
1549 *p = ppapi::proxy::SerializedTrueTypeFontDesc(); | |
1550 return true; | |
1551 } | |
1552 }; | |
1553 | |
1554 template <> | |
1555 struct GenerateTraits<ppapi::proxy::SerializedVar> { | |
1556 static bool Generate(ppapi::proxy::SerializedVar* p, Generator* generator) { | |
1557 // TODO(mbarbella): This should actually generate something. | |
1558 *p = ppapi::proxy::SerializedVar(); | |
1559 return true; | |
1560 } | |
1561 }; | |
1562 | |
1563 template <> | |
1389 struct GenerateTraits<ppapi::HostResource> { | 1564 struct GenerateTraits<ppapi::HostResource> { |
1390 static bool Generate(ppapi::HostResource *p, Generator* generator) { | 1565 static bool Generate(ppapi::HostResource *p, Generator* generator) { |
1391 PP_Instance instance; | 1566 PP_Instance instance; |
1392 PP_Resource resource; | 1567 PP_Resource resource; |
1393 if (!GenerateParam(&instance, generator)) | 1568 if (!GenerateParam(&instance, generator)) |
1394 return false; | 1569 return false; |
1395 if (!GenerateParam(&resource, generator)) | 1570 if (!GenerateParam(&resource, generator)) |
1396 return false; | 1571 return false; |
1397 p->SetHostResource(instance, resource); | 1572 p->SetHostResource(instance, resource); |
1398 return true; | 1573 return true; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1459 webrtc::DesktopVector vector; | 1634 webrtc::DesktopVector vector; |
1460 if (!GenerateParam(&size, generator)) | 1635 if (!GenerateParam(&size, generator)) |
1461 return false; | 1636 return false; |
1462 if (!GenerateParam(&vector, generator)) | 1637 if (!GenerateParam(&vector, generator)) |
1463 return false; | 1638 return false; |
1464 *p = remoting::ScreenResolution(size, vector); | 1639 *p = remoting::ScreenResolution(size, vector); |
1465 return true; | 1640 return true; |
1466 } | 1641 } |
1467 }; | 1642 }; |
1468 | 1643 |
1469 // FIXME: Actually generate something. | |
1470 template <> | 1644 template <> |
1471 struct GenerateTraits<SkBitmap> { | 1645 struct GenerateTraits<SkBitmap> { |
1472 static bool Generate(SkBitmap* p, Generator* generator) { | 1646 static bool Generate(SkBitmap* p, Generator* generator) { |
1647 // TODO(mbarbella): This should actually generate something. | |
1473 *p = SkBitmap(); | 1648 *p = SkBitmap(); |
1474 return true; | 1649 return true; |
1475 } | 1650 } |
1476 }; | 1651 }; |
1477 | 1652 |
1478 template <> | 1653 template <> |
1654 struct GenerateTraits<storage::DataElement> { | |
1655 static bool Generate(storage::DataElement* p, Generator* generator) { | |
1656 switch (RandInRange(5)) { | |
1657 case 0: { | |
1658 p->SetToEmptyBytes(); | |
1659 return true; | |
1660 } | |
1661 case 1: { | |
1662 char bytes[256]; | |
1663 int bytes_len = RandInRange(sizeof(bytes)); | |
1664 generator->GenerateBytes(&bytes[0], bytes_len); | |
1665 p->SetToBytes(&bytes[0], bytes_len); | |
1666 return true; | |
1667 } | |
1668 case 2: { | |
1669 base::FilePath path; | |
1670 uint64 offset; | |
1671 uint64 length; | |
1672 base::Time modification_time; | |
1673 if (!GenerateParam(&path, generator)) | |
1674 return false; | |
1675 if (!GenerateParam(&offset, generator)) | |
1676 return false; | |
1677 if (!GenerateParam(&length, generator)) | |
1678 return false; | |
1679 if (!GenerateParam(&modification_time, generator)) | |
1680 return false; | |
1681 p->SetToFilePathRange(path, offset, length, modification_time); | |
1682 return true; | |
1683 } | |
1684 case 3: { | |
1685 std::string uuid; | |
1686 uint64 offset; | |
1687 uint64 length; | |
1688 if (!GenerateParam(&uuid, generator)) | |
1689 return false; | |
1690 if (!GenerateParam(&offset, generator)) | |
1691 return false; | |
1692 if (!GenerateParam(&length, generator)) | |
1693 return false; | |
1694 p->SetToBlobRange(uuid, offset, length); | |
1695 return true; | |
1696 } | |
1697 case 4: { | |
1698 GURL url; | |
1699 uint64 offset; | |
1700 uint64 length; | |
1701 base::Time modification_time; | |
1702 if (!GenerateParam(&url, generator)) | |
1703 return false; | |
1704 if (!GenerateParam(&offset, generator)) | |
1705 return false; | |
1706 if (!GenerateParam(&length, generator)) | |
1707 return false; | |
1708 if (!GenerateParam(&modification_time, generator)) | |
1709 return false; | |
1710 p->SetToFileSystemUrlRange(url, offset, length, modification_time); | |
1711 return true; | |
1712 } | |
1713 default: { | |
1714 NOTREACHED(); | |
1715 return false; | |
1716 } | |
1717 } | |
1718 } | |
1719 }; | |
1720 | |
1721 template <> | |
1479 struct GenerateTraits<ui::LatencyInfo> { | 1722 struct GenerateTraits<ui::LatencyInfo> { |
1480 static bool Generate(ui::LatencyInfo* p, Generator* generator) { | 1723 static bool Generate(ui::LatencyInfo* p, Generator* generator) { |
1481 // TODO(inferno): Add param traits for |latency_components|. | 1724 // TODO(inferno): Add param traits for |latency_components|. |
1482 p->input_coordinates_size = static_cast<uint32>( | 1725 p->input_coordinates_size = static_cast<uint32>( |
1483 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1)); | 1726 RandInRange(ui::LatencyInfo::kMaxInputCoordinates + 1)); |
1484 if (!GenerateParamArray( | 1727 if (!GenerateParamArray( |
1485 &p->input_coordinates[0], p->input_coordinates_size, generator)) | 1728 &p->input_coordinates[0], p->input_coordinates_size, generator)) |
1486 return false; | 1729 return false; |
1487 if (!GenerateParam(&p->trace_id, generator)) | 1730 if (!GenerateParam(&p->trace_id, generator)) |
1488 return false; | 1731 return false; |
(...skipping 23 matching lines...) Expand all Loading... | |
1512 static bool Generate(url::Origin* p, Generator* generator) { | 1755 static bool Generate(url::Origin* p, Generator* generator) { |
1513 std::string origin; | 1756 std::string origin; |
1514 if (!GenerateParam(&origin, generator)) | 1757 if (!GenerateParam(&origin, generator)) |
1515 return false; | 1758 return false; |
1516 *p = url::Origin(origin); | 1759 *p = url::Origin(origin); |
1517 return true; | 1760 return true; |
1518 } | 1761 } |
1519 }; | 1762 }; |
1520 | 1763 |
1521 template <> | 1764 template <> |
1765 struct GenerateTraits<URLPattern> { | |
1766 static bool Generate(URLPattern* p, Generator* generator) { | |
1767 int valid_schemes; | |
1768 if (!GenerateParam(&valid_schemes, generator)) | |
1769 return false; | |
1770 *p = URLPattern(valid_schemes); | |
1771 return true; | |
1772 } | |
1773 }; | |
1774 | |
1775 template <> | |
1522 struct GenerateTraits<webrtc::DesktopSize> { | 1776 struct GenerateTraits<webrtc::DesktopSize> { |
1523 static bool Generate(webrtc::DesktopSize* p, Generator* generator) { | 1777 static bool Generate(webrtc::DesktopSize* p, Generator* generator) { |
1524 int32_t width; | 1778 int32_t width; |
1525 int32_t height; | 1779 int32_t height; |
1526 if (!GenerateParam(&width, generator)) | 1780 if (!GenerateParam(&width, generator)) |
1527 return false; | 1781 return false; |
1528 if (!GenerateParam(&height, generator)) | 1782 if (!GenerateParam(&height, generator)) |
1529 return false; | 1783 return false; |
1530 *p = webrtc::DesktopSize(width, height); | 1784 *p = webrtc::DesktopSize(width, height); |
1531 return true; | 1785 return true; |
(...skipping 27 matching lines...) Expand all Loading... | |
1559 return false; | 1813 return false; |
1560 if (!GenerateParam(&right, generator)) | 1814 if (!GenerateParam(&right, generator)) |
1561 return false; | 1815 return false; |
1562 if (!GenerateParam(&bottom, generator)) | 1816 if (!GenerateParam(&bottom, generator)) |
1563 return false; | 1817 return false; |
1564 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); | 1818 *p = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); |
1565 return true; | 1819 return true; |
1566 } | 1820 } |
1567 }; | 1821 }; |
1568 | 1822 |
1823 template <> | |
1824 struct GenerateTraits<webrtc::MouseCursor> { | |
1825 static bool Generate(webrtc::MouseCursor* p, Generator* generator) { | |
1826 webrtc::DesktopVector hotspot; | |
1827 if (!GenerateParam(&hotspot, generator)) | |
1828 return false; | |
1829 // Using a small size here to avoid OOM or overflow on image allocation. | |
1830 webrtc::DesktopSize size(RandInRange(100), RandInRange(100)); | |
1831 p->set_image(new webrtc::BasicDesktopFrame(size)); | |
1832 p->set_hotspot(hotspot); | |
1833 return true; | |
1834 } | |
1835 }; | |
1836 | |
1569 // Redefine macros to generate generating from traits declarations. | 1837 // Redefine macros to generate generating from traits declarations. |
1570 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. | 1838 // STRUCT declarations cause corresponding STRUCT_TRAITS declarations to occur. |
1571 #undef IPC_STRUCT_BEGIN | 1839 #undef IPC_STRUCT_BEGIN |
1572 #undef IPC_STRUCT_BEGIN_WITH_PARENT | 1840 #undef IPC_STRUCT_BEGIN_WITH_PARENT |
1573 #undef IPC_STRUCT_MEMBER | 1841 #undef IPC_STRUCT_MEMBER |
1574 #undef IPC_STRUCT_END | 1842 #undef IPC_STRUCT_END |
1575 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ | 1843 #define IPC_STRUCT_BEGIN_WITH_PARENT(struct_name, parent) \ |
1576 IPC_STRUCT_BEGIN(struct_name) | 1844 IPC_STRUCT_BEGIN(struct_name) |
1577 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name) | 1845 #define IPC_STRUCT_BEGIN(struct_name) IPC_STRUCT_TRAITS_BEGIN(struct_name) |
1578 #define IPC_STRUCT_MEMBER(type, name, ...) IPC_STRUCT_TRAITS_MEMBER(name) | 1846 #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; | 2039 return EXIT_FAILURE; |
1772 | 2040 |
1773 return EXIT_SUCCESS; | 2041 return EXIT_SUCCESS; |
1774 } | 2042 } |
1775 | 2043 |
1776 } // namespace ipc_fuzzer | 2044 } // namespace ipc_fuzzer |
1777 | 2045 |
1778 int main(int argc, char** argv) { | 2046 int main(int argc, char** argv) { |
1779 return ipc_fuzzer::GenerateMain(argc, argv); | 2047 return ipc_fuzzer::GenerateMain(argc, argv); |
1780 } | 2048 } |
OLD | NEW |