1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86

content / browser / devtools / mojom_devtools_agent_host.cc [blame]

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

#include "content/browser/devtools/mojom_devtools_agent_host.h"

#include <memory>
#include <vector>

#include "base/memory/scoped_refptr.h"
#include "base/no_destructor.h"
#include "content/browser/devtools/devtools_agent_host_impl.h"
#include "content/browser/devtools/devtools_session.h"
#include "content/public/browser/mojom_devtools_agent_host_delegate.h"

namespace content {

// static
void MojomDevToolsAgentHost::GetAll(DevToolsAgentHost::List* out_list) {
  for (auto& id : host_ids()) {
    auto host = GetForId(id);
    if (host) {
      out_list->emplace_back(host);
    }
  }
}

MojomDevToolsAgentHost::MojomDevToolsAgentHost(
    const std::string& id,
    std::unique_ptr<MojomDevToolsAgentHostDelegate> delegate)
    : DevToolsAgentHostImpl(id), delegate_(std::move(delegate)) {
  mojo::PendingAssociatedRemote<blink::mojom::DevToolsAgent> agent;
  delegate_->ConnectDevToolsAgent(agent.InitWithNewEndpointAndPassReceiver());
  associated_agent_remote_.Bind(std::move(agent));
  NotifyCreated();
  host_ids().emplace_back(GetId());
}

MojomDevToolsAgentHost::~MojomDevToolsAgentHost() {
  associated_agent_remote_.reset();
  delegate_.reset();
  std::erase(host_ids(), GetId());
}

// Devtools Agent host overrides:

std::string MojomDevToolsAgentHost::GetType() {
  return delegate_->GetType();
}

std::string MojomDevToolsAgentHost::GetTitle() {
  return delegate_->GetTitle();
}

GURL MojomDevToolsAgentHost::GetURL() {
  return delegate_->GetURL();
}

bool MojomDevToolsAgentHost::Activate() {
  return delegate_->Activate();
}

bool MojomDevToolsAgentHost::Close() {
  return delegate_->Close();
}

void MojomDevToolsAgentHost::Reload() {
  delegate_->Reload();
}

// Devtools agent host impl overrides:

bool MojomDevToolsAgentHost::AttachSession(DevToolsSession* session,
                                           bool aquire_wake_lock) {
  session->AttachToAgent(associated_agent_remote_.get(),
                         delegate_->ForceIOSession());
  return true;
}

// static
std::vector<std::string>& MojomDevToolsAgentHost::host_ids() {
  static base::NoDestructor<std::vector<std::string>> host_ids_{};
  return *host_ids_;
}

}  // namespace content