Chromium CDP 开发(十二):为自己的Domain建立custom_config.json

引言
本章详细介绍了如何为自定义的 CDP Domain 创建 custom_config.json 文件,并通过修改 BUILD.gn 文件来确保自定义的配置文件参与编译。我们通过 inspector_protocol_generate 配置段自动生成自定义 Domain 的头文件和实现文件,并成功将其集成到构建系统中。通过这些步骤,开发者能够实现自定义 CDP 功能的配置与构建,确保自定义 Domain 的指令和事件能够在 Chromium 中正常运行。
创建 custom_config.json 文件
- 打开目录:
使用文件浏览器或终端,导航到 chrome\browser\devtools 目录。确保在该目录中创建新文件,以便于组织和管理 DevTools 相关的配置文件。
- 创建 JSON 文件:
在该目录下,创建一个新的文件,命名为 custom_config.json。确保文件扩展名为 .json,以便于后续解析和使用。
- 编写配置内容:
打开 custom_config.json 文件,按照以下结构编写内容,以配置新定义的 Domain 和指令:
我们增加custom_config.json 代码
{"use_snake_file_names": true,"use_title_case_methods": true,"protocol": {"package": "chrome/browser/devtools/protocol","output": "protocol","namespace": [ "protocol" ],"options": [{"domain": "CustomCDP","include": ["cdpVersion"],"include_events": []}]},"lib": {"package": "chrome/browser/devtools/protocol","output": "protocol","protocol_traits": "third_party/inspector_protocol/crdtp/chromium/protocol_traits.h"},"crdtp": {"namespace": "crdtp"}
}

接下来我们需要增加 chrome\browser\devtools\BUILD.gn 来让我们的custom_config.json 参与编译
chrome\browser\devtools\BUILD.gn 的编辑
在处理custom_config.json相关的编译时不像pdl那般简单因为我们需要通过ninja 编译时产生许多CDP所需要的头文件和协议文件所以我们要在 chrome\browser\devtools\BUILD.gn 加入更复杂的内容
建立 inspector_protocol_generate 代码段
我们需要inspector_protocol_generate在 gen\chrome\browser\devtools\protocol 下生成我们的cdp handler 所需的头文件这里要注意的是gen\chrome\browser\devtools\protocol下生成的文件名是根据 Domain名字自动生成的比如我们的Domain名是 CustomCDP那么对应的名字就是custom_cdp.h 这里在写gn和实现时都要注意
inspector_protocol_generate("protocol_generated_sources_custom") {inspector_protocol_dir = _inspector_protocolvisibility = [ ":*" ] # Only targets in this file can depend on this.deps = [ ":concatenate_protocols" ]out_dir = target_gen_dir#配置文件config_file = "custom_config.json"use_embedder_types = trueprotocol_path = rebase_path(_concatenated_protocol_path, root_build_dir)config_values = [ "protocol.path=$protocol_path" ]inputs = [_concatenated_protocol_path,"custom_config.json"]outputs = [#这里注意文件名要根据自己定义的domain来"protocol/custom_cdp.cc","protocol/custom_cdp.h",]}

然后我们需要把这个 protocol_generated_sources_custom_cdp 加入到编译所需的依赖里
我们需要找到 static_library("devtools") 配置段然后再找到对应的deps位置加入 protocol_generated_sources_custom_cdp

这样可以确保我们在编译浏览器时这部分的配置会产生对应的协议头文件生成
然后这里我们还要加入这个部分

因为 protocol_generated_sources_custom_cdp 只是会帮助你生成gen\chrome\browser\devtools\protocol 下的头文件但是对于gn系统来说这些文件并没有被加入到编译的tree里所以在此处吧这些文件路径重新加入到sources 这样确保生成出来的.h文件和.cc文件能正确加入编译
总结
本章详细介绍了如何为自定义的 CDP Domain 创建 custom_config.json 文件,并通过修改 BUILD.gn 文件来确保自定义的配置文件参与编译。我们通过 inspector_protocol_generate 配置段自动生成自定义 Domain 的头文件和实现文件,并成功将其集成到构建系统中。通过这些步骤,开发者能够实现自定义 CDP 功能的配置与构建,确保自定义 Domain 的指令和事件能够在 Chromium 中正常运行。
相关文章:
Chromium CDP 开发(十二):为自己的Domain建立custom_config.json
引言 本章详细介绍了如何为自定义的 CDP Domain 创建 custom_config.json 文件,并通过修改 BUILD.gn 文件来确保自定义的配置文件参与编译。我们通过 inspector_protocol_generate 配置段自动生成自定义 Domain 的头文件和实现文件,并成功将其集成到构建…...
【Vue】全局/局部组件使用流程(Vue2为例)
全局组件和局部组件区别 如何使用 全局组件:全局注册后,可以在任意页面中直接使用。局部组件:在页面中需要先导入子组件路径,注册组件才能使用。 适用场景 全局组件:适用于高频使用的组件,如导航栏、业…...
Vue.js组件开发详解
在现代前端开发中,Vue.js 凭借其简洁、高效、灵活的特性,成为了众多开发者的首选框架之一,而组件化开发则是 Vue.js 的核心优势。组件可以将复杂的 UI 界面拆分成一个个独立的、可复用的小块,极大地提高了开发效率和代码的可维护性…...
解决:ubuntu22.04中IsaacGymEnv保存视频报错的问题
1. IsaacGymEnvs项目介绍 IsaacGymEnvs:基于NVIDIA Isaac Gym的高效机器人训练环境 IsaacGymEnvs 是一个基于 NVIDIA Isaac Gym 的开源 Python 环境库,专为机器人训练提供高效的仿真环境。Isaac Gym 是由 NVIDIA 开发的一个高性能物理仿真引擎…...
深度学习camp-第J7周:对于ResNeXt-50算法的思考
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 📌你需要解决的疑问:这个代码是否有错?对错与否都请给出你的思考 📌打卡要求:请查找相关资料、逐步…...
java: 错误: 无效的源发行版:17解决办法
遇到“java: 错误: 无效的源发行版:17”的问题,通常是因为项目设置中指定的Java版本与当前环境不一致导致的。以下是几种可能的解决方案: 检查并升级Java版本:确保你已经安装了支持Java 17的JDK版本。你可以通过命令行输入java -v…...
Docker 安装开源的IT资产管理系统Snipe-IT
一、安装 1、创建docker-compose.yaml version: 3services:snipeit:container_name: snipeitimage: snipe/snipe-it:v6.1.2restart: alwaysports:- "8000:80"volumes:- ./logs:/var/www/html/storage/logsdepends_on:- mysqlenv_file:- .env.dockernetworks:- snip…...
Go语言封装加解密包(AES/DES/RSA)
Go语言封装加解密包(AES/DES/RSA) 1. Base64编码与解码2. AES加解密3. DES加解密4. RSA加解密5. SHA256哈希6. 单元测试1. AES加解密单元测试2. DES加解密单元测试3. RSA加解密单元测试4. SHA256哈希单元测试测试用例说明 总结 在现代软件开发中…...
sql server 对 nvarchar 类型的列进行 SUM() 运算
因为 SUM() 是一个数值聚合函数,不能直接应用于字符串类型的数据。为了正确汇总标准数量,你需要确保该列的数据类型是数值类型,如 int、decimal 或 float。 假设要统计数量列的和,由于数量列是 nvarchar 类型,你需要先…...
java中json字符串键值获取
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version> </dependency>使用fastjson依赖 JSONObject jsonObject JSON.parseObject(s); 这个jsonObject本质就是一个map&…...
MPLS原理及配置
赶时间可以只看实验部分 由来:90年代中期,互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发,但由于硬件技术存在限制导致转发性能低,查表转发成为了网络数据转发的瓶颈。 因此,旨在提高路由器转发速度的MPL…...
口碑很好的国产LDO芯片,有哪些?
在几乎任何一个电路设计中,都可能会使用LDO(低压差线性稳压器)这个器件。 虽然LDO不是什么高性能的IC,但LDO芯片市场竞争异常激烈。最近几年,诞生了越来越多的精品国产LDO,让人看得眼花缭乱。 业内人士曾经…...
【流程设计】类似钉钉的流程设计功能样式demo
对于一些审批流程,可能会用到这个功能,通过这样一层层的加下来,弄一个审批流程的数组,然后根据这个来审核是否都通过审批,这里是简单的弄一个样式的demo,功能自由发挥 <!DOCTYPE html> <html>…...
ChatGPT入门之文本情绪识别:先了解LSTM如何处理文字序列
文章目录 0. 首先聊聊什么是RNN1. 理解LSTM,从数据如何喂给 LSTM开始2. LSTM每个门是如何处理序列数据的?2.1 遗忘门(Forget Gate):该忘掉哪些信息?2.2 输入门(Input Gate)ÿ…...
测试开发之面试宝典
目录 session和cookie的区别 session和cookie的区别 1.session和cookie都是鍵值对应的 2.session和cookie都是服务器生成的,session的ID,即服各器用来识别读取session对象的一把钥匙 3.session是保存在服各器端,而cookie是返回給客戶端的&…...
399. 除法求值【 力扣(LeetCode) 】
文章目录 零、LeetCode 原题一、题目描述二、测试用例三、解题思路3.1 图的路径搜索3.2 路径压缩 四、参考代码4.1 图的路径搜索4.2 路径压缩 零、LeetCode 原题 399. 除法求值 一、题目描述 给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,…...
算法日记1:洛谷p2678跳石头(二分答案)
1、题目 二、题解: 2.1解题思路: 1.题目要求求出最小值最大,明显的二分答案题目,所以我们可以二分可以跳跃距离int l-1,rL1; 2.此时我们思考lmid和rmid的处理,当我们的check(mid)为true时候 表明我们此时的mid是符合要求的, 那么…...
Unity shader中真的可以动态关闭Stencil Test吗?
这个问题很多年前就有人问了: https://discussions.unity.com/t/how-to-disable-the-stencil-block-via-shader-properties/600273/1 最后的答案是: set [_StencilComp] to CompareFunction.Disabled to disable the Stencil Op completely. 但是我测试…...
YOLOv9改进,YOLOv9自研检测头融合HyCTAS的Self_Attention自注意力机制,2024,适合目标检测、分割任务
摘要 论文提出了一种新的搜索框架,名为 HyCTAS,用于在给定任务中自动搜索高效的神经网络架构。HyCTAS框架结合了高分辨率表示和自注意力机制,通过多目标优化搜索,找到了一种在性能和计算效率之间的平衡。 # 理论介绍 自注意力(Self-Attention)机制是HyCTAS框架中的一个…...
计算机网络 (36)TCP可靠传输的实现
前言 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通过多种机制实现可靠传输,这些机制主要包括连接管理、序列号和确认应答机制、重传机制、流量控制、拥塞控制等。 一、连接管理 TCP使用三次握手࿰…...
单片机产品设计全流程与实战经验分享
1. 单片机产品设计全流程解析作为一名在嵌入式领域摸爬滚打多年的硬件工程师,我经手过从智能家居到医疗设备的各类单片机项目。今天想系统梳理一下用单片机设计产品的完整流程,特别是那些教科书不会告诉你的实战经验。单片机之所以成为现代电子产品的核心…...
2025届最火的十大AI写作神器实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 降低AIGC也就是人工智能生成内容的痕迹,其关键要点在于,减少模式化表…...
M5ROTATE8库详解:8路旋转编码器I²C驱动与固件V2优化
1. 项目概述M5ROTATE8 是一款专为 M5Stack 生态中M5Unit-8Encoder(官方型号名:8ROTATE)模块设计的 Arduino C 库。该模块集成了8 路独立旋转编码器(Rotary Encoder)、8 个独立按键(Push Button)…...
C++编程主题:智能指针深入解析
C编程主题:智能指针深入解析 在C的广阔领域中,内存管理一直是一个既基础又至关重要的环节。传统的手动内存管理方式,如使用new和delete,虽然灵活,但容易引发内存泄漏、悬垂指针等问题,给程序的安全性和稳定…...
007、大语言模型集成:Prompt工程与上下文管理
昨天深夜调试时遇到一个诡异问题:同样的查询,在本地测试时LLM能准确返回产品参数,上了生产环境就总答非所问。盯着监控日志看了半小时才发现,某个微服务在拼接用户历史对话时,漏掉了两条关键消息——上下文窗口看似饱满,实则缺了核心信息。这个坑让我重新审视了RAG系统中…...
标书制作入门
电子标书时代来了,但很多中小企业还在用老方法踩坑🕳️ 伟发标书10年经验,今天说点大实话👇一、电子标书不是"纸质版扫描件"📄 很多人以为电子标书就是把纸质文件转成PDF,大错特错❌ 真正的电子标…...
低噪放(LNA)关键参数在5G通信电路设计中的优化策略
1. 5G时代LNA设计的核心挑战 当你用手机刷短视频时,可能不会想到信号要经历一场"马拉松"——从基站出发,穿过建筑、树木、甚至雨雾,最终到达你掌心大小的设备。而这场马拉松的第一棒选手,就是藏在手机射频前端的低噪声…...
告别手动配置烦恼:3个步骤用OCAT轻松搞定OpenCore黑苹果引导
告别手动配置烦恼:3个步骤用OCAT轻松搞定OpenCore黑苹果引导 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 还在为复杂…...
Xamarin.Macios性能优化终极指南:10个让你的应用运行如飞的技巧
Xamarin.Macios性能优化终极指南:10个让你的应用运行如飞的技巧 【免费下载链接】xamarin-macios .NET for iOS, Mac Catalyst, macOS, and tvOS provide open-source bindings of the Apple SDKs for use with .NET managed languages such as C# 项目地址: http…...
如何基于SecGPT构建企业级安全智能助手:完整实践指南
如何基于SecGPT构建企业级安全智能助手:完整实践指南 【免费下载链接】SecGPT SecGPT网络安全大模型 项目地址: https://gitcode.com/gh_mirrors/se/SecGPT SecGPT作为一款专业的网络安全大模型,为企业构建智能化安全防护体系提供了强大支持。本文…...
