code: function installUpdate(path, nameHint) {
          var d = new $.Deferred();
          install(path, nameHint, true)
              .done(function (result) {
                  if (result.installationStatus !== InstallationStatuses.INSTALLED) {
                      d.reject(result.errors);
                  } else {
                      d.resolve(result);
                  }
              })
              .fail(function (error) {
                  d.reject(error);
              });
          return d.promise();
      }
docs: Install an extension update located at path.
  This assumes that the installation was previously attempted
  and an installationStatus of "ALREADY_INSTALLED", "NEEDS_UPDATE", "SAME_VERSION",
  or "OLDER_VERSION" was the result.
  
  This workflow ensures that there should not generally be validation errors
  because the first pass at installation the extension looked at the metadata
  and installed packages.
  
  @param {string} path to package file
  @param {?string} nameHint Hint for the extension folder's name (used in favor of
  path's filename if present, and if no package metadata present).
  @return {$.Promise} A promise that is resolved when the extension is successfully
  installed or rejected if there is a problem.