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

Side by Side Diff: lib/DispatcherBase_cpp.template

Issue 2526603002: [inspector_protocol] Introduce protocol::Serializable (Closed)
Patch Set: minor fix Created 4 years 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 unified diff | Download patch
« no previous file with comments | « lib/Array_h.template ('k') | lib/DispatcherBase_h.template » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "DispatcherBase.h" 5 //#include "DispatcherBase.h"
6 //#include "Parser.h" 6 //#include "Parser.h"
7 7
8 {% for namespace in config.protocol.namespace %} 8 {% for namespace in config.protocol.namespace %}
9 namespace {{namespace}} { 9 namespace {{namespace}} {
10 {% endfor %} 10 {% endfor %}
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 return false; 130 return false;
131 131
132 if (!object->getString("method", result)) 132 if (!object->getString("method", result))
133 return false; 133 return false;
134 134
135 return true; 135 return true;
136 } 136 }
137 137
138 void DispatcherBase::sendResponse(int callId, const DispatchResponse& response, std::unique_ptr<protocol::DictionaryValue> result) 138 void DispatcherBase::sendResponse(int callId, const DispatchResponse& response, std::unique_ptr<protocol::DictionaryValue> result)
139 { 139 {
140 if (!m_frontendChannel)
141 return;
140 if (response.status() == DispatchResponse::kError) { 142 if (response.status() == DispatchResponse::kError) {
141 reportProtocolError(callId, response.errorCode(), response.errorMessage( ), nullptr); 143 reportProtocolError(callId, response.errorCode(), response.errorMessage( ), nullptr);
142 return; 144 return;
143 } 145 }
144 146 m_frontendChannel->sendProtocolResponse(callId, InternalResponse::createResp onse(callId, std::move(result)));
145 std::unique_ptr<protocol::DictionaryValue> responseMessage = DictionaryValue ::create();
146 responseMessage->setInteger("id", callId);
147 responseMessage->setObject("result", std::move(result));
148 if (m_frontendChannel)
149 m_frontendChannel->sendProtocolResponse(callId, responseMessage->toJSONS tring());
150 } 147 }
151 148
152 void DispatcherBase::sendResponse(int callId, const DispatchResponse& response) 149 void DispatcherBase::sendResponse(int callId, const DispatchResponse& response)
153 { 150 {
154 sendResponse(callId, response, DictionaryValue::create()); 151 sendResponse(callId, response, DictionaryValue::create());
155 } 152 }
156 153
154 namespace {
155
156 class ProtocolError : public Serializable {
157 public:
158 static std::unique_ptr<ProtocolError> createErrorResponse(int callId, Dispat chResponse::ErrorCode code, const String& errorMessage, ErrorSupport* errors)
159 {
160 std::unique_ptr<ProtocolError> protocolError(new ProtocolError(code, err orMessage));
161 protocolError->m_callId = callId;
162 protocolError->m_hasCallId = true;
163 if (errors && errors->hasErrors())
164 protocolError->m_data = errors->errors();
165 return protocolError;
166 }
167
168 static std::unique_ptr<ProtocolError> createErrorNotification(DispatchRespon se::ErrorCode code, const String& errorMessage)
169 {
170 return std::unique_ptr<ProtocolError>(new ProtocolError(code, errorMessa ge));
171 }
172
173 String serialize() override
174 {
175 std::unique_ptr<protocol::DictionaryValue> error = DictionaryValue::crea te();
176 error->setInteger("code", m_code);
177 error->setString("message", m_errorMessage);
178 if (m_data.length())
179 error->setString("data", m_data);
180 std::unique_ptr<protocol::DictionaryValue> message = DictionaryValue::cr eate();
181 message->setObject("error", std::move(error));
182 if (m_hasCallId)
183 message->setInteger("id", m_callId);
184 return message->serialize();
185 }
186
187 ~ProtocolError() override {}
188
189 private:
190 ProtocolError(DispatchResponse::ErrorCode code, const String& errorMessage)
191 : m_code(code)
192 , m_errorMessage(errorMessage)
193 {
194 }
195
196 DispatchResponse::ErrorCode m_code;
197 String m_errorMessage;
198 String m_data;
199 int m_callId = 0;
200 bool m_hasCallId = false;
201 };
202
203 } // namespace
204
157 static void reportProtocolErrorTo(FrontendChannel* frontendChannel, int callId, DispatchResponse::ErrorCode code, const String& errorMessage, ErrorSupport* erro rs) 205 static void reportProtocolErrorTo(FrontendChannel* frontendChannel, int callId, DispatchResponse::ErrorCode code, const String& errorMessage, ErrorSupport* erro rs)
158 { 206 {
159 if (!frontendChannel) 207 if (frontendChannel)
160 return; 208 frontendChannel->sendProtocolResponse(callId, ProtocolError::createError Response(callId, code, errorMessage, errors));
161 std::unique_ptr<protocol::DictionaryValue> error = DictionaryValue::create() ;
162 error->setInteger("code", code);
163 error->setString("message", errorMessage);
164 if (errors && errors->hasErrors())
165 error->setString("data", errors->errors());
166 std::unique_ptr<protocol::DictionaryValue> message = DictionaryValue::create ();
167 message->setObject("error", std::move(error));
168 message->setInteger("id", callId);
169 frontendChannel->sendProtocolResponse(callId, message->toJSONString());
170 } 209 }
171 210
172 static void reportProtocolErrorTo(FrontendChannel* frontendChannel, DispatchResp onse::ErrorCode code, const String& errorMessage) 211 static void reportProtocolErrorTo(FrontendChannel* frontendChannel, DispatchResp onse::ErrorCode code, const String& errorMessage)
173 { 212 {
174 if (!frontendChannel) 213 if (frontendChannel)
175 return; 214 frontendChannel->sendProtocolNotification(ProtocolError::createErrorNoti fication(code, errorMessage));
176 std::unique_ptr<protocol::DictionaryValue> error = DictionaryValue::create() ;
177 error->setInteger("code", code);
178 error->setString("message", errorMessage);
179 std::unique_ptr<protocol::DictionaryValue> message = DictionaryValue::create ();
180 message->setObject("error", std::move(error));
181 frontendChannel->sendProtocolNotification(message->toJSONString());
182 } 215 }
183 216
184 void DispatcherBase::reportProtocolError(int callId, DispatchResponse::ErrorCode code, const String& errorMessage, ErrorSupport* errors) 217 void DispatcherBase::reportProtocolError(int callId, DispatchResponse::ErrorCode code, const String& errorMessage, ErrorSupport* errors)
185 { 218 {
186 reportProtocolErrorTo(m_frontendChannel, callId, code, errorMessage, errors) ; 219 reportProtocolErrorTo(m_frontendChannel, callId, code, errorMessage, errors) ;
187 } 220 }
188 221
189 void DispatcherBase::clearFrontend() 222 void DispatcherBase::clearFrontend()
190 { 223 {
191 m_frontendChannel = nullptr; 224 m_frontendChannel = nullptr;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 if (m_fallThroughForNotFound) 289 if (m_fallThroughForNotFound)
257 return DispatchResponse::kFallThrough; 290 return DispatchResponse::kFallThrough;
258 reportProtocolErrorTo(m_frontendChannel, callId, DispatchResponse::kMeth odNotFound, "'" + method + "' wasn't found", nullptr); 291 reportProtocolErrorTo(m_frontendChannel, callId, DispatchResponse::kMeth odNotFound, "'" + method + "' wasn't found", nullptr);
259 return DispatchResponse::kError; 292 return DispatchResponse::kError;
260 } 293 }
261 return it->second->dispatch(callId, method, std::move(messageObject)); 294 return it->second->dispatch(callId, method, std::move(messageObject));
262 } 295 }
263 296
264 UberDispatcher::~UberDispatcher() = default; 297 UberDispatcher::~UberDispatcher() = default;
265 298
299 // static
300 std::unique_ptr<InternalResponse> InternalResponse::createResponse(int callId, s td::unique_ptr<Serializable> params)
301 {
302 return std::unique_ptr<InternalResponse>(new InternalResponse(callId, String (), std::move(params)));
303 }
304
305 // static
306 std::unique_ptr<InternalResponse> InternalResponse::createNotification(const Str ing& notification, std::unique_ptr<Serializable> params)
307 {
308 return std::unique_ptr<InternalResponse>(new InternalResponse(0, notificatio n, std::move(params)));
309 }
310
311 String InternalResponse::serialize()
312 {
313 std::unique_ptr<DictionaryValue> result = DictionaryValue::create();
314 std::unique_ptr<Serializable> params(m_params ? std::move(m_params) : Dictio naryValue::create());
315 if (m_notification.length()) {
316 result->setString("method", m_notification);
317 result->setValue("params", SerializedValue::create(params->serialize())) ;
318 } else {
319 result->setInteger("id", m_callId);
320 result->setValue("result", SerializedValue::create(params->serialize())) ;
321 }
322 return result->serialize();
323 }
324
325 InternalResponse::InternalResponse(int callId, const String& notification, std:: unique_ptr<Serializable> params)
326 : m_callId(callId)
327 , m_notification(notification)
328 , m_params(params ? std::move(params) : nullptr)
329 {
330 }
331
266 {% for namespace in config.protocol.namespace %} 332 {% for namespace in config.protocol.namespace %}
267 } // namespace {{namespace}} 333 } // namespace {{namespace}}
268 {% endfor %} 334 {% endfor %}
OLDNEW
« no previous file with comments | « lib/Array_h.template ('k') | lib/DispatcherBase_h.template » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698