如何检查新版Chrome是否可用?

时间:2011-03-15 16:06:46

标签: google-chrome google-chrome-extension

我正在尝试构建一个扩展程序,以便在新版Chrome可用时通知用户。

当Chrome检查更新时,我尝试检查网络流量,并向http://74.125.95.113/service/update2?w=3:{long_encoded_string}页面发送请求,该请求返回包含我需要的信息的XML:

<?xml version="1.0" encoding="UTF-8"?>
    <gupdate xmlns="http://www.google.com/update2/response" protocol="2.0" server="prod">
    <daystart elapsed_seconds="31272"/>
    <app appid="{8A69D345-D564-463C-AFF1-A69D9E530F96}" status="ok">
        <updatecheck status="noupdate"/>
        <ping status="ok"/>
    </app>
</gupdate>

除了发送{long_encoded_string}作为URL参数外,它还发送一些编码的cookie。

也许熟悉Chrome构建过程的人可以对这些编码的字符串以及如何构建它们有所了解?也许还有另一种更简单的方法(我觉得字符串编码对我来说是死路一条)?

1 个答案:

答案 0 :(得分:2)

Google Chrome使用奥马哈对客户进行更新。该协议在此处描述:http://omaha.googlecode.com/svn/wiki/cup.html。您必须注意的一件事是,Google Chrome会自动将更新下载到您的计算机,然后通知(通过工具菜单上的图标)。除非您通过打开about对话框强制检查(在Windows中)。

正如您所注意到的,Chrome GUID为{8A69D345-D564-463c-AFF1-A69D9E530F96}

了解Google Chrome如何更新的最佳方法是检查公开的源代码。谷歌只是在Chromium中定义他们的Chrome版本。

Google Chrome代码

所有更新发生的基类都在UpgradeDetector中,它基本上每隔1小时检查一次开发通道的升级,每天检查一次所有其他通道和构建(稳定/测试版)。 Chromium执行预定事件的方式是通过任务,在这种情况下,它是caleld DetectUpgradeTask,用于检查特定的BrowserDistribution::GetSpecificDistribution。有许多浏览器发行版,对于Windows,它被称为GoogleChromeDistribution,它负责确定需要更新的版本..

为什么我说这一切,谷歌浏览器只是查询注册表设置和本地文件,以确定是否存在新的更新。如果它们相同,UpgradeDetector只是比较分布。暗示奥马哈完成了整个更新机制。找出奥马哈所做的最好的部分就是看看他们的omaha update protocol

奥马哈议定书

从快速浏览协议开始,您采取的方法是正确的,但您必须找出公钥。在这种情况下,每个请求的 w 。您可以在omaha update protocol的“协议观察”中了解更多相关信息。这样做是为了安全地检查下载更新,他们这样做是为了保护通信。他们希望检查更新的连接是真实的和新鲜的,这样攻击者就无法替换或修改消息,也不会欺骗客户端升级易受攻击的版本。

那么现在

这不仅是对服务器进行更新检查的简单请求。 Omaha客户端协议为更新检查提供了SSL的替代方案,并执行客户端 - 服务器请求以查看其是否为有效连接。如前所述,他们正在做所有这些以保护沟通。

不幸的是,除非您自己使用NPAPI实现握手,否则我认为没有“Chrome扩展”HTML的方法。不要把我的话当作理所当然,我可能完全错了:)除非你可以通过XHR请求进行握手。

由于您要检查Chrome是否已更新且未安装,因此您必须验证是否已按照上面代码GoogleChromeDistribution中所解释的那样下载了新分发,这肯定要求NPAPI读取注册表。