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); },
  • 相关阅读:
    DOM2DOM3续
    总结 @ 在 C# 中的用法 (装载)
    ORACLE10G卸载过程
    .net中访问oracle数据库的几种方式(转载)
    试图运行项目时出错,无法启动调试。没有正确安装调试器。请运行安装程序安装或修复调试器
    设计模式 构造器
    设计模式 抽象工厂
    linq中日期格式转换或者比较,程序报错说不支持方法的解决办法
    bootstrap图标字体不出来问题的解决办法
    JavaScript对象属性访问的两种方式
  • 原文地址:https://www.cnblogs.com/code-4-fun/p/4704618.html
Copyright © 2011-2022 走看看