anchor.diff:      _ipfsRequestUrls = urls.map((url) => Uri.parse(url)).toList(growable: false);
     }
   
  -  bool _isIpfsUrl(Uri url) {
  -    bool urlMatch = false;
  -    if (url.pathSegments.isNotEmpty &&
  -        (url.pathSegments.first == 'ipfs' || url.pathSegments.first == 'ipns')) {
  -      urlMatch = url.host == settings.host && url.port == settings.port;
  -
  -      for (int i = 0; i < _ipfsRequestUrls.length && !urlMatch; ++i) {
  -        urlMatch = _ipfsRequestUrls[i].host == url.host &&
  -                    _ipfsRequestUrls[i].port == url.port;
  -      }
  -    }
  -
  -    return urlMatch;
  -  }
  -
     String _handleIpfsRequest(JsObject data, Uri ipfsUrl) {
       if (_errorMode &&
           new DateTime.now().difference(_lastErrorTime) > _ERROR_COOL_DOWN_PERIOD) {
  
positive.code:   // compiling to JS. Apparently an Array isn't always an Array in JS? Or
    // maybe the Chrome API parses the object in such a way that the property
    // can't be accessed?
    // https://twitter.com/dylankpowers/status/573037501171933187
    props['targetUrlPatterns'] = new JsArray.from(props['targetUrlPatterns']);
    _contextMenus.callMethod('create', [props]);
  }
  
negative.code: 
    /**
     * File URI's sometimes have the URI fragment character '#'
     * encoded by Chrome because it wants to be "smart".
     * It's dependent on how the user inputs the URI
     * into the browser URL bar. Unfortunately it's impossible to
     * differentiate between the cases; i.e. typing:
     *         /ipfs/<hash>/app#stuff vs file:///ipfs/<hash>/app#stuff
     * Generally people don't have hashes in their filenames, so I'm
     * exchanging one idiotic idea for something that's slightly
     * less idiotic for our purposes. If someone really needs a '#' character
     * for a filename, just double encode it in the url bar.
     */
    static Uri _parseFileUrl(String fileUrl) {
      return Uri.parse(Uri.decodeComponent(fileUrl));
  