Chromium CDP 开发(十):Chromium 中增加自己的Domain

embedded/2024/12/25 1:38:02/

1. 引言

在深入了解了 Chromium CDP(Chrome DevTools Protocol)的开发过程之后,接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain,可以避免对已有的 CDP 进行侵入式修改,从而更好地组织和管理新增的指令与事件。在本章中,我们将详细讲解如何分离出独立的 PDL 文件、JSON 配置文件以及对应的 Handler 文件,构建一个全新的、自定义的 CDP Domain。

通过构建自定义 Domain,开发者可以清晰地划分新的功能模块,并且有效提升维护性与开发效率。

2. 为何需要建立自己的 Domain

建立自定义的 CDP Domain 是为了确保我们的扩展功能能够有序地集成到现有的 Chromium CDP 体系中,而不会对原有的指令和事件产生冲突。每个已有的 Domain 都有其明确的功能范围和作用域。如果我们在这些已有的 Domain 中不断增加新的指令和事件,势必会影响原有功能的稳定性和可维护性。因此,最合适的做法是创建一个独立的 Domain,将我们自定义的指令和事件与现有功能分隔开来。

自定义 Domain 的好处在于:

独立性:自定义 Domain 与现有的 CDP 功能模块独立,避免了功能混淆。

可维护性:所有新增功能集中在自定义的 Domain 中,便于后续的维护和扩展。

安全性:降低修改已有 Domain 造成意外错误的风险。

可扩展性:随着功能需求的增加,自定义 Domain 可以灵活扩展,适应新的开发需求。

3. 建立自己的 Domain 需要做哪些工作

要构建一个新的 CDP Domain,我们需要创建并配置几个核心文件。根据之前章节的内容,我们知道 CDP 的关键文件包括 PDL 文件、访问配置文件(JSON),以及实现文件(Handler 文件)。接下来,我们将详细说明如何为自定义的 Domain 创建和配置这些文件。

3.1 方法描述文件:PDL 文件

PDL(Protocol Description Language)文件是定义 CDP 指令和事件的核心文件。每个新的 Domain 都需要有独立的 PDL 文件来描述其方法、参数、返回值以及事件。PDL 文件是 CDP 功能的基础,通过这个文件,协议的结构化描述可以被自动转化为相应的 C++ 头文件和类型定义。

文件路径示例:

third_party\blink\public\devtools_protocol\my_custom_domain.pdl

在此文件中,我们将定义自定义的指令和事件。例如,假设我们需要实现一个新的定时器功能,就可以在 PDL 文件中定义相关指令,如 startTimerstopTimer,以及定时器触发的事件 timerFired

3.2 访问配置文件:JSON 文件

inspector_protocol_config.json 是负责管理 CDP 访问权限和功能的配置文件。每个定义在 PDL 文件中的指令和事件,都需要在这个 JSON 文件中进行注册,才能在浏览器中使用。为确保自定义 Domain 的指令和事件能够被识别和调用,我们需要在这个文件中为新创建的 Domain 配置访问权限。

文件路径示例:

chrome\browser\devtools\inspector_protocol_config.json

在配置文件中,我们需要为新 Domain 添加指令和事件的声明。这样,浏览器的 DevTools 工具才能正确解析并调用自定义的指令和事件。

3.3 实现文件:Handler 文件

Handler 文件是负责处理 CDP 指令和事件逻辑的 C++ 文件。每个 Domain 都会有对应的 Handler 文件,用于响应来自客户端的指令,执行相应的操作,并返回结果。我们需要为自定义的 Domain 创建一个新的 Handler 文件,并在其中实现所有自定义指令的具体逻辑。

文件路径示例:

chrome\browser\devtools\protocol\my_custom_domain_handler.h

chrome\browser\devtools\protocol\my_custom_domain_handler.cc

在 Handler 文件中,我们将实现所有在 PDL 文件中定义的指令。以定时器功能为例,我们将在 my_custom_domain_handler.cc 中实现 startTimerstopTimer 的功能逻辑,并通过事件机制定期发送 timerFired 事件。

4. 总结

本章介绍了如何在 Chromium 中创建一个自定义的 CDP Domain。通过独立的 PDL 文件、JSON 配置文件以及 Handler 文件,我们能够将自定义的功能与现有的 CDP 系统隔离开来,从而实现更好的模块化管理和功能扩展。

创建自定义 Domain 的主要目的是保持现有 CDP 结构的完整性和稳定性,同时确保新功能的独立性和可维护性。通过将自定义指令和事件集中到一个独立的 Domain 中,开发者可以轻松地扩展浏览器的功能,满足特定的项目需求。

在接下来的章节中,我们将详细介绍如何编写这些文件,进一步实现自定义 Domain 的功能扩展。


http://www.ppmy.cn/embedded/148489.html

相关文章

【AI图像生成网站Golang】项目测试与优化

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中,性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…

go字符、字符串等

编码:https://blog.csdn.net/Deft_MKJing/article/details/79460485 go语言没有char。 1. byte uint8,处理ASCII或UTF-8编码的字节,string的单个字符是byte,还可以存储二进制数据,但不是处理二进制数据,处…

Docker的容器编排

目录 1. 什么是容器编排(Docker Compose)2. 容器编排的功能3. 容器编排文件(docker-compose.yml)的介绍3.1 文件语法版本3.2 文件基本结构及常见指令 4. Docker Compose命令详解4.1 Docker Compose命令清单4.2 命令格式和常见选项…

HTML中的Vue3解析!

#Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它在 HTML 中发挥着重要的作用,可以让开发者轻松地创建交互式的网页应用。与 HTML 结合时,Vue 3 通过自定义指令、组件等方式增强了 HTML 的功能。# 一、vue的概述 Vue 采用了双向数据绑定机制…

Spring Boot 声明式事务

Spring Boot中的声明式事务管理主要通过Transactional注解来实现。以下是Transactional注解的一些关键用法和特性: 1. 启用事务管理 在Spring Boot应用中使用Transactional注解之前,需要在启动类或者配置类上添加EnableTransactionManagement注解来启用事…

同态加密算法详解及Python实现

目录 同态加密算法详解及Python实现第一部分:同态加密概述与原理1.1 什么是同态加密?同态加密的定义:1.2 同态加密的分类1.3 同态加密的优势与挑战优势挑战第二部分:常见同态加密算法及其应用场景2.1 RSA同态加密支持操作应用场景2.2 Paillier加密支持操作应用场景2.3 Gent…

虚幻引擎游戏开发系列专题-官方编码标准或规约

遵守既定标准和最佳实践来编写可维护的代码。在虚幻游戏引擎中,存在着一些既定的编码标准和约定 ,养成良好的编码规范是写好一份优雅代码的第一步,并且在虚幻官方也强调了,某些编码标准的遵循是强制性的。 编码规约对程序员来说意味着什么 在软件开发中,软件生命周期的80%的成…

第四章补充:线性代数(B站:一高数)

视频1:行列式的入门 原视频:线性代数!启动!从零开始到精通|第一集_哔哩哔哩_bilibili 一、二阶与三阶行列式 小学我们就接触过鸡兔同笼,这个问题让我们第一次接触到了方程组的思想。我们可以将它抽象成一个二元一次…