anchor.diff:  
   
   void main() {
  -  addListenerToChromeEvent(_runtime, 'onInstalled', onInstalledAction);
  +  var settings = new HostServerSettings(_runtime);
  +  settings.changes.listen((_) => _setupPageStateMatcher(settings));
  +
  +  addListenerToChromeEvent(_runtime, 'onInstalled', (_) {
  +    _setupPageStateMatcher(settings);
  +  });
   
     // A page action is the little icon that appears in the URL bar.
  -  addListenerToChromeEvent(_pageAction, 'onClicked', pageActionOnClickedAction);
  +  addListenerToChromeEvent(_pageAction, 'onClicked', _pageActionOnClickedAction);
   
  -  addContextMenu();
  -  new WebRequestRedirect(_webRequest, _runtime);
  -}
  -
  -
  -void addContextMenu() {
  -  var urlMatch = ["http://localhost:*/ipfs/*", "http://localhost:*/ipns/*"];
  -  var props = new JsObject.jsify({
  -    'contexts': ['link'],
  -
  -    // This should match the default_title under page_action in the manifest
  -    'title': 'Copy as IPFS link',
  -
  -    'documentUrlPatterns': urlMatch,
  -    'targetUrlPatterns': urlMatch,
  -    'onclick': (JsObject info, JsObject tab) {
  -      addToClipboardAsIpfsUrl(info['linkUrl']);
  -    }
  -  });
  -  _contextMenus.callMethod('create', [props]);
  +  _addContextMenu();
  +  new WebRequestRedirect(_webRequest, settings);
   }
   
   
  
positive.code: 
      print('$_host:$_port');
    }
  
    JsObject _onBeforeRequestAction(JsObject data) {
      var ipfsUrl = data['url'];
      var localhostUrl = Uri.parse(ipfsUrl).replace(host: _host, port: _port);
      var response = {
        'redirectUrl': localhostUrl.toString()
      };
  
negative.code: }
  
  
  void _addContextMenu() {
    var urlMatch = ["http://localhost:*/ipfs/*", "http://localhost:*/ipns/*"];
    var props = new JsObject.jsify({
      'contexts': ['link'],
  
      // This should match the default_title under page_action in the manifest
      'title': 'Copy as IPFS link',
  
      'documentUrlPatterns': urlMatch,
      'targetUrlPatterns': urlMatch,
      'onclick': (JsObject info, JsObject tab) {
        addToClipboardAsIpfsUrl(info['linkUrl']);
      }
    });
    _contextMenus.callMethod('create', [props]);
  }
  
  
  void _setupPageStateMatcher(HostServerSettings settings) {
    var pageStateMatcherArg = new JsObject.jsify({
      'pageUrl': {
        // Chrome has globbing available everywhere but here
        // Also note that for ports 80 and 443 the port numbers won't be present
        'originAndPathMatches': '^http://${settings.host}(:${settings.port})?\\/(ipfs|ipns)\\/.+',
        'schemes': ['http']
    }});
    var rules = new JsObject.jsify([{
  