Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: third_party/inspector_protocol/lib/DispatcherBase_cpp.template

Issue 2463673004: [inspector_protocol] Support fall through. (Closed)
Patch Set: example domain converted Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/inspector_protocol/lib/DispatcherBase_cpp.template
diff --git a/third_party/inspector_protocol/lib/DispatcherBase_cpp.template b/third_party/inspector_protocol/lib/DispatcherBase_cpp.template
index 76f77aae7ece7871d2db5e64aa626ea8f308a208..c4f36a5fd31b286d8c9ad99b328b65017571efa5 100644
--- a/third_party/inspector_protocol/lib/DispatcherBase_cpp.template
+++ b/third_party/inspector_protocol/lib/DispatcherBase_cpp.template
@@ -10,7 +10,45 @@ namespace {{namespace}} {
{% endfor %}
// static
-const char DispatcherBase::kInvalidRequest[] = "Invalid request";
+DispatchResponse DispatchResponse::OK()
+{
+ DispatchResponse result;
+ result.m_status = kSuccess;
+ result.m_errorCode = kParseError;
+ return result;
+}
+
+// static
+DispatchResponse DispatchResponse::Error(const String& error)
+{
+ DispatchResponse result;
+ result.m_status = kError;
+ result.m_errorCode = kServerError;
+ result.m_errorMessage = error;
+ return result;
+}
+
+// static
+DispatchResponse DispatchResponse::InternalError()
+{
+ DispatchResponse result;
+ result.m_status = kError;
+ result.m_errorCode = kInternalError;
+ result.m_errorMessage = "Internal error";
+ return result;
+}
+
+// static
+DispatchResponse DispatchResponse::FallThrough()
+{
+ DispatchResponse result;
+ result.m_status = kFallThrough;
+ result.m_errorCode = kParseError;
+ return result;
+}
+
+// static
+const char DispatcherBase::kInvalidParamsString[] = "Invalid parameters";
DispatcherBase::WeakPtr::WeakPtr(DispatcherBase* dispatcher) : m_dispatcher(dispatcher) { }
@@ -31,11 +69,11 @@ void DispatcherBase::Callback::dispose()
m_backendImpl = nullptr;
}
-void DispatcherBase::Callback::sendIfActive(std::unique_ptr<protocol::DictionaryValue> partialMessage, const ErrorString& invocationError)
+void DispatcherBase::Callback::sendIfActive(std::unique_ptr<protocol::DictionaryValue> partialMessage, const DispatchResponse& response)
{
if (!m_backendImpl || !m_backendImpl->get())
return;
- m_backendImpl->get()->sendResponse(m_callId, invocationError, nullptr, std::move(partialMessage));
+ m_backendImpl->get()->sendResponse(m_callId, response, std::move(partialMessage));
m_backendImpl = nullptr;
}
@@ -64,10 +102,10 @@ bool DispatcherBase::getCommandName(const String& message, String* result)
return true;
}
-void DispatcherBase::sendResponse(int callId, const ErrorString& invocationError, ErrorSupport* errors, std::unique_ptr<protocol::DictionaryValue> result)
+void DispatcherBase::sendResponse(int callId, const DispatchResponse& response, std::unique_ptr<protocol::DictionaryValue> result)
{
- if (invocationError.length() || (errors && errors->hasErrors())) {
- reportProtocolError(callId, ServerError, invocationError, errors);
+ if (response.status() == DispatchResponse::kError) {
+ reportProtocolError(callId, response.errorCode(), response.errorMessage(), nullptr);
return;
}
@@ -78,24 +116,18 @@ void DispatcherBase::sendResponse(int callId, const ErrorString& invocationError
m_frontendChannel->sendProtocolResponse(callId, responseMessage->toJSONString());
}
-void DispatcherBase::sendResponse(int callId, const ErrorString& invocationError, std::unique_ptr<protocol::DictionaryValue> result)
+void DispatcherBase::sendResponse(int callId, const DispatchResponse& response)
{
- sendResponse(callId, invocationError, nullptr, std::move(result));
+ sendResponse(callId, response, DictionaryValue::create());
}
-void DispatcherBase::sendResponse(int callId, const ErrorString& invocationError)
-{
- sendResponse(callId, invocationError, nullptr, DictionaryValue::create());
-}
-
-static void reportProtocolErrorTo(FrontendChannel* frontendChannel, int callId, DispatcherBase::CommonErrorCode code, const String& errorMessage, ErrorSupport* errors)
+static void reportProtocolErrorTo(FrontendChannel* frontendChannel, int callId, DispatchResponse::ErrorCode code, const String& errorMessage, ErrorSupport* errors)
{
if (!frontendChannel)
return;
std::unique_ptr<protocol::DictionaryValue> error = DictionaryValue::create();
error->setInteger("code", code);
error->setString("message", errorMessage);
- DCHECK(error);
if (errors && errors->hasErrors())
error->setString("data", errors->errors());
std::unique_ptr<protocol::DictionaryValue> message = DictionaryValue::create();
@@ -104,7 +136,19 @@ static void reportProtocolErrorTo(FrontendChannel* frontendChannel, int callId,
frontendChannel->sendProtocolResponse(callId, message->toJSONString());
}
-void DispatcherBase::reportProtocolError(int callId, CommonErrorCode code, const String& errorMessage, ErrorSupport* errors)
+static void reportProtocolErrorTo(FrontendChannel* frontendChannel, DispatchResponse::ErrorCode code, const String& errorMessage)
+{
+ if (!frontendChannel)
+ return;
+ std::unique_ptr<protocol::DictionaryValue> error = DictionaryValue::create();
+ error->setInteger("code", code);
+ error->setString("message", errorMessage);
+ std::unique_ptr<protocol::DictionaryValue> message = DictionaryValue::create();
+ message->setObject("error", std::move(error));
+ frontendChannel->sendProtocolNotification(message->toJSONString());
+}
+
+void DispatcherBase::reportProtocolError(int callId, DispatchResponse::ErrorCode code, const String& errorMessage, ErrorSupport* errors)
{
reportProtocolErrorTo(m_frontendChannel, callId, code, errorMessage, errors);
}
@@ -132,38 +176,46 @@ void UberDispatcher::registerBackend(const String& name, std::unique_ptr<protoco
m_dispatchers[name] = std::move(dispatcher);
}
-void UberDispatcher::dispatch(std::unique_ptr<Value> parsedMessage)
+DispatchResponse::Status UberDispatcher::dispatch(std::unique_ptr<Value> parsedMessage)
{
- if (!parsedMessage)
- return;
+ if (!parsedMessage) {
+ reportProtocolErrorTo(m_frontendChannel, DispatchResponse::kParseError, "Message must be a valid JSON");
+ return DispatchResponse::kError;
+ }
std::unique_ptr<protocol::DictionaryValue> messageObject = DictionaryValue::cast(std::move(parsedMessage));
- if (!messageObject)
- return;
+ if (!messageObject) {
+ reportProtocolErrorTo(m_frontendChannel, DispatchResponse::kInvalidRequest, "Message must be an object");
+ return DispatchResponse::kError;
+ }
int callId = 0;
protocol::Value* callIdValue = messageObject->get("id");
bool success = callIdValue && callIdValue->asInteger(&callId);
- if (!success)
- return;
+ if (!success) {
+ reportProtocolErrorTo(m_frontendChannel, DispatchResponse::kInvalidRequest, "Message must have integer 'id' porperty");
+ return DispatchResponse::kError;
+ }
protocol::Value* methodValue = messageObject->get("method");
String method;
success = methodValue && methodValue->asString(&method);
- if (!success)
- return;
+ if (!success) {
+ reportProtocolErrorTo(m_frontendChannel, callId, DispatchResponse::kInvalidRequest, "Message must have string 'method' porperty", nullptr);
+ return DispatchResponse::kError;
+ }
size_t dotIndex = method.find(".");
if (dotIndex == StringUtil::kNotFound) {
- reportProtocolErrorTo(m_frontendChannel, callId, DispatcherBase::MethodNotFound, "'" + method + "' wasn't found", nullptr);
- return;
+ reportProtocolErrorTo(m_frontendChannel, callId, DispatchResponse::kMethodNotFound, "'" + method + "' wasn't found", nullptr);
+ return DispatchResponse::kError;
}
String domain = StringUtil::substring(method, 0, dotIndex);
auto it = m_dispatchers.find(domain);
if (it == m_dispatchers.end()) {
- reportProtocolErrorTo(m_frontendChannel, callId, DispatcherBase::MethodNotFound, "'" + method + "' wasn't found", nullptr);
- return;
+ reportProtocolErrorTo(m_frontendChannel, callId, DispatchResponse::kMethodNotFound, "'" + method + "' wasn't found", nullptr);
+ return DispatchResponse::kError;
}
- it->second->dispatch(callId, method, std::move(messageObject));
+ return it->second->dispatch(callId, method, std::move(messageObject));
}
UberDispatcher::~UberDispatcher() = default;

Powered by Google App Engine
This is Rietveld 408576698