Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2013 Google Inc. All rights reserved. | 1 # Copyright (c) 2013 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 37 void flush() { m_inspectorFrontendChannel->flush(); } | 37 void flush() { m_inspectorFrontendChannel->flush(); } |
| 38 private: | 38 private: |
| 39 InspectorFrontendChannel* m_inspectorFrontendChannel; | 39 InspectorFrontendChannel* m_inspectorFrontendChannel; |
| 40 }; | 40 }; |
| 41 | 41 |
| 42 $domainClassName* $domainFieldName() { return &m_$domainFieldName; } | 42 $domainClassName* $domainFieldName() { return &m_$domainFieldName; } |
| 43 | 43 |
| 44 """) | 44 """) |
| 45 | 45 |
| 46 backend_method = ( | 46 backend_method = ( |
| 47 """void InspectorBackendDispatcherImpl::${domainName}_$methodName(long callId, J SONObject*$requestMessageObject) | 47 """void InspectorBackendDispatcherImpl::${domainName}_$methodName(long callId, J SONObject*$requestMessageObject, JSONArray* protocolErrors) |
| 48 { | 48 { |
| 49 RefPtr<JSONArray> protocolErrors = JSONArray::create(); | |
|
yurys
2014/06/10 07:36:19
I'd rather we left previous implementation where p
| |
| 50 | |
| 51 if (!$agentField) | 49 if (!$agentField) |
| 52 protocolErrors->pushString("${domainName} handler is not available."); | 50 protocolErrors->pushString("${domainName} handler is not available."); |
| 53 $methodOutCode | 51 $methodCode |
| 54 $methodInCode | 52 if (protocolErrors->length()) { |
| 55 RefPtr<JSONObject> result = JSONObject::create(); | 53 reportProtocolError(&callId, InvalidParams, String::format(InvalidParams FormatString, commandName($commandNameIndex)), protocolErrors); |
| 56 RefPtr<JSONValue> resultErrorData; | 54 return; |
| 55 } | |
| 57 ErrorString error; | 56 ErrorString error; |
| 58 if (!protocolErrors->length()) { | 57 $agentField->$methodName(&error$agentCallParams); |
| 59 $agentField->$methodName(&error$agentCallParams); | 58 $responseCook |
| 60 | 59 sendResponse(callId, $sendResponseCallParams); |
| 61 $errorCook${responseCook} | |
| 62 } | |
| 63 sendResponse(callId, result, commandName($commandNameIndex), protocolErrors, error, resultErrorData); | |
| 64 } | 60 } |
| 65 """) | 61 """) |
| 66 | 62 |
| 67 frontend_method = ("""void InspectorFrontend::$domainName::$eventName($parameter s) | 63 frontend_method = ("""void InspectorFrontend::$domainName::$eventName($parameter s) |
| 68 { | 64 { |
| 69 RefPtr<JSONObject> jsonMessage = JSONObject::create(); | 65 RefPtr<JSONObject> jsonMessage = JSONObject::create(); |
| 70 jsonMessage->setString("method", "$domainName.$eventName"); | 66 jsonMessage->setString("method", "$domainName.$eventName"); |
| 71 $code if (m_inspectorFrontendChannel) | 67 $code if (m_inspectorFrontendChannel) |
| 72 m_inspectorFrontendChannel->sendMessageToFrontend(jsonMessage.release()) ; | 68 m_inspectorFrontendChannel->sendMessageToFrontend(jsonMessage.release()) ; |
| 73 } | 69 } |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 240 InspectorBackendDispatcherImpl(InspectorFrontendChannel* inspectorFrontendCh annel) | 236 InspectorBackendDispatcherImpl(InspectorFrontendChannel* inspectorFrontendCh annel) |
| 241 : m_inspectorFrontendChannel(inspectorFrontendChannel) | 237 : m_inspectorFrontendChannel(inspectorFrontendChannel) |
| 242 $constructorInit | 238 $constructorInit |
| 243 { } | 239 { } |
| 244 | 240 |
| 245 virtual void clearFrontend() { m_inspectorFrontendChannel = 0; } | 241 virtual void clearFrontend() { m_inspectorFrontendChannel = 0; } |
| 246 virtual void dispatch(const String& message); | 242 virtual void dispatch(const String& message); |
| 247 virtual void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorMessage, PassRefPtr<JSONValue> data) const; | 243 virtual void reportProtocolError(const long* const callId, CommonErrorCode, const String& errorMessage, PassRefPtr<JSONValue> data) const; |
| 248 using InspectorBackendDispatcher::reportProtocolError; | 244 using InspectorBackendDispatcher::reportProtocolError; |
| 249 | 245 |
| 250 void sendResponse(long callId, PassRefPtr<JSONObject> result, const ErrorStr ing&invocationError, PassRefPtr<JSONValue> errorData); | 246 void sendResponse(long callId, const ErrorString& invocationError, PassRefPt r<JSONValue> errorData, PassRefPtr<JSONObject> result); |
| 251 bool isActive() { return m_inspectorFrontendChannel; } | 247 bool isActive() { return m_inspectorFrontendChannel; } |
| 252 | 248 |
| 253 $setters | 249 $setters |
| 254 private: | 250 private: |
| 255 $methodDeclarations | 251 $methodDeclarations |
| 256 | 252 |
| 257 InspectorFrontendChannel* m_inspectorFrontendChannel; | 253 InspectorFrontendChannel* m_inspectorFrontendChannel; |
| 258 $fieldDeclarations | 254 $fieldDeclarations |
| 259 | 255 |
| 260 template<typename R, typename V, typename V0> | 256 template<typename R, typename V, typename V0> |
| 261 static R getPropertyValueImpl(JSONObject* object, const char* name, bool* va lueFound, JSONArray* protocolErrors, V0 initial_value, bool (*as_method)(JSONVal ue*, V*), const char* type_name); | 257 static R getPropertyValueImpl(JSONObject* object, const char* name, bool* va lueFound, JSONArray* protocolErrors, V0 initial_value, bool (*as_method)(JSONVal ue*, V*), const char* type_name); |
| 262 | 258 |
| 263 static int getInt(JSONObject* object, const char* name, bool* valueFound, JS ONArray* protocolErrors); | 259 static int getInt(JSONObject* object, const char* name, bool* valueFound, JS ONArray* protocolErrors); |
| 264 static double getDouble(JSONObject* object, const char* name, bool* valueFou nd, JSONArray* protocolErrors); | 260 static double getDouble(JSONObject* object, const char* name, bool* valueFou nd, JSONArray* protocolErrors); |
| 265 static String getString(JSONObject* object, const char* name, bool* valueFou nd, JSONArray* protocolErrors); | 261 static String getString(JSONObject* object, const char* name, bool* valueFou nd, JSONArray* protocolErrors); |
| 266 static bool getBoolean(JSONObject* object, const char* name, bool* valueFoun d, JSONArray* protocolErrors); | 262 static bool getBoolean(JSONObject* object, const char* name, bool* valueFoun d, JSONArray* protocolErrors); |
| 267 static PassRefPtr<JSONObject> getObject(JSONObject* object, const char* name , bool* valueFound, JSONArray* protocolErrors); | 263 static PassRefPtr<JSONObject> getObject(JSONObject* object, const char* name , bool* valueFound, JSONArray* protocolErrors); |
| 268 static PassRefPtr<JSONArray> getArray(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors); | 264 static PassRefPtr<JSONArray> getArray(JSONObject* object, const char* name, bool* valueFound, JSONArray* protocolErrors); |
| 269 | 265 |
| 270 void sendResponse(long callId, PassRefPtr<JSONObject> result, const char* co mmandName, PassRefPtr<JSONArray> protocolErrors, ErrorString invocationError, Pa ssRefPtr<JSONValue> errorData); | 266 void sendResponse(long callId, ErrorString invocationError, PassRefPtr<JSONO bject> result) |
| 267 { | |
| 268 sendResponse(callId, invocationError, RefPtr<JSONValue>(), result); | |
| 269 } | |
| 270 void sendResponse(long callId, ErrorString invocationError) | |
| 271 { | |
| 272 sendResponse(callId, invocationError, RefPtr<JSONValue>(), JSONObject::c reate()); | |
| 273 } | |
| 274 static const char InvalidParamsFormatString[]; | |
| 275 }; | |
| 271 | 276 |
| 272 }; | 277 const char InspectorBackendDispatcherImpl::InvalidParamsFormatString[] = "Some a rguments of method '%s' can't be processed"; |
| 273 | 278 |
| 274 $methods | 279 $methods |
| 275 | 280 |
| 276 PassRefPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(Inspec torFrontendChannel* inspectorFrontendChannel) | 281 PassRefPtr<InspectorBackendDispatcher> InspectorBackendDispatcher::create(Inspec torFrontendChannel* inspectorFrontendChannel) |
| 277 { | 282 { |
| 278 return adoptRef(new InspectorBackendDispatcherImpl(inspectorFrontendChannel) ); | 283 return adoptRef(new InspectorBackendDispatcherImpl(inspectorFrontendChannel) ); |
| 279 } | 284 } |
| 280 | 285 |
| 281 | 286 |
| 282 void InspectorBackendDispatcherImpl::dispatch(const String& message) | 287 void InspectorBackendDispatcherImpl::dispatch(const String& message) |
| 283 { | 288 { |
| 284 RefPtr<InspectorBackendDispatcher> protect = this; | 289 RefPtr<InspectorBackendDispatcher> protect = this; |
| 285 typedef void (InspectorBackendDispatcherImpl::*CallHandler)(long callId, JSO NObject* messageObject); | 290 typedef void (InspectorBackendDispatcherImpl::*CallHandler)(long callId, JSO NObject* messageObject, JSONArray* protocolErrors); |
| 286 typedef HashMap<String, CallHandler> DispatchMap; | 291 typedef HashMap<String, CallHandler> DispatchMap; |
| 287 DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, ); | 292 DEFINE_STATIC_LOCAL(DispatchMap, dispatchMap, ); |
| 288 long callId = 0; | 293 long callId = 0; |
| 289 | 294 |
| 290 if (dispatchMap.isEmpty()) { | 295 if (dispatchMap.isEmpty()) { |
| 291 static const CallHandler handlers[] = { | 296 static const CallHandler handlers[] = { |
| 292 $messageHandlers | 297 $messageHandlers |
| 293 }; | 298 }; |
| 294 for (size_t i = 0; i < kMethodNamesEnumSize; ++i) | 299 for (size_t i = 0; i < kMethodNamesEnumSize; ++i) |
| 295 dispatchMap.add(commandName(static_cast<MethodNames>(i)), handlers[i ]); | 300 dispatchMap.add(commandName(static_cast<MethodNames>(i)), handlers[i ]); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 329 reportProtocolError(&callId, InvalidRequest, "The type of 'method' prope rty must be string"); | 334 reportProtocolError(&callId, InvalidRequest, "The type of 'method' prope rty must be string"); |
| 330 return; | 335 return; |
| 331 } | 336 } |
| 332 | 337 |
| 333 HashMap<String, CallHandler>::iterator it = dispatchMap.find(method); | 338 HashMap<String, CallHandler>::iterator it = dispatchMap.find(method); |
| 334 if (it == dispatchMap.end()) { | 339 if (it == dispatchMap.end()) { |
| 335 reportProtocolError(&callId, MethodNotFound, "'" + method + "' wasn't fo und"); | 340 reportProtocolError(&callId, MethodNotFound, "'" + method + "' wasn't fo und"); |
| 336 return; | 341 return; |
| 337 } | 342 } |
| 338 | 343 |
| 339 ((*this).*it->value)(callId, messageObject.get()); | 344 RefPtr<JSONArray> protocolErrors = JSONArray::create(); |
| 345 ((*this).*it->value)(callId, messageObject.get(), protocolErrors.get()); | |
| 340 } | 346 } |
| 341 | 347 |
| 342 void InspectorBackendDispatcherImpl::sendResponse(long callId, PassRefPtr<JSONOb ject> result, const char* commandName, PassRefPtr<JSONArray> protocolErrors, Err orString invocationError, PassRefPtr<JSONValue> errorData) | 348 void InspectorBackendDispatcherImpl::sendResponse(long callId, const ErrorString & invocationError, PassRefPtr<JSONValue> errorData, PassRefPtr<JSONObject> resul t) |
| 343 { | |
| 344 if (protocolErrors->length()) { | |
| 345 String errorMessage = String::format("Some arguments of method '%s' can' t be processed", commandName); | |
| 346 reportProtocolError(&callId, InvalidParams, errorMessage, protocolErrors ); | |
| 347 return; | |
| 348 } | |
| 349 sendResponse(callId, result, invocationError, errorData); | |
| 350 } | |
| 351 | |
| 352 void InspectorBackendDispatcherImpl::sendResponse(long callId, PassRefPtr<JSONOb ject> result, const ErrorString& invocationError, PassRefPtr<JSONValue> errorDat a) | |
| 353 { | 349 { |
| 354 if (invocationError.length()) { | 350 if (invocationError.length()) { |
| 355 reportProtocolError(&callId, ServerError, invocationError, errorData); | 351 reportProtocolError(&callId, ServerError, invocationError, errorData); |
| 356 return; | 352 return; |
| 357 } | 353 } |
| 358 | 354 |
| 359 RefPtr<JSONObject> responseMessage = JSONObject::create(); | 355 RefPtr<JSONObject> responseMessage = JSONObject::create(); |
| 360 responseMessage->setNumber("id", callId); | 356 responseMessage->setNumber("id", callId); |
| 361 responseMessage->setObject("result", result); | 357 responseMessage->setObject("result", result); |
| 362 if (m_inspectorFrontendChannel) | 358 if (m_inspectorFrontendChannel) |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 501 | 497 |
| 502 bool InspectorBackendDispatcher::CallbackBase::isActive() | 498 bool InspectorBackendDispatcher::CallbackBase::isActive() |
| 503 { | 499 { |
| 504 return !m_alreadySent && m_backendImpl->isActive(); | 500 return !m_alreadySent && m_backendImpl->isActive(); |
| 505 } | 501 } |
| 506 | 502 |
| 507 void InspectorBackendDispatcher::CallbackBase::sendIfActive(PassRefPtr<JSONObjec t> partialMessage, const ErrorString& invocationError, PassRefPtr<JSONValue> err orData) | 503 void InspectorBackendDispatcher::CallbackBase::sendIfActive(PassRefPtr<JSONObjec t> partialMessage, const ErrorString& invocationError, PassRefPtr<JSONValue> err orData) |
| 508 { | 504 { |
| 509 if (m_alreadySent) | 505 if (m_alreadySent) |
| 510 return; | 506 return; |
| 511 m_backendImpl->sendResponse(m_id, partialMessage, invocationError, errorData ); | 507 m_backendImpl->sendResponse(m_id, invocationError, errorData, partialMessage ); |
| 512 m_alreadySent = true; | 508 m_alreadySent = true; |
| 513 } | 509 } |
| 514 | 510 |
| 515 } // namespace WebCore | 511 } // namespace WebCore |
| 516 | 512 |
| 517 """) | 513 """) |
| 518 | 514 |
| 519 frontend_cpp = ( | 515 frontend_cpp = ( |
| 520 """ | 516 """ |
| 521 | 517 |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 894 | 890 |
| 895 #endif // $validatorIfdefName | 891 #endif // $validatorIfdefName |
| 896 | 892 |
| 897 } // namespace WebCore | 893 } // namespace WebCore |
| 898 | 894 |
| 899 """) | 895 """) |
| 900 | 896 |
| 901 param_container_access_code = """ | 897 param_container_access_code = """ |
| 902 RefPtr<JSONObject> paramsContainer = requestMessageObject->getObject("params "); | 898 RefPtr<JSONObject> paramsContainer = requestMessageObject->getObject("params "); |
| 903 JSONObject* paramsContainerPtr = paramsContainer.get(); | 899 JSONObject* paramsContainerPtr = paramsContainer.get(); |
| 904 JSONArray* protocolErrorsPtr = protocolErrors.get(); | |
| 905 """ | 900 """ |
| 906 | 901 |
| 907 class_binding_builder_part_1 = ( | 902 class_binding_builder_part_1 = ( |
| 908 """ AllFieldsSet = %s | 903 """ AllFieldsSet = %s |
| 909 }; | 904 }; |
| 910 | 905 |
| 911 template<int STATE> | 906 template<int STATE> |
| 912 class Builder { | 907 class Builder { |
| 913 private: | 908 private: |
| 914 RefPtr<JSONObject> m_result; | 909 RefPtr<JSONObject> m_result; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 951 }; | 946 }; |
| 952 | 947 |
| 953 """) | 948 """) |
| 954 | 949 |
| 955 class_binding_builder_part_4 = ( | 950 class_binding_builder_part_4 = ( |
| 956 """ static Builder<NoFieldsSet> create() | 951 """ static Builder<NoFieldsSet> create() |
| 957 { | 952 { |
| 958 return Builder<NoFieldsSet>(JSONObject::create()); | 953 return Builder<NoFieldsSet>(JSONObject::create()); |
| 959 } | 954 } |
| 960 """) | 955 """) |
| OLD | NEW |