code: public void registerSource(ProgressSource pi) {
  
          synchronized(progressSourceList)    {
              if (progressSourceList.contains(pi))
                  return;
  
              progressSourceList.add(pi);
          }
  
          // Notify only if there is at least one listener
          if (progressListenerList.size() > 0)
          {
              // Notify progress listener if there is progress change
              ArrayList<ProgressListener> listeners = new ArrayList<ProgressListener>();
  
              // Copy progress listeners to another list to avoid holding locks
              synchronized(progressListenerList) {
                  for (Iterator<ProgressListener> iter = progressListenerList.iterator(); iter.hasNext();) {
                      listeners.add(iter.next());
                  }
              }
  
              // Fire event on each progress listener
              for (Iterator<ProgressListener> iter = listeners.iterator(); iter.hasNext();) {
                  ProgressListener pl = iter.next();
                  ProgressEvent pe = new ProgressEvent(pi, pi.getURL(), pi.getMethod(), pi.getContentType(), pi.getState(), pi.getProgress(), pi.getExpected());
                  pl.progressStart(pe);
              }
          }
      }
docs: Register progress source when progress is began.