chromium之jumplist

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的刷新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值