(FFOS Gecko & Gaia) OTA - 再进入Gecko层

  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); },

 

posted @ 2015-08-05 14:23  coding4范儿  阅读(476)  评论(0编辑  收藏  举报