2023年12月7日发(作者:)
自己动手定制Chromium系列之五:修改Chromium源码,给插
件(扩展Extensi。。。
给Extension增加私有接口,存在两种方式,第一种,是通过JSON文件,定义类似IDL的key value。
这种方式太复杂,已经被官方放弃,今天介绍的是第二种——基于IDL的方式。
可以参见官方文档,链接在此,但文档也并不全面。
我们的目标,新增JS接口tring()。
也就是,向输出调试文本。
1.在文件chromecommonextensionsapi_permission_中,追加如下代码。
"MyPrivate": {
"channel": "stable",
"extension_types": ["extension"]
}
2.在文件chromecommonextensionsapi_api_中,追加如下代码。
"MyPrivate": {
"dependencies": ["permission:MyPrivate"],
"contexts": ["blessed_extension"]
}
3.在文件中,找到数组schema_sources的定义,按照字母表顺序,追加如下代码。
""
4.前面几个步骤,均为指明文件的属性,如何编译,下面开始编写啦。如下所示。
文件的相对路径为:。
内容:
//MyPrivate function
namespace myPrivate {
interface Functions {
// output string
static void PrintString(DOMString text);
};
};
警告:一定需要注释,一定不要省略注释,否则,编译无法通过
5.在文件chromecommonextensionspermissionschrome_api_中,找到permissions_to_register的定义,按照
字母表顺讯,追加如下代码。
{ APIPermission::kMyPrivate, "myPrivate"},
6.在文件extensionscommonpermissionsapi_permission.h中,找到enum ID,按照字母表顺序,添加如下代码。
kMyPrivate
7.在编译配置文件中,找到static_library("extensions"),在其中的sources组数定义中,按照
字母表顺序,添加如下代码。
"api/myPrivate/","api/myPrivate/myPrivate.h"
8.下面是响应新增扩展接口的C++实现,前面都是准备工作。
新增两个文件,路径分别为:
chromebrowserextensionsapimyPrivatemyPrivate.h
myPrivate.h文件内容:
#ifndef CHROME_BROWSER_EXTENSIONS_API_MYPRIVATE_MYPRIVATE_API_H_
#define CHROME_BROWSER_EXTENSIONS_API_MYPRIVATE_MYPRIVATE_API_H_
#include
#include "base/scoped_observer.h"
#include "chrome/common/extensions/api/my_private.h"
#include "extensions/browser/extension_function.h"
namespace extensions {
class MyPrivatePrintStringFunction : public AsyncExtensionFunction
{
public:
MyPrivatePrintStringFunction();
protected:
~MyPrivatePrintStringFunction() override;
virtual bool RunAsync() override;
private:
DECLARE_EXTENSION_FUNCTION("tring", MYPRIVATE_PRINT_STRING);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_MYPRIVATE_MYPRIVATE_API_H_
文件内容:
#include "chrome/browser/extensions/api/my_private/my_private_api.h"
#include "chrome/browser/extensions/chrome_extension_function.h"
#include "extensions/browser/extension_function_registry.h"
#include "extensions/common/extension.h"
namespace extensions {
MyPrivatePrintStringFunction::MyPrivatePrintStringFunction() {}
MyPrivatePrintStringFunction::~MyPrivatePrintStringFunction() {}
bool MyPrivatePrintStringFunction::RunAsync()
{
std::unique_ptr
EXTENSION_FUNCTION_VALIDATE(());
::OutputDebugString(params->data.c_str());
SendResponse(true);
return true;
}
} // namespace extensions
9.在文件extensionsbrowserextension_function_histogram_value.h中,找到enum HistogramValue的定义,按照字母表顺序,追
加
MYPRIVATE_PRINT_STRING
然后,执行python tools/metrics/histograms/update_extension_
10.一切工作准备完毕,可以执行编译命令了。
福利链接:
如何使用Chrome插件,免费上谷歌,谷歌学术,
真男人不能说不行:使用插件,全面提升Chrome的颜值,逼格,易用性,福利,开车技能,


发布评论