Как проверить, доступна ли новая версия Chrome? - PullRequest
2 голосов
/ 15 марта 2011

Я пытаюсь создать расширение, которое уведомляло бы пользователя о появлении новой версии 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>

Помимо отправки *В качестве параметра URL-адреса 1007 * он также отправляет некоторые закодированные файлы cookie.

Может быть, кто-то, знакомый с процессом сборки Chrome, может пролить свет на эти закодированные строки и как их собрать?Может быть, есть более простой способ (у меня такое ощущение, что кодирование строк для меня тупик)?

1 Ответ

2 голосов
/ 15 марта 2011

Google Chrome использует омаху для обновления клиентов. Протокол описан здесь: http://omaha.googlecode.com/svn/wiki/cup.html. Одна вещь, которую вы должны заметить, заключается в том, что Google Chrome автоматически загружает обновление на ваш компьютер, а затем уведомляет (с помощью значка в меню инструмента). Если вы не принудительно проверите проверку, открыв диалоговое окно about (в Windows).

Как вы заметили, Chrome GUID равен {8A69D345-D564-463c-AFF1-A69D9E530F96}

Лучший способ узнать, как обновляется Google Chrome, - проверить общедоступный исходный код. Google просто определяет их версию Chrome в Chromium.

Google Chrome Code

Базовый класс, где происходят все обновления, находится в UpgradeDetector , он в основном проверяет наличие обновлений каждые 1 час для канала разработчика и один раз в день для всех других каналов и сборок (стабильный / бета-версия) , Chromium может выполнять запланированные события с помощью Tasks, в этом случае он называется DetectUpgradeTask , который проверяет наличие определенного BrowserDistribution :: GetSpecificDistribution . Существует много браузерных дистрибутивов, для Windows он называется GoogleChromeDistribution , который отвечает за выяснение того, какую версию необходимо обновить ..

Так почему я все это говорю, Google Chrome просто запрашивает настройки реестра и локальные файлы, чтобы выяснить, существует ли новое обновление. UpgradeDetector просто сравнивает распределения, если они одинаковы. Подразумевается, что Омаха выполняет весь механизм обновления. И лучшая часть, чтобы выяснить, что делает Омаха, это взглянуть на их протокол обновления Омахи .

Протокол Омахи

Из-за быстрого взгляда на протокол, ваш подход правильный, но вы должны выяснить открытый ключ. В этом случае w, который отличается для каждого запроса . Подробнее об этом можно прочитать в «Протоколе наблюдений» в протоколе обновления омахи . Это делает это для безопасной проверки обновлений загрузки, и они делают это для защиты связи. Они хотят, чтобы соединение, которое проверяет наличие обновлений, было подлинным и свежим, поэтому злоумышленник не может заменить или изменить сообщение, а также не заставить клиента обновить уязвимую версию.

Так что теперь

Это не просто запрос к серверу выполнить проверку обновлений. Клиентский протокол Omaha предоставляет альтернативу SSL для проверки обновлений и выполняет запросы клиент-сервер, чтобы определить, является ли это допустимым соединением. Они делают все это, чтобы защитить общение, как объяснено ранее.

К сожалению, я не думаю, что есть HTML-способ «расширения Chrome», если вы не реализуете это рукопожатие самостоятельно, используя NPAPI. Не принимайте мои слова как должное, я могу быть совершенно неправ :) Если вы не можете выполнять рукопожатие в течение XHR-запросов.

Поскольку вы хотите проверить, был ли Chrome обновлен и не установлен, вы должны убедиться, что был загружен новый дистрибутив, как описано выше в коде GoogleChromeDistribution , который определенно требует NPAPI для чтения реестра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...