// 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 "components/ui_devtools/DOM.h" #include "components/ui_devtools/Protocol.h" namespace ui_devtools { namespace protocol { namespace DOM { // ------------- Enum values from types. const char Metainfo::domainName[] = "DOM"; const char Metainfo::commandPrefix[] = "DOM."; const char Metainfo::version[] = "1.0"; std::unique_ptr Node::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new Node()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* nodeIdValue = object->get("nodeId"); errors->setName("nodeId"); result->m_nodeId = ValueConversions::fromValue(nodeIdValue, errors); protocol::Value* backendNodeIdValue = object->get("backendNodeId"); errors->setName("backendNodeId"); result->m_backendNodeId = ValueConversions::fromValue(backendNodeIdValue, errors); protocol::Value* nodeTypeValue = object->get("nodeType"); errors->setName("nodeType"); result->m_nodeType = ValueConversions::fromValue(nodeTypeValue, errors); protocol::Value* nodeNameValue = object->get("nodeName"); errors->setName("nodeName"); result->m_nodeName = ValueConversions::fromValue(nodeNameValue, errors); protocol::Value* childNodeCountValue = object->get("childNodeCount"); if (childNodeCountValue) { errors->setName("childNodeCount"); result->m_childNodeCount = ValueConversions::fromValue(childNodeCountValue, errors); } protocol::Value* childrenValue = object->get("children"); if (childrenValue) { errors->setName("children"); result->m_children = ValueConversions>::fromValue(childrenValue, errors); } protocol::Value* attributesValue = object->get("attributes"); if (attributesValue) { errors->setName("attributes"); result->m_attributes = ValueConversions>::fromValue(attributesValue, errors); } protocol::Value* nameValue = object->get("name"); if (nameValue) { errors->setName("name"); result->m_name = ValueConversions::fromValue(nameValue, errors); } protocol::Value* valueValue = object->get("value"); if (valueValue) { errors->setName("value"); result->m_value = ValueConversions::fromValue(valueValue, errors); } errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr Node::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("nodeId", ValueConversions::toValue(m_nodeId)); result->setValue("backendNodeId", ValueConversions::toValue(m_backendNodeId)); result->setValue("nodeType", ValueConversions::toValue(m_nodeType)); result->setValue("nodeName", ValueConversions::toValue(m_nodeName)); if (m_childNodeCount.isJust()) result->setValue("childNodeCount", ValueConversions::toValue(m_childNodeCount.fromJust())); if (m_children.isJust()) result->setValue("children", ValueConversions>::toValue(m_children.fromJust())); if (m_attributes.isJust()) result->setValue("attributes", ValueConversions>::toValue(m_attributes.fromJust())); if (m_name.isJust()) result->setValue("name", ValueConversions::toValue(m_name.fromJust())); if (m_value.isJust()) result->setValue("value", ValueConversions::toValue(m_value.fromJust())); return result; } std::unique_ptr Node::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr RGBA::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new RGBA()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* rValue = object->get("r"); errors->setName("r"); result->m_r = ValueConversions::fromValue(rValue, errors); protocol::Value* gValue = object->get("g"); errors->setName("g"); result->m_g = ValueConversions::fromValue(gValue, errors); protocol::Value* bValue = object->get("b"); errors->setName("b"); result->m_b = ValueConversions::fromValue(bValue, errors); protocol::Value* aValue = object->get("a"); if (aValue) { errors->setName("a"); result->m_a = ValueConversions::fromValue(aValue, errors); } errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr RGBA::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("r", ValueConversions::toValue(m_r)); result->setValue("g", ValueConversions::toValue(m_g)); result->setValue("b", ValueConversions::toValue(m_b)); if (m_a.isJust()) result->setValue("a", ValueConversions::toValue(m_a.fromJust())); return result; } std::unique_ptr RGBA::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr NodeHighlightRequestedNotification::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new NodeHighlightRequestedNotification()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* nodeIdValue = object->get("nodeId"); errors->setName("nodeId"); result->m_nodeId = ValueConversions::fromValue(nodeIdValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr NodeHighlightRequestedNotification::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("nodeId", ValueConversions::toValue(m_nodeId)); return result; } std::unique_ptr NodeHighlightRequestedNotification::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr ChildNodeInsertedNotification::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new ChildNodeInsertedNotification()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* parentNodeIdValue = object->get("parentNodeId"); errors->setName("parentNodeId"); result->m_parentNodeId = ValueConversions::fromValue(parentNodeIdValue, errors); protocol::Value* previousNodeIdValue = object->get("previousNodeId"); errors->setName("previousNodeId"); result->m_previousNodeId = ValueConversions::fromValue(previousNodeIdValue, errors); protocol::Value* nodeValue = object->get("node"); errors->setName("node"); result->m_node = ValueConversions::fromValue(nodeValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr ChildNodeInsertedNotification::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("parentNodeId", ValueConversions::toValue(m_parentNodeId)); result->setValue("previousNodeId", ValueConversions::toValue(m_previousNodeId)); result->setValue("node", ValueConversions::toValue(m_node.get())); return result; } std::unique_ptr ChildNodeInsertedNotification::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr ChildNodeRemovedNotification::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new ChildNodeRemovedNotification()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* parentNodeIdValue = object->get("parentNodeId"); errors->setName("parentNodeId"); result->m_parentNodeId = ValueConversions::fromValue(parentNodeIdValue, errors); protocol::Value* nodeIdValue = object->get("nodeId"); errors->setName("nodeId"); result->m_nodeId = ValueConversions::fromValue(nodeIdValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr ChildNodeRemovedNotification::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("parentNodeId", ValueConversions::toValue(m_parentNodeId)); result->setValue("nodeId", ValueConversions::toValue(m_nodeId)); return result; } std::unique_ptr ChildNodeRemovedNotification::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } // ------------- Enum values from params. // ------------- Frontend notifications. void Frontend::nodeHighlightRequested(int nodeId) { if (!m_frontendChannel) return; std::unique_ptr messageData = NodeHighlightRequestedNotification::create() .setNodeId(nodeId) .build(); m_frontendChannel->sendProtocolNotification(InternalResponse::createNotification("DOM.nodeHighlightRequested", std::move(messageData))); } void Frontend::childNodeInserted(int parentNodeId, int previousNodeId, std::unique_ptr node) { if (!m_frontendChannel) return; std::unique_ptr messageData = ChildNodeInsertedNotification::create() .setParentNodeId(parentNodeId) .setPreviousNodeId(previousNodeId) .setNode(std::move(node)) .build(); m_frontendChannel->sendProtocolNotification(InternalResponse::createNotification("DOM.childNodeInserted", std::move(messageData))); } void Frontend::childNodeRemoved(int parentNodeId, int nodeId) { if (!m_frontendChannel) return; std::unique_ptr messageData = ChildNodeRemovedNotification::create() .setParentNodeId(parentNodeId) .setNodeId(nodeId) .build(); m_frontendChannel->sendProtocolNotification(InternalResponse::createNotification("DOM.childNodeRemoved", std::move(messageData))); } void Frontend::flush() { m_frontendChannel->flushProtocolNotifications(); } void Frontend::sendRawNotification(const String& notification) { m_frontendChannel->sendProtocolNotification(InternalRawNotification::create(notification)); } // --------------------- Dispatcher. class DispatcherImpl : public protocol::DispatcherBase { public: DispatcherImpl(FrontendChannel* frontendChannel, Backend* backend, bool fallThroughForNotFound) : DispatcherBase(frontendChannel) , m_backend(backend) , m_fallThroughForNotFound(fallThroughForNotFound) { m_dispatchMap["DOM.enable"] = &DispatcherImpl::enable; m_dispatchMap["DOM.disable"] = &DispatcherImpl::disable; m_dispatchMap["DOM.getDocument"] = &DispatcherImpl::getDocument; m_redirects["DOM.highlightNode"] = "Overlay.highlightNode"; m_dispatchMap["DOM.hideHighlight"] = &DispatcherImpl::hideHighlight; m_dispatchMap["DOM.pushNodesByBackendIdsToFrontend"] = &DispatcherImpl::pushNodesByBackendIdsToFrontend; } ~DispatcherImpl() override { } DispatchResponse::Status dispatch(int callId, const String& method, std::unique_ptr messageObject) override; HashMap& redirects() { return m_redirects; } protected: using CallHandler = DispatchResponse::Status (DispatcherImpl::*)(int callId, std::unique_ptr messageObject, ErrorSupport* errors); using DispatchMap = protocol::HashMap; DispatchMap m_dispatchMap; HashMap m_redirects; DispatchResponse::Status enable(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status disable(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status getDocument(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status hideHighlight(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status pushNodesByBackendIdsToFrontend(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); Backend* m_backend; bool m_fallThroughForNotFound; }; DispatchResponse::Status DispatcherImpl::dispatch(int callId, const String& method, std::unique_ptr messageObject) { protocol::HashMap::iterator it = m_dispatchMap.find(method); if (it == m_dispatchMap.end()) { if (m_fallThroughForNotFound) return DispatchResponse::kFallThrough; reportProtocolError(callId, DispatchResponse::kMethodNotFound, "'" + method + "' wasn't found", nullptr); return DispatchResponse::kError; } protocol::ErrorSupport errors; return (this->*(it->second))(callId, std::move(messageObject), &errors); } DispatchResponse::Status DispatcherImpl::enable(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->enable(); if (response.status() == DispatchResponse::kFallThrough) return response.status(); if (weak->get()) weak->get()->sendResponse(callId, response); return response.status(); } DispatchResponse::Status DispatcherImpl::disable(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->disable(); if (response.status() == DispatchResponse::kFallThrough) return response.status(); if (weak->get()) weak->get()->sendResponse(callId, response); return response.status(); } DispatchResponse::Status DispatcherImpl::getDocument(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Declare output parameters. std::unique_ptr out_root; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->getDocument(&out_root); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { result->setValue("root", ValueConversions::toValue(out_root.get())); } if (weak->get()) weak->get()->sendResponse(callId, response, std::move(result)); return response.status(); } DispatchResponse::Status DispatcherImpl::hideHighlight(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->hideHighlight(); if (response.status() == DispatchResponse::kFallThrough) return response.status(); if (weak->get()) weak->get()->sendResponse(callId, response); return response.status(); } DispatchResponse::Status DispatcherImpl::pushNodesByBackendIdsToFrontend(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Prepare input parameters. protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params")); errors->push(); protocol::Value* backendNodeIdsValue = object ? object->get("backendNodeIds") : nullptr; errors->setName("backendNodeIds"); std::unique_ptr> in_backendNodeIds = ValueConversions>::fromValue(backendNodeIdsValue, errors); errors->pop(); if (errors->hasErrors()) { reportProtocolError(callId, DispatchResponse::kInvalidParams, kInvalidParamsString, errors); return DispatchResponse::kError; } // Declare output parameters. std::unique_ptr> out_nodeIds; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->pushNodesByBackendIdsToFrontend(std::move(in_backendNodeIds), &out_nodeIds); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { result->setValue("nodeIds", ValueConversions>::toValue(out_nodeIds.get())); } if (weak->get()) weak->get()->sendResponse(callId, response, std::move(result)); return response.status(); } // static void Dispatcher::wire(UberDispatcher* uber, Backend* backend) { std::unique_ptr dispatcher(new DispatcherImpl(uber->channel(), backend, uber->fallThroughForNotFound())); uber->setupRedirects(dispatcher->redirects()); uber->registerBackend("DOM", std::move(dispatcher)); } } // DOM } // namespace ui_devtools } // namespace protocol