chromium/chromecast/browser/devtools/cast_ui_devtools.cc

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chromecast/browser/devtools/cast_ui_devtools.h"

#include "chromecast/base/chromecast_switches.h"
#include "components/ui_devtools/connector_delegate.h"
#include "components/ui_devtools/css_agent.h"
#include "components/ui_devtools/devtools_server.h"
#include "components/ui_devtools/page_agent.h"
#include "components/ui_devtools/switches.h"
#include "components/ui_devtools/views/dom_agent_views.h"
#include "components/ui_devtools/views/overlay_agent_views.h"
#include "components/ui_devtools/views/page_agent_views.h"

namespace chromecast {
namespace shell {

CastUIDevTools::CastUIDevTools(network::mojom::NetworkContext* network_context)
    : devtools_server_(CreateServer(network_context)) {}

CastUIDevTools::~CastUIDevTools() = default;

std::unique_ptr<ui_devtools::UiDevToolsServer> CastUIDevTools::CreateServer(
    network::mojom::NetworkContext* network_context) const {
  constexpr int kUiDevToolsDefaultPort = 9223;
  int port = GetSwitchValueInt(ui_devtools::switches::kEnableUiDevTools,
                               kUiDevToolsDefaultPort);
  auto server =
      ui_devtools::UiDevToolsServer::CreateForViews(network_context, port);
  DCHECK(server);
  auto client = std::make_unique<ui_devtools::UiDevToolsClient>(
      "UiDevToolsClient", server.get());
  auto dom_agent_views = ui_devtools::DOMAgentViews::Create();
  DCHECK(dom_agent_views);
  auto* dom_agent_views_ptr = dom_agent_views.get();
  client->AddAgent(
      std::make_unique<ui_devtools::PageAgentViews>(dom_agent_views_ptr));
  client->AddAgent(std::move(dom_agent_views));
  client->AddAgent(
      std::make_unique<ui_devtools::CSSAgent>(dom_agent_views_ptr));
  client->AddAgent(ui_devtools::OverlayAgentViews::Create(dom_agent_views_ptr));
  server->AttachClient(std::move(client));
  return server;
}

}  // namespace shell
}  // namespace chromecast