Chromium 中chrome.topSites扩展接口定义c++

一、chrome.topSites

使用 chrome.topSites API 访问新标签页上显示的热门网站(即最常访问的网站)。不包括用户自定义的快捷方式。

权限

topSites

您必须声明“topSites”扩展程序清单中授予使用此 API 的权限。

{"name": "My extension",..."permissions": ["topSites",],...
}

示例

若要试用此 API,请安装 chrome-extension-samples 中的 topSites API 示例 存储库

类型

MostVisitedURL

用于封装最常访问的网址(例如新标签页上的默认快捷方式)的对象。

属性
  • 标题

    字符串

    网页的标题

  • 网址

    字符串

    最常访问的网址。

方法

get()

<ph type="x-smartling-placeholder"></ph> 承诺

chrome.topSites.get(callback?: function,
)

获取热门网站列表。

api更多介绍参考:chrome.topSites  |  API  |  Chrome for Developers

二、top_sites.json接口定义:

chrome\common\extensions\api\top_sites.json

// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.[{"namespace": "topSites","description": "Use the <code>chrome.topSites</code> API to access the top sites (i.e. most visited sites) that are displayed on the new tab page. These do not include shortcuts customized by the user.","types": [{"id": "MostVisitedURL","type": "object","description": "An object encapsulating a most visited URL, such as the default shortcuts on the new tab page.","properties": {"url": {"type": "string", "description": "The most visited URL."},"title": {"type": "string", "description": "The title of the page"}}}],"functions": [{"name": "get","type": "function","description": "Gets a list of top sites.","parameters": [],"returns_async": {"name": "callback","parameters": [{"type": "array","name": "data","items": {"$ref": "MostVisitedURL"}}]}}]}
]

 out\Debug\gen\chrome\common\extensions\api\generated_schemas.cc

constexpr char kTopSites[] = R
"R({"namespace":"topSites","types":[{"id":"topSites.MostVisitedURL","type":"object","properties":
{"url":{"type":"string"},"title":{"type":"string"}}}],
"functions":[{"name":"get","type":"function","parameters":[],"returns_async":{"name":"callback","parameters":[{"type":"array","name":"data","items":{"$ref":"topSites.MostVisitedURL"}}]}}]})R";

三、top_sites_api定义:

chrome\browser\extensions\api\top_sites\top_sites_api.h

chrome\browser\extensions\api\top_sites\top_sites_api.cc

namespace extensions {class TopSitesGetFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("topSites.get", TOPSITES_GET)TopSitesGetFunction();protected:~TopSitesGetFunction() override;// ExtensionFunction:ResponseAction Run() override;private:void OnMostVisitedURLsAvailable(const history::MostVisitedURLList& data);
};}  // namespace extensions

namespace extensions {TopSitesGetFunction::TopSitesGetFunction() = default;
TopSitesGetFunction::~TopSitesGetFunction() = default;ExtensionFunction::ResponseAction TopSitesGetFunction::Run() {scoped_refptr<history::TopSites> ts = TopSitesFactory::GetForProfile(Profile::FromBrowserContext(browser_context()));if (!ts)return RespondNow(Error(kUnknownErrorDoNotUse));ts->GetMostVisitedURLs(base::BindOnce(&TopSitesGetFunction::OnMostVisitedURLsAvailable, this));// GetMostVisitedURLs() will invoke the callback synchronously if the URLs are// already populated.return did_respond() ? AlreadyResponded() : RespondLater();
}void TopSitesGetFunction::OnMostVisitedURLsAvailable(const history::MostVisitedURLList& data) {base::Value::List pages_value;for (const auto& url : data) {if (!url.url.is_empty()) {base::Value::Dict page_value;page_value.Set("url", url.url.spec());if (url.title.empty()) {page_value.Set("title", url.url.spec());} else {page_value.Set("title", url.title);}pages_value.Append(std::move(page_value));}}Respond(WithArguments(std::move(pages_value)));
}}  // namespace extensions

四、chrome.topSites.get数据源介绍:

1、GetMostVisitedURLs函数具体定义在

components\history\core\browser\top_sites_impl.h

components\history\core\browser\top_sites_impl.cc

  // Initializes TopSitesImpl.void Init(const base::FilePath& db_name);// TopSites implementation.void GetMostVisitedURLs(GetMostVisitedURLsCallback callback) override;// WARNING: this function may be invoked on any thread.
void TopSitesImpl::GetMostVisitedURLs(GetMostVisitedURLsCallback callback) {MostVisitedURLList filtered_urls;{base::AutoLock lock(lock_);if (!loaded_) {// A request came in before we finished loading. Store the callback and// we'll run it on current thread when we finish loading.pending_callbacks_.push_back(base::BindOnce(&RunOrPostGetMostVisitedURLsCallback,base::RetainedRef(base::SingleThreadTaskRunner::GetCurrentDefault()),std::move(callback)));return;}filtered_urls = thread_safe_cache_;}std::move(callback).Run(filtered_urls);
}

2、topSites数据库操作类:

components\history\core\browser\top_sites_backend.h

components\history\core\browser\top_sites_backend.cc

3、topSites数据库初始化类:

components\history\core\browser\top_sites_database.h

components\history\core\browser\top_sites_database.cc

截取数据库表初始化代码:

bool InitTables(sql::Database* db) {static constexpr char kTopSitesSql[] ="CREATE TABLE IF NOT EXISTS top_sites(""url TEXT NOT NULL PRIMARY KEY,""url_rank INTEGER NOT NULL,""title TEXT NOT NULL)";return db->Execute(kTopSitesSql);
}

4、topSites数据库存储位置:

  C:\Users\Administrator\AppData\Local\Chromium\User Data\Default\Top Sites

数据库表定义如下:

五、加载扩展看下堆栈:

1、chrome.topSites.get->TopSitesGetFunction::Run

2、TopSitesImpl::GetMostVisitedURLs

3、TopSitesGetFunction::OnMostVisitedURLsAvailable 

    调用 Respond(WithArguments(std::move(pages_value))); 将返回的history::MostVisitedURLList& data数据回调给扩展。

4、看下扩展运行效果: 

总结:分析完毕。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462645.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了&#xff0c;但是需要调用腾讯云翻译&#xff0c;一直没成功。 第一步就是&#xff0c;按照这上面方法做&#xff1a;百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是&#xff1a;Zotero PDF translat翻译&#xff1a;申请腾讯翻译接口 主要是…

2-137 基于matlab的sigmoid函数的变步长自适应语音信号增强

基于matlab的sigmoid函数的变步长自适应语音信号增强&#xff0c;与传统LMS相对比&#xff0c;比较不同的变步长函数去噪效果&#xff0c;并基于较好的去噪算法分析不同变步长中参数变化对降噪的影响。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-13…

DNS服务部署

第一步&#xff1a;两个服务器恢复快照&#xff0c;预处理、安装软件、设置网卡信息 第二步&#xff1a;主服务端操作&#xff0c;编辑主配置文件设置监听IP。主服务端操作打开区域配置文件&#xff0c;添加如下内容&#xff0c;重点为&#xff1a;允许从服务器的同步请求&…

云效+mqtt实现本地构建和远程自动发版

之前写过一篇jenkinsmqtt实现本地构建和远程自动发版_jenkins远程调用和本地调用-CSDN博客 由于本地搭建jenkins实在太费机器了&#xff0c;这次改用云效搭建。不过云效并没有直接发送mqtt的方法&#xff0c;需要编写中转接口。 中转接口采用go-gin框架实现&#xff0c;代码如…

存储器与寄存器

​​​​​​存储器 存储器&#xff08;Memory&#xff09;是计算机中用于存储数据和程序的硬件设备。有了存储器计算机就具有记忆功能。 RAM 随机存取存储器&#xff08;RAM, Random Access Memory&#xff09; 是计算机系统中一种重要的内存类型&#xff0c;主要用于临时存储…

T10打卡—数据增强

​​​​​​​ &#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 1.导入及查看数据 import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]False import…

wordpress ripro-v5-8.3开心版主题源码

wordpress 资源下载主题 ripro刚开始出来就风靡很久&#xff0c;这个也是类似子比的一个主题&#xff0c;下载全面&#xff0c;美化包也特别多&#xff0c;此版本为网友投稿开新版本&#xff0c;还是那句话&#xff0c;运营请支持正版授权&#xff0c;提供学习研究而已。 喜欢做…

wps宏代码学习

推荐学习视频&#xff1a;https://space.bilibili.com/363834767/channel/collectiondetail?sid1139008&spm_id_from333.788.0.0 打开宏编辑器和JS代码调试 工具-》开发工具-》WPS宏编辑器 左边是工程区&#xff0c;当打开多个excel时会有多个&#xff0c;要注意不要把…

微信小程序的上拉刷新与下拉刷新

效果图如下&#xff1a; 上拉刷新 与 下拉刷新 代码如下&#xff1a; joked.wxml <scroll-view class"scroll" scroll-y refresher-enabled refresher-default-style"white" bindrefresherrefresh"onRefresh" refresher-triggered&qu…

python之函数总结

函数 对于函数的学习&#xff0c;我整理了网上的一些资料&#xff0c;希望可以帮助到各位&#xff01;&#xff01;&#xff01; 世界级的编程大师Martin Fowler先生曾经说过&#xff1a;“代码有很多种坏味道&#xff0c;重复是最坏的一种&#xff01;”。 为什么使用函数 问题…

Mybatis学习笔记(二)

八、多表联合查询 (一) 多表联合查询概述 在开发过程中单表查询不能满足项目需求分析功能&#xff0c;对于复杂业务来讲&#xff0c;关联的表有几张&#xff0c;甚至几十张并且表与表之间的关系相当复杂。为了能够实业复杂功能业务&#xff0c;就必须进行多表查询&#xff0c…

从0开始的STM32之旅 7 串口通信(I)

现在&#xff0c;我们终于可以做一些有趣的事情了&#xff1a;那就是来一点串口通信了。串口通信在一定程度上可以辅助我们程序的调试&#xff0c;传递信息&#xff0c;以及做其他令人激动的事情。下面我们就来看看如何开始我们的串口通信之旅。 关于数据通信 通信就是在传递…

医院绩效考核管理系统源码,医院如何构建绩效考核体系?

医院绩效考核管理系统作为现代医院管理的重要组成部分&#xff0c;其核心功能旨在提高医院运营效率、优化资源配置、确保医疗服务质量&#xff0c;以及增强医院竞争力。 业务科室绩效考核体系的构建 临床医疗与医技科室绩效考核的设置 临床医疗的绩效考核采用百分制&#xff…

使用DexClassLoader类动态加载插件dex

DexClassLoader类的源码 package dalvik.system;public class DexClassLoader extends BaseDexClassLoader {public DexClassLoader(String dexPath, String optimizedDirectory,String librarySearchPath, ClassLoader parent) {super(dexPath, null, librarySearchPath, par…

国产服务器部署1.获取银河麒麟V10服务器。首先挂gpt数据盘

要做系统国产化&#xff0c;现记录国产化的全过程&#xff1a;银河麒麟V10采用ARM架构&#xff0c;基于Ubuntu 18.04 LTS版本的Linux操作系统。‌‌ #uname -r 看系统是x86还是arm 1.获取银河麒麟V10服务器。首先挂数据盘。 1&#xff09;#lsblk -f vdb为数据盘。需要格式…

Excel:vba实现插入图片

实现的效果&#xff1a; 实现的代码&#xff1a; Sub InsertImageNamesAndPictures()Dim PicPath As StringDim PicName As StringDim PicFullPath As StringDim RowNum As IntegerDim Pic As ObjectDim Name As String 防止表格里面有脏数据Cells.Clear 遍历工作表中的每个图…

性能测试需求分析详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、客户方提出 客户方能提出明确的性能需求&#xff0c;说明对方很重视性能测试&#xff0c;这样的企业一般是金融、电信、银行、医疗器械等&#xff1b;他们一…

机器学习之fetch_olivetti_faces人脸识别--基于Python实现

fetch_olivetti_faces 数据集下载 fetch_olivetti_faceshttps://github.com/jikechao/olivettifaces sklearn.datasets.fetch_olivetti_faces(*, data_homeNone, shuffleFalse, random_state0, download_if_missingTrue, return_X_yFalse, n_retries3, delay1.0)[source] L…

智能离线语音识别不灵敏?如何改善和提升识别率?

前言 有用户反馈离线语音识别不灵敏&#xff0c;跟着笔者一起分析原因吧。笔者知识能力有限&#xff0c;难免会误&#xff0c;还请大家批评指正。 1 影响离线语音识别的因素 笔者分析离线语音识别不灵敏的原因有以下几点 1.1 运行硬件的算力限制 由于离线语音识别在本地MCU…