惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
N
News | PayPal Newsroom
SecWiki News
SecWiki News
P
Privacy International News Feed
T
Troy Hunt's Blog
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
L
LINUX DO - 热门话题
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Security Latest
Security Latest
AWS News Blog
AWS News Blog
S
Secure Thoughts
W
WeLiveSecurity
H
Heimdal Security Blog
T
Threat Research - Cisco Blogs
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
S
Security @ Cisco Blogs
G
GRAHAM CLULEY
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
L
Lohrmann on Cybersecurity
C
CERT Recently Published Vulnerability Notes
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
Cisco Talos Blog
Cisco Talos Blog
雷峰网
雷峰网
Cloudbric
Cloudbric
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Google DeepMind News
Google DeepMind News
Vercel News
Vercel News
云风的 BLOG
云风的 BLOG
Latest news
Latest news
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
D
Docker
Recent Announcements
Recent Announcements
博客园 - 【当耐特】
H
Help Net Security
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Check Point Blog
博客园 - 叶小钗

Dosk 技术站

华为荣耀电视盒子刷 Armbian - Dosk 技术站 记录一个没意义的 usb wifi 驱动编译 - Dosk 技术站 我的 2024 - Dosk 技术站 unRAID 7.0.0-beta.1 - Dosk 技术站 关于 unraider 的开心版 - Dosk 技术站 unRAID 6.12.7-rc2 进展 - Dosk 技术站 每年问自己 40 个问题 - Dosk 技术站 Kubernetes 集群导航页 - Dosk 技术站 2023 年度总结 - Dosk 技术站 N100 万兆软路由最终形态 - Dosk 技术站 N100 软路由改造下散热 - Dosk 技术站 N100 万兆软路由测测速 - Dosk 技术站 整活新玩具,半 DIY 一个万兆软路由 - Dosk 技术站 玩玩 WebAuthn:RP2040 One - Dosk 技术站 关于最近以及后续要做什么 - Dosk 技术站 unRAID 6.12.0-rc7/6.12.0-rc6.13 - Dosk 技术站 unRAID 6.12.0-beta18 试用 - Dosk 技术站 unRAID 6.11.4 如何继续开心 - Dosk 技术站 cert-manager 基于 acme.sh 的 webhook - Dosk 技术站 unRAID 虚拟机运行 unRAID 简单步骤 - Dosk 技术站 解决 Chrome 原生谷歌翻译功能的一个思路:3/3 - Dosk 技术站 解决 Chrome 原生谷歌翻译功能的一个思路:1/3 - Dosk 技术站 unraid 命令行包管理器 - Dosk 技术站 继续,unraid 6.11 happy 的方法 - Dosk 技术站 适用于 k8s 的 frpc ingress 实现 - Dosk 技术站 实现了一个简单的通配 DNS 服务 - Dosk 技术站 代码更新,happy unraid 懒人版 - Dosk 技术站 复盘一次群晖的 btrfs + docker:dind 引发的灾难 - Dosk 技术站 unraid 官方版不修改不用 keymaker 可持续 happy 的方法 - Dosk 技术站 unraid 实现完美硬盘启动 - Dosk 技术站 rpi3b+ 跑 pi-kvm 项目记录 - Dosk 技术站 记录一下 docker 里跑 dsm 迅雷套件的过程 - Dosk 技术站 docker 更新,整理 build - Dosk 技术站 记录下 openwrt 改交换机的步骤,以及注意事项 - Dosk 技术站 docker 里跑 openwrt 遇到的奇奇怪怪问题修复 - Dosk 技术站 OpenWrt 添加一个 socat 的 luci web 界面 - Dosk 技术站 Cloudflare DDNS 脚本,适配 OpenWrt,自带的不好用 - Dosk 技术站 在 NAS 里优雅的使用迅雷 - Dosk 技术站 记录一次 rpi4b 使用 openwrt docker 接管网络 - Dosk 技术站 悲伤是一件很耗费精力的事情 - Dosk 技术站 Tablet 板绘 - 梅花 - Dosk 技术站 Chromium 代码下并发 Callback 的骚操作 - Dosk 技术站 Tablet 板绘 - 月光 - Dosk 技术站 测试测试 Forestry - 一个 Jekyll CMS - Dosk 技术站 Cocoa 如何创建置于全屏之上的 NSWindow - Dosk 技术站 修改 Prose 支持中文标题 - Dosk 技术站 macOS & Windows 实现系统/进程/线程的 CPU 统计 - Dosk 技术站 STL 内 std::{bind/tuple/function} 简单实现 - Dosk 技术站 Cocoa 修改 TitleBar 样式 - Dosk 技术站
如何从 Chromium “偷” UI - Dosk 技术站
2021-02-11 · via Dosk 技术站

背景

  • 产品是基于 Chromium 代码库,希望能够将 ChromiumUI 部分进程分离开

调研

这部分调研的流程非常冗长,所以只精简概述

  1. Windows 下很明显非常简单,SetParent 就能简单的解决这个事情

  2. macOS 下,一开始想和 Windows 一样,直接跨进程操作 NSView,事实证明这个想法有点蠢

  3. 研究苹果公开的一些资料,查到了 IOSurface 这个家伙,不过并没有找到直接能用的东西

  4. 回头找到一个 CARemoteLayerdemo,跑了一下是 ok 的,于是结合 Chromium 代码库去搜索,查到了一些端倪(CodeSearch)

  5. 在代码里也看到使用 IOSurface 的方法,果然 Google 的代码能够让人进步啊

实践

  1. 先使用比较裸奔的方法,看懂了 demo 之后,直接魔改了 gpu 部分的代码,打日志将 contextId 打出来

  2. 魔改下 demo 的代码,将 ipc_read(&contextid) 的逻辑直接写死赋值,并注释掉 ClientMain 的逻辑

  3. 运行,测试,一切顺利的跑起来了

问题

  1. 测试了确实能够实现远程渲染,但是只是通过 gpu 渲染的 OpenGL 部分,浏览器本身还有很多原生的元素(menu 和系统输入法等)

  2. 解决方案也很简单,查了下 //third_party/blink 下的逻辑,发现其实主要是 <select>context_menu 两部分,好在 Chromium 都有很好的将逻辑通过 mojo 发送到 browser 里实现,所以理论上只要通过 ipc 转发出来并实现,再屏蔽掉默认的逻辑即可

  3. 输入法是个大坑,其实一直以来都有好奇,包括不限于浏览器渲染,或者游戏这种通过自己的逻辑渲染出来的画面,是如何让系统输入法很好的识别到哪个区域需要文本输入的,查了下苹果的文档,找到了这么个东西 NSTextContent

  4. 剩下的就好办了,查了下代码里使用到这个 protocol 的地方;但是,彻底把我绕晕了

  5. 于是换个思路,还是从 blink 里查起,查到了 EditContext 这么个概念,顺着代码缕一遍,最后落实到 OnUpdateTextInputStateCalled 这个方法上

扩展

这件事能做出来啥很牛逼的事情呢

  1. 想象一下,如果一个产品基于 Chromium 但是又想有完整的浏览器体验,又想稳定性极佳,通过这种跨进程渲染的方式是不是稳定性飙升

  2. 再扩展一下,如果想在 macOS 下支持 IEocx 控件(呐,天朝网银大环境),怎么实现

a. 跑一个 wine,它是通过 QuartzX 渲染的

b. 画面桥接过来

c. 当然你也可以直接在程序内实现一个 X Window Server 啦,不一定非要这么玩

总结

  1. 文章只是记录了这件事的调查流程,包括不限于代码/截图因为产品原因是不会放出来的

  2. 是不是以后可以随便扣游戏画面了