anchor.diff:  
     bool _errorMode = false;
     var _lastErrorTime = new DateTime(0);
  -  List<String> get _requestUrls {
  -    var urls = makeIpfsGlobs('file://');
  -    if (_errorMode) {
  -      urls.addAll(makeIpfsGlobs(settings.server));
  -    } else {
  -      urls.addAll(makeIpfsGlobs('http://gateway.ipfs.io'));
  -    }
  -
  -    return urls;
  -  }
  +  List<Uri> _ipfsRequestUrls;
   
     WebRequestRedirect(this.chromeWebRequest, this.settings) {
  +    _generateRequestUrls();
       _setErrorListener();
       _setRequestListener();
   
  
positive.code:     });
    }
  
    void _onErrorAction(JsObject details) {
      // Chrome will give an error message, but there isn't a defined way of
      // identifying the problem. Nor is there a way to tell Chrome how to
      // resolve the problem. Luckily Chrome will automatically reattempt the
      // request. We just have to be ready for it.
      _errorMode = true;
      _lastErrorTime = new DateTime.now();
      _setRequestListener();
    }
  
    JsObject _onBeforeRequestAction(JsObject data) {
      if (_errorMode &&
          new DateTime.now().difference(_lastErrorTime) > _ERROR_COOL_DOWN_PERIOD) {
        _errorMode = false;
        _setRequestListener();
      }
  
      var ipfsUrl = Uri.parse(data['url']);
      if (ipfsUrl.scheme == 'file') {
        ipfsUrl = _parseFileUrl(data['url']);
      }
  
negative.code:     dartifyChromeEvent(chromeWebRequest, 'onBeforeRequest')
          .callMethod('addListener', [
            _onBeforeRequestAction,
            new JsObject.jsify({'urls': ['<all_urls>'] /*_requestUrls*/}),
            new JsObject.jsify(['blocking'])
      ]);
    }
  