<html>
<head>
</head>

<embed id="pluginEmbed" type="application/x-gwt-hosted-mode" width="10"
height="10">
</embed>


<script>
var plugin = document.getElementById('pluginEmbed');
var disabledIcon = 'gwt32-gray.png';
var enabledIcon = 'gwt32.png';


function getHostFromUrl(url) {
  var hostname = '';
  var idx = url.indexOf('://');
  if (idx >= 0) {
    idx += 3;
    hostname = url.substring(idx);
  }
  idx = hostname.indexOf('/');
  if (idx >= 0) {
    hostname = hostname.substring(0,idx);
  }
  idx = hostname.indexOf('@');
  if( idx >= 0)
  {
    hostname = hostname.substring(idx+1);
  }
  idx = hostname.indexOf(':');
  if (idx >= 0) {
    hostname = hostname.substring(0,idx);
  }
  return hostname;
}

function getCodeServerFromUrl(url) {
  var idx = url.indexOf('?');
  if (idx < 0) {
    return '';
  }
  url = url.substring(idx+1);
  idx = url.indexOf('gwt.codesvr=');
  if( idx < 0 ) {
    return '';
  }
  url = url.substring(idx+12);
  var colon = url.indexOf(':');
  var amp   = url.indexOf('&');
  if( amp < 0 || colon < amp ) {
    amp = colon;
  }
  return amp < 0 ? url : url.substring(0,amp);
}

function devModeTabListener(tabId, changeInfo, tab) {
  var search = tab.url.slice(tab.url.indexOf('?'));
  if (search.indexOf('gwt.codesvr=') >= 0 || search.indexOf('gwt.hosted=') >= 0) {
    var permission = plugin.getHostPermission(tab.url);
    var host = getHostFromUrl(tab.url);
    var code = getCodeServerFromUrl(tab.url);
    var popup = 'page_action.html';
    var icon = null;
    console.log("got permission " + permission + " for host " + host + '/ code ' + code);

    if (permission == 'include') {
      icon = enabledIcon;
    } else if (permission == 'exclude') {
      icon = disabledIcon;
    } else if (permission == 'unknown') {
      icon = disabledIcon;
    }
    popup += "?permission=" + permission + "&host=" + host + "&codeserver=" + code;
    chrome.pageAction.setIcon({'tabId' : tabId, 'path' : icon});
    chrome.pageAction.setPopup({'tabId' : tabId, 'popup' : popup});
    chrome.pageAction.show(tabId);

    var hostEntries = window.localStorage.getItem('GWT_DEV_HOSTENTRY') || [];
    console.log("loading hostentries: " + hostEntries);
    plugin.loadHostEntries.apply(plugin, JSON.parse(hostEntries));
  } else {
    chrome.pageAction.hide(tabId);
  }
};

chrome.tabs.onUpdated.addListener(devModeTabListener);
</script>
</html>
