首页 > 其他分享 >Chromium CDP 开发(十三):为自己的Domain建立CustomCDPHandler

Chromium CDP 开发(十三):为自己的Domain建立CustomCDPHandler

时间:2025-01-19 09:00:35浏览次数:3  
标签:CustomCdpHandler Domain protocol 自定义 chrome CustomCDPHandler CDP devtools

引言

在开发 Chromium CDP(Chrome DevTools Protocol)时,除了创建 PDL 和 JSON 文件来定义自定义的 CDP Domain 和指令外,还需要编写对应的 Handler 实现文件,以便使这些自定义指令能够被正确执行。本章将详细介绍如何为自定义的 CDP Domain 创建和实现 Handler 文件 custom_cdp_handler.hcustom_cdp_handler.cc,并将其集成到 Chromium 构建系统中。此外,我们还将讨论如何将 Handler 注册到 chrome_devtools_session,以便通过 CDP 系统控制和访问自定义的指令。通过这些步骤,开发者可以让自定义的 CDP 指令和事件在 Chromium 中真正可用。

编写实现文件

在准备好pdl 和 json 文件后我们就具备了自定义生命CDP Domain和指令的能力,接下来我们需要的就是建立handler 实现文件来让CDP真正可用

首先我们在chrome\browser\devtools\protocol 下建立 custom_cdp_handler.h 和 custom_cdp_handler.cc

文件内容如下

custom_cdp_handler.h文件如下

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

#include "chrome/browser/devtools/protocol/custom_cdp.h"


class CustomCdpHandler : public protocol::CustomCDP::Backend {
  public:
    CustomCdpHandler(protocol::UberDispatcher* dispatcher,
                    const std::string& target_id);

    CustomCdpHandler(const CustomCdpHandler&) = delete;
    CustomCdpHandler& operator=(const CustomCdpHandler&) = delete;

    ~CustomCdpHandler() override;


    protocol::Response CdpVersion() override;
};

#endif  // CHROME_BROWSER_DEVTOOLS_PROTOCOL_WINDOW_MANAGER_HANDLER_H_

custom_cdp_handler.cc文件如下

#include "chrome/browser/devtools/protocol/custom_cdp_handler.h"


CustomCdpHandler::CustomCdpHandler(protocol::UberDispatcher* dispatcher,const std::string& target_id) {
  // Dispatcher can be null in tests.
  if(dispatcher){
    protocol::CustomCDP::Dispatcher::wire(dispatcher, this);
  }
}

CustomCdpHandler::~CustomCdpHandler(){
}

protocol::Response CustomCdpHandler::CdpVersion(){
  return protocol::Response::Success();
}

然后把两个文件加入到 chrome\browser\devtools\BUILD.gn 的 static_library("devtools") 里面的 sources 部分参与编译

注册Handler到 chrome_devtools_session

当我们的把CustomCDPHandler编写完毕后还需要把CustomCDPHandler注册进chrome_devtools_session上才能让CDP系统控制和访问CustomCDPHandler

我们找到 chrome\browser\devtools\chrome_devtools_session.h

这里先用占位类进行一个占位

声明一个变量寄宿我们的Handler实例

我们找到 chrome\browser\devtools\chrome_devtools_session.cc

先引入头文件

测试我们的CDP

启动浏览器

获取websocket

发送指令

看到响应证明自定义domain 成功

总结

通过本章的内容,我们完成了自定义 CDP Domain 的 Handler 文件 custom_cdp_handler.hcustom_cdp_handler.cc 的编写,实现了基本的指令处理功能,并将其集成到 Chromium 构建系统中。我们还成功将 Handler 注册到 chrome_devtools_session,确保自定义指令能够通过 CDP 系统正常运行。最后,我们测试了自定义指令并成功获取响应,证明自定义的 CDP Domain 及其指令已正确生效,为后续功能的扩展提供了坚实的基础。

标签:CustomCdpHandler,Domain,protocol,自定义,chrome,CustomCDPHandler,CDP,devtools
From: https://blog.csdn.net/qqyy_sj/article/details/145129706

相关文章

  • .Net的AppDomain
     一、AppDomain的作用 AppDomain(应用程序域)是一种在.NET中提供的隔离机制,用于将应用程序的不同部分隔离开来,以提高安全性、可靠性和可管理性。以下是其主要的功能和用途: 隔离性:允许在一个进程中运行多个应用程序,同时使它们相互隔离。这样可以避免一个应用程序中的错......
  • AppDomainManager注入是一种针对.NET应用程序的高级攻击技术,攻击者通过操控AppDomain
    什么是APPDomainManager注入?APPDomainManager注入通常涉及到利用**应用程序域(AppDomain)**来执行恶意操作,特别是在.NET环境下。要理解这个概念,我们需要了解几个关键术语:AppDomain:在.NET应用程序中,AppDomain是一个隔离的执行环境,它允许多个应用程序或应用程序的不同部分在同一进......
  • MybatisX-Generator不生成domain文件夹解决方案
    问题描述使用MybatisX-Generator生成数据库表实体以后,发现没有生成domain文件夹以及User.java文件问题原因以及解决方案因为MybatisX版本更新,最新版需要在options里额外勾选model才能生成domain勾选model,点击finish,成功生成domain文件夹,以及User.java文件......
  • 微信小程序上传图片报错:uploadFile:fail url not in domain list
    上传图片时,在微信开发工具中可以正常上传成功,手机上预览也可上传成功。小程序发布成功后,上传失败,提示“uploadFile:failurlnotindomainlist”。错误信息如下:解决方案:1、在微信管理公众平台|小程序-开发-开发管理-服务器域名下的服务器配置uploadFile合法域名,没有添加服务器......
  • 在域控(Domain Controller,DC)上做快照是一种用于备份和恢复的常见操作,尤其是在 Active D
    在域控(DomainController,DC)上做快照是一种用于备份和恢复的常见操作,尤其是在ActiveDirectory环境中。通过创建域控的快照,可以在发生故障时快速恢复到快照时的状态。下面是如何在WindowsServer上创建域控的快照的步骤:1.使用 WindowsServer快照功能在WindowsServer上......
  • 模型层model下的 DTO VO 和 Domain
    模型层model下的DTOVO和Domain含义DTO(DataTransferObject)数据传输对象,用于在系统各层之间传输数据,通常用于封装从业务层到表示层的数据。VO(ViewObject)视图对象,用于封装特定视图或页面所需的数据,通常用于表示层,与前端交互展示数据。Domain(领域模型)领域对象,代表现实世界......
  • AppDomain.CurrentDomain.BaseDirectory涵义
    AppDomain.CurrentDomain.BaseDirectory是获取基目录,它由程序集冲突解决程序用来探测程序集。由显示的路径可以看出,它代表的是程序集所在的目录,它具有读取和写入的属性。//获取程序的基目录。System.AppDomain.CurrentDomain.BaseDirectory//获取模块的完整路径。System.Diag......
  • nis客户端开启ypbind失败 ldap ypbind[5270]: NIS server for domain domain is not r
    nis客户端开启ypbind失败Dec1715:31:03ldapypbind[5270]:NISserverfordomainanykaisnotrespon报错解释:这条日志信息来自于一个尝试使用NIS(网络信息服务)进行域名为anyka的用户查询,但是NIS服务器没有响应。ypbind是用来绑定到NIS域的工具,它会尝试绑定到指定的NIS服务......
  • Towards Robust Evaluation: A Comprehensive Taxonomy of Datasets and Metrics for
    本文是LLM系列文章,针对《TowardsRobustEvaluation:AComprehensiveTaxonomyofDatasetsandMetricsforOpenDomainQuestionAnsweringintheEraofLargeLanguageModels》的翻译。迈向稳健评估:大语言模型时代开放领域问答的数据集和指标的综合分类摘要1......
  • CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
    SeleniumSelenium是一款开源且可移植的自动化软件测试工具,专门用于测试网页端应用程序或者采集网页端数据。它能够在不同的浏览器和操作系统上运行,具有很强的跨平台能力。Selenium可以帮助测试人员更高效地自动化测试基于Web网页端的应用程序,也可以帮忙开发者方便地完成网页端数......