function NavigationCollector() {
  /**
   * A list of currently pending requests, implemented as a hash of each
   * request's tab ID, frame ID, and URL in order to ensure uniqueness.
   *
   * @type {Object<string, {start: number}>}
   * @private
   */
  this.pending_ = {};

  /**
   * A list of completed requests, implemented as a hash of each
   * request's tab ID, frame ID, and URL in order to ensure uniqueness.
   *
   * @type {Object<string, Array<NavigationCollector.Request>>}
   * @private
   */
  this.completed_ = {};

  /**
   * A list of requests that errored off, implemented as a hash of each
   * request's tab ID, frame ID, and URL in order to ensure uniqueness.
   *
   * @type {Object<string, Array<NavigationCollector.Request>>}
   * @private
   */
  this.errored_ = {};

  // Bind handlers to the 'webNavigation' events that we're interested
  // in handling in order to build up a complete picture of the whole
  // navigation event.
  chrome.webNavigation.onCreatedNavigationTarget.addListener(
      this.onCreatedNavigationTargetListener_.bind(this));
  chrome.webNavigation.onBeforeNavigate.addListener(
      this.onBeforeNavigateListener_.bind(this));
  chrome.webNavigation.onCompleted.addListener(
      this.onCompletedListener_.bind(this));
  chrome.webNavigation.onCommitted.addListener(
      this.onCommittedListener_.bind(this));
  chrome.webNavigation.onErrorOccurred.addListener(
      this.onErrorOccurredListener_.bind(this));
  chrome.webNavigation.onReferenceFragmentUpdated.addListener(
      this.onReferenceFragmentUpdatedListener_.bind(this));
  chrome.webNavigation.onHistoryStateUpdated.addListener(
      this.onHistoryStateUpdatedListener_.bind(this));

  // Bind handler to extension messages for communication from popup.
  chrome.runtime.onMessage.addListener(this.onMessageListener_.bind(this));

  this.loadDataStorage_();
}
Collects navigation events, and provides a list of successful requests
that you can do interesting things with. Calling the constructor will
automatically bind handlers to the relevant webnavigation API events,
and to a `getMostRequestedUrls` extension message for internal
communication between background pages and popups.

@constructor