chromium 40 Mojo JavaScript 绑定 API

Mojo JavaScript 绑定 API

01 为 mojom 编译js脚本

官网说明:
https://chromium.googlesource.com/chromium/src/+/refs/heads/main/mojo/public/js/README.md

src\services\test\echo 有一个echo_service demo。可以结合使用。

注意编译生成 mojom 的 js 接口文件的命令
ninja -C out\Debug services\test\echo\public\mojom:mojom_js
生成c++的指令
ninja -C out\Debug services\test\echo\public\mojom:mojom

Mojo js api 生成
// js mojo 接口需要的依赖文件在 gen\mojo\public\js\ 目录下:

gen\mojo\public\js\ mojo_bindings.js
gen\mojo\public\js\ mojo_bindings_lite.js

02 Mojo js的绑定权限

Mojo的js功能,并不是哪里都可以用的。可以通过命令行增加参数启用,还有就是默认的新标签页。
默认renderer和扩展进程是不能使用js的Mojo功能的。

可以通过注释掉子进程的限制条件,来对所有情况开启js的mojo功能。

void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
                                             int world_id) {
  v8::MicrotasksScope microtasks(blink::MainThreadIsolate(),
                                 v8::MicrotasksScope::kDoNotRunMicrotasks);
  //if (((enabled_bindings_ & BINDINGS_POLICY_MOJO_WEB_UI) ||
  //     enable_mojo_js_bindings_) &&
  //    IsMainFrame() && world_id == ISOLATED_WORLD_ID_GLOBAL) {
  //  // We only allow these bindings to be installed when creating the main
  //  // world context of the main frame.
  //  blink::WebV8Features::EnableMojoJS(context, true);
  //}
  if (IsMainFrame()) {
    blink::WebV8Features::EnableMojoJS(context, true);
  }

  for (auto& observer : observers_)
    observer.DidCreateScriptContext(context, world_id);
}

其他相关代码:

void RenderFrameHostImpl::EnableMojoJsBindings()

void RenderFrameImpl::EnableMojoJsBindings()

js要导出的接口在 src\third_party\blink\renderer\core\mojo\mojo.idl里面定义的。

03 给扩展增加一些js接口

chrome/browser/resources/extensions/BUILD.gn 添加

    excludes = [ "chrome://resources/js/cr.m.js",
      "chrome://resources/mojo/mojo/public/js/bindings.js",
      "chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js",
      "chrome://resources/mojo/mojo/public/mojom/base/big_buffer.mojom-lite.js",
      "chrome://resources/mojo/mojo/public/mojom/base/string16.mojom-lite.js",
      "chrome://resources/mojo/mojo/public/mojom/base/text_direction.mojom-lite.js",
      "chrome://resources/mojo/mojo/public/mojom/base/time.mojom-lite.js",
      "chrome://resources/mojo/mojo/public/mojom/base/unguessable_token.mojom-lite.js",
      "chrome://resources/mojo/skia/public/mojom/skcolor.mojom-lite.js",
      "chrome://resources/mojo/skia/public/mojom/skcolor.mojom-webui.js",
      "chrome://resources/mojo/url/mojom/origin.mojom-lite.js",
      "chrome://resources/mojo/url/mojom/url.mojom-lite.js",
    ]

chrome/browser/resources/extensions/extensions.js 添加

import 'chrome://resources/mojo/mojo/public/js/bindings.js';
import 'chrome://resources/mojo/mojo/public/js/mojo_bindings_lite.js';
import 'chrome://resources/mojo/mojo/public/mojom/base/big_buffer.mojom-lite.js';
import 'chrome://resources/mojo/mojo/public/mojom/base/string16.mojom-lite.js';
import 'chrome://resources/mojo/mojo/public/mojom/base/text_direction.mojom-lite.js';
import 'chrome://resources/mojo/mojo/public/mojom/base/time.mojom-lite.js';
import 'chrome://resources/mojo/skia/public/mojom/skcolor.mojom-lite.js';
import 'chrome://resources/mojo/url/mojom/url.mojom-lite.js';

添加如下内容后,可以看到chrome中,增加了 mojomojoBase (小写的 mojo)
针对扩展增加mojo

参考

chrome sandbox escape case study and plaidctf2020 mojo writeup

Chrome Extension 通信常用 API 说明

添加chromium mojom调用

Chromium C++与JS之间互调

杂记(3)chrome扩展程序开发之在目标页面执行JS脚本

chromium 添加 javascript 扩展 即 C++与javascript互操作

chrome sandbox escape case study and plaidctf2020 mojo writeup (推荐)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值