zoukankan      html  css  js  c++  java
  • (FFOS Gecko & Gaia) OTA

      UpdatePrompt接收Gaia返回的'update-available-result'消息,进行下一步处理。

    1. UpdatePrompt.handleEvent

      handleEvent: function UP_handleEvent(evt) {
        if (evt.type !== "mozContentEvent") {
          return;
        }
    
        let detail = evt.detail;
        if (!detail) {
          return;
        }
    
        switch (detail.type) {
          case "force-update-check":
            this.forceUpdateCheck();
            break;
          case "update-available-result":
            this.handleAvailableResult(detail);
            // If we started the apply prompt timer, this means that we're waiting
            // for the user to press Later or Install Now. In this situation we
            // don't want to clear this._update, becuase handleApplyPromptResult
            // needs it.
            if (this._applyPromptTimer == null && !this._waitingForIdle) {
              this._update = null;
            }
            break;
          case "update-download-cancel":
            this.handleDownloadCancel();
            break;
          case "update-prompt-apply-result":
            this.handleApplyPromptResult(detail);
            break;
        }
      },

    2. UpdatePrompt.handleAvailableResult

      handleAvailableResult: function UP_handleAvailableResult(aDetail) {
        // If the user doesn't choose "download", the updater will implicitly call
        // showUpdateAvailable again after a certain period of time
        switch (aDetail.result) {
          case "download":
        // 这个this._update就是从之前分析过的Checker返回数据中得到的一个Update对象。
    this.downloadUpdate(this._update); break; } },

    3. UpdatePrompt.downloadUpdate

      downloadUpdate: function UP_downloadUpdate(aUpdate) {
        if (!aUpdate) {
          aUpdate = Services.um.activeUpdate;
          if (!aUpdate) {
            log("No active update found to download");
            return;
          }
        }
    
      // 调用UpdateService的downloadUpdate方法,true表示background let status
    = Services.aus.downloadUpdate(aUpdate, true); if (status == STATE_DOWNLOADING) {
        // 为UpdateService设置DownloadListener Services.aus.addDownloadListener(
    this); return; } // If the update has already been downloaded and applied, then // Services.aus.downloadUpdate will return immediately and not // call showUpdateDownloaded, so we detect this. if (aUpdate.state == "applied" && aUpdate.errorCode == 0) { this.showUpdateDownloaded(aUpdate, true); return; } log("Error downloading update " + aUpdate.name + ": " + aUpdate.errorCode); let errorCode = aUpdate.errorCode >>> 0; if (errorCode == Cr.NS_ERROR_FILE_TOO_BIG) { aUpdate.statusText = "file-too-big"; } this.showUpdateError(aUpdate); },
  • 相关阅读:
    汇编 | 寄存器内存访问内存中字的存储
    机器学习 | 鸢尾花分类项目实战
    机器学习 | 剖析感知器算法 & Python实现
    机器学习 | 机器学习简介
    用 shell 脚本做命令行工具扩展
    基于预计算的实时环境光照(Real-time Environment Lighting Based On Precomputation)
    Java-jvm调优文档摘要
    Probius+Kubernetes任务系统如虎添翼
    Django+Ansible构建任务中心思路
    【多线程】Android多线程学习笔记——线程池
  • 原文地址:https://www.cnblogs.com/code-4-fun/p/4704618.html
Copyright © 2011-2022 走看看