• (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); },
  • 相关阅读:
    js统一设置富文本中的图片宽度
    springboot 使用Filter
    js判断当前浏览器
    es安装ik后报错无法启动 read write
    logback Filter LevelFilter ThresholdFilter
    使用vue构建一个可视化大数据平台
    常用ES6-ES10知识点总结
    常见的web安全问题总结
    web性能优化指南
    使用node+express+mongodb实现用户注册、登录和验证功能
  • 原文地址:https://www.cnblogs.com/code-4-fun/p/4704618.html
Copyright © 2020-2023  润新知