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); },
  • 相关阅读:
    讲讲HashCode的作用
    自定义一个类加载器
    从为什么String=String谈到StringBuilder和StringBuffer
    System.load(String filename)和System.loadLibrary(String libname)的区别
    自己实现一个Native方法的调用
    Java对象表示方式1:序列化、反序列化和transient关键字的作用
    Java对象表示方式2:XStream实现对对象的XML化
    static关键字作用
    final的作用
    多态
  • 原文地址:https://www.cnblogs.com/code-4-fun/p/4704618.html
Copyright © 2011-2022 走看看