910e62b5创建于 1月15日历史提交
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/devtools/devtools_dispatch_http_request_params.h"

DevToolsDispatchHttpRequestParams::DevToolsDispatchHttpRequestParams() =
    default;
DevToolsDispatchHttpRequestParams::~DevToolsDispatchHttpRequestParams() =
    default;
DevToolsDispatchHttpRequestParams::DevToolsDispatchHttpRequestParams(
    const DevToolsDispatchHttpRequestParams&) = default;
DevToolsDispatchHttpRequestParams& DevToolsDispatchHttpRequestParams::operator=(
    const DevToolsDispatchHttpRequestParams&) = default;
DevToolsDispatchHttpRequestParams::DevToolsDispatchHttpRequestParams(
    DevToolsDispatchHttpRequestParams&&) = default;
DevToolsDispatchHttpRequestParams& DevToolsDispatchHttpRequestParams::operator=(
    DevToolsDispatchHttpRequestParams&&) = default;

// static
std::optional<DevToolsDispatchHttpRequestParams>
DevToolsDispatchHttpRequestParams::FromDict(const base::Value::Dict& dict) {
  const std::string* service = dict.FindString("service");
  if (!service) {
    return std::nullopt;
  }

  const std::string* path = dict.FindString("path");
  if (!path) {
    return std::nullopt;
  }

  const std::string* method = dict.FindString("method");
  if (!method) {
    return std::nullopt;
  }

  DevToolsDispatchHttpRequestParams params;
  params.service = *service;
  params.path = *path;
  params.method = *method;
  const std::string* body = dict.FindString("body");
  if (body) {
    params.body = *body;
  }

  const base::Value::Dict* query_params_dict = dict.FindDict("queryParams");
  if (query_params_dict) {
    for (auto it : *query_params_dict) {
      const std::string& key = it.first;
      const base::Value& value = it.second;
      if (value.is_string()) {
        params.query_params[key].push_back(value.GetString());
      } else if (value.is_list()) {
        for (const auto& item : value.GetList()) {
          if (item.is_string()) {
            params.query_params[key].push_back(item.GetString());
          }
        }
      }
    }
  }

  return params;
}