code: function(url, worker) {
    /**
     * Page URL.
     * @type {string}
     */
    this.url = url;
  
    /**
     * Firefox tab handle.
     * @type {!Tab}
     */
    this.tab = worker.tab;
  
    /**
     * Page worker running the content script.
     * @type {!Worker}
     */
    this.worker = worker;
  
    /**
     * Pending debugger records.
     * These are batched up so that we don't throw too many messages at the page.
     * @type {!Array.<!Object>}
     * @private
     */
    this.debuggerRecords_ = [];
  
    /**
     * Periodic timer to transmit debugger data.
     * @type {number}
     * @private
     */
    this.debuggerTransmitId_ = timers.setInterval((function() {
      var records = this.debuggerRecords_;
      if (records.length) {
        this.debuggerRecords_ = [];
        this.worker.port.emit('extension-event', JSON.stringify({
          'command': 'debugger_data',
          'records': records
        }));
      }
    }).bind(this), 1000);
  
    // Start watching GC events.
    acquireMemoryObserver();
  }
docs: Injected tab wrapper.
  @param {string} url Canonical page URL.
  @param {!Worker} worker Content script worker.
  @constructor