Changeset 175479 in webkit
- Timestamp:
- Nov 3, 2014, 11:36:16 AM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r175478 r175479 1 2014-11-03 Joseph Pecoraro <pecoraro@apple.com> 2 3 Web Inspector: ObjC Protocol Interfaces should throw exceptions for nil arguments 4 https://bugs.webkit.org/show_bug.cgi?id=138221 5 6 Reviewed by Timothy Hatcher. 7 8 The RWIProtocol APIs will now raise exceptions when: 9 10 - any properties are set on a type with a nil value or key (handled by RWIProtocolJSONObject) 11 - required parameters in type constructors have nil value 12 - required or optional command return parameters have nil values 13 - required or optional event parameters have nil values 14 15 The exceptions include the name of the field when possible. 16 17 * inspector/scripts/codegen/generate_objective_c.py: 18 (ObjCGenerator.is_type_objc_pointer_type): 19 Provide a quick check to see if type would be a pointer or not 20 in the ObjC API. Enums for example are not pointers in the API 21 because we manage converting them to/from strings. 22 23 * inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py: 24 (ObjectiveCConfigurationImplementationGenerator._generate_success_block_for_command): 25 * inspector/scripts/codegen/generate_objective_c_frontend_dispatcher_implementation.py: 26 (ObjectiveCFrontendDispatcherImplementationGenerator._generate_event): 27 * inspector/scripts/codegen/generate_objective_c_types_implementation.py: 28 (ObjectiveCTypesImplementationGenerator._generate_init_method_for_required_members): 29 (ObjectiveCTypesImplementationGenerator._generate_setter_for_member): 30 Throw exceptions when nil values are disallowed. 31 32 * inspector/scripts/tests/expected/commands-with-async-attribute.json-result: 33 * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result: 34 * inspector/scripts/tests/expected/events-with-optional-parameters.json-result: 35 * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result: 36 * inspector/scripts/tests/expected/type-declaration-object-type.json-result: 37 * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result: 38 Rebaseline tests which include the exception raise calls. 39 1 40 2014-11-03 Joseph Pecoraro <pecoraro@apple.com> 2 41 -
trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c.py
r175478 r175479 247 247 248 248 @staticmethod 249 def is_type_objc_pointer_type(_type): 250 if (isinstance(_type, AliasedType)): 251 _type = _type.aliased_type 252 if (isinstance(_type, PrimitiveType)): 253 return _type.raw_name() in ['string', 'array', 'any', 'object'] 254 if (isinstance(_type, EnumType)): 255 return False 256 if (isinstance(_type, ObjectType)): 257 return True 258 if (isinstance(_type, ArrayType)): 259 return True 260 return None 261 262 @staticmethod 249 263 def objc_class_for_type(_type): 250 264 if (isinstance(_type, AliasedType)): -
trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_backend_dispatcher_implementation.py
r175385 r175479 100 100 lines = [] 101 101 102 # FIXME: <https://webkit.org/b/138221> Web Inspector: ObjC Protocol Interfaces should throw exceptions for nil arguments103 104 102 if command.return_parameters: 105 103 success_block_parameters = [] … … 114 112 if command.return_parameters: 115 113 lines.append(' RefPtr<InspectorObject> resultObject = InspectorObject::create();') 114 115 required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters) 116 for parameter in required_pointer_parameters: 117 var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) 118 lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name)) 119 120 optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters) 121 for parameter in optional_pointer_parameters: 122 var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) 123 lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name)) 124 116 125 for parameter in command.return_parameters: 117 126 keyed_set_method = Generator.keyed_set_method_for_type(parameter.type) -
trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_frontend_dispatcher_implementation.py
r175385 r175479 102 102 lines.append(' return;') 103 103 lines.append('') 104 105 required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), event.event_parameters) 106 for parameter in required_pointer_parameters: 107 var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) 108 lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name)) 109 110 optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), event.event_parameters) 111 for parameter in optional_pointer_parameters: 112 var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) 113 lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name)) 114 115 if required_pointer_parameters or optional_pointer_parameters: 116 lines.append('') 117 104 118 lines.append(' RefPtr<InspectorObject> jsonMessage = InspectorObject::create();') 105 119 lines.append(' jsonMessage->setString(ASCIILiteral("method"), ASCIILiteral("%s.%s"));' % (domain.domain_name, event.event_name)) -
trunk/Source/JavaScriptCore/inspector/scripts/codegen/generate_objective_c_types_implementation.py
r175385 r175479 106 106 pairs.append('%s:(%s)%s' % (var_name, objc_type, var_name)) 107 107 pairs[0] = ucfirst(pairs[0]) 108 # FIXME: <https://webkit.org/b/138221> Web Inspector: ObjC Protocol Interfaces should throw exceptions for nil arguments109 108 lines = [] 110 109 lines.append('- (instancetype)initWith%s;' % ' '.join(pairs)) … … 114 113 lines.append(' return nil;') 115 114 lines.append('') 115 116 required_pointer_members = filter(lambda member: ObjCGenerator.is_type_objc_pointer_type(member.type), required_members) 117 if required_pointer_members: 118 for member in required_pointer_members: 119 var_name = ObjCGenerator.identifier_to_objc_identifier(member.member_name) 120 lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(%s, @"%s");' % (var_name, var_name)) 121 lines.append('') 122 116 123 for member in required_members: 117 124 var_name = ObjCGenerator.identifier_to_objc_identifier(member.member_name) 118 125 lines.append(' self.%s = %s;' % (var_name, var_name)) 126 119 127 lines.append('') 120 128 lines.append(' return self;') … … 127 135 setter_method = ObjCGenerator.objc_setter_method_for_member(declaration, member) 128 136 conversion_expression = ObjCGenerator.objc_to_protocol_expression_for_member(declaration, member, var_name) 129 # FIXME: <https://webkit.org/b/138221> Web Inspector: ObjC Protocol Interfaces should throw exceptions for nil arguments130 137 lines = [] 131 138 lines.append('- (void)set%s:(%s)%s' % (ucfirst(var_name), objc_type, var_name)) -
trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-async-attribute.json-result
r175478 r175479 1066 1066 id successCallback = ^(NSArray/*<NSString>*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, NSInteger *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, RWIProtocolDatabaseExecuteSQLSyncOptionalReturnValuesPrintColor *printColor) { 1067 1067 RefPtr<InspectorObject> resultObject = InspectorObject::create(); 1068 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(columnNames, @"columnNames"); 1069 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(notes, @"notes"); 1070 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(values, @"values"); 1071 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(payload, @"payload"); 1072 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(sqlError, @"sqlError"); 1068 1073 if (columnNames) 1069 1074 resultObject->setArray(ASCIILiteral("columnNames"), inspectorStringArray(*columnNames)); … … 1101 1106 id successCallback = ^(NSArray/*<NSString>*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, NSInteger *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, RWIProtocolDatabaseExecuteSQLAsyncOptionalReturnValuesPrintColor *printColor) { 1102 1107 RefPtr<InspectorObject> resultObject = InspectorObject::create(); 1108 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(columnNames, @"columnNames"); 1109 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(notes, @"notes"); 1110 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(values, @"values"); 1111 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(payload, @"payload"); 1112 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(sqlError, @"sqlError"); 1103 1113 if (columnNames) 1104 1114 resultObject->setArray(ASCIILiteral("columnNames"), inspectorStringArray(*columnNames)); … … 1136 1146 id successCallback = ^(NSArray/*<NSString>*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, NSInteger databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, RWIProtocolDatabaseExecuteSQLSyncPrintColor printColor) { 1137 1147 RefPtr<InspectorObject> resultObject = InspectorObject::create(); 1148 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(columnNames, @"columnNames"); 1149 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(notes, @"notes"); 1150 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(values, @"values"); 1151 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(payload, @"payload"); 1152 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(sqlError, @"sqlError"); 1138 1153 resultObject->setArray(ASCIILiteral("columnNames"), inspectorStringArray(columnNames)); 1139 1154 resultObject->setString(ASCIILiteral("notes"), notes); … … 1162 1177 id successCallback = ^(NSArray/*<NSString>*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, NSInteger databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, RWIProtocolDatabaseExecuteSQLAsyncPrintColor printColor) { 1163 1178 RefPtr<InspectorObject> resultObject = InspectorObject::create(); 1179 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(columnNames, @"columnNames"); 1180 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(notes, @"notes"); 1181 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(values, @"values"); 1182 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(payload, @"payload"); 1183 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(sqlError, @"sqlError"); 1164 1184 resultObject->setArray(ASCIILiteral("columnNames"), inspectorStringArray(columnNames)); 1165 1185 resultObject->setString(ASCIILiteral("notes"), notes); … … 1557 1577 return nil; 1558 1578 1579 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(message, @"message"); 1580 1559 1581 self.message = message; 1560 1582 self.code = code; -
trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result
r175478 r175479 955 955 id successCallback = ^(NSArray/*<NSString>*/ **columnNames, NSString **notes, double *timestamp, RWIProtocolJSONObject **values, RWIProtocolJSONObject **payload, NSInteger *databaseId, RWIProtocolDatabaseError **sqlError, RWIProtocolDatabasePrimaryColors *screenColor, RWIProtocolDatabaseExecuteAllOptionalParametersPrintColor *printColor) { 956 956 RefPtr<InspectorObject> resultObject = InspectorObject::create(); 957 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(columnNames, @"columnNames"); 958 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(notes, @"notes"); 959 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(values, @"values"); 960 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(payload, @"payload"); 961 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(sqlError, @"sqlError"); 957 962 if (columnNames) 958 963 resultObject->setArray(ASCIILiteral("columnNames"), inspectorStringArray(*columnNames)); … … 1015 1020 id successCallback = ^(NSArray/*<NSString>*/ *columnNames, NSString *notes, double timestamp, RWIProtocolJSONObject *values, RWIProtocolJSONObject *payload, NSInteger databaseId, RWIProtocolDatabaseError *sqlError, RWIProtocolDatabasePrimaryColors screenColor, RWIProtocolDatabaseExecuteNoOptionalParametersPrintColor printColor) { 1016 1021 RefPtr<InspectorObject> resultObject = InspectorObject::create(); 1022 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(columnNames, @"columnNames"); 1023 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(notes, @"notes"); 1024 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(values, @"values"); 1025 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(payload, @"payload"); 1026 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(sqlError, @"sqlError"); 1017 1027 resultObject->setArray(ASCIILiteral("columnNames"), inspectorStringArray(columnNames)); 1018 1028 resultObject->setString(ASCIILiteral("notes"), notes); … … 1415 1425 return nil; 1416 1426 1427 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(message, @"message"); 1428 1417 1429 self.message = message; 1418 1430 self.code = code; -
trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/events-with-optional-parameters.json-result
r175385 r175479 879 879 if (!frontendChannel) 880 880 return; 881 882 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(columnNames, @"columnNames"); 883 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(notes, @"notes"); 884 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(values, @"values"); 885 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(payload, @"payload"); 886 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(sqlError, @"sqlError"); 887 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(screenColor, @"screenColor"); 888 THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(printColor, @"printColor"); 881 889 882 890 RefPtr<InspectorObject> jsonMessage = InspectorObject::create(); … … 909 917 return; 910 918 919 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(columnNames, @"columnNames"); 920 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(notes, @"notes"); 921 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(values, @"values"); 922 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(payload, @"payload"); 923 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(sqlError, @"sqlError"); 924 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(screenColor, @"screenColor"); 925 THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(printColor, @"printColor"); 926 911 927 RefPtr<InspectorObject> jsonMessage = InspectorObject::create(); 912 928 jsonMessage->setString(ASCIILiteral("method"), ASCIILiteral("Database.didExecuteNoOptionalParameters")); … … 1036 1052 return nil; 1037 1053 1054 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(message, @"message"); 1055 1038 1056 self.message = message; 1039 1057 self.code = code; -
trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result
r175478 r175479 1111 1111 return nil; 1112 1112 1113 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(message, @"message"); 1114 1113 1115 self.message = message; 1114 1116 self.code = code; -
trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/type-declaration-object-type.json-result
r175385 r175479 1338 1338 return nil; 1339 1339 1340 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(message, @"message"); 1341 1340 1342 self.message = message; 1341 1343 self.code = code; … … 1437 1439 if (!self) 1438 1440 return nil; 1441 1442 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(columnNames, @"columnNames"); 1443 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(notes, @"notes"); 1444 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(values, @"values"); 1445 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(payload, @"payload"); 1446 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(error, @"error"); 1439 1447 1440 1448 self.columnNames = columnNames; … … 1518 1526 return nil; 1519 1527 1528 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(integer, @"integer"); 1529 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(array, @"array"); 1530 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(string, @"string"); 1531 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(value, @"value"); 1532 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(object, @"object"); 1533 1520 1534 self.integer = integer; 1521 1535 self.array = array; … … 1591 1605 if (!self) 1592 1606 return nil; 1607 1608 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(columnNames, @"columnNames"); 1609 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(notes, @"notes"); 1610 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(values, @"values"); 1611 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(payload, @"payload"); 1612 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(error, @"error"); 1593 1613 1594 1614 self.columnNames = columnNames; -
trunk/Source/JavaScriptCore/inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result
r175385 r175479 1266 1266 return nil; 1267 1267 1268 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(string, @"string"); 1269 THROW_EXCEPTION_FOR_REQUIRED_PROPERTY(tree, @"tree"); 1270 1268 1271 self.string = string; 1269 1272 self.number = number;
Note:
See TracChangeset
for help on using the changeset viewer.