// 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/CSS.h" #include "components/ui_devtools/Protocol.h" namespace ui_devtools { namespace protocol { namespace CSS { // ------------- Enum values from types. const char Metainfo::domainName[] = "CSS"; const char Metainfo::commandPrefix[] = "CSS."; const char Metainfo::version[] = "1.0"; std::unique_ptr SourceRange::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new SourceRange()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* startLineValue = object->get("startLine"); errors->setName("startLine"); result->m_startLine = ValueConversions::fromValue(startLineValue, errors); protocol::Value* startColumnValue = object->get("startColumn"); errors->setName("startColumn"); result->m_startColumn = ValueConversions::fromValue(startColumnValue, errors); protocol::Value* endLineValue = object->get("endLine"); errors->setName("endLine"); result->m_endLine = ValueConversions::fromValue(endLineValue, errors); protocol::Value* endColumnValue = object->get("endColumn"); errors->setName("endColumn"); result->m_endColumn = ValueConversions::fromValue(endColumnValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr SourceRange::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("startLine", ValueConversions::toValue(m_startLine)); result->setValue("startColumn", ValueConversions::toValue(m_startColumn)); result->setValue("endLine", ValueConversions::toValue(m_endLine)); result->setValue("endColumn", ValueConversions::toValue(m_endColumn)); return result; } std::unique_ptr SourceRange::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr StyleDeclarationEdit::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new StyleDeclarationEdit()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* styleSheetIdValue = object->get("styleSheetId"); errors->setName("styleSheetId"); result->m_styleSheetId = ValueConversions::fromValue(styleSheetIdValue, errors); protocol::Value* textValue = object->get("text"); errors->setName("text"); result->m_text = ValueConversions::fromValue(textValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr StyleDeclarationEdit::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("styleSheetId", ValueConversions::toValue(m_styleSheetId)); result->setValue("text", ValueConversions::toValue(m_text)); return result; } std::unique_ptr StyleDeclarationEdit::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr CSSProperty::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new CSSProperty()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* nameValue = object->get("name"); errors->setName("name"); result->m_name = ValueConversions::fromValue(nameValue, errors); protocol::Value* valueValue = object->get("value"); errors->setName("value"); result->m_value = ValueConversions::fromValue(valueValue, errors); protocol::Value* rangeValue = object->get("range"); if (rangeValue) { errors->setName("range"); result->m_range = ValueConversions::fromValue(rangeValue, errors); } errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr CSSProperty::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("name", ValueConversions::toValue(m_name)); result->setValue("value", ValueConversions::toValue(m_value)); if (m_range.isJust()) result->setValue("range", ValueConversions::toValue(m_range.fromJust())); return result; } std::unique_ptr CSSProperty::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr CSSStyle::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new CSSStyle()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* styleSheetIdValue = object->get("styleSheetId"); if (styleSheetIdValue) { errors->setName("styleSheetId"); result->m_styleSheetId = ValueConversions::fromValue(styleSheetIdValue, errors); } protocol::Value* cssPropertiesValue = object->get("cssProperties"); errors->setName("cssProperties"); result->m_cssProperties = ValueConversions>::fromValue(cssPropertiesValue, errors); protocol::Value* shorthandEntriesValue = object->get("shorthandEntries"); errors->setName("shorthandEntries"); result->m_shorthandEntries = ValueConversions>::fromValue(shorthandEntriesValue, errors); protocol::Value* rangeValue = object->get("range"); if (rangeValue) { errors->setName("range"); result->m_range = ValueConversions::fromValue(rangeValue, errors); } errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr CSSStyle::toValue() const { std::unique_ptr result = DictionaryValue::create(); if (m_styleSheetId.isJust()) result->setValue("styleSheetId", ValueConversions::toValue(m_styleSheetId.fromJust())); result->setValue("cssProperties", ValueConversions>::toValue(m_cssProperties.get())); result->setValue("shorthandEntries", ValueConversions>::toValue(m_shorthandEntries.get())); if (m_range.isJust()) result->setValue("range", ValueConversions::toValue(m_range.fromJust())); return result; } std::unique_ptr CSSStyle::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } std::unique_ptr StyleSheetChangedNotification::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new StyleSheetChangedNotification()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* styleSheetIdValue = object->get("styleSheetId"); errors->setName("styleSheetId"); result->m_styleSheetId = ValueConversions::fromValue(styleSheetIdValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr StyleSheetChangedNotification::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("styleSheetId", ValueConversions::toValue(m_styleSheetId)); return result; } std::unique_ptr StyleSheetChangedNotification::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } // ------------- Enum values from params. // ------------- Frontend notifications. void Frontend::styleSheetChanged(const String& styleSheetId) { if (!m_frontendChannel) return; std::unique_ptr messageData = StyleSheetChangedNotification::create() .setStyleSheetId(styleSheetId) .build(); m_frontendChannel->sendProtocolNotification(InternalResponse::createNotification("CSS.styleSheetChanged", 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["CSS.enable"] = &DispatcherImpl::enable; m_dispatchMap["CSS.disable"] = &DispatcherImpl::disable; m_dispatchMap["CSS.getMatchedStylesForNode"] = &DispatcherImpl::getMatchedStylesForNode; m_dispatchMap["CSS.setStyleTexts"] = &DispatcherImpl::setStyleTexts; } ~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 getMatchedStylesForNode(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status setStyleTexts(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::getMatchedStylesForNode(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Prepare input parameters. protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params")); errors->push(); protocol::Value* nodeIdValue = object ? object->get("nodeId") : nullptr; errors->setName("nodeId"); int in_nodeId = ValueConversions::fromValue(nodeIdValue, errors); errors->pop(); if (errors->hasErrors()) { reportProtocolError(callId, DispatchResponse::kInvalidParams, kInvalidParamsString, errors); return DispatchResponse::kError; } // Declare output parameters. Maybe out_inlineStyle; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->getMatchedStylesForNode(in_nodeId, &out_inlineStyle); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { if (out_inlineStyle.isJust()) result->setValue("inlineStyle", ValueConversions::toValue(out_inlineStyle.fromJust())); } if (weak->get()) weak->get()->sendResponse(callId, response, std::move(result)); return response.status(); } DispatchResponse::Status DispatcherImpl::setStyleTexts(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Prepare input parameters. protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params")); errors->push(); protocol::Value* editsValue = object ? object->get("edits") : nullptr; errors->setName("edits"); std::unique_ptr> in_edits = ValueConversions>::fromValue(editsValue, errors); errors->pop(); if (errors->hasErrors()) { reportProtocolError(callId, DispatchResponse::kInvalidParams, kInvalidParamsString, errors); return DispatchResponse::kError; } // Declare output parameters. std::unique_ptr> out_styles; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->setStyleTexts(std::move(in_edits), &out_styles); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { result->setValue("styles", ValueConversions>::toValue(out_styles.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("CSS", std::move(dispatcher)); } } // CSS } // namespace ui_devtools } // namespace protocol