| Index: third_party/WebKit/Source/platform/inspector_protocol/Dispatcher_cpp.template
|
| diff --git a/third_party/WebKit/Source/platform/inspector_protocol/Dispatcher_cpp.template b/third_party/WebKit/Source/platform/inspector_protocol/Dispatcher_cpp.template
|
| deleted file mode 100644
|
| index 4f87072e208c4b02c97d94d42714fdf7a5a1c798..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/platform/inspector_protocol/Dispatcher_cpp.template
|
| +++ /dev/null
|
| @@ -1,364 +0,0 @@
|
| -// This file is generated
|
| -
|
| -// Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "platform/inspector_protocol/{{class_name}}.h"
|
| -
|
| -#include "platform/inspector_protocol/Collections.h"
|
| -#include "platform/inspector_protocol/FrontendChannel.h"
|
| -#include "platform/inspector_protocol/Parser.h"
|
| -
|
| -namespace blink {
|
| -namespace protocol {
|
| -
|
| -using protocol::Maybe;
|
| -
|
| -class DispatcherImpl;
|
| -
|
| -class DispatcherImplWeakPtr {
|
| -public:
|
| - DispatcherImplWeakPtr(DispatcherImpl* dispatcher) : m_dispatcher(dispatcher) { }
|
| - ~DispatcherImplWeakPtr();
|
| - DispatcherImpl* get() { return m_dispatcher; }
|
| - void dispose() { m_dispatcher = nullptr; }
|
| -private:
|
| - DispatcherImpl* m_dispatcher;
|
| -};
|
| -
|
| -class DispatcherImpl : public Dispatcher {
|
| -public:
|
| - DispatcherImpl(FrontendChannel* frontendChannel)
|
| - : m_frontendChannel(frontendChannel)
|
| -{% for domain in api.domains %}
|
| - , m_{{domain.domain | lower}}Agent(0)
|
| -{% endfor %}
|
| - {
|
| -{% for domain in api.domains %}
|
| - {% for command in domain.commands %}
|
| - {% if "redirect" in command %}{% continue %}{% endif %}
|
| - {% if "handlers" in command and not ("renderer" in command["handlers"]) %}{% continue %}{% endif %}
|
| - m_dispatchMap.set("{{domain.domain}}.{{command.name}}", &DispatcherImpl::{{domain.domain}}_{{command.name}});
|
| - {% endfor %}
|
| -{% endfor %}
|
| -
|
| - // Initialize common errors.
|
| - m_commonErrors.resize(LastEntry);
|
| - m_commonErrors[ParseError] = -32700;
|
| - m_commonErrors[InvalidRequest] = -32600;
|
| - m_commonErrors[MethodNotFound] = -32601;
|
| - m_commonErrors[InvalidParams] = -32602;
|
| - m_commonErrors[InternalError] = -32603;
|
| - m_commonErrors[ServerError] = -32000;
|
| - }
|
| -
|
| - ~DispatcherImpl() { clearFrontend(); }
|
| -
|
| - virtual void clearFrontend()
|
| - {
|
| - m_frontendChannel = nullptr;
|
| - for (auto& weak : m_weakPtrs)
|
| - weak.first->dispose();
|
| - m_weakPtrs.clear();
|
| - }
|
| -
|
| - std::unique_ptr<DispatcherImplWeakPtr> weakPtr()
|
| - {
|
| - std::unique_ptr<DispatcherImplWeakPtr> weak(new DispatcherImplWeakPtr(this));
|
| - m_weakPtrs.add(weak.get());
|
| - return weak;
|
| - }
|
| -
|
| - virtual void dispatch(const String16& message);
|
| - virtual void reportProtocolError(int callId, CommonErrorCode, const String16& errorMessage, ErrorSupport* errors) const;
|
| - using Dispatcher::reportProtocolError;
|
| -
|
| - void sendResponse(int callId, const ErrorString& invocationError, ErrorSupport* errors, std::unique_ptr<protocol::DictionaryValue> result);
|
| -
|
| -{% for domain in api.domains %}
|
| - virtual void registerAgent(blink::protocol::{{domain.domain}}::Backend* agent) { DCHECK(!m_{{domain.domain | lower}}Agent); m_{{domain.domain | lower}}Agent = agent; }
|
| -{% endfor %}
|
| -
|
| -private:
|
| - friend class DispatcherCallbackBase;
|
| - friend class DispatcherImplWeakPtr;
|
| - using CallHandler = void (DispatcherImpl::*)(int callId, std::unique_ptr<DictionaryValue> messageObject, ErrorSupport* errors);
|
| - using DispatchMap = protocol::HashMap<String16, CallHandler>;
|
| -
|
| -{% for domain in api.domains %}
|
| - {% for command in domain.commands %}
|
| - {% if "redirect" in command %}{% continue %}{% endif %}
|
| - {% if "handlers" in command and not ("renderer" in command["handlers"]) %}{% continue %}{% endif %}
|
| - void {{domain.domain}}_{{command.name}}(int callId, std::unique_ptr<DictionaryValue> requestMessageObject, ErrorSupport*);
|
| - {% endfor %}
|
| -{% endfor %}
|
| -
|
| - FrontendChannel* m_frontendChannel;
|
| -
|
| -{% for domain in api.domains %}
|
| - {{domain.domain}}::Backend* m_{{domain.domain | lower}}Agent;
|
| -{% endfor %}
|
| -
|
| - void sendResponse(int callId, ErrorString invocationError, std::unique_ptr<protocol::DictionaryValue> result)
|
| - {
|
| - sendResponse(callId, invocationError, nullptr, std::move(result));
|
| - }
|
| -
|
| - void sendResponse(int callId, ErrorString invocationError)
|
| - {
|
| - sendResponse(callId, invocationError, nullptr, DictionaryValue::create());
|
| - }
|
| -
|
| - static const char kInvalidRequest[];
|
| -
|
| - DispatchMap m_dispatchMap;
|
| - protocol::Vector<int> m_commonErrors;
|
| - protocol::HashSet<DispatcherImplWeakPtr*> m_weakPtrs;
|
| -};
|
| -
|
| -class PLATFORM_EXPORT DispatcherCallbackBase : public protocol::BackendCallback {
|
| -public:
|
| - DispatcherCallbackBase(std::unique_ptr<DispatcherImplWeakPtr> backendImpl, int callId)
|
| - : m_backendImpl(std::move(backendImpl)), m_callId(callId) { }
|
| - virtual ~DispatcherCallbackBase() { }
|
| - void dispose() { m_backendImpl = nullptr; }
|
| -
|
| -protected:
|
| - void sendIfActive(std::unique_ptr<protocol::DictionaryValue> partialMessage, const ErrorString& invocationError)
|
| - {
|
| - if (!m_backendImpl->get())
|
| - return;
|
| - m_backendImpl->get()->sendResponse(m_callId, invocationError, nullptr, std::move(partialMessage));
|
| - m_backendImpl = nullptr;
|
| - }
|
| -
|
| -private:
|
| - std::unique_ptr<DispatcherImplWeakPtr> m_backendImpl;
|
| - int m_callId;
|
| -};
|
| -
|
| -DispatcherImplWeakPtr::~DispatcherImplWeakPtr()
|
| -{
|
| - if (m_dispatcher)
|
| - m_dispatcher->m_weakPtrs.remove(this);
|
| -}
|
| -
|
| -const char DispatcherImpl::kInvalidRequest[] = "Invalid request";
|
| -
|
| -{% for domain in api.domains %}
|
| - {% for command in domain.commands %}
|
| - {% if "redirect" in command %}{% continue %}{% endif %}
|
| - {% if "handlers" in command and not ("renderer" in command["handlers"]) %}{% continue %}{% endif %}
|
| -
|
| - {% if "async" in command %}
|
| -
|
| -class PLATFORM_EXPORT {{domain.domain}}{{command.name | to_title_case}}Callback : public {{domain.domain}}::Backend::{{command.name | to_title_case}}Callback, public DispatcherCallbackBase {
|
| -public:
|
| - {{domain.domain}}{{command.name | to_title_case}}Callback(std::unique_ptr<DispatcherImplWeakPtr> backendImpl, int callId)
|
| - : DispatcherCallbackBase(std::move(backendImpl), callId) { }
|
| -
|
| - void sendSuccess(
|
| - {%- for parameter in command.returns -%}
|
| - {%- if "optional" in parameter -%}
|
| - const Maybe<{{resolve_type(parameter).raw_type}}>& {{parameter.name}}
|
| - {%- else -%}
|
| - {{resolve_type(parameter).pass_type}} {{parameter.name}}
|
| - {%- endif -%}
|
| - {%- if not loop.last -%}, {% endif -%}
|
| - {%- endfor -%}) override
|
| - {
|
| - std::unique_ptr<protocol::DictionaryValue> resultObject = DictionaryValue::create();
|
| - {% for parameter in command.returns %}
|
| - {% if "optional" in parameter %}
|
| - if ({{parameter.name}}.isJust())
|
| - resultObject->setValue("{{parameter.name}}", toValue({{parameter.name}}.fromJust()));
|
| - {% else %}
|
| - resultObject->setValue("{{parameter.name}}", toValue({{resolve_type(parameter).to_raw_type % parameter.name}}));
|
| - {% endif %}
|
| - {% endfor %}
|
| - sendIfActive(std::move(resultObject), ErrorString());
|
| - }
|
| -
|
| - void sendFailure(const ErrorString& error) override
|
| - {
|
| - DCHECK(error.length());
|
| - sendIfActive(nullptr, error);
|
| - }
|
| -};
|
| - {% endif %}
|
| -
|
| -void DispatcherImpl::{{domain.domain}}_{{command.name}}(int callId, std::unique_ptr<DictionaryValue> requestMessageObject, ErrorSupport* errors)
|
| -{
|
| - if (!m_{{domain.domain | lower}}Agent)
|
| - errors->addError("{{domain.domain}} handler is not available.");
|
| -
|
| - if (errors->hasErrors()) {
|
| - reportProtocolError(callId, InvalidParams, kInvalidRequest, errors);
|
| - return;
|
| - }
|
| - {% if "parameters" in command %}
|
| -
|
| - // Prepare input parameters.
|
| - protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params"));
|
| - errors->push();
|
| - {% for property in command.parameters %}
|
| - protocol::Value* {{property.name}}Value = object ? object->get("{{property.name}}") : nullptr;
|
| - {% if property.optional %}
|
| - Maybe<{{resolve_type(property).raw_type}}> in_{{property.name}};
|
| - if ({{property.name}}Value) {
|
| - errors->setName("{{property.name}}");
|
| - in_{{property.name}} = FromValue<{{resolve_type(property).raw_type}}>::parse({{property.name}}Value, errors);
|
| - }
|
| - {% else %}
|
| - errors->setName("{{property.name}}");
|
| - {{resolve_type(property).type}} in_{{property.name}} = FromValue<{{resolve_type(property).raw_type}}>::parse({{property.name}}Value, errors);
|
| - {% endif %}
|
| - {% endfor %}
|
| - errors->pop();
|
| - if (errors->hasErrors()) {
|
| - reportProtocolError(callId, InvalidParams, kInvalidRequest, errors);
|
| - return;
|
| - }
|
| - {% endif %}
|
| -
|
| - {% if "async" in command %}
|
| - std::unique_ptr<{{domain.domain}}{{command.name | to_title_case}}Callback> callback(new {{domain.domain}}{{command.name | to_title_case}}Callback(weakPtr(), callId));
|
| - {% elif "returns" in command %}
|
| - // Declare output parameters.
|
| - std::unique_ptr<protocol::DictionaryValue> result = DictionaryValue::create();
|
| - {% for property in command.returns %}
|
| - {% if "optional" in property %}
|
| - Maybe<{{resolve_type(property).raw_type}}> out_{{property.name}};
|
| - {% else %}
|
| - {{resolve_type(property).type}} out_{{property.name}};
|
| - {% endif %}
|
| - {% endfor %}
|
| - {% endif %}
|
| -
|
| - std::unique_ptr<DispatcherImplWeakPtr> weak = weakPtr();
|
| - ErrorString error;
|
| - m_{{domain.domain | lower}}Agent->{{command.name}}(&error
|
| - {%- for property in command.parameters -%}
|
| - {%- if "optional" in property -%}
|
| - , in_{{property.name}}
|
| - {%- else -%}
|
| - , {{resolve_type(property).to_pass_type % ("in_" + property.name)}}
|
| - {%- endif -%}
|
| - {%- endfor %}
|
| - {%- if "async" in command -%}
|
| - , std::move(callback)
|
| - {%- elif "returns" in command %}
|
| - {%- for property in command.returns -%}
|
| - , &out_{{property.name}}
|
| - {%- endfor %}
|
| - {% endif %});
|
| - {% if "returns" in command and not("async" in command) %}
|
| - if (!error.length()) {
|
| - {% for parameter in command.returns %}
|
| - {% if "optional" in parameter %}
|
| - if (out_{{parameter.name}}.isJust())
|
| - result->setValue("{{parameter.name}}", toValue(out_{{parameter.name}}.fromJust()));
|
| - {% else %}
|
| - result->setValue("{{parameter.name}}", toValue({{resolve_type(parameter).to_raw_type % ("out_" + parameter.name)}}));
|
| - {% endif %}
|
| - {% endfor %}
|
| - }
|
| - if (weak->get())
|
| - weak->get()->sendResponse(callId, error, std::move(result));
|
| - {% elif not("async" in command) %}
|
| - if (weak->get())
|
| - weak->get()->sendResponse(callId, error);
|
| - {% endif %}
|
| -}
|
| - {% endfor %}
|
| -{% endfor %}
|
| -
|
| -std::unique_ptr<Dispatcher> Dispatcher::create(FrontendChannel* frontendChannel)
|
| -{
|
| - return wrapUnique(new DispatcherImpl(frontendChannel));
|
| -}
|
| -
|
| -void DispatcherImpl::dispatch(const String16& message)
|
| -{
|
| - int callId = 0;
|
| - std::unique_ptr<protocol::Value> parsedMessage = parseJSON(message);
|
| - DCHECK(parsedMessage);
|
| - std::unique_ptr<protocol::DictionaryValue> messageObject = DictionaryValue::cast(std::move(parsedMessage));
|
| - DCHECK(messageObject);
|
| -
|
| - protocol::Value* callIdValue = messageObject->get("id");
|
| - bool success = callIdValue->asNumber(&callId);
|
| - DCHECK(success);
|
| -
|
| - protocol::Value* methodValue = messageObject->get("method");
|
| - String16 method;
|
| - success = methodValue && methodValue->asString(&method);
|
| - DCHECK(success);
|
| -
|
| - protocol::HashMap<String16, CallHandler>::iterator it = m_dispatchMap.find(method);
|
| - if (it == m_dispatchMap.end()) {
|
| - reportProtocolError(callId, MethodNotFound, "'" + method + "' wasn't found");
|
| - return;
|
| - }
|
| -
|
| - protocol::ErrorSupport errors;
|
| - ((*this).*(*it->second))(callId, std::move(messageObject), &errors);
|
| -}
|
| -
|
| -void DispatcherImpl::sendResponse(int callId, const ErrorString& invocationError, ErrorSupport* errors, std::unique_ptr<protocol::DictionaryValue> result)
|
| -{
|
| - if (invocationError.length() || (errors && errors->hasErrors())) {
|
| - reportProtocolError(callId, ServerError, invocationError, errors);
|
| - return;
|
| - }
|
| -
|
| - std::unique_ptr<protocol::DictionaryValue> responseMessage = DictionaryValue::create();
|
| - responseMessage->setNumber("id", callId);
|
| - responseMessage->setObject("result", std::move(result));
|
| - if (m_frontendChannel)
|
| - m_frontendChannel->sendProtocolResponse(callId, responseMessage->toJSONString());
|
| -}
|
| -
|
| -void Dispatcher::reportProtocolError(int callId, CommonErrorCode code, const String16& errorMessage) const
|
| -{
|
| - ErrorSupport errors;
|
| - reportProtocolError(callId, code, errorMessage, &errors);
|
| -}
|
| -
|
| -void DispatcherImpl::reportProtocolError(int callId, CommonErrorCode code, const String16& errorMessage, ErrorSupport* errors) const
|
| -{
|
| - DCHECK(code >=0);
|
| - DCHECK((unsigned)code < m_commonErrors.size());
|
| - DCHECK(m_commonErrors[code]);
|
| - std::unique_ptr<protocol::DictionaryValue> error = DictionaryValue::create();
|
| - error->setNumber("code", m_commonErrors[code]);
|
| - error->setString("message", errorMessage);
|
| - DCHECK(error);
|
| - if (errors && errors->hasErrors())
|
| - error->setString("data", errors->errors());
|
| - std::unique_ptr<protocol::DictionaryValue> message = DictionaryValue::create();
|
| - message->setObject("error", std::move(error));
|
| - message->setNumber("id", callId);
|
| - if (m_frontendChannel)
|
| - m_frontendChannel->sendProtocolResponse(callId, message->toJSONString());
|
| -}
|
| -
|
| -bool Dispatcher::getCommandName(const String16& message, String16* result)
|
| -{
|
| - std::unique_ptr<protocol::Value> value = parseJSON(message);
|
| - if (!value)
|
| - return false;
|
| -
|
| - protocol::DictionaryValue* object = DictionaryValue::cast(value.get());
|
| - if (!object)
|
| - return false;
|
| -
|
| - if (!object->getString("method", result))
|
| - return false;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace protocol
|
| -} // namespace blink
|
|
|