queueWork(groupId, callback) {
    this.destroyer_.ensureNotDestroyed();
    const group = this.groups_.get(groupId) || Promise.resolve();
    const newPromise = group.then(async () => {
      await callback();
    });
    this.groups_.set(groupId, newPromise);
    return newPromise;
  }
Add additional async work to the group work queue.

@param {number} groupId
   The group to add this group to. If the group does not exist, a new
   group will be created.
@param {function():!Promise} callback
  The callback for the async work.  Downloading for this group will be
  blocked until the Promise returned by |callback| resolves.
@return {!Promise} Resolved when this work is complete.