code: function(keynameFunc, id, successCallback, failureCallback) {
              var self = this,
                  onSuccess = function(keyname) {
                      successCallback(keyname);
                  },
                  onFailure = function(reason) {
                      self.log(qq.format("Failed to retrieve key name for {}.  Reason: {}", id, reason || "null"), "error");
                      failureCallback(reason);
                  },
                  keyname = keynameFunc.call(this, id);
  
              if (qq.isGenericPromise(keyname)) {
                  keyname.then(onSuccess, onFailure);
              }
              /*jshint -W116*/
              else if (keyname == null) {
                  onFailure();
              }
              else {
                  onSuccess(keyname);
              }
          }
docs: Called by the internal onUpload handler if the integrator has supplied a function to determine
  the file's key name.  The integrator's function may be promissory.  We also need to fulfill
  the promise contract associated with the caller as well.
  
  @param keynameFunc Integrator-supplied function that must be executed to determine the key name.  May be promissory.
  @param id ID of the associated file
  @param successCallback Invoke this if key name retrieval is successful, passing in the key name.
  @param failureCallback Invoke this if key name retrieval was unsuccessful.
  @private