chromium之jumplist

2023-11-09

chrome在win7及之后系统添加jumplist功能。jumplist即系统任务栏相关的功能,包括任务栏图标、鼠标放置后视图、进度条、右键菜单等等。

路径:..\chromium\src\chrome\browser\win\jumplist.h
     ..\chromium\src\chrome\browser\win\jumplist.cpp
     
主要函数:
explicit JumpList(Profile* profile);    // 显示构造函数
~JumpList() override;                   // 重写(父类的)析构函数

// TopSites 常去网站???
void TopSitesLoaded(history::TopSites* top_sites) override;                               // 重写topsites ???
void TopSitesChanged(history::TopSites* top_sites, ChangeReason change_reason) override;  // 修改topsites

// tabrestore 用于最近常去网站的恢复???
void TabRestoreServiceChanged(sessions::TabRestoreService* service) override;        // ???
void TabRestoreServiceDestoryed(session::TabRestoreService* service) override;

void InitializeTimerForUpdate();    // 一个一次性的初始化jumplist的函数。如果队列已有则清除后发送一个新的请求。

void ProcessNotifications();       // 进程更新通知。

void ProcessTopSitesNotification();     // topsites服务通知

void ProcessTabRestoreServiceNotification();      // tabrestore服务通知

void OnMostVisitedURLsAvailable(const history::MostVisitedURLList& data);       // 回调,最常去网站的URL

// ShellLinkItem ???
bool AddTab(const sessions::TabRestoreService::Tab& tab, size_t max_items); 
                                                                      // 添加一个新的ShellLinkItem,用于标签的跳转列表数据
                                                                      // 所以不会超过maxitems。

void AddWindow(const sessions::TabRestoreService::Window& window, size_t max_items); 
                                                                      // 在窗口的每个选项卡中添加一个新的ShellLinkItem到JumpList数据
                                                                      // 如果这样做不会超过maxitems。

void StartLoadingFavicon();       // 加载网站图标

void OnFaviconDataAvailable(const favicon_base::FaviconImageResult& image_result);   // 回调,当加载一个网站图标时用于历史服务

void PostRunUpdate();   // 发送更新和删除jumplist的相关文件夹的命令

void OnRunUpdateCompletion(std::unique_ptr<UpdateTransaction> update_transaction);   // 回调,合并更新操作结果,并返回实例

void CancelPendingUpdate();    // 结束一个未执行的更新

void Terminate();   // 终止函数

static void RunUpdateJumpList(...);     // 更新jumplist 1.创建新的jumplist没有图标,2.通知操作系统,3.删除过时图标
 
static void CreateNewJumpListAndNotifyOS(...);    // 创建jumplist

static int CreateIconFiles(...);   // 创建图标文件

static void DeleteIconFiles(...);       // 删除图标文件

 

jumplist开发的主要cc文件集中在 jumplist.cc及jumplist_updater.cc文件。涉及jumplist类,JumpListUpdater类,及IShellList类。

大概逻辑及用到的主要函数:
1. 执行jumplist.cc中 jumplist()构造。构造中包括注册jumplist等等系列操作
2. 执行jumplist.cc中 create...()函数。用于create icon,url,command等等。
3. 执行jumplist.cc中,UpdateTaskCategory()函数。该函数用于更新tasks栏的相关数据(tasks开发时主要修改该函数)。
4. 执行jumplist_updater.cc中,AddShellLink()函数。该函数主要调用COM IShellList接口,实现jumplist,核心。
5. 执行jumplist.cc中,ShutDown()函数。该函数调用Terminate()执行退出操作。

其中,tasks列的缓存可能由系统保存
通过代码刷新缓存的方式:
   屏蔽 jumplist.cc文件中删除判断:
   1. begin_update_timer.Elapsed() >= kTimeOutForBeginUpdate
   2. add_custom_category_timer.Elapsed() >= kTimeOutForAddCustomCategory  
   3. !jumplist_updater.AddCustomCategory(
          l10n_util::GetStringUTF16(IDS_RECENTLY_CLOSED), recently_closed_pages, kRecentlyClosedItems))
   防止该三处直接return,导致jumplist更新tasks栏不生效
   
   之后,反复对jumplist右键点击 新建窗口、浏览器等按钮,然后关闭重复按钮,可以激活对jumplist的刷新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chromium之jumplist 的相关文章

  • 始终在 console.log 中显示 html 元素 (Chromium)

    我有一个 js 脚本console log有时会打印 html 元素 Chrome 有两种打印此类 DOM 元素的模式 在 html 样式中 例如 div class abc div 其中悬停会突出显示页面中的元素 然后单击会打开 DOM
  • 使用 Selenium 和 ChromeDriver,自动缩放打印页面的尺寸

    我正在编写一个脚本来自动打印 Chrome 中的一组网页 如果我要手动打印它们 我会从 比例 下拉列表中选择 自定义 然后在下面的输入字段中输入 50 当我使用 Selenium 和 ChromeDriver 自动批量打印这些页面时 我无法
  • WebkitSpeechRecognition 在 Electron 中返回网络错误

    最近 过去 1 5 周 JavaScript 库 WebkitSpeechRecognition 拒绝正常工作 我已经测试了使用该库 evan cohen 的智能镜像 的其他电子应用程序 并且遇到了这些问题 在我测试过的每种情况下它都会引发
  • SVG getBoundingClientRect() + “transform:rotate()”在 Chrome 中以一种非常具体的方式出现错误

    getBoundingClientRect 在所有 SVG 元素上都可以正常工作 但在 Chrome 中旋转元素的情况除外 下面我画了两条线 左边的一条是对角线 右边的线从垂直开始 如黑线所示 绿色框是 getBoundingClientR
  • Puppeteer 找不到选择器

    我正在尝试使用 Puppeteer 进行一些网页抓取 但脚本似乎无法找到我正在寻找的选择器 基本上这段代码 const puppeteer require puppeteer let scrape async gt const year 1
  • Chrome 更新后 Android 9 WebView(还有 admob 广告)无法加载

    我们有一个严重依赖网络视图的应用程序 上周之后我们注意到 如果 Android 9 用户花费大约 10 到 30 时间加载 Web 视图 那么 Web 视图只会显示空白页面 并且加载进度会达到 10 Admob 原生广告也停止展示 唯一改变
  • android 上的 chromium 中的 kiosk 模式或全屏模式

    我已经为我的 Android 设备构建了一个 chromium ContentShell 如下所述 https code google com p chromium wiki AndroidBuildInstructions https c
  • 将 Selenium 与 Chromium 浏览器结合使用

    在 Selenium 选项 在 Firefox 上 中我可以找到Custom browser 是否可以使用此选项来运行 Selenium 测试铬浏览器 不是 Chrome 呃 接受的答案没有回答问题 Google Chrome 基于 Chr
  • HTML4 中的 Element.animate()

    Chrome 的人似乎已经占用 Element animate http updates html5rocks com 2014 05 Web Animations element animate is now in Chrome 36对于
  • Chrome 的 colspan 和 border 错误?

    在下面的示例中 右侧单元格的顶部有一个边框 它只出现在 Chrome 中 是 Chrome 的 bug 吗 HTML CSS html body height 100 table border collapse collapse width
  • 在容器内运行 Chromium:libGl 错误

    我正在尝试在 docker 容器内运行 Chromium 这是我得到的输出 Created new window in existing browser session libGL error failed to open drm devi
  • 如何使用nodejs禁用Chrome的会话恢复警告?

    如何通过 NodeJS 在 Windows 中重新启动 Chromium Google Chrome 信息亭模式 以便它在重新启动时正常启动浏览器 就像普通人使用它一样 当我每次重新启动 Chromium Google chrome 时使用
  • 为什么 Chrome 要求 robots.txt?

    我在日志中注意到 Chrome 请求了robots txt和我所期望的一切一样 2017 09 17 15 22 35 sanic INFO Goin Fast http 0 0 0 0 8080 2017 09 17 15 22 35 s
  • 尝试编译 Chromium 时出错

    我尝试使用命令ninja C out Debug chrome编译 Chromium 然而 错误消息指出 ninja error loading build ninja the system cannot find the file spe
  • Electron - 如何将 html 文件加载到当前窗口?

    我四处寻找 文档 谷歌等 了解如何在电子应用程序的主窗口中加载 html 文件 但我找不到方法 事情真的这么复杂还是这么简单 我想出的是ajax 因此有效 main load views details html 我发现的另一种方法是通过远
  • Opera 控制台中出现红色警告消息

    出现红色消息 大概是在浏览器自动更新之后 Warning 该区域仅供开发人员使用 众所周知 骗子会鼓励人们在此处复制 粘贴信息来破解帐户 如果您不确定 请不要继续 浏览器是 Opera 87 0 4390 36 似乎它不适用于 Chrome
  • 如何在 Electron BrowserWindow 中查看 PDF?

    所以我有这个 Electron 应用程序 在一个 html 文件中 我链接了另一个脚本 该脚本为程序提供了一些实用功能 其中之一是 function openPDF filePath let pdfWindow new electron r
  • 如何在 Electron BrowserWindow 中查看 PDF?

    所以我有这个 Electron 应用程序 在一个 html 文件中 我链接了另一个脚本 该脚本为程序提供了一些实用功能 其中之一是 function openPDF filePath let pdfWindow new electron r
  • Chrome 浏览器在从 selenium 加载后立即关闭

    我正在运行一个基本的 python 程序来打开 Chrome 窗口 但是一旦代码执行 该窗口就会在那里停留一秒钟 然后立即关闭 from selenium import webdriver import time browser webdr
  • 停止将 Chromium 放在前面

    我的测试运行 Puppeteerheadless false模式并打开几个选项卡 如果我在另一个应用程序窗口中 每当它打开一个新选项卡时 它会将 Chromium 聚焦到视图中 这很烦人 有什么办法让它在后台运行吗 我使用的是 macOS

随机推荐

  • DC综合脚本中文详细解释

    script for Design Compiler DC综合编译脚本 language TCL 语言说明 Usage 使用说明 1 make sure the lib in the current directory 确保设计库在正确的文
  • Xcode项目设置项中的LLVM

    LLVM是构架编译器
  • html5开发手机打电话发短信功能,html5的高级开发,html5开发大全,html手机电话短信功能详解

    原文地址 http blog csdn net xmtblog article details 32931905 在很多的手机网站上 有打电话和发短信的功能 对于这些功能是如何实现的呢 其实不难 今天我们就用html5来实现他们 简单的让你
  • Angular--官方文档之 Angular CLI

    学习Angular官方文档的时候 参考https angular cn guide quickstart 这个快速开发的文档 对于我这个AngularJs小白在看了Angular菜鸟教程后 只能说可以简单的运用一下 看到一些专业术语 我也是
  • 嵌入式Linux(四)—嵌入式C语言(杂项/数据类型关键字)

    目录 杂项关键字 sizeof Return 数据类型关键字 char 进制 int long short Unsigned signed Float double void 自定义数据类型 Struct Union enum typede
  • cppcheck使用

    cppcheck使用 cppcheck说明 cppcheck能够检查出来的问题 cppcheck使用并生成html结果 生成html结果 cppcheck说明 cppcheck主要用来检查c c 代码的 本文主要讲述cppcheck用命令行
  • Flutter 开发小结

    接触 Flutter 已经有一阵子了 期间记录了很多开发小问题 苦于忙碌没时间整理 最近项目进度步上正轨 借此机会抽出点时间来统一记录这些问题 并分享项目开发中的一点心得以及多平台打包的一些注意事项 希望能对大家有所帮助 UI 组件使用 官
  • Linux 下使用Crontab定时任务同时执行多条定时任务

    Linux 下使用Crontab定时任务同时执行多条定时任务 使用 符连接即可 示例如下 0 6 bea ceos timer bin pb ClosePbManifestTimer sh gt dev null 2 gt 1 bea ce
  • 【高项】质量管理(ITTO)

    过程组 子过程 输入 I 工具和技术 TT 输出 O 规划 1规划质量管理 1 项目章程 2 项目管理计划 需求管理计划 风险管理计划 相关方参与计划 范围基准 3 项目文件 假设日志 需求文件 需求跟踪矩阵 风险登记册 相关方登记册 4
  • QT源码剖析-QT对象通信机制信号槽的绑定具体实现

    本文详细介绍QT核心机制之一 信号和槽 我们在此根据Qt源代码一步一步探究其信号槽的实现过程 核心知识点 模板元编程技术 Qt moc预编译机制 QObject类 目录 1 QObject类介绍 2 相关助手类介绍 2 1 类型 函数指针
  • pip安装出现Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: '

    问题描述 pip安装库或者更新pip版本时出现如下问题 Could not install packages due to an EnvironmentError Errno 2 No such file or directory c us
  • LeetCode 面试题01.09 字符串轮转

    题目 字符串轮转 给定两个字符串s1和s2 请编写代码检查s2是否为s1旋转而成 比如 waterbottle 是 erbottlewat 旋转后的字符串 示例1 输入 s1 waterbottle s2 erbottlewat 输出 Tr
  • 一个独特的开源插件evil.js

    前言 最近发现一个好玩有解压的开源插件 注意 不可使用在正式项目中 这里分享下 gitee地址 evil js 此代码仅在周日的时候执行以下逻辑 声明 请勿用于任何项目 如果导致任何问题 与本人无关https gitee com haoxi
  • 矩阵LU分解

    一 矩阵LU分解定理 设A为n阶矩阵 如果A的顺序主子式Di 0 i 1 2 n 1 则A可以分解为一个单位下三角矩阵L和一个上三角矩阵U的乘积 且这种分解是唯一的 即A LU 二 矩阵LU分解Python代码 自己原创 def lu de
  • 第十二章 - 条件判断(case when 和 if)和视图

    第十二章 条件判断 case when 和 if 和视图 view if 的用法 case when 的用法 视图 view 的用法 if 的用法 通过使用if函数可以实现数据二分类或者多分类的功能 比如按年龄区分青年 中年 老年 或者按价
  • Python2_Pandas库(数据读取)

    1 数据读取 food info csv数据 import pandas food info pandas read csv food info csv read csv函数读取csv数据文件 print type food info Da
  • 汇编笔记——判断大小

    判断指令 CMP AL num 判断条件 这里的JA JB JE JMP相当于goto命令 JA L0 A gt above AL比num大 执行L0 JB L1 B gt below AL比num小 执行L1 JE L2 E gt equ
  • 树结构转List

    使用LinkedList效率更高 1 单个顶级节点 public static List
  • 网络安全(黑客技术)自学笔记

    目录 一 自学网络安全学习的误区和陷阱 二 学习网络安全的一些前期准备 三 网络安全学习路线 四 学习资料的推荐 想自学网络安全 黑客技术 首先你得了解什么是网络安全 什么是黑客 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队
  • chromium之jumplist

    chrome在win7及之后系统添加jumplist功能 jumplist即系统任务栏相关的功能 包括任务栏图标 鼠标放置后视图 进度条 右键菜单等等 路径 chromium src chrome browser win jumplist