// 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 "chrome/browser/devtools/protocol/target.h" #include "chrome/browser/devtools/protocol/protocol.h" namespace protocol { namespace Target { // ------------- Enum values from types. const char Metainfo::domainName[] = "Target"; const char Metainfo::commandPrefix[] = "Target."; const char Metainfo::version[] = "1.3"; std::unique_ptr RemoteLocation::fromValue(protocol::Value* value, ErrorSupport* errors) { if (!value || value->type() != protocol::Value::TypeObject) { errors->addError("object expected"); return nullptr; } std::unique_ptr result(new RemoteLocation()); protocol::DictionaryValue* object = DictionaryValue::cast(value); errors->push(); protocol::Value* hostValue = object->get("host"); errors->setName("host"); result->m_host = ValueConversions::fromValue(hostValue, errors); protocol::Value* portValue = object->get("port"); errors->setName("port"); result->m_port = ValueConversions::fromValue(portValue, errors); errors->pop(); if (errors->hasErrors()) return nullptr; return result; } std::unique_ptr RemoteLocation::toValue() const { std::unique_ptr result = DictionaryValue::create(); result->setValue("host", ValueConversions::toValue(m_host)); result->setValue("port", ValueConversions::toValue(m_port)); return result; } std::unique_ptr RemoteLocation::clone() const { ErrorSupport errors; return fromValue(toValue().get(), &errors); } // ------------- Enum values from params. // ------------- Frontend notifications. 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["Target.createBrowserContext"] = &DispatcherImpl::createBrowserContext; m_dispatchMap["Target.getBrowserContexts"] = &DispatcherImpl::getBrowserContexts; m_dispatchMap["Target.createTarget"] = &DispatcherImpl::createTarget; m_dispatchMap["Target.disposeBrowserContext"] = &DispatcherImpl::disposeBrowserContext; m_dispatchMap["Target.setRemoteLocations"] = &DispatcherImpl::setRemoteLocations; } ~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 createBrowserContext(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status getBrowserContexts(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status createTarget(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status disposeBrowserContext(int callId, std::unique_ptr requestMessageObject, ErrorSupport*); DispatchResponse::Status setRemoteLocations(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::createBrowserContext(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Declare output parameters. String out_browserContextId; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->CreateBrowserContext(&out_browserContextId); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { result->setValue("browserContextId", ValueConversions::toValue(out_browserContextId)); } if (weak->get()) weak->get()->sendResponse(callId, response, std::move(result)); return response.status(); } DispatchResponse::Status DispatcherImpl::getBrowserContexts(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Declare output parameters. std::unique_ptr> out_browserContextIds; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->GetBrowserContexts(&out_browserContextIds); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { result->setValue("browserContextIds", ValueConversions>::toValue(out_browserContextIds.get())); } if (weak->get()) weak->get()->sendResponse(callId, response, std::move(result)); return response.status(); } DispatchResponse::Status DispatcherImpl::createTarget(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Prepare input parameters. protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params")); errors->push(); protocol::Value* urlValue = object ? object->get("url") : nullptr; errors->setName("url"); String in_url = ValueConversions::fromValue(urlValue, errors); protocol::Value* widthValue = object ? object->get("width") : nullptr; Maybe in_width; if (widthValue) { errors->setName("width"); in_width = ValueConversions::fromValue(widthValue, errors); } protocol::Value* heightValue = object ? object->get("height") : nullptr; Maybe in_height; if (heightValue) { errors->setName("height"); in_height = ValueConversions::fromValue(heightValue, errors); } protocol::Value* browserContextIdValue = object ? object->get("browserContextId") : nullptr; Maybe in_browserContextId; if (browserContextIdValue) { errors->setName("browserContextId"); in_browserContextId = ValueConversions::fromValue(browserContextIdValue, errors); } protocol::Value* enableBeginFrameControlValue = object ? object->get("enableBeginFrameControl") : nullptr; Maybe in_enableBeginFrameControl; if (enableBeginFrameControlValue) { errors->setName("enableBeginFrameControl"); in_enableBeginFrameControl = ValueConversions::fromValue(enableBeginFrameControlValue, errors); } errors->pop(); if (errors->hasErrors()) { reportProtocolError(callId, DispatchResponse::kInvalidParams, kInvalidParamsString, errors); return DispatchResponse::kError; } // Declare output parameters. String out_targetId; std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->CreateTarget(in_url, std::move(in_width), std::move(in_height), std::move(in_browserContextId), std::move(in_enableBeginFrameControl), &out_targetId); if (response.status() == DispatchResponse::kFallThrough) return response.status(); std::unique_ptr result = DictionaryValue::create(); if (response.status() == DispatchResponse::kSuccess) { result->setValue("targetId", ValueConversions::toValue(out_targetId)); } if (weak->get()) weak->get()->sendResponse(callId, response, std::move(result)); return response.status(); } class DisposeBrowserContextCallbackImpl : public Backend::DisposeBrowserContextCallback, public DispatcherBase::Callback { public: DisposeBrowserContextCallbackImpl(std::unique_ptr backendImpl, int callId, int callbackId) : DispatcherBase::Callback(std::move(backendImpl), callId, callbackId) { } void sendSuccess() override { std::unique_ptr resultObject = DictionaryValue::create(); sendIfActive(std::move(resultObject), DispatchResponse::OK()); } void fallThrough() override { fallThroughIfActive(); } void sendFailure(const DispatchResponse& response) override { DCHECK(response.status() == DispatchResponse::kError); sendIfActive(nullptr, response); } }; DispatchResponse::Status DispatcherImpl::disposeBrowserContext(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Prepare input parameters. protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params")); errors->push(); protocol::Value* browserContextIdValue = object ? object->get("browserContextId") : nullptr; errors->setName("browserContextId"); String in_browserContextId = ValueConversions::fromValue(browserContextIdValue, errors); errors->pop(); if (errors->hasErrors()) { reportProtocolError(callId, DispatchResponse::kInvalidParams, kInvalidParamsString, errors); return DispatchResponse::kError; } std::unique_ptr weak = weakPtr(); std::unique_ptr callback(new DisposeBrowserContextCallbackImpl(weakPtr(), callId, nextCallbackId())); m_backend->DisposeBrowserContext(in_browserContextId, std::move(callback)); return (weak->get() && weak->get()->lastCallbackFallThrough()) ? DispatchResponse::kFallThrough : DispatchResponse::kAsync; } DispatchResponse::Status DispatcherImpl::setRemoteLocations(int callId, std::unique_ptr requestMessageObject, ErrorSupport* errors) { // Prepare input parameters. protocol::DictionaryValue* object = DictionaryValue::cast(requestMessageObject->get("params")); errors->push(); protocol::Value* locationsValue = object ? object->get("locations") : nullptr; errors->setName("locations"); std::unique_ptr> in_locations = ValueConversions>::fromValue(locationsValue, errors); errors->pop(); if (errors->hasErrors()) { reportProtocolError(callId, DispatchResponse::kInvalidParams, kInvalidParamsString, errors); return DispatchResponse::kError; } std::unique_ptr weak = weakPtr(); DispatchResponse response = m_backend->SetRemoteLocations(std::move(in_locations)); if (response.status() == DispatchResponse::kFallThrough) return response.status(); if (weak->get()) weak->get()->sendResponse(callId, response); 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("Target", std::move(dispatcher)); } } // Target } // namespace protocol