anchor.diff:    List<Uri> _ipfsRequestUrls;
   
     WebRequestRedirect(this.chromeWebRequest, this.settings) {
  -    _generateRequestUrls();
  -    _setErrorListener();
  -    _setRequestListener();
  -
  -    settings.changes.listen((_) {
  -      dartifyChromeEvent(chromeWebRequest, 'onErrorOccurred')
  -          .callMethod('removeListener', [_onErrorAction]);
  -      _setErrorListener();
  -      _errorMode = false;
  -    });
  -
  -    new Timer.periodic(_CACHE_DURATION * 10, (_) {
  -      var keysToRemove = [];
  -      var oldestCacheTime = new DateTime.now().subtract(_CACHE_DURATION);
  -      _domainCache.forEach((k, v) {
  -        if (v.cacheTime.isBefore(oldestCacheTime)) {
  -          keysToRemove.add(k);
  -        }
  -      });
  -      keysToRemove.forEach((k) => _domainCache.remove(k));
  -    });
  +    _initIpfsRequestUrls();
  +    _setIpfsRequestErrorListener();
  +    _setChromeRequestListener();
  +    _initSettingsListener();
  +    _initCacheCleaner();
     }
   
     void _disableErrorMode() {
       _errorMode = false;
  -    _generateRequestUrls();
  -    _setRequestListener();
  +    _initIpfsRequestUrls();
  +    _setChromeRequestListener();
     }
   
     void _enableErrorMode() {
       _errorMode = true;
       _lastErrorTime = new DateTime.now();
  -    _generateRequestUrls();
  -    _setRequestListener();
  -  }
  -
  -  void _generateRequestUrls() {
  -    var urls = makeIpfsGlobs('file://');
  -    if (_errorMode) {
  -      urls.addAll(makeIpfsGlobs(settings.server));
  -    } else {
  -      urls.addAll(makeIpfsGlobs('http://gateway.ipfs.io'));
  -    }
  -    _ipfsRequestUrls = urls.map((url) => Uri.parse(url)).toList(growable: false);
  -  }
  +    _initIpfsRequestUrls();
  +    _setChromeRequestListener();
  +  }
  +
   
     String _handleIpfsRequest(JsObject data, Uri ipfsUrl) {
       if (ipfsUrl.scheme == 'file') {
  
positive.code:     ]);
    }
    
    void _setRequestListener() {
      var urlsToListen = ['http://*/', 'https://*/'];
      urlsToListen.addAll(makeIpfsGlobs('file://'));
  
  
negative.code:     return Uri.parse(Uri.decodeComponent(fileUrl));
    }
  
    bool _requestIpnsAvailability(String host) {
      var req = new HttpRequest();
      req.open('GET', 'http://${settings.host}:${settings.port}/ipns/${url.host}', async: false);
  
      bool ipnsAvailable;
      req.onLoad.listen((event) {
        ipnsAvailable = (event.target as HttpRequest).status < 400;
      });
  
      req.send();
  
      return ipnsAvailable;
    }
  
    void _setIpfsRequestErrorListener() {
      dartifyChromeEvent(chromeWebRequest, 'onErrorOccurred')
          .callMethod('addListener', [
            _onErrorAction,
  