anchor.diff:  
   class DomainCacheItem {
     DateTime cacheTime;
  -  bool ipnsRecord;
  +  bool ipnsRecordExists;
  +
  +  DomainCacheItem(this.cacheTime, this.ipnsRecordExists);
   }
   
   class WebRequestRedirect {
  +  static const _CACHE_DURATION = const Duration(minutes: 1);
     static const _ERROR_COOL_DOWN_PERIOD = const Duration(seconds: 30);
   
     final JsObject chromeWebRequest;
     final HostServerSettings settings;
   
  -  final Map<String, DomainCacheItem> _domainCache;
  +  final _domainCache = new Map<String, DomainCacheItem>();
     bool _errorMode = false;
     var _lastErrorTime = new DateTime(0);
     List<Uri> _ipfsRequestUrls;
  
positive.code:   }
  
    String _handleIpfsRequest(JsObject data, Uri ipfsUrl) {
      if (_errorMode &&
          new DateTime.now().difference(_lastErrorTime) > _ERROR_COOL_DOWN_PERIOD) {
        _errorMode = false;
        _generateRequestUrls();
        _setRequestListener();
      }
  
      if (ipfsUrl.scheme == 'file') {
        ipfsUrl = _parseFileUrl(data['url']);
      }
  
negative.code:       _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));
      });
    }
  
    void _disableErrorMode() {
      _errorMode = false;
      _generateRequestUrls();
      _setRequestListener();
    }
  
    void _enableErrorMode() {
      _errorMode = true;
      _lastErrorTime = new DateTime.now();
      _generateRequestUrls();
      _setRequestListener();
    }
  
    void _generateRequestUrls() {
  